资源预览内容
第1页 / 共318页
第2页 / 共318页
第3页 / 共318页
第4页 / 共318页
第5页 / 共318页
第6页 / 共318页
第7页 / 共318页
第8页 / 共318页
第9页 / 共318页
第10页 / 共318页
亲,该文档总共318页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Visual Basic程序设计与应用案例第第1章章 走进走进VisualBasic学习目标:学习目标:u认识认识VisualBasic6.0的集成开发环境的集成开发环境u理解对象、属性、事件和方法的概念理解对象、属性、事件和方法的概念u了解了解VisualBasic事件驱动的编程特点事件驱动的编程特点u了解了解VB程序的组成程序的组成u学会使用学会使用VisualBasic的帮助系统的帮助系统第第1章章 走进走进VisualBasic教学内容:教学内容:1.1VisualBasic编程入门编程入门1.2VB的对象与编程特点的对象与编程特点1.3VB的程序组成与代码窗口的程序组成与代码窗口1.4 使用使用VB的帮助系统的帮助系统 1.1VisualBasic编程入门编程入门VB程序示例:程序示例: 模拟彩票开奖器模拟彩票开奖器 简易编辑器简易编辑器 返回目录返回目录1.1VisualBasic编程入门编程入门集成开发环境集成开发环境集成开发环境集成开发环境1. .进入进入VB集成环境集成环境返回目录返回目录1.1VisualBasic编程入门编程入门集成开发环境集成开发环境集成开发环境集成开发环境2. .VB集成环境中的窗口集成环境中的窗口属性窗口属性窗口窗体设计器窗体设计器工程资源工程资源管理器管理器窗体布局窗体布局窗口窗口工具箱工具箱返回目录返回目录1.1VisualBasic编程入门编程入门创建创建创建创建VBVB程序的步骤程序的步骤程序的步骤程序的步骤一般步骤一般步骤:建立工程:建立工程设计界面设计界面设置对象设置对象属性属性编写代码编写代码保存程序保存程序运行程序运行程序生成生成可执行文件可执行文件例例1.1返回目录返回目录1.1VisualBasic编程入门编程入门创建创建创建创建VBVB程序的步骤程序的步骤程序的步骤程序的步骤1.建立工程建立工程 工程是组成一个应用程序的文件集合工程是组成一个应用程序的文件集合(.vbp),最常用最常用的是标准的是标准EXE类型的工程。类型的工程。2.设计应用程序界面设计应用程序界面 使用工具箱中的各使用工具箱中的各种控件,在窗体设计种控件,在窗体设计器上器上“画画”界面。界面。返回目录返回目录1.1VisualBasic编程入门编程入门创建创建创建创建VBVB程序的步骤程序的步骤程序的步骤程序的步骤3.设置对象属性设置对象属性通过属性窗口通过属性窗口通过程序代码通过程序代码对象名对象名.属性名称属性名称=属性值属性值例如,例如,Label1.Caption=VB程序设计示例程序设计示例返回目录返回目录1.1VisualBasic编程入门编程入门创建创建创建创建VBVB程序的步骤程序的步骤程序的步骤程序的步骤返回目录返回目录对象名称对象名称属性名称属性名称设置值设置值Label1CaptionFont宋体、四号宋体、四号Command1Caption白色窗体白色窗体Font楷体、小四楷体、小四Command2Caption红色文本红色文本Font楷体、小四楷体、小四Command3Caption退出程序退出程序Font楷体、小四楷体、小四1.1VisualBasic编程入门编程入门创建创建创建创建VBVB程序的步骤程序的步骤程序的步骤程序的步骤4.编写程序代码编写程序代码(事件响应代码事件响应代码)对象名称对象名称事件事件响应响应Command1单击单击(Click)将窗体的背景设置为白色将窗体的背景设置为白色Command2单击单击(Click)将窗体中文本的颜色设置为红色将窗体中文本的颜色设置为红色Command3单击单击(Click)结束程序运行结束程序运行Form装入装入(Load)显示显示“VB程序设计示例程序设计示例”返回目录返回目录双击双击1.1VisualBasic编程入门编程入门创建创建创建创建VBVB程序的步骤程序的步骤程序的步骤程序的步骤返回目录返回目录1.1VisualBasic编程入门编程入门创建创建创建创建VBVB程序的步骤程序的步骤程序的步骤程序的步骤5.保存程序保存程序返回目录返回目录6.运行程序运行程序“运行运行启动启动”或或7.生成可执行文件生成可执行文件生成能够脱离生成能够脱离VB集成环境运行的集成环境运行的exe文件文件1.1VisualBasic编程入门编程入门创建创建创建创建VBVB程序的步骤程序的步骤程序的步骤程序的步骤返回目录返回目录 上述步骤中最主要的是:上述步骤中最主要的是: 设计应用程序的界面设计应用程序的界面 设置界面对象的属性设置界面对象的属性 编写程序代码编写程序代码1.2VB的对象与编程特点的对象与编程特点VBVB的对象的对象的对象的对象VB编程的核心是针对对象所响应的事件编写代码。编程的核心是针对对象所响应的事件编写代码。1.对象和类对象和类对象是代码和数据的组合,可作为一个整体来处理。对象是代码和数据的组合,可作为一个整体来处理。VB中的对象是由类创建的,对象是类的一个实例。中的对象是由类创建的,对象是类的一个实例。2.对象的属性对象的属性属性是描述对象特征的数据属性是描述对象特征的数据属性值的设置或修改可通过属性窗口和程序代码实现属性值的设置或修改可通过属性窗口和程序代码实现对象的属性有两类:读写属性、只读属性对象的属性有两类:读写属性、只读属性返回目录返回目录1.2VB的对象与编程特点的对象与编程特点VBVB的对象的对象的对象的对象3.对象的事件与事件过程对象的事件与事件过程事件是预先设置好的、能够被对象识别和响应的动作事件是预先设置好的、能够被对象识别和响应的动作事件过程:对象对事件响应的程序代码事件过程:对象对事件响应的程序代码事件过程的一般格式:事件过程的一般格式:PrivateSub对象名称对象名称_事件事件()事件过程代码事件过程代码EndSub例如:例如:PrivateSubCommand1_Click()Form1.BackColor=vbWhiteEndSub返回目录返回目录1.2VB的对象与编程特点的对象与编程特点VBVB的对象的对象的对象的对象4.对象的方法对象的方法方法告诉对象应做的事情,即对象的动作。方法告诉对象应做的事情,即对象的动作。调用格式:调用格式:对象名称对象名称.方法名称方法名称例如:例如:PrivateSubForm_Click()Debug.Print你好你好!EndSub返回目录返回目录单击窗体1.2VB的对象与编程特点的对象与编程特点VBVB的编程特点的编程特点的编程特点的编程特点u面向对象的可视化的程序设计方法面向对象的可视化的程序设计方法u事件驱动的程序设计机制事件驱动的程序设计机制u简单易学的程序设计语言简单易学的程序设计语言u交互式的集成开发环境交互式的集成开发环境返回目录返回目录1.3VB的程序组成与代码窗口的程序组成与代码窗口VBVB程序组成程序组成程序组成程序组成u一个一个VB应用程序应用程序(工程工程)可由多种类型的文件模块组成的,可由多种类型的文件模块组成的,最常用的是窗体模块和标准模块。最常用的是窗体模块和标准模块。u与工程有关的全部文件和对象的清单,以及所设置的环与工程有关的全部文件和对象的清单,以及所设置的环境选项信息都保存在工程文件中境选项信息都保存在工程文件中(.vbp)。1.窗体模块窗体模块界面和代码界面和代码返回目录返回目录1.3VB的程序组成与代码窗口的程序组成与代码窗口VBVB程序组成程序组成程序组成程序组成2.标准模块标准模块没有窗体,扩展名为没有窗体,扩展名为.bas通常声明其他模块共同使用的全局变量或通用过程通常声明其他模块共同使用的全局变量或通用过程返回目录返回目录1.3VB的程序组成与代码窗口的程序组成与代码窗口代码窗口代码窗口代码窗口代码窗口返回目录返回目录过程查看 全模块查看 1.3VB的程序组成与代码窗口的程序组成与代码窗口选项设置选项设置选项设置选项设置“工具工具选项选项”返回目录返回目录1.4使用使用VB的帮助系统的帮助系统注:系统中需安装帮助文档注:系统中需安装帮助文档MSDN1.通过通过“帮助帮助”菜单菜单返回目录返回目录1.4使用使用VB的帮助系统的帮助系统2.通过通过F1键键返回目录返回目录F1F1第第2章章 VisualBasic语言基础语言基础学习目标:学习目标:u掌握掌握VB的编码规则的编码规则u了解了解VB的数据类型的数据类型u掌握变量、常量的声明和使用掌握变量、常量的声明和使用u掌握运算符和表达式的使用掌握运算符和表达式的使用u掌握掌握VB数据的输入与输出数据的输入与输出u了解了解VB的内部函数的内部函数第第2章章 VisualBasic语言基础语言基础教学内容:教学内容:2.1VB编码编码规则规则2.2VB的数据类型的数据类型 2.3变量与常量变量与常量 2.4运算符与表达式运算符与表达式 2.5数据的输入输出数据的输入输出 2.6 VB的常用内部函数的常用内部函数 2.1VB编码规则编码规则例例2.1单击窗体可输出内容交换后的单击窗体可输出内容交换后的a变量和变量和b变量的值。变量的值。PrivateSubForm_Click()DimaAsInteger,bAsInteger,intTempAsInteger声明变量声明变量a=10变量赋值变量赋值b=20Printa变量和变量和b变量内容交换前:变量内容交换前:;a;b变变量交量交换换intTemp=aa=bb=intTempPrinta变变量和量和b变变量内容交量内容交换换后:后:;a;bEndSub 返回目录返回目录2.1VB编码规则编码规则语句书写规则语句书写规则语句书写规则语句书写规则u语句输入时不区分大小写,一条语句通常写在一行中。语句输入时不区分大小写,一条语句通常写在一行中。u一行中若输入多条语句,需用一行中若输入多条语句,需用“:”:”分隔。例如,分隔。例如, intTemp=a:a=b:b=intTemp u长语句可通过续行符长语句可通过续行符“ “ _”(_”(空格后加下划线空格后加下划线) )分行。分行。例如,例如,Printa变量和变量和b变量内容交换前:变量内容交换前:;a;b可分成以下两行输入:可分成以下两行输入:Printa变量和变量和b变量内容交换前:变量内容交换前:;_a;bu单单引引号号后后面面的的内内容容为为注注释释,可可放放在在一一行行语语句句的的最最后后,或或单单独占据一行。独占据一行。u数值前加上前缀数值前加上前缀&H和和&0分别表示十六进制和八进制数。分别表示十六进制和八进制数。 返回目录返回目录2.1VB编码规则编码规则标识符命名规则标识符命名规则标识符命名规则标识符命名规则 标标识识符符:变变量量、常常量量、类类型型、过过程程、函函数数、以以及及其其它它对对象的名字。象的名字。 命名规则命名规则:由由字字母母、汉汉字字、数数字字或或下下划划线线组组成成,第第一一个个字字符符必必须须是字母或汉字。是字母或汉字。长长度度不不超超过过255个个字字符符。其其中中,窗窗体体、控控件件和和模模块块的的标标识符长度不能超过识符长度不能超过40个字符。个字符。不要与不要与VB中的关键字同名中的关键字同名最好能最好能 “ “见名知义见名知义”返回目录返回目录2.1VB编码规则编码规则赋值语句赋值语句赋值语句赋值语句 语法格式:语法格式:Let 变量名变量名= =表达式表达式 作用:变量赋值或属性设置。例如:作用:变量赋值或属性设置。例如: Pi=3.14159strTemp=“Hello!”Label1.Caption=“VB程序设计示例程序设计示例”Form1.BackColor=vbWhite 说明:说明:只只有有当当表表达达式式的的类类型型与与变变量量的的数数据据类类型型兼兼容容时时,该该表表达达式式的的值值才才可以赋给相应的变量或属性。可以赋给相应的变量或属性。不管表达式是什么类型,都可以赋给不管表达式是什么类型,都可以赋给Variant( (变体类型变体类型) )变量。变量。 返回目录返回目录2.2VB的数据类型的数据类型基本数据类型基本数据类型基本数据类型基本数据类型 VB提供的基本数据类型见教材表提供的基本数据类型见教材表2.1。 1.数值型数值型 字节型字节型(Byte):存存放放无符号整数,取值范围无符号整数,取值范围0255整型:整型:Integer和和Long,存放整数存放整数浮浮 点点 型型 ( (实实 型型 ) ): 单单 精精 度度 型型 (Single)和和 双双 精精 度度 型型(Double) 存放带小数的数值存放带小数的数值 例:例: 单精度数单精度数-6.25E8表示表示-6.25108双精度数双精度数7.878D-6表示表示7.878106货币型货币型(Currency):一种精确的定点类型数据一种精确的定点类型数据 支持支持15位整数和位整数和4位小数位小数 返回目录返回目录2.2VB的数据类型的数据类型基本数据类型基本数据类型基本数据类型基本数据类型 2.字符串型字符串型( (String) VB字符串是由字符串是由双引号双引号括起来的一串字符括起来的一串字符不含任何字符不含任何字符( (长度为长度为0)的字符串称为空串的字符串称为空串String型变量型变量有变长和定长之分,例:有变长和定长之分,例:DimNameAAsString声明变长字符串变量声明变长字符串变量DimNameBAsString*20声明定长字符串变量声明定长字符串变量3. 逻辑型逻辑型(Boolean)逻辑型逻辑型数据的取值:数据的取值:True或或False,例:例:DimBoolRAsBooleanBoolR=68PrintBoolR输输出出:False返回目录返回目录2.2VB的数据类型的数据类型基本数据类型基本数据类型基本数据类型基本数据类型 4.日期型日期型( (Date)日期型变量可存放日期和时间日期型变量可存放日期和时间日期型常数的表现形式:日期型常数的表现形式:#mm/dd/yyyyhh:mm:ss#mm/dd/yyyyhh:mm:ss日期型数据的输出格式取决于系统的区域设置日期型数据的输出格式取决于系统的区域设置 例例:DimdAsDate声明日期型变量声明日期型变量DD=#10/5/2002#日期型变量赋值日期型变量赋值PrintD输出日期型变量的值输出日期型变量的值返回目录返回目录2.2VB的数据类型的数据类型基本数据类型基本数据类型基本数据类型基本数据类型 5.对象型对象型(Object)声明声明对象对象变量后,用变量后,用Set语句指定实际引用的对象语句指定实际引用的对象例,窗体上有命令按钮例,窗体上有命令按钮Command1,执行如下语句,执行如下语句,可将该按钮的显示文字改为可将该按钮的显示文字改为OKDimaAsObject声明声明a为对象型变量为对象型变量Seta=Command1指定指定a引用引用Command1命令按钮命令按钮a.Caption=“OK”与与Command1.Caption等价等价6.变体型变体型(Variant)变体变体:在程序运行期间可存放不同类型的数据。:在程序运行期间可存放不同类型的数据。例:例:DimXX缺省缺省为为Variant类类型型X=17X被被赋赋予字符串予字符串17X=X2X被被赋赋予数予数值值15X=A&XX被被赋赋予字符串予字符串A15返回目录返回目录2.2VB的数据类型的数据类型自定义数据类型自定义数据类型自定义数据类型自定义数据类型 u在模块的在模块的“通用通用”声明段声明声明段声明Private|PublicType数据类型名数据类型名元素名元素名1As类型名类型名元素名元素名2As类型名类型名EndType Public:声明的类型在工程中所有模块的任何过程中可用声明的类型在工程中所有模块的任何过程中可用Private:声明的类型只能在当前模块中使用声明的类型只能在当前模块中使用u声明自定义数据类型后,可使用该类型。例声明自定义数据类型后,可使用该类型。例DimstudTempAsstudent声明声明为为student类型变量类型变量u访问自定义数据类型的变量:访问自定义数据类型的变量:变量名变量名. .成员名成员名,如:,如:studTemp.id=“030005”studTemp.xm=“李斌李斌”返回目录返回目录2.3变量与常量变量与常量变量变量变量变量 1.变量的声明变量的声明通过类型符号:直接在变量名后面加上类型符号通过类型符号:直接在变量名后面加上类型符号 S&=10声明声明S为长整型变量为长整型变量 使用声明语句使用声明语句Dim变量名变量名As类型类型Dim变量名变量名类型符类型符 例如,下面两条声明语句的效果相同:例如,下面两条声明语句的效果相同:DimaAsInteger,bAsLong,cAsSingle,dAsDoubleDima%,b&,c!,d# 若省略类型说明,被声明的变量为若省略类型说明,被声明的变量为Variant型。例如:型。例如:Dima,ba和和b均均为变为变体型体型变变量量DimS1,S2AsString*6S1为变为变体型体型变变量量,S2为为定定长长字符串字符串返回目录返回目录见表见表2.22.3变量与常量变量与常量变量变量变量变量 2.变量的隐式及显式声明变量的隐式及显式声明不声明就用的变量被隐式声明为不声明就用的变量被隐式声明为Variant,初值初值Empty 强制进行变量的显式声明强制进行变量的显式声明v“通用通用”声明段中加上语句:声明段中加上语句:OptionExplicitv“工具工具选项选项”“”“编辑器编辑器” ” 返回目录返回目录对新对新模块起作用模块起作用遇到未经声明的变遇到未经声明的变量包括输错的变量,量包括输错的变量,系统会发出错误警系统会发出错误警告告 2.3变量与常量变量与常量变量变量变量变量 3.变量的有效范围变量的有效范围(1)局部变量:在一个局部变量:在一个过程内部声明过程内部声明的变量的变量 有效范围限于声明它的过程有效范围限于声明它的过程 自动变量:自动变量:用用Dim声明,声明,变量值只在过程执行期间才存在变量值只在过程执行期间才存在静态变量:用静态变量:用Static声明,声明,变量值在程序运行期间一直存在变量值在程序运行期间一直存在例例2.2统计单击窗体的次数统计单击窗体的次数PrivateSubForm_Click()StaticintCountAsIntegerintCount=intCount+1PrintintCountEndSub返回目录返回目录单击窗体单击窗体3次次 将将Static改为改为Dim2.3变量与常量变量与常量变量变量变量变量 (2)模块变量:模块变量:“通用通用”声明段用声明段用Private或或Dim语句声明语句声明 可被该模块中的任何过程所访问可被该模块中的任何过程所访问 例例2.3PrivateaAsInteger,bAsInteger声明模块变量声明模块变量PrivateSubCommand1_Click()DimintTempAsInteger声明局部变量声明局部变量a=10:b=20Printa和和b内容交换前:内容交换前:;a;bintTemp=a:a=b:b=intTemp变量交换变量交换EndSubPrivateSubCommand2_Click()Print:Printa和和b内容交换后:内容交换后:;a;bEndSub返回目录返回目录2.3变量与常量变量与常量变量变量变量变量 (3)全局变量:全局变量:标准模块的声明段用标准模块的声明段用Public或或Global声明声明 有效范围是整个工程的所有模块有效范围是整个工程的所有模块 说明:说明:标准模块:只含有程序代码的文件,扩展名为标准模块:只含有程序代码的文件,扩展名为.bas添加标准模块:添加标准模块:“工程工程添加模块添加模块”如果在窗体模块的如果在窗体模块的“通用通用”返回目录返回目录声声明明段段用用Public声声明明变变量量,其其它它模模块块可可通通过过如如下下方方式式引用该变量:引用该变量:窗体模块名窗体模块名.变量名变量名2.3变量与常量变量与常量常量常量常量常量 1.内部常量内部常量 由应用程序和控件提供。例如:由应用程序和控件提供。例如: Form1.BackColor=vbBluevbBlue是表示蓝色的内部常量是表示蓝色的内部常量 查看系统预定义常量:查看系统预定义常量:“视图视图对象浏览器对象浏览器” ” 返回目录返回目录2.3变量与常量变量与常量常量常量常量常量 2.符号常量符号常量( (自定义常量自定义常量) )命名:遵循标识符命名的规则命名:遵循标识符命名的规则声明格式:声明格式: Public|PrivateConst常量名常量名As类型类型=表达式表达式例:例: ConstconMaxAsInteger=9声明声明Integer型常量型常量ConstconDate=#10/5/2002#声明声明Date型常量型常量ConstCodeName=ASCII声明声明String型常量型常量有效范围:局部常量、模块常量、全局常量有效范围:局部常量、模块常量、全局常量声明常量的表达式中不能出现函数调用和循环引用声明常量的表达式中不能出现函数调用和循环引用 例:错误的常量声明例:错误的常量声明ConstconS=Sqr(10)ConstconA=conB+10,conB=conA+1返回目录返回目录2.4运算符与表达式运算符与表达式运算符运算符运算符运算符 1.算术运算符算术运算符 返回目录返回目录优先级优先级运算运算运算符运算符举例举例结果结果高高低低乘方乘方238取负取负-23-8乘、除乘、除*/5*3/27.5整除整除5*327求余求余Mod5*3Mod21加、减加、减+-10-3+(-2)52.4运算符与表达式运算符与表达式运算符运算符运算符运算符 2.字符串运算符字符串运算符运算符:运算符:&和和+例:例:VB=“Visual”+“Basic”连接为字符串连接为字符串“VisualBasic” label1.Caption=第第&Str(N)&条条记录记录Str为为数数值值型型转转字字符符型型函函数数。若若N为为1,标标签签上上显显示示“第第1条条记记录录”说明:说明:v使用使用+号号,要求连接的两个表达式均为字符串型,要求连接的两个表达式均为字符串型v使使用用&号号,连连接接的的两两个个表表达达式式可可以以为为任任何何类类型型,但但结结果果为为字字符串型符串型,如如“当前日期当前日期” /8/2002#返回目录返回目录2.4运算符与表达式运算符与表达式运算符运算符运算符运算符 3.关系运算符关系运算符返回目录返回目录运运 算算运算符运算符举举 例例结结 果果 等于等于=Hello=helloFalse 不等于不等于HellohelloTrue 大于大于HellohelloFalse 大于等于大于等于=45+10=55True 小于小于aabTrue 小于等于小于等于=45+105),结果为结果为True And:两个表达式均为两个表达式均为True时,结果为时,结果为True例如,例如,(45)And(87),结果为结果为FalseOr:两个表达式均为两个表达式均为False时,结果为时,结果为False例如,例如,(45)Or(87),结果为结果为True 返回目录返回目录XYNotYXAndYXOrYFalse False TrueFalseFalseFalse True FalseFalseTrueTrue False TrueFalseTrueTrue True FalseTrueTrue2.4运算符与表达式运算符与表达式表达式表达式表达式表达式 u表表达达式式:用用运运算算符符和和圆圆括括号号将将常常量量、变变量量、函函数数和和常常数数连接起来组成的有意义的式子。连接起来组成的有意义的式子。 如,如,数值表达式数值表达式 Cos(180*Pi/180)*100 逻辑表达式逻辑表达式 (N=0)And(NMod20) u运算优先顺序运算优先顺序( (从高到低从高到低) ): 函数函数算术运算算术运算(乘方乘方取负取负乘乘/除除整除整除求余求余加加/减减)字符串运算符字符串运算符关系运算符关系运算符逻辑运算符逻辑运算符(NotAndOr) u用括号可以改变运算顺序用括号可以改变运算顺序u乘方和负号相邻时,取负优先。乘方和负号相邻时,取负优先。例如:例如:2-2的结果是的结果是0.25,相当于,相当于2(-2) 返回目录返回目录2.5数据的输入输出数据的输入输出数据输出数据输出数据输出数据输出 1.Print方法方法 功能:在窗体功能:在窗体/ /立即窗口立即窗口/ /图片框图片框/ /打印机上输出信息打印机上输出信息格式:格式:对象对象.Print输出项输出项,|; v对象对象缺省为当前窗体,缺省为当前窗体,输出项输出项缺省则打印一空白行缺省则打印一空白行v输输出出项项之之间间可可用用分分号号或或逗逗号号分分隔隔:使使用用分分号号,其其后后的的输输出出项项紧紧接接着着前前一一个个输输出出项项输输出出;使使用用逗逗号号,其其后后的的输输出出项项在在下下一一个输出区输出。个输出区输出。 v两个输出区默认相隔两个输出区默认相隔1414列列 v各输出项表示要打印的表达式,组成各输出项表示要打印的表达式,组成Spc(n)|Tab(n)表达式表达式Spc(n):指定在输出之前插入指定在输出之前插入n个空白字符个空白字符Tab(n):指定在第指定在第n列上输出列上输出返回目录返回目录2.5数据的输入输出数据的输入输出数据输出数据输出数据输出数据输出 例,例,PrivateSubForm_Click()PrintPrintTab(15);*PrintTab(13);*;Spc(1);*;Spc(1);*“EndSub返回目录返回目录2.5数据的输入输出数据的输入输出数据输出数据输出数据输出数据输出 2.格式输出函数格式输出函数 功能:使数值、日期或字符串按指定的格式输出功能:使数值、日期或字符串按指定的格式输出格式:格式:Format(expression,format)expression需要格式化输出的表达式需要格式化输出的表达式format输出的格式模式输出的格式模式 返回目录返回目录2.5数据的输入输出数据的输入输出数据输出数据输出数据输出数据输出 3.MsgBox函数函数 功能:创建预定义的消息对话框功能:创建预定义的消息对话框常用格式:常用格式:MsgBox(prompt,buttons,title)prompt字符串,指定消息框中显示的信息字符串,指定消息框中显示的信息Buttons指定消息框中显示的按钮数目及形式、图标样式等,指定消息框中显示的按钮数目及形式、图标样式等,缺省值为缺省值为vbOKOnly 常用的设置值见教材表常用的设置值见教材表2.6Title指定消息框的标题,缺省值为工程名指定消息框的标题,缺省值为工程名用用户户所所选选按按钮钮的的返返回回值值( (见见教教材材表表2.7)可可作作为为继继续续执执行行程序的依据。程序的依据。返回目录返回目录2.5数据的输入输出数据的输入输出数据输出数据输出数据输出数据输出 例例2.4 PrivateSubForm_Click()prompt=真的新增该条记录吗真的新增该条记录吗answer=MsgBox(prompt,vbOKCancel,AddRecord)Ifanswer=vbOKThenDebug.Print您选择的是您选择的是“确定确定”按钮按钮Ifanswer=vbCancelThenDebug.Print您您选选择择的的是是“取取消消”按按钮钮EndSub返回目录返回目录2.5数据的输入输出数据的输入输出数据输出数据输出数据输出数据输出 说明:说明:如如果果消消息息框框中中显显示示的的信信息息过过长长,可可使使用用回回车车符符Chr(13)和换行符和换行符Chr(10)如果不需要返回值,可使用没有括号的如果不需要返回值,可使用没有括号的MsgBox语句:语句: MsgBoxprompt,buttons,title 例,例,Msg=非非法法的的数数据据输输入入!&Chr(13)&Chr(10)&请请重重新新输输入入Title=出错提示出错提示MsgBoxMsg,vbCritical,Title返回目录返回目录2.5数据的输入输出数据的输入输出数据输入数据输入数据输入数据输入 u 功能:生成输入对话框功能:生成输入对话框 u 常用格式:常用格式:InputBox(prompt,title,default,xpos,ypos)prompt字符串,指定输入框中显示的信息字符串,指定输入框中显示的信息Title指定输入框的标题,缺省值为工程名指定输入框的标题,缺省值为工程名Default字符串,指定文本框中的初始内容,缺省为空。字符串,指定文本框中的初始内容,缺省为空。xpos和和ypos数值表达式,成对出现或者成对缺省,数值表达式,成对出现或者成对缺省,指定输入框左上角相对于屏幕的位置。指定输入框左上角相对于屏幕的位置。u InputBox函数一次只能输入一个值函数一次只能输入一个值返回目录返回目录2.5数据的输入输出数据的输入输出数据输入数据输入数据输入数据输入 例例2.5PrivateSubForm_Click()DimUsernameUsername=InputBox(输入姓名后单击输入姓名后单击确定确定,输入输入)PrintUsernameEndSub返回目录返回目录2.6常用内部函数常用内部函数数学函数数学函数数学函数数学函数 u常用数学函数见教材表常用数学函数见教材表2.8u几点说明:几点说明:由基本函数可导出所需的数学函数由基本函数可导出所需的数学函数例如,例如,Log(X)/Log(N)可求出以可求出以N为底的对数为底的对数对对Rnd(N),N的值决定了的值决定了Rnd生成随机数的方式生成随机数的方式vN0或者缺省:产生序列中的下一个随机数或者缺省:产生序列中的下一个随机数vN=0:返回最近生成的随机数返回最近生成的随机数返回目录返回目录例如:随机产生例如:随机产生1-selenum之间的数之间的数Randomize(Timer)Selenum=7Rn=Int(Selenum)*Rnd+1) 调用调用Rnd之前,使用之前,使用Randomize语句可产生不语句可产生不相同的随机数数列相同的随机数数列2.6常用内部函数常用内部函数字符串函数字符串函数字符串函数字符串函数 u常用字符串函数见教材表常用字符串函数见教材表2.9u几点说明:几点说明:表表2.9只对常用的字符串函数进行了简单的说明只对常用的字符串函数进行了简单的说明使用使用Str函数将数字转成字符串时,字符串的首位函数将数字转成字符串时,字符串的首位一定是空格或是正负号。例如,一定是空格或是正负号。例如,S1=Str(67)返回返回67S2=Str(-67.5)返回返回-67.5使用使用Val函数时,如果遇到不能识别为数字的字符,函数时,如果遇到不能识别为数字的字符,则停止转换。例如,则停止转换。例如,Val(“24and57”)返回返回24Val(not57)返回返回0返回目录返回目录2.6常用内部函数常用内部函数日期函数日期函数日期函数日期函数常用的日期函数见下表。其中,常用的日期函数见下表。其中,D表示日期类型表达式。表示日期类型表达式。返回目录返回目录函数名函数名功能简述功能简述示例示例Date/Time返返回回系系统统日日期期或或时间时间Date返回系统当前日期返回系统当前日期Now返返回回系系统统日日期期和和时间时间略略Year/Month/Day(D)返回年、月、日返回年、月、日Year(Now)返回返回2003WeekDay(D)返回星期几返回星期几WeekDay(Now)返回返回3Hour(time)返回小时数返回小时数Hour(Time)返回返回21上述示例的当前日期时间是上述示例的当前日期时间是2003年年3月月18号、星号、星期三、晚上期三、晚上9点点10分。分。 2.6常用内部函数常用内部函数类型转换函数类型转换函数类型转换函数类型转换函数作用:作用:强制将一个表达式转换成某种特定数据类型强制将一个表达式转换成某种特定数据类型返回目录返回目录函数名函数名返回类型返回类型函数名函数名返回类型返回类型CBool(X)BooleanCInt(X)IntegerCDate(X)DateCLng(X)LongCCur(X)CurrencyCSng(X)Single第第3章章 控制语句与程序调试控制语句与程序调试学习目标:学习目标:u掌握掌握If条件语句和条件语句和SelectCase选择语句选择语句u掌握掌握ForNext和和DoLoop循环语句循环语句u掌握两重循环,了解多重循环掌握两重循环,了解多重循环u了解了解Exit、End和和Goto语句语句u掌握程序的简单调试方法掌握程序的简单调试方法第第3章章 控制语句与程序调试控制语句与程序调试教学内容:教学内容:3.1选择结构与相关语句选择结构与相关语句 3.2循环语句循环语句 3.3其它语句其它语句 3.4程序调试程序调试3.1选择结构选择结构u选选择择结结构构:当当设设定定条条件件成成立立时时执执行行某某些些语语句句,条条件件不不成成立立时时则则跳跳过过这这些语句或执行其它的语句。些语句或执行其它的语句。u选选择择结结构构中中要要使使用用选选择择语语句句,有有两两路路分分支支和和多多路路分分支支两两种种情情况况,对对应应的的选选择择语语句句有有If语语句句(两两路路出出口口)和和SelectCase语句语句(多路出口多路出口)。返回目录返回目录3.1选择结构选择结构If If条件语句条件语句条件语句条件语句 1.IfThen 其中,其中,是一个条件表达式或逻辑表达式是一个条件表达式或逻辑表达式 例如,例如,IfData=90ThenPrint“优秀优秀”例例3.1输入一个数,如果是输入一个数,如果是3的的倍数则通过消息框输出。倍数则通过消息框输出。PrivateSubForm_Click()DimDataAsIntegerData=InputBox(请输入一个值:请输入一个值:)IfDataMod3=0ThenMsgBoxDataEndSub返回目录返回目录Data是是3的倍数的倍数 Data=90?输出输出“优秀优秀”YesNoData=90?输出输出“优秀优秀”YesNo输出输出“合格合格”输出输出“计算完毕计算完毕”3.1选择结构选择结构If If条件语句条件语句条件语句条件语句 2.IfThenElse例如,例如,DimDataAsIntegerData=InputBox(“请输入成绩:请输入成绩:)IfData=90ThenPrint“优秀优秀”ElsePrint“合格合格”Print计算完毕计算完毕上例的上例的If语句可以改写为:语句可以改写为:IfData90ThenPrint合格合格ElsePrint优秀优秀返回目录返回目录3.1选择结构选择结构IfIfIfIf条件语句条件语句条件语句条件语句3.块状块状If语句语句返回目录返回目录IfThenEndIf例例3.2IfThenElseEndIfA=InputBox(“A值值”):B=InputBox(B值值)PrintA,BIfABThenT=A:A=B:B=TEndIfPrintA,B 3.1选择结构选择结构IfIfIfIf条件语句条件语句条件语句条件语句4.If语句嵌套语句嵌套If语句嵌套使用可形成多分支的条件语句结构语句嵌套使用可形成多分支的条件语句结构IfThenElseIfThenElseEndIf返回目录返回目录说明:说明:ElseIf之间不要加空格。之间不要加空格。Else和位于其上方的最近的和位于其上方的最近的If配对配对3.1选择结构选择结构IfIfIfIf条件语句条件语句条件语句条件语句例例3.3Weight=InputBox(输入西瓜重量:输入西瓜重量:,计算西瓜款计算西瓜款)IfWeight4ThenPrice=1ElseIfWeight=7ThenPrice=1.3ElsePrice=1.1EndIfMoney=Price*WeightMsgBox“西瓜重西瓜重”&Weight&“公斤,单价公斤,单价”&_Price&元,应收瓜款元,应收瓜款&Money&_元元,计算西瓜款计算西瓜款返回目录返回目录4公斤以下:公斤以下:1.00元元/公斤公斤4至至7公斤:公斤:1.3元元/公斤公斤超过超过7公斤:公斤:1.1元元/公斤公斤IfWeight=4AndPrice7ThenPrice=1.1 3.1选择结构选择结构IfIfIfIf条件语句条件语句条件语句条件语句例例3.4Char=InputBox(输入一个字符输入一个字符,测试字符值测试字符值)IfChar=0AndChar=AAndChar=aAndChar=zThenMsgBox输入的字符是小写字母输入的字符是小写字母ElseMsgBox输入的字符是其它符号输入的字符是其它符号EndIf返回目录返回目录判断输入的是判断输入的是大写字母、小大写字母、小写字母、数字写字母、数字还是其它符号还是其它符号 3.1选择结构选择结构IfIfIfIf条件语句条件语句条件语句条件语句例例3.5PrivateSubCommand1_Click()单击单击“正确无误正确无误”按钮按钮IfLen(TxtCode.Text)8ThenLblWarn.Caption=考核证号必须输入,长度为考核证号必须输入,长度为8位位TxtCode.SetFocusElseIfLen(TxtName.Text)=0ThenLblWarn.Caption=考生姓名必须输入考生姓名必须输入TxtName.SetFocusElseIfLen(TxtSeat.Text)=0ThenLblWarn.Caption=座位号必须输入座位号必须输入TxtSeat.SetFocusElseLblWarn.Caption=Debug.PrintTxtCode.TextDebug.PrintTxtName.TextDebug.PrintTxtSeat.TextEndIfEndSub返回目录返回目录3.1选择结构选择结构SelectCaseSelectCase选择语句选择语句选择语句选择语句 u语法格式:语法格式:SelectCaseCaseCaseCaseElseEndSelectu功能:根据测试表达式的值,决定程序的流向。功能:根据测试表达式的值,决定程序的流向。返回目录返回目录值的类型是数值的类型是数值型、字符串型、日期型等,值型、字符串型、日期型等,一旦与某个一旦与某个Case后的后的值相等,则执行这个值相等,则执行这个Case中的中的,完成后执行,完成后执行EndSelect后的语句。后的语句。如果所有的如果所有的Case后的后的都不与都不与项匹配,项匹配,则执行则执行CaseElse后的后的。 3.1选择结构选择结构SelectCaseSelectCase选择语句选择语句选择语句选择语句 例例3.6学生成绩分等学生成绩分等 Data=InputBox(请输入一个成绩请输入一个成绩,成绩分等成绩分等)SelectCaseInt(Data/10)Case10MsgBox满分满分,成绩分等成绩分等Case9MsgBox优秀优秀,成绩分等成绩分等Case8MsgBox良好良好,成绩分等成绩分等Case7MsgBox一般一般,成绩分等成绩分等Case6MsgBox合格合格,成绩分等成绩分等CaseElseMsgBox不合格不合格,成绩分等成绩分等EndSelect返回目录返回目录单单击击窗窗体体确确定定3.1选择结构选择结构SelectCaseSelectCase选择语句选择语句选择语句选择语句 例例3.7测试输入的字符测试输入的字符 Char=InputBox(请输入一个字符请输入一个字符,测试测试)SelectCaseCharCase0To9MsgBox字符是数字字符是数字,测试测试CaseaTozMsgBox字符是小写字母字符是小写字母,测试测试CaseAToZMsgBox字符是大写字母字符是大写字母,测试测试CaseElseMsgBox字符是其它符号字符是其它符号,测试测试EndSelect关于关于SelectCase语句的一些说明见教材语句的一些说明见教材返回目录返回目录确确定定单单击击窗窗体体3.2循环语句循环语句u 程序的另一种结构是循环结构程序的另一种结构是循环结构u 循环结构作用是重复执行一段程序循环结构作用是重复执行一段程序u 循环是有条件的、次数是有限的循环是有条件的、次数是有限的uVB的循环语句:的循环语句:ForNext、DoWhileLoopForEachNext、WhileWend u应用最多的:应用最多的:ForNext与与DoWhileLoop返回目录返回目录3.2循环语句循环语句ForNextForNext循环循环循环循环 uForNext循环一般应用于循环次数已知的场合循环一般应用于循环次数已知的场合For=初值初值To终值终值Step步长步长语句块(循环体)语句块(循环体)Next循环变量循环变量u工作原理工作原理返回目录返回目录循环变量循环变量=初值初值循环变量超出范围?循环变量超出范围?循环体循环体循环变量增加一个步长循环变量增加一个步长NoYesStep缺省为缺省为1 3.2循环语句循环语句ForNextForNext循环循环循环循环 例例3.8求求1+3+5+7+99PrivateSubForm_Click()DimSumAsInteger,IAsIntegerSum=0保存累加和,先清零保存累加和,先清零ForI=1To99Step2Sum=Sum+INextIMsgBox1+3+5+99=&Sum,求和求和EndSub返回目录返回目录本例的特点是数据本例的特点是数据项之间相差项之间相差2,即即Step的值为的值为2 思考:思考:例中当输出对话框出现时,例中当输出对话框出现时,I的值是多少?的值是多少?如果省略如果省略Step2,程序的结果如何?程序的结果如何?For语句能不能改写成语句能不能改写成ForI=99To1Step-2? 3.2循环语句循环语句ForNextForNext循环循环循环循环 例例3.9求平均成绩求平均成绩ConstN=40学生人数学生人数PrivateSubForm_Click()DimSumAsInteger,IAsIntegerDimDataAsInteger,AverageAsSingleSum=0存放累加值的变量清零存放累加值的变量清零ForI=1ToN循环循环40次,步长值为次,步长值为1省略省略Data=InputBox(输入第输入第&I&位同学的成绩位同学的成绩,求平均分求平均分)Sum=Sum+DataNextIAverage=Sum/NMsgBox全班全班&N&名学生的平均分为名学生的平均分为&Average,求平均分求平均分EndSub返回目录返回目录确确定定本例的循环变量本例的循环变量I控制人数控制人数3.2循环语句循环语句ForNextForNext循环循环循环循环 例例3.11求斐波那契级数的前求斐波那契级数的前20项项 PrivateSubForm_Click()DimA,B,I,TAsIntegerA=1:B=1生成级数第一、二项生成级数第一、二项PrintA;B;ForI=3To20T=A+B产生级数新的一项产生级数新的一项A=B让让B成为下一组的成为下一组的AB=T原来原来A+B的值成为下一组的的值成为下一组的BPrintB;IfIMod6=0ThenPrintNextIEndSub返回目录返回目录斐波那契级数:斐波那契级数:第一、二项为第一、二项为1 1第三项开始,每一项第三项开始,每一项 的值是前两项值之和的值是前两项值之和 每每6个数一行个数一行3.2循环语句循环语句DoLoopDoLoop循环循环循环循环 1.当型循环当型循环返回目录返回目录DoWhile循环体循环体LoopDo循环体循环体LoopWhile条件表达式条件表达式成立?成立?循环体循环体NoYes条件表达式条件表达式成立?成立?循环体循环体NoYes先判断后执行先判断后执行 先执行后判断先执行后判断特点:条件表达式特点:条件表达式成立执行成立执行循环体内容循环体内容 3.2循环语句循环语句DoLoopDoLoop循环循环循环循环 例例3.12计算平均分计算平均分PrivateSubForm_Click()DimDataAsInteger,SumAsInteger,NAsIntegerDimAverageAsSingleSum=0:N=0Data=InputBox(输入第输入第&N+1&个同学的成绩个同学的成绩,求平均分求平均分)DoWhileData-1-1表示结束输入表示结束输入Sum=Sum+DataN=N+1Data=InputBox(输入第输入第&N+1&个同学的成绩个同学的成绩,求平均分求平均分)LoopAverage=Sum/NMsgBoxN&位同学的平均分为位同学的平均分为&Average,求平均分求平均分EndSub返回目录返回目录3.2循环语句循环语句DoLoopDoLoop循环循环循环循环 例例3.13Sum=1+2+3+N 求求Sum不超过不超过10000的最大整数值和数据项数的最大整数值和数据项数NPrivateSubForm_Click()DimSum,NAsIntegerN=0开始时项数为开始时项数为0Sum=0保存累加值的变量保存累加值的变量Sum清零清零DoWhileSum=10000N=N+1Sum=Sum+NLoopSum=Sum-NN=N-1PrintSum=;Sum,N=;NEndSub返回目录返回目录当当Sum的值超出的值超出10000时循环才时循环才终止。因此终止。因此Sum值要减去多加的值要减去多加的一个一个N;而在循环过程中,而在循环过程中,N也也被多加了一个被多加了一个1,需要减去。,需要减去。 3.2循环语句循环语句DoLoopDoLoop循环循环循环循环 2.直到型循环直到型循环返回目录返回目录DoUntil循环体循环体LoopDo循环体循环体LoopUntil特点:条件表达式特点:条件表达式不成立执行不成立执行循环体内容循环体内容 先判断后执行先判断后执行 条件表达式条件表达式成立?成立?循环体循环体NoYes先执行后判断先执行后判断条件表达式条件表达式成立?成立?循环体循环体NoYes3.2循环语句循环语句DoLoopDoLoop循环循环循环循环 例例3.14计算平均分计算平均分( (要求同要求同例例3.12) )PrivateSubForm_Click()DimDataAsInteger,SumAsInteger,NAsIntegerSum=0:N=0Data=InputBox(输入成绩输入成绩,计算总分计算总分)DoUntilData=-1Sum=Sum+DataN=N+1Data=InputBox(输入数据输入数据,计算总分计算总分)LoopPrint全班平均分为全班平均分为:;Sum/NEndSub返回目录返回目录DoWhileData-1Sum=Sum+DataN=N+1Data=InputBox(输入数据输入数据,计算总分计算总分)Loop3.2循环语句循环语句两重循环两重循环两重循环两重循环 两重循环两重循环:在一个循环的循环体中还包含另一个循环:在一个循环的循环体中还包含另一个循环例例3.15在窗体上显示一个几何图形在窗体上显示一个几何图形PrivateSubForm_Click()DimI,JAsIntegerI、J为循环变量为循环变量ForI=1To8I控制行数控制行数(8行行)PrintTab(10-I);定每行定每行*的起始位的起始位ForJ=1ToIJ控制每行输出控制每行输出I个个*Print*;NextJPrint换行换行NextIEndSub返回目录返回目录注意:两重循环不能形成交叉注意:两重循环不能形成交叉 3.2循环语句循环语句两重循环两重循环两重循环两重循环 例例3.16输出乘法口诀表输出乘法口诀表PrivateSubForm_Click()DimIAsInteger,JAsInteger,MAsIntegerForI=1To9ForJ=1ToIM=I*JPrintJ&*&I&=&M&;NextJPrint打印换行打印换行NextIEndSub返回目录返回目录3.2循环语句循环语句两重循环两重循环两重循环两重循环 例例3.17计算计算 PrivateSubForm_Click()DimIAsInteger,JAsIntegerDimFAsLong阶乘值用长整型保存阶乘值用长整型保存DimeAsDoubleForI=0To10F=1每个阶乘值先置每个阶乘值先置1以便累乘以便累乘ForJ=1ToIF=F*JNextJe=e+1/FNextIPrinte=;eEndSub返回目录返回目录本循环计算本循环计算F=I!3.2循环语句循环语句多重循环多重循环多重循环多重循环 多重循环多重循环:循环次数在两重以上的循环结构:循环次数在两重以上的循环结构例例3.19计算计算将将1角钱兑换成零钱有多少种方案角钱兑换成零钱有多少种方案 PrivateSubForm_Click()DimI,J,K,SAsIntegerS=0统计兑换统计兑换1角钱的方案数角钱的方案数ForI=0To101分钱个数分钱个数ForJ=0To10Step22分钱个数分钱个数ForK=0To10Step55分钱个数分钱个数IfI+J+K=10ThenS=S+1NextKNextJNextIMsgBox1角钱兑换成零钱的方案有角钱兑换成零钱的方案有&S&种种,兑换零钱兑换零钱EndSub返回目录返回目录1角角钱钱以以下下的的硬硬币币有有1分分、2分和分和5分种分种1角钱全换成角钱全换成1分需分需10个个1角钱全换成角钱全换成2分需分需5个个1角钱全换成角钱全换成5分需分需2个个 3.3其他语句其他语句ExitExit与与与与EndEnd 1.Exit语句语句ExitDo:跳出跳出DoLoop循环循环ExitFor:跳出跳出ForNext循环循环例例3.20判断一个正整数是否为素数判断一个正整数是否为素数(质数质数)N=InputBox(请输入一个正整数请输入一个正整数,验证素数验证素数)ForI=2ToN-1IfNModI=0ThenExitForEndIfNextIIfI=NThenMsgBoxN&是素数是素数,验证素数验证素数ElseMsgBoxN&不是素数不是素数,验证素数验证素数EndIf返回目录返回目录素数素数:一个正整数:一个正整数N除了能被除了能被1和自身所整和自身所整除外,不能被其它任除外,不能被其它任何数所整除何数所整除。 3.3其他语句其他语句ExitExit与与与与EndEnd 2.End语句语句uEnd:终止程序的运行终止程序的运行uEndSub:终止一个过程;终止一个过程;uEndFunction:终止函数过程终止函数过程uEndIf:终止条件语句终止条件语句uEndType:终止类型声明终止类型声明uEndSelect:终止情况语句终止情况语句uEndProperty:终止属性过程终止属性过程uEndWith:终止终止With语句语句返回目录返回目录例如:例如:PrivateSubCommand1_Click()EndEndSub3.3其他语句其他语句GotoGoto u功能:无条件转向功能:无条件转向u格式:格式:Gotolabel称为语句标号称为语句标号( (数字或标识符数字或标识符) )例例3.22求若干个同学的成绩总分求若干个同学的成绩总分 PrivateSubForm_Click()DimData,SumAsIntegerSum=0loop1:Data=InputBox(输入成绩输入成绩)IfData=-1ThenGoToloop2ElseSum=Sum+DataGoToloop1EndIfloop2:Print总分总分=;SumEndSub返回目录返回目录 Goto语句不符合结语句不符合结构化程序设计的要求,构化程序设计的要求,所以不提倡使用。所以不提倡使用。3.4程序调试程序调试程序的错误类型程序的错误类型程序的错误类型程序的错误类型 语法错误语法错误 运行错误运行错误返回目录返回目录中文逗号中文逗号n n未赋过值未赋过值逻辑错误:算法不正确。逻辑错误:算法不正确。显然系统不会报告这类出错信息显然系统不会报告这类出错信息。3.4程序调试程序调试简单调试简单调试简单调试简单调试 方法:在程序中适当插入方法:在程序中适当插入Print语句跟踪变量值的变化语句跟踪变量值的变化 返回目录返回目录应该是应该是6与与243.4程序调试程序调试使用调试工具使用调试工具使用调试工具使用调试工具 1.断点调试断点调试断点断点:程序执行到该此自动暂停:程序执行到该此自动暂停单击单击“继续继续”按钮按钮,程序可继续执行。程序可继续执行。 返回目录返回目录 设置断点:在代码窗口中单设置断点:在代码窗口中单击该语句左侧的阴影边框。击该语句左侧的阴影边框。 暂停时,将鼠标指针移动到暂停时,将鼠标指针移动到程序中的各个变量上略作停留,程序中的各个变量上略作停留,系统将以浮动标签的方式显示系统将以浮动标签的方式显示该变量的值。该变量的值。3.4程序调试程序调试使用调试工具使用调试工具使用调试工具使用调试工具 2.逐语句执行逐语句执行 启动逐语句执行:启动逐语句执行:“调试调试逐语句逐语句” ” 或或 按按F8终止终止逐语句执行逐语句执行:“调试调试跳出跳出” ” 3.使用立即窗口使用立即窗口 程序运行处于暂停状态时,程序运行处于暂停状态时, 在立即窗口中输入:在立即窗口中输入: Print或或?4.逐过程逐过程 启动逐过程执行:启动逐过程执行:“调试调试逐过程逐过程”或或 按按Shift+F8终止终止逐过程执行逐过程执行:“调试调试跳出跳出”返回目录返回目录第第4章章 数组与过程数组与过程学习目标:学习目标:u掌握数组和过程的概念掌握数组和过程的概念u掌握数组的定义和应用掌握数组的定义和应用u掌握掌握Sub过程和过程和Function过程的应用过程的应用u掌握过程的参数传递与过程的作用域掌握过程的参数传递与过程的作用域u了解了解Shell函数函数第第4章章 数组与过程数组与过程教学内容:教学内容:4.1数组数组 4.2过程过程 4.3Shell函数函数4.1数组数组数组的概念数组的概念数组的概念数组的概念 u数组用于保存大量的、逻辑上有联系的数据数组用于保存大量的、逻辑上有联系的数据u数组的特点:数组的特点:数据中的元素在类型上是一致的数据中的元素在类型上是一致的 数组元素在内存空间上是连续存放的数组元素在内存空间上是连续存放的 数组元素的引用可通过下标进行数组元素的引用可通过下标进行 数组在使用前必须要定义数组在使用前必须要定义( (声明声明) ) 返回目录返回目录4.1数组数组一维数组的定义和使用一维数组的定义和使用一维数组的定义和使用一维数组的定义和使用 1.数组的定义数组的定义( (声明声明) ) Dim数组名数组名(下界下界To上界上界)As数据类型数据类型例如例如:DimData(1To40)AsInteger定义数组可以使用类型符定义数组可以使用类型符例,例,DimData%(1To40)下界的默认值为下界的默认值为0例,例,DimSalary(1000)AsCurrency通过数组名和下标可引用数组中的元素通过数组名和下标可引用数组中的元素例,例,Data(25)=95Form1.PrintData(25)返回目录返回目录4.1数组数组一维数组的定义和使用一维数组的定义和使用一维数组的定义和使用一维数组的定义和使用 说明说明-1-1:u数数组组定定义义后后的的初初值值:数数值值型型数数组组各各元元素素为为0,逻逻辑辑型型数数组组各元素为各元素为False,字符串数组各元素为空串字符串数组各元素为空串( ()。u可同时声明几个数组,用逗号分隔,例如可同时声明几个数组,用逗号分隔,例如DimA%(10To100),B(800)AsLongu定定义义数数组组时时,下下标标的的下下界界和和上上界界值值只只能能是是常常数数或或常常数数表表达达式。下例的定义是错误的式。下例的定义是错误的N=100:DimData(N)AsIntegeru定定义义时时,数数组组的的上上界界值值不不得得超超出出长长整整型型范范围围,且且数数组组的的上上界值不得小于下界值。界值不得小于下界值。返回目录返回目录4.1数组数组一维数组的定义和使用一维数组的定义和使用一维数组的定义和使用一维数组的定义和使用 说明说明- -2:u数组的元素个数称为数组长度数组的元素个数称为数组长度。uLbound()、Ubound()函数可测定数组的下界与上界值函数可测定数组的下界与上界值例如:例如:PrivateSubForm_Click()DimA%(12To24)PrintLBound(A),UBound(A)EndSubu用用OptionBasen可设定数组的默认下界可设定数组的默认下界n的取值只能是的取值只能是0或或1设定方法:在代码窗口的通用声明段中输入设定方法:在代码窗口的通用声明段中输入OptionBase0或或OptionBase1返回目录返回目录4.1数组数组一维数组的定义和使用一维数组的定义和使用一维数组的定义和使用一维数组的定义和使用 2.数组元素的使用数组元素的使用 通过数组名和下标通过数组名和下标例例4.1PrivateSubCommand1_Click()DimData(5)AsIntegerDimSum,IAsIntegerForI=1To5输入输入5个数据到数组中个数据到数组中Data(I)=InputBox(输入第输入第&I&个数据个数据)NextIForI=1To5完成完成5个数组元素的相加个数组元素的相加Sum=Sum+Data(I)NextIPrintSumEndSub返回目录返回目录ForI=1To5Data(I)=InputBox(输入第输入第&I&个数据个数据)Sum=Sum+Data(I)NextI4.1数组数组一维数组的定义和使用一维数组的定义和使用一维数组的定义和使用一维数组的定义和使用 说明说明:数数组组实实际际上上是是用用一一个个变变量量名名字字代代表表一一组组数数,这这组组数数是是连续排列的,用顺序号作为下标区分各个数。连续排列的,用顺序号作为下标区分各个数。数数组组下下标标是是一一个个整整型型量量,如如果果有有小小数数则则自自动动按按四四舍舍五五入取整。例如,入取整。例如,Data(3.4)=3,而,而Data(3.5)=2。数组常见的错误:数组常见的错误: 下标出界下标出界返回目录返回目录Test(1)=4Test(2)=3Test(3)=2Test(4)超出定义超出定义4.1数组数组一维数组应用例题一维数组应用例题一维数组应用例题一维数组应用例题 例例4.3输出斐波那契级数的前输出斐波那契级数的前20项项PrivateSubForm_Click()DimF(20)AsInteger,IAsIntegerF(1)=1:F(2)=1第一、第二项为第一、第二项为1ForI=3To20第三项起每项为前二项之和第三项起每项为前二项之和F(I)=F(I-2)+F(I-1)NextIForI=1To20在窗体上输出在窗体上输出PrintF(I);IfIMod5=0ThenPrintNextIEndSub返回目录返回目录4.1数组数组一维数组应用例题一维数组应用例题一维数组应用例题一维数组应用例题 例例4.4输入一组不重复的数据,找出最大值及其位置输入一组不重复的数据,找出最大值及其位置PrivateSubForm_Click()ConstLength=5定义常量定义常量Length作为数组最大下标作为数组最大下标DimTest%(Length),I%,Max%,L%ForI=1ToLength通过键盘输入给数组赋值通过键盘输入给数组赋值Test(I)=InputBox(输入第输入第&I&个数据个数据)NextIMax=Test(1):L=1设数组第一个元素为最大值设数组第一个元素为最大值ForI=2ToLengthIfMaxTest(I)Then找到新的最大值,记录其值和位置找到新的最大值,记录其值和位置Max=Test(I)L=IEndIfNextIMsgBox最大值最大值x=&Max&,位置是位置是&LEndSub返回目录返回目录4.1数组数组一维数组应用例题一维数组应用例题一维数组应用例题一维数组应用例题 例例4.5产生产生1010个整数到数组中,将其顺序颠倒后输出个整数到数组中,将其顺序颠倒后输出PrivateSubForm_Click()ConstLength=10:DimD(Length)AsInteger,I%,Temp%ForI=1ToLength给数组赋值并输出给数组赋值并输出D(I)=14+I:PrintD(I);NextIPrint:Print换行换行ForI=1ToLength/2交换交换Temp=D(I)D(I)=D(Length-I+1)D(Length-I+1)=TempNextIForI=1ToLength交换后输出交换后输出PrintD(I);NextIEndSub返回目录返回目录D(1)与与D(10)交换交换D(2)与与D(9)交换交换D(I)与与D(10-I+1) 4.1数组数组一维数组应用例题一维数组应用例题一维数组应用例题一维数组应用例题 例例4.8产生产生100个不重复的个不重复的3位随机整数,位随机整数,并按每行并按每行7列的格式输出列的格式输出PrivateSubForm_Click()DimData(100)AsInteger,I%,J%RandomizeTimer设置随机化种子,保证每组数据不重复设置随机化种子,保证每组数据不重复ForI=1To100循环产生循环产生100个数据个数据Data(I)=Int(Rnd()*900)+100ForJ=1ToI1与与已经产生的数据比较已经产生的数据比较IfData(I)=Data(J)Then数据已存在则舍弃,重新产生数据已存在则舍弃,重新产生I=I-1ExitFor提前退出数据比较的循环提前退出数据比较的循环EndIfNextJNextI 返回目录返回目录转转下下页页4.1数组数组一维数组应用例题一维数组应用例题一维数组应用例题一维数组应用例题 I=1:J=1DoWhileI100ThenExitForPrintData(I);I=I+1NextJPrint打印换行打印换行LoopEndSub返回目录返回目录接接上上页页ForI=1To100PrintData(I);IfIMod7=0ThenPrintNextI4.1数组数组一维数组应用例题一维数组应用例题一维数组应用例题一维数组应用例题 例例4.10统计成绩分布统计成绩分布PrivateSubForm_Click()DimN(10)AsInteger,IAsInteger,XAsIntegerConstm=10ForI=1TomX=InputBox(请输入请输入+Str(I)+个学生的成绩个学生的成绩)X=Int(X/10)也可写成也可写成X=X10N(X)=N(X)+1NextIPrint100;-;100;N(10)ForI=9To0Step-1Print10*I;-;10*I+9;N(I)NextIEndSub返回目录返回目录4.1数组数组排序问题排序问题排序问题排序问题 1.选择法选择法排序排序(N个数据个数据升序升序)1)先先假假设设第第1个个数数据据最最小小,依依次次同同第第2、第第3、第第N个个数数据据进进行行比比较较,一一旦旦第第1个个数数据据大大于于其其它它值值则则交交换换。这这样样,第第1轮比较完毕,找出了最小数据作为第轮比较完毕,找出了最小数据作为第1个数据个数据。2)以以第第2个个数数据据为为最最小小数数据据,依依次次同同第第3、第第4、第第N个个数数据据进进行行比比较较,若若第第2个个数数据据大大于于其其它它值值则则交交换换。这这样样,第第2轮交换完毕,则找出第二小的数据作为第轮交换完毕,则找出第二小的数据作为第2个数据。个数据。3)依依此此类类推推,第第N-1轮轮比比较较将将找找出出第第N-1小小的的数数据据,剩剩下下的的一一个数据就是最大数,排列在最后个数据就是最大数,排列在最后。以。以6个数据为例:个数据为例:返回目录返回目录原始序列:原始序列:30,20,10,90,50,60第第1轮比较结果:轮比较结果:10|30,20,90,50,60第第2轮比较结果:轮比较结果:10,20|30,90,50,60第第3轮比较结果:轮比较结果:10,20,30|90,50,60第第4轮比较结果:轮比较结果:10,20,30,50|90,60第第5轮比较结果:轮比较结果:10,20,30,50,60|90 4.1数组数组排序问题排序问题排序问题排序问题 例例4.11用选择法完成用选择法完成10个随机数据的升序排序。个随机数据的升序排序。ConstN=10:DimD(N)AsInteger,I%,J%,T%RandomizeTimerForI=1ToND(I)=Rnd*100:PrintD(I);排序前的数据序列排序前的数据序列NextIPrint:PrintForI=1ToN-1挑出前挑出前N-1个小的数个小的数ForJ=I+1ToNIfD(I)D(J)Then数据元素交换数据元素交换T=D(I):D(I)=D(J):D(J)=TEndIfNextJNextIForI=1ToN输出排序结果输出排序结果PrintD(I);NextI返回目录返回目录找最小数据作为第找最小数据作为第1个数据:个数据:I=1ForJ=2ToN这里这里2等价等价I+1IfD(1)D(J)ThenT=D(1):D(1)=D(J):D(J)=TEndIfNextJ4.1数组数组排序问题排序问题排序问题排序问题 2.选择法选择法排序排序(N个数据个数据升序升序)1)第第1轮轮比比较较:从从第第1个个元元素素开开始始, ,两两两两相相邻邻比比较较到到N-1,值值大大的的放在后面。比较完毕,放在后面。比较完毕,最大的数成为第最大的数成为第N个元素个元素( (沉底沉底) )。2)第第2轮轮比比较较:从从第第1个个元元素素开开始始, ,两两两两相相邻邻比比较较到到N-2,值值大大的的放在后面。比较完毕,放在后面。比较完毕,最大的数成为第最大的数成为第N-1个元素个元素。3)依此类推依此类推,直至最后一次比较。直至最后一次比较。 返回目录返回目录第第1轮比较:轮比较:原序列:原序列:30,20,10,90,50,60第第1次比较结果:次比较结果:20,30,10,90,50,60第第2次比较结果:次比较结果:20,10,30,90,50,60第第3次比较结果:次比较结果:20,10,30,90,50,60第第4次比较结果:次比较结果:20,10,30,50,90,60第第5次比较结果:次比较结果:20,10,30,50,60,90第第2轮比较:轮比较:原序列:原序列:20,10,30,50,60,90第第1次比较结果:次比较结果:10,20,30,50,60,90第第2次比较结果:次比较结果:10,20,30,50,60,90第第3次比较结果:次比较结果:10,20,30,50,60,90第第4次比较结果:次比较结果:10,20,30,50,60,904.1数组数组排序问题排序问题排序问题排序问题 例例4.12用冒泡法完成用冒泡法完成10个随机数的升序排序个随机数的升序排序ConstN=10:DimD(N)AsInteger,I%,J%,T%RandomizeTimerForI=1ToND(I)=Rnd*100:PrintD(I);NextIPrint:PrintForI=N-1To1Step-1大数逐个大数逐个沉底沉底ForJ=1ToIIfD(J)D(J+1)ThenT=D(J):D(J)=D(J+1):D(J+1)=TEndIfNextJNextIForI=1ToN输出排序结果输出排序结果PrintD(I);NextI返回目录返回目录最大的数成为第最大的数成为第N个元素个元素( (沉底沉底) ):I=N-1ForJ=1ToN-1这里这里N-1等价等价IIfD(J)D(J+1)ThenT=D(J):D(J)=D(J+1):D(J+1)=TEndIfNextJ4.1数组数组排序问题排序问题排序问题排序问题 例例4.13PrivateSubForm_Click()DimS_Name(7)AsString,S_Age(7)AsIntegerDimI%,J%,N%N=7S_Name(1)=李大明李大明:S_Age(1)=18S_Name(2)=王超王超:S_Age(2)=21S_Name(3)=张弓张弓:S_Age(3)=20S_Name(4)=陈卫国陈卫国:S_Age(4)=24S_Name(5)=马太原马太原:S_Age(5)=25S_Name(6)=吴济贫吴济贫:S_Age(6)=19S_Name(7)=戴天戴天:S_Age(7)=18返回目录返回目录对字符串数组对字符串数组S_Name和和S_Age赋值赋值 转转下下页页4.1数组数组排序问题排序问题排序问题排序问题 ForI=1ToN-1用选择法排序用选择法排序ForJ=I+1ToNIfS_Age(I)S_Age(J)ThenS_Age(0)=S_Age(I)S_Age(I)=S_Age(J)S_Age(J)=S_Age(0)S_Name(0)=S_Name(I)S_Name(I)=S_Name(J)S_Name(J)=S_Name(0)EndIfNextJNextIForI=1ToNPrintLeftB(S_Name(I),2);S_Age(I);NextIEndSub返回目录返回目录接接上上页页在交换年龄值的同时,在交换年龄值的同时,也要交换姓名,以保持姓也要交换姓名,以保持姓名和年龄下标的一致。名和年龄下标的一致。 函数函数LeftB()表示按字节取出指表示按字节取出指定数量的字符。定数量的字符。一个汉字占两个字节。一个汉字占两个字节。 4.1数组数组动态数组与静态数组动态数组与静态数组动态数组与静态数组动态数组与静态数组 1.动态数组的声明与使用动态数组的声明与使用声明:说明数组的名称和类型声明:说明数组的名称和类型( (不说明不说明下标范围下标范围) )使用前使用前用用ReDim语句定义语句定义不需要动态数组时,可用不需要动态数组时,可用Erase语句将其删除语句将其删除例,统计输入的任意个数之和。例,统计输入的任意个数之和。DimNAsInteger,A()AsSingle,iAsInteger,sAsSingleN=InputBox(输入几个数?输入几个数?)ReDimA(1ToN)Fori=1ToNA(i)=InputBox(输入第输入第+Str(i)+个数个数)s=s+A(i)NextiPrintN;个数之和为个数之和为;s返回目录返回目录4.1数组数组动态数组与静态数组动态数组与静态数组动态数组与静态数组动态数组与静态数组 2.静态数组的声明与使用静态数组的声明与使用用用Static声明,元素的值保留到程序运行结束。声明,元素的值保留到程序运行结束。 例如,例如,PrivateSubForm_Click()DimTest(10)AsInteger,IAsIntegerForI=1To10Test(I)=Test(I)+INextIForI=1To10PrintTest(I);NextIPrintEndSub返回目录返回目录改成:改成:StaticTest(10)AsInteger4.1数组数组二维数组二维数组二维数组二维数组 1.二维数组的定义二维数组的定义(声明声明)二维数组由行和列组成,有两个下标二维数组由行和列组成,有两个下标定义格式:定义格式:Dim数组名数组名(下界下界To上界,上界,下界下界To上界上界)As数据类型数据类型 例如,例如,DimData(1To5,3To9)AsInteger下界默认为下界默认为0例如,例如,DimSalary(30,10)AsCurrency31行行11列列二维数组有行、列两维,通常需使用二重循环引用二维数组有行、列两维,通常需使用二重循环引用返回目录返回目录4.1数组数组二维数组二维数组二维数组二维数组 二维数组中的数据按行存储,其引用与一维数组相似。二维数组中的数据按行存储,其引用与一维数组相似。PrivateSubForm_Click()DimA(2,3)AsInteger,I%,J%,C%ForI=0To2ForJ=0To3数组赋数组赋值值A(I,J)=C:C=C+1NextJNextIForI=0To2输出数组输出数组ForJ=0To3PrintA(I,J);NextJPrint另起一行打印另起一行打印NextIEndSub返回目录返回目录A(0,0)=0A(0,1)=1A(0,2)=2A(0,3)=3A(1,0)=4A(1,1)=5A(1,2)=6A(1,3)=7A(2,0)=8A(2,1)=9A(2,2)=10A(2,3)=114.1数组数组二维数组二维数组二维数组二维数组 2.二维数组应用举例二维数组应用举例 例例4.15 返回目录返回目录PrivateSubForm_Click()DimD%(9,9),I%,J%ForI=1To9ForJ=1To9IfI=JOrI=10-JThenD(I,J)=1ElseD(I,J)=5EndIfNextJNextIForI=1To9ForJ=1To9PrintD(I,J);NextJPrintNextIEndSub4.1数组数组二维数组二维数组二维数组二维数组 例例4.16 PrivateSubCommand1_Click()(1)变量、数组定义变量、数组定义(2)数组数组Sell、Price赋值:赋值:销售情况、单价销售情况、单价 (3)计算各连锁店各类食品的销售金额计算各连锁店各类食品的销售金额(4)计算计算总计数据总计数据(5)输出输出EndSub返回目录返回目录销售总额销售总额咖啡咖啡奶粉奶粉茶叶茶叶饼干饼干总计总计15175.906919.006182.401106.00968.50一店一店4838.002220.002016.00316.00286.00二店二店4764.802127.501971.20347.60318.50三店三店5573.102571.502195.20442.40364.004.1数组数组二维数组二维数组二维数组二维数组 (1)变量、数组定义变量、数组定义DimSell(3,4)DimMoney(3,4)AsSingleDimPrice(4)AsSingleDimI%,J%(2)数组数组Sell、Price赋值赋值:销售情况、单价销售情况、单价 Sell(1,1)=120:Sell(1,2)=90:Sell(1,3)=20:Sell(1,4)=44Sell(2,1)=115:Sell(2,2)=88:Sell(2,3)=22:Sell(2,4)=49Sell(3,1)=139:Sell(3,2)=98:Sell(3,3)=28:Sell(3,4)=56Price(1)=18.5:Price(2)=22.4Price(3)=15.8:Price(4)=6.5返回目录返回目录销售总额销售总额咖啡咖啡奶粉奶粉茶叶茶叶饼干饼干总计总计15175.906919.006182.401106.00968.50一店一店4838.002220.002016.00316.00286.00二店二店4764.802127.501971.20347.60318.50三店三店5573.102571.502195.20442.40364.004行行5列列店店名名咖啡咖啡奶粉奶粉茶叶茶叶饼干饼干第一连锁店第一连锁店120902044第二连锁店第二连锁店115882249第三连锁店第三连锁店1399828564.1数组数组二维数组二维数组二维数组二维数组 (3)计算各连锁店各类食品的销售金额计算各连锁店各类食品的销售金额ForI=1To3ForJ=1To4Money(I,J)=Sell(I,J)*Price(J)NextJNextI(4)计算计算总计总计数据数据 ForI=1To3ForJ=1To4Money(I,0)=Money(I,0)+Money(I,J)Money(0,J)=Money(0,J)+Money(I,J)Money(0,0)=Money(0,0)+Money(I,J)NextJNextI返回目录返回目录销售总额销售总额咖啡咖啡奶粉奶粉茶叶茶叶饼干饼干总计总计00000一店一店02220.002016.00316.00286.00二店二店02127.501971.20347.60318.50三店三店02571.502195.20442.40364.00销售总额销售总额咖啡咖啡奶粉奶粉茶叶茶叶饼干饼干总计总计15175.906919.006182.401106.00968.50一店一店4838.002220.002016.00316.00286.00二店二店4764.802127.501971.20347.60318.50三店三店5573.102571.502195.20442.40364.004.1数组数组二维数组二维数组二维数组二维数组 (5)输出输出Print销售总额销售总额;Tab(12);咖啡咖啡;Tab(24);奶粉奶粉;PrintTab(36);茶叶茶叶;Tab(48);饼干饼干ForI=0To3ForJ=0To4PrintTab(12*J);Format(Money(I,J),#.00);NextJPrintNextI返回目录返回目录销售总额销售总额咖啡咖啡奶粉奶粉茶叶茶叶饼干饼干总计总计15175.906919.006182.401106.00968.50一店一店4838.002220.002016.00316.00286.00二店二店4764.802127.501971.20347.60318.50三店三店5573.102571.502195.20442.40364.00用用Format()函数使输出项保留两位小数,函数使输出项保留两位小数, 4.1数组数组二维数组二维数组二维数组二维数组 例例4.17 PrivateSubForm_Click()(1)常量、变量、数组定义常量、变量、数组定义(2)产生学号产生学号( (从从1001开始开始) )(3)产生课程名称产生课程名称A、B、C、(4)产生产生M个学生个学生N门课程的成门课程的成绩绩(全部全部60分以上分以上) (5)求每个学生的总分,求每个学生的总分,放在第放在第N+1列中列中(6)输出每个学生的总分和输出每个学生的总分和N门课程成绩门课程成绩(7)按总分降序排序按总分降序排序(选择法排序选择法排序)(8)输出排序后的每个学生的输出排序后的每个学生的N门课程成绩和总分门课程成绩和总分EndSub返回目录返回目录4.1数组数组二维数组二维数组二维数组二维数组 (1)常量、变量、数组定义、随机数初始化常量、变量、数组定义、随机数初始化ConstM=10,N=6DimData(M,N+1)AsInteger,I%,J%,K%,Temp%RandomizeTimer (2)产生学号产生学号( (从从1001开始开始) )ForI=1ToMData(I,0)=1000+INextI(3)产生课程名称产生课程名称A A、B B、C C、ForI=1ToNData(0,I)=I+Asc(A)-1NextI返回目录返回目录M名学生名学生N门课程,门课程,N+1列是该生的总分列是该生的总分第第0列是学号列是学号第第0行是课程名称行是课程名称4.1数组数组二维数组二维数组二维数组二维数组 (4)产生产生M个学生个学生N门课程的成绩门课程的成绩(全部全部60分以上分以上)ForI=1ToMForJ=1ToNData(I,J)=60+40*RndNextJNextI(5)求每个学生的总分,放求每个学生的总分,放在在N+1列列ForI=1ToMForJ=1ToNData(I,N+1)=Data(I,N+1)+Data(I,J)NextJNextI返回目录返回目录4.1数组数组二维数组二维数组二维数组二维数组 (6)输出每个学生的总分和输出每个学生的总分和N门课程成绩门课程成绩ForI=1ToN输出课程名称输出课程名称PrintTab(8*I+2);Chr(Data(0,I);NextIPrint换行换行ForI=1ToMForJ=0ToN+1PrintTab(8*J);Data(I,J);NextJPrintNextIPrint返回目录返回目录4.1数组数组二维数组二维数组二维数组二维数组 (7)按总分降序排序按总分降序排序(选择法排序选择法排序)ForI=1ToM-1ForJ=I+1ToMIfData(I,N+1)Element(J)ThenT=Element(I)Element(I)=Element(J)Element(J)=TEndIfNextJNextIEndSub4.2过程过程作用域作用域作用域作用域 u变量的作用域指定义的变量能有效发挥其作用的范围。变量的作用域指定义的变量能有效发挥其作用的范围。u变变量量按按其其作作用用域域可可分分为为局局部部变变量量(过过程程级级)、模模块块变变量量(模模块块级级)和全局变量和全局变量(全局级全局级)u对过程而言,也有对过程而言,也有模块级过程模块级过程和和全局级过程全局级过程之分之分1.模块级过程模块级过程 在在一一个个窗窗体体模模块块中中以以Private定定义义的的过过程程为为模模块块级级过过程程,可可为为模块内的各个过程引用。模块内的各个过程引用。2.全局级过程全局级过程 在在一一个个窗窗体体模模块块中中以以Public定定义义的的过过程程为为全全局局级级过过程程,其其他他窗窗体体可可通通过过“窗窗体体模模块块名名.过过程程名名”引引用用;在在标标准准模模块块中中定定义义的的全全局过程可局过程可直接通过过程名直接通过过程名引用。引用。 返回目录返回目录4.2过程过程作用域作用域作用域作用域 例例4.26在标准模块中建立可将窗口居中安放的全局级过程,在标准模块中建立可将窗口居中安放的全局级过程, 窗体启动时即调用该过程。窗体启动时即调用该过程。(1) “ “工程工程添加模块添加模块”,添加标准模块,添加标准模块(2)在标准模块代码窗口建立全局过程在标准模块代码窗口建立全局过程CenterOnSetupForm返回目录返回目录4.2过程过程作用域作用域作用域作用域 (3)编编写写Form1窗窗体体的的Load事事件件响响应应代代码码:一一启启动动即即调调用用过过程程。CenterOnSetupForm返回目录返回目录4.3ShellShell函数函数 u作作用用:运运行行一一个个Windows或或DOS可可执执行行程程序序。如如果果程程序序存存在并且执行成功,则返回一个标识号在并且执行成功,则返回一个标识号(ID),否则返回否则返回0。u语法格式:语法格式:Shell(路径名,窗口方式路径名,窗口方式)例如,例如,PrivateSubCommand1_Click()X=Shell(c:windowspbrush.exe,1)EndSub返回目录返回目录见教材表见教材表4.15.6菜单的设计与应用菜单的设计与应用设计弹出菜单设计弹出菜单设计弹出菜单设计弹出菜单 例例5.16弹出菜单设计弹出菜单设计(1)打开例打开例5.15所建立的工程所建立的工程(2)添加如下的事件过程:添加如下的事件过程:PrivateSubText1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=2ThenPopupMenumnuEdit弹出名称为弹出名称为mnuEdit的菜单的菜单EndIfEndSub 注注:若若要要创创建建一一个个不不显显示示在在菜菜单单栏栏中中的的弹弹出出菜菜单单,设设计计菜菜单单时,需取消主菜单的时,需取消主菜单的“可见可见”复选框。复选框。 返回目录返回目录第第6章章 文件操作文件操作学习目标:学习目标:u了解了解VB的文件系统的文件系统u掌握读写顺序文件掌握读写顺序文件u掌握读写随机文件掌握读写随机文件u掌握文件系统控件的应用掌握文件系统控件的应用第第6章章 文件操作文件操作教学内容:教学内容:6.1文件分类文件分类 6.2顺序文件的读写顺序文件的读写 6.3随机文件的读写随机文件的读写6.4文件系统控件文件系统控件6.5顺序文件应用案例顺序文件应用案例6.1文件分类文件分类1.顺序文件顺序文件 文件中的记录按顺序存放文件中的记录按顺序存放按第一个记录的存储位置顺序访问按第一个记录的存储位置顺序访问 2.随机文件随机文件可按任意次序读写文件可按任意次序读写文件(按记录号按记录号)每个记录的长度必须相同每个记录的长度必须相同3.二进制文件二进制文件文件是字节的集合文件是字节的集合允许程序按所需的任何方式组织和访问数据允许程序按所需的任何方式组织和访问数据本章主要介绍顺序文件和随机文件的读写操作本章主要介绍顺序文件和随机文件的读写操作返回目录返回目录6.2顺序顺序文件读写文件读写读顺序文件读顺序文件读顺序文件读顺序文件读顺序文件:打开读顺序文件:打开读取读取关闭关闭1.打开现存的顺序文件打开现存的顺序文件 OpenpathnameForInputAs#filenumberLen=buffersizePathname:文件路径名文件路径名Filenumber:文件号文件号Len:指定缓冲区大小指定缓冲区大小2.读顺序文件读顺序文件 LineInput#文件号文件号,变量名变量名Input#文件号文件号,变量列表变量列表Input(字符数字符数,#文件号文件号)3.关闭关闭文件文件Close#文件号文件号,#文件号文件号 返回目录返回目录6.2顺序顺序文件读写文件读写读顺序文件读顺序文件读顺序文件读顺序文件例例6.1用用LineInput语句读出语句读出并显示并显示t1.txt文件的内容文件的内容PrivateSubForm_Click()DimNextLineAsStringOpent1.txtForInputAs#1打开文件打开文件DoWhileNotEOF(1)循环至文件尾循环至文件尾LineInput#1,NextLine读入一行数据读入一行数据PrintNextLineLoopCloseEndSub返回目录返回目录6.2顺序顺序文件读写文件读写读顺序文件读顺序文件读顺序文件读顺序文件例例6.2用用Input语句读出语句读出并显示并显示t1.txt文件的内容文件的内容PrivateSubForm_Click()Dims1AsString,s2AsString,s3AsStringOpent1.txtForInputAs#1DoWhileNotEOF(1)Input#1,s1,s2,s3Prints1,s2,s3LoopCloseEndSub返回目录返回目录6.2顺序顺序文件读写文件读写写顺序文件写顺序文件写顺序文件写顺序文件写顺序文件:打开写顺序文件:打开写入写入关闭关闭1.打开打开/ /创建顺序文件创建顺序文件 OpenpathnameForOutputAs#filenumberLen=buffersize功能:向文件中写入数据功能:向文件中写入数据OpenpathnameForAppendAs#filenumberLen=buffersize功能:在文件尾追加记录功能:在文件尾追加记录 若文件不存在,系统将先创建再打开若文件不存在,系统将先创建再打开2.写写顺序文件顺序文件 Print#filenumber,outputlistWrite#filenumber,outputlist与与Print#不同的是,不同的是,Write#可在数据项之间自动插入逗号可在数据项之间自动插入逗号 返回目录返回目录6.2顺序顺序文件读写文件读写读顺序文件读顺序文件读顺序文件读顺序文件例例6.3先创建先创建C:temp.txt,然后读出并显示该文件内容然后读出并显示该文件内容 PrivateSubForm_Click()Dims1AsString,s2AsString,s3AsStringOpenc:temp.txtForAppendAs#1Write#1,DingXiao,25,男男写入以逗号隔开的数据写入以逗号隔开的数据Write#1,WangXiao,23,女女CloseOpenc:temp.txtForInputAs#1DoWhileNotEOF(1)Input#1,s1,s2,s3Prints1,s2,s3LoopEndSub返回目录返回目录6.3随机随机文件读写文件读写读写随机文件读写随机文件读写随机文件读写随机文件随机文件的特点:随机文件的特点:以定长记录为单位,通过记录号访问文件内容以定长记录为单位,通过记录号访问文件内容文件打开后,可读可写文件打开后,可读可写1.定义记录类型定义记录类型 先定义记录类型,再定义记录类型变量。例如:先定义记录类型,再定义记录类型变量。例如:TypeTeacherRecNameAsString*30WageAsSingleLevelAsString*16EndType DimvarTeacherRecAsTeacherRec返回目录返回目录注注:对对定定义义在在窗窗体体中中的的记记录录类类型型,Type前前若若无无Private,则默认为则默认为Public。6.3随机随机文件读写文件读写读写随机文件读写随机文件读写随机文件读写随机文件2.打开及关闭随机文件打开及关闭随机文件打打开开:Open文文件件路路径径名名ForRandomAccessaccessAs#文文件号件号Len=reclength access参数指出打开方式:参数指出打开方式:Read、Write,缺省为可写可读缺省为可写可读Len参数指定每个记录的长度参数指定每个记录的长度3.读写随机文件读写随机文件读:读:Get#文件号文件号,记录号记录号,变量名变量名写:写:Put#文件号文件号,记录号记录号,变量名变量名 若若记记录录号号缺缺省省,则则对对上上一一次次Get或或Put操操作作后后的的下下一一个个记记录进行操作录进行操作。返回目录返回目录6.3随机随机文件读写文件读写读写随机文件读写随机文件读写随机文件读写随机文件例例6.4定定义义一一个个有有关关教教师师工工资资及及职职称称的的记记录录类类型型,然然后后建建立立一一个个随随机机文文件件,再再往往其其中中写写入入记记录录,最最后后再再将写入的记录输出。将写入的记录输出。PrivateTypeTeacherRec定义记录类型定义记录类型NameAsString*30WageAsSingleLevelAsString*16EndType返回目录返回目录6.3随机随机文件读写文件读写读写随机文件读写随机文件读写随机文件读写随机文件PrivateSubForm_Click()DimvarTeacherRecAsTeacherRec定义记录类型变量定义记录类型变量OpenC:teacher.txtForRandomAs#1WithvarTeacherRec给记录类型变量的各字段赋值给记录类型变量的各字段赋值.Name=丁进丁进:.Wage=1560.5:.Level=讲师讲师EndWithPut#1,varTeacherRec将记录类型变量的值写入文件将记录类型变量的值写入文件Get#1,1,varTeacherRec将第一个记录的内容读到变量中将第一个记录的内容读到变量中PrintvarTeacherRec.Name输出各字段的值输出各字段的值PrintvarTeacherRec.WagePrintvarTeacherRec.LevelClose#1EndSub返回目录返回目录6.3随机随机文件读写文件读写随机文件应用示例随机文件应用示例随机文件应用示例随机文件应用示例1.设计窗体设计窗体2.编写代码编写代码定义记录类型及记录变量定义记录类型及记录变量PrivateTypeShuJuNameAsString*10TelAsString*10EndTypeDimRenAsShuJu,nAsInteger返回目录返回目录6.3随机随机文件读写文件读写随机文件应用示例随机文件应用示例随机文件应用示例随机文件应用示例单击单击“新建文件新建文件”按钮的事件响应代码按钮的事件响应代码 PrivateSubCmdNew_Click()Openaddress.txtForRandomAs#1Len=Len(Ren)n=InputBox(人数人数?)Fori=1TonRen.Name=InputBox(Inputname:)Ren.Tel=InputBox(InputTel.NO:)Put#1,i,RenNextiClose#1EndSub返回目录返回目录6.3随机随机文件读写文件读写随机文件应用示例随机文件应用示例随机文件应用示例随机文件应用示例单击单击“追加记录追加记录”按钮的事件响应代码按钮的事件响应代码 PrivateSubCmdAppend_Click()Openaddress.txtForRandomAs#1Len=Len(Ren)n=LOF(1)/Len(Ren)LOF函数返回文件的字节数函数返回文件的字节数m=InputBox(追加几条记录追加几条记录?)Fori=1TomRen.Name=InputBox(Inputname:)Ren.Tel=InputBox(InputTel.NO:)Put#1,n+i,RenNextiClose#1EndSub返回目录返回目录6.3随机随机文件读写文件读写随机文件应用示例随机文件应用示例随机文件应用示例随机文件应用示例单击单击“输出记录输出记录”按钮的事件响应代码按钮的事件响应代码 PrivateSubCmdOutput_Click()Openaddress.txtForRandomAs#1Len=Len(Ren)i=InputBox(输出第几条记录输出第几条记录)Get#1,i,RenText1.Text=Ren.Name+Ren.TelClose#1EndSub返回目录返回目录6.4文件系统控件文件系统控件驱动器列表控件驱动器列表控件驱动器列表控件驱动器列表控件1.主要属性主要属性 Drive:驱动器盘符。只能在代码中设置驱动器盘符。只能在代码中设置例,例,Drive1.Drive=C:2.主要事件主要事件Change事件:控件中显示的内容改变时触发该事件事件:控件中显示的内容改变时触发该事件 利利用用Change事事件件可可将将该该控控件件与与文文件件夹夹列列表表控控件件一一起起使使用用:驱驱动动器器盘盘符符改改变变时时,文文件件夹夹列列表表控控件件中中所所显显示示的的文文件夹也作相应改变。件夹也作相应改变。返回目录返回目录6.4文件系统控件文件系统控件文件夹列表控件文件夹列表控件文件夹列表控件文件夹列表控件1.主要属性主要属性 Path:控件的默认文件夹。只能在代码中设置控件的默认文件夹。只能在代码中设置例,例,Dir1.Path=C:windows2.主要事件主要事件Change事件:改变文件夹时触发该事件事件:改变文件夹时触发该事件 利利用用Change事事件件可可将将该该控控件件与与文文件件列列表表控控件件一一起起使使用用:选选定定文文件件夹夹控控件件中中的的某某一一文文件件夹夹,文文件件列列表表控控件件则则显显示示此文件夹中的文件。此文件夹中的文件。返回目录返回目录6.4文件系统控件文件系统控件文件列表控件文件列表控件文件列表控件文件列表控件1.主要属性主要属性 Archive、Hidden、Normal、ReadOnly、System:是否是否显示具有指定属性的文件显示具有指定属性的文件FileName:选定文件的路径名选定文件的路径名ListCount:文件列表中的文件总数文件列表中的文件总数ListIndex:选定文件在列表中的索引值选定文件在列表中的索引值(0ListCount-1)List:一个字符串数组,其成员为控件中显示的文件一个字符串数组,其成员为控件中显示的文件 MultiSelect:对列表中的文件可否复选以及复选方式对列表中的文件可否复选以及复选方式Path:控件所对应的文件夹,默认为工程所在的路径控件所对应的文件夹,默认为工程所在的路径Pattern:控件中显示的文件类型,默认为控件中显示的文件类型,默认为*.* Selected:表明列表中某个文件是否被选中表明列表中某个文件是否被选中2.主要事件主要事件PathChange:控件的控件的Path属性改变时触发该事件属性改变时触发该事件返回目录返回目录6.4文件系统控件文件系统控件文件列表控件文件列表控件文件列表控件文件列表控件例,例,PrivateSubForm_Load()File1.Pattern=*.txt:File1.Path=C:windowsFile1.Archive=True:File1.Hidden=FalseFile1.Normal=False:File1.ReadOnly=FalseFile1.System=FalseEndSubPrivateSubForm_Click()DimIAsIntegerForI=0ToFile1.ListCount-1IfFile1.Selected(I)ThenPrintFile1.List(I)EndIfNextIEndSub返回目录返回目录6.4文件系统控件文件系统控件应用示例应用示例应用示例应用示例工程:工程:FileOperation窗体:窗体:frmFileOperation4个按钮:个按钮:CmdCopy、CmdMove、CmdDel、CmdExit源文件框架:源文件框架:Frame1目标框架:目标框架:Frame2返回目录返回目录6.5顺序顺序文件应用案例文件应用案例选择题答题及批阅选择题答题及批阅选择题答题及批阅选择题答题及批阅工程:工程:xz.vbp工程的组成:工程的组成:模块模块:xt.bas(含将窗体居中安放的过程含将窗体居中安放的过程)试题选择窗体:试题选择窗体:Frmxt.frm考生答题窗体:考生答题窗体:Frmxz.frm输入跳转题号的窗体:输入跳转题号的窗体:Frmti.frm提示还有未做试题的窗体:提示还有未做试题的窗体:Frmts.frm答题结果统计窗体:答题结果统计窗体:Frmtj.frm退出答题界面时的提示窗体:退出答题界面时的提示窗体:frmtc.frm返回目录返回目录第第7章章 数据库管理数据库管理学习目标:学习目标:u了解数据库的相关概念了解数据库的相关概念u掌握数据管理器的使用掌握数据管理器的使用u掌握掌握VB对数据库的三种访问技术对数据库的三种访问技术u掌握应用掌握应用SQL对数据库进行查询对数据库进行查询第第7章章 数据库管理数据库管理教学内容:教学内容:7.1VB数据库数据库技术基础技术基础 7.2可视化数据管理器可视化数据管理器 7.3数据控件数据控件( (Data)7.4应用应用SQL进行进行数据库查询数据库查询7.5数据访问对象数据访问对象( (DAO)7.6ADO数据数据控件控件 7.1VBVB数据库技术基础数据库技术基础基本概念基本概念基本概念基本概念1.数据库和数据表数据库和数据表 数数据据库库(DateBse)是是许许多多相相关关数数据据根根据据一一定定的的原原则则构构成成的的数数据据集集合合。一一个个数数据据库库由由一一个个或或多多个个数数据据表表(Table)组成。组成。数数据据表表中中的的一一列列称称为为一一个个字字段段或或域域(Field),表表中中的的一一行数据称为一条记录行数据称为一条记录(Record)。v 同一个表中字段名不允许重名同一个表中字段名不允许重名v 表中同一字段的数据类型相同表中同一字段的数据类型相同v 所有记录具有同样的字段所有记录具有同样的字段 返回目录返回目录7.1VBVB数据库技术基础数据库技术基础基本概念基本概念基本概念基本概念2.VB可访问的数据库可访问的数据库 VB默默认认的的数数据据库库格格式式与与Access97格格式式相相同同,其其默默认认的的数据库文件数据库文件(.mdb)称为内部数据库。称为内部数据库。除此之外,在除此之外,在VB中还可以访问:中还可以访问:外外部部数数据据库库,如如dBASE、FoxPro、Paradox等等ISAM(索索引引顺顺序序访访问问方方法法)数数据据库库,以以及及Lotus123和和Excel等等电子表格数据列表电子表格数据列表ODBC(开放式数据互接开放式数据互接) )数据库,如数据库,如SQLServer等等 返回目录返回目录7.1VBVB数据库技术基础数据库技术基础数据库访问技术数据库访问技术数据库访问技术数据库访问技术1.VB数据库应用程序的组成数据库应用程序的组成 用户界面、数据库引擎和数据库用户界面、数据库引擎和数据库(VB提供的是提供的是MicrosoftJet数据库引擎数据库引擎)2.应用程序应用程序与与Jet数据库引擎的接口数据库引擎的接口Data控件:提供无需编程就能访问数据库的控件:提供无需编程就能访问数据库的能力。实际应用时,还需绑定其它控件,并编能力。实际应用时,还需绑定其它控件,并编写简单的程序代码。写简单的程序代码。 数数据据访访问问对对象象(DAO):供供了了一一个个由由一一系系列列对对象象和和集集合合组组成的分层结构模型,可方便地访问和处理数据库。成的分层结构模型,可方便地访问和处理数据库。3.ActiveX数据对象数据对象(ADO) 建建立立在在被被称称为为OLEDB的的最最新新数数据据访访问问接接口口之之上上的的高高性性能的、统一的数据访问对象。能的、统一的数据访问对象。返回目录返回目录7.2可视化可视化数据管理器数据管理器建立数据库建立数据库建立数据库建立数据库1.启动数据管理器启动数据管理器 “ “外接程序外接程序可视化数据管理器可视化数据管理器” ” 2.建立数据库的表结构建立数据库的表结构 建建立立数数据据库库新新建建数数据据表表确确定定数数据据表表的的字字段段以以及及字字段段名、类型和长度等信息名、类型和长度等信息 返回目录返回目录7.2可视化可视化数据管理器数据管理器建立数据库建立数据库建立数据库建立数据库例例7.1建建立立一一个个students.mdb数数据据库库,在在该该库库中中新新建建一一个名为个名为student的数据表的数据表。返回目录返回目录操作步骤:操作步骤:建立数据库建立数据库新建数据表新建数据表建立表索引建立表索引(可选可选)生成表生成表 7.2可视化可视化数据管理器数据管理器编辑数据表编辑数据表编辑数据表编辑数据表1.修改表结构修改表结构 “ “数据库窗口数据库窗口”快捷菜单中快捷菜单中“设计设计”命令命令2.输入、编辑、删除记录输入、编辑、删除记录 在在“数据库窗口数据库窗口”中双击数据表中双击数据表返回目录返回目录7.3数据控件数据控件(Data)DataData控件使用基础控件使用基础控件使用基础控件使用基础 1.窗体上添加窗体上添加Data控件控件 2.三个重要属性三个重要属性Connect:指定所连接的数据库类型,默认为指定所连接的数据库类型,默认为AccessDatabaseName:选择要访问的数据库文件选择要访问的数据库文件RecordSource:确确定定要要访访问问的的数数据据来来源源(数数据据表表或或SQL查询语句查询语句)3.其它常用属性其它常用属性RecordSetType:设置设置记录集记录集的类型,见教材表的类型,见教材表7.3ReadOnly:设置是否以只读方式打开数据库设置是否以只读方式打开数据库 返回目录返回目录记录集是记录集是Data控件能访控件能访问的所有记录的集合问的所有记录的集合7.3数据控件数据控件(Data)DataData控件使用基础控件使用基础控件使用基础控件使用基础 4.常用方法与事件常用方法与事件 Refresh方法:刷新方法:刷新Data控件的属性设置控件的属性设置 例例如如,若若重重新新设设置置了了控控件件的的Connect、DatabaseName、RecordSouce、ReadOnly等等属属性性值值后后,必必须须调调用用Refresh方方法使所作的更改生效。法使所作的更改生效。Reposition事件:重定位事件事件:重定位事件例例如如,当当记记录录集集指指针针从从一一条条记记录录(假假设设为为A记记录录)移移到到另另一一条条记记录录(假假设设为为B记记录录)时时,将将发发生生该该事事件件(当当前前记记录录是是B记录记录)。 返回目录返回目录7.3数据控件数据控件(Data)DataData控件使用基础控件使用基础控件使用基础控件使用基础 例例,如如下下的的事事件件响响应应代代码码可可在在数数据据控控件件Data1上上显显示示记记录集中录集中当前记录的记录号及记录总数:当前记录的记录号及记录总数: PrivateSubdata1_Reposition()DataId=Data1.Recordset.AbsolutePosition+1DataCount=Data1.Recordset.RecordCountData1.Caption=Str(DataId)&“/”&Str(DataCount)EndSub 注:注:记录集记录集(Recordset)是是Data控件所有可访问记录的集合控件所有可访问记录的集合AbsolutePosition属性表示当前记录指针的位置属性表示当前记录指针的位置RecordCount属性表示记录集的记录总数属性表示记录集的记录总数返回目录返回目录7.3数据控件数据控件(Data)DataData的绑定控件的绑定控件的绑定控件的绑定控件 绑绑定定:通通过过对对普普通通控控件件的的属属性性设设置置,使使得得这这些些控控件件与与Data控件记录集中的字段建立链接关系。控件记录集中的字段建立链接关系。1.Data的绑定控件的绑定控件 具具有有DataSource和和DataField属属性性的的控控件件可可以以和和Data控控件进行绑定,如标签、文本框等。件进行绑定,如标签、文本框等。2.绑定控件的属性设置绑定控件的属性设置DataSource:选择所绑定的选择所绑定的Data控件控件DataField:确确定定需需显显示示或或更更新新的的数数据据表表字字段段,即即Data控件连接的数据表字段控件连接的数据表字段返回目录返回目录7.3数据控件数据控件(Data)DataData的绑定控件的绑定控件的绑定控件的绑定控件 例例7.2建建立立Xs.vbp:通通过过如如下下窗窗体体显显示示students.mdb数据库中数据库中student表的内容。表的内容。返回目录返回目录7.3数据控件数据控件(Data)DataData的绑定控件的绑定控件的绑定控件的绑定控件 例例7.2的操作步骤的操作步骤(1)设计窗体:启动设计窗体:启动VB,新建一个工程,然后设计窗体。新建一个工程,然后设计窗体。(2)设置设置Data控件的属性,见教材表控件的属性,见教材表7.4(3)设置文本框的绑定属性,见表设置文本框的绑定属性,见表7.5(4)编写编写“结束结束”按钮的按钮的Click事件响应代码事件响应代码PrivateSubCmd_exit_Click()EndEndSub(5)保存:保存:Xs.Vbp、FrmXs.frm(6)运行:单击运行:单击Data控件上的前后四个按控件上的前后四个按 钮可遍历钮可遍历student数据表中的内容。数据表中的内容。返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 记录集记录集(Recordset)是是Data控件所有可访问记录的集合控件所有可访问记录的集合对数据库内容的编辑操作主要通过记录集对象来进行对数据库内容的编辑操作主要通过记录集对象来进行1.1.浏览记录浏览记录Bof和和Eof属性属性Bof为为True:记录指针指向首记录前记录指针指向首记录前Eof为为True:记录指针指向末记录后记录指针指向末记录后AbsolutePosition属性属性返回当前记录指针的位置(返回当前记录指针的位置(0对应第一条记录)对应第一条记录)RecordCount属性属性返回记录集的记录总数返回记录集的记录总数返回目录返回目录若若Bof和和Eof的属的属性值都为性值都为True,则记录集为空则记录集为空7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 BookMark属性:设置或返回记录的书签属性:设置或返回记录的书签 LastModified属性:返回最近一次改过的记录书签值属性:返回最近一次改过的记录书签值 Move方法组:用于移动记录指针方法组:用于移动记录指针vMoveFirst:移至第一条记录移至第一条记录vMoveLast:移到最后一条记录移到最后一条记录vMovePrevious:记录指针前移一条记录记录指针前移一条记录vMoveNext:记录指针后移一条记录记录指针后移一条记录 返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 例例7.3在例在例7.2的基础上进行修改的基础上进行修改: 用用Move方法组实现方法组实现Data控件四个控件四个按钮的相应功能,并在按钮的相应功能,并在Data1控件上控件上显示当前记录号。显示当前记录号。操作步骤操作步骤(1)在窗体上添加在窗体上添加4个命令按钮个命令按钮:分别命名为分别命名为Cmd_Move(0)Cmd_Move(3)设置相应的设置相应的Caption属性属性(2)编写编写Cmd_Move命令按钮数组的命令按钮数组的Click事件响应代码事件响应代码(3)编写编写Data1控件重定位事件控件重定位事件(Reposition)响应代码响应代码返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 2. .增加、修改和删除记录增加、修改和删除记录 相关方法相关方法vAddNew:数据表中添加一条空记录数据表中添加一条空记录vEdit:将当前记录的内容调入缓冲区将当前记录的内容调入缓冲区vDelete:删除当前记录删除当前记录vUpdate:将缓冲区中的内容写入数据库将缓冲区中的内容写入数据库vCancelUpdate:缓冲区中的内容不写入数据库缓冲区中的内容不写入数据库增加新记录增加新记录调用调用AddNew方法方法:在数据表中添加一条空记录在数据表中添加一条空记录对新记录的各字段进行赋值对新记录的各字段进行赋值调用调用Update方法:更新数据表内容方法:更新数据表内容返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 修改记录修改记录调用调用Edit方法:将当前记录的内容调入缓冲区方法:将当前记录的内容调入缓冲区修改当前记录修改当前记录调用调用Update方法:将修改的内容写入数据表方法:将修改的内容写入数据表注注:若若在在绑绑定定控控件件上上修修改改当当前前字字段段值值后后移移动动记记录录指指针针,则系统自动将所作的修改更新到数据库中。则系统自动将所作的修改更新到数据库中。删除记录删除记录调用调用Delete方法:删除当前记录方法:删除当前记录移动记录指针:避免记录指针指向无效数据移动记录指针:避免记录指针指向无效数据注:记录一经删除,就不可恢复。删除记录必须慎重。注:记录一经删除,就不可恢复。删除记录必须慎重。返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 例例7.4在例在例7.3的基础上进行修改的基础上进行修改: 在在窗窗体体上上添添加加“增增加加记记录录”、“修修改改记记录录”和和“删删除除记记录录”三三个个按按钮钮,通通过过调调用用AddNew、Edit、Delete方方法法实现对数据库的相关操作。实现对数据库的相关操作。操作步骤操作步骤(1)在窗体上添加在窗体上添加3个命令按钮个命令按钮:Cmd_Add、Cmd_Update、Cmd_Dele(2)编写上述按钮的编写上述按钮的Click事件事件响应代码响应代码返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 “增加记录增加记录”按钮的按钮的Click事件响应代码流程图事件响应代码流程图返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 3. .查找查找记录记录 Find方法组方法组(适用于适用于Dynaset和和SnapShot类型的记录集类型的记录集)vFindFisrt:查找满足条件的第一条记录查找满足条件的第一条记录vFindLast:查找满足条件的最后一条记录查找满足条件的最后一条记录vFindPrevious:当前记录起往前找满足条件的第一条记录当前记录起往前找满足条件的第一条记录vFindNext:当前记录起往后找满足条件的第一条记录当前记录起往后找满足条件的第一条记录语法格式:语法格式:记录集记录集条件表达式条件表达式例如,例如,Data1.Recordset.FindFirst网络技术网络技术Data1.Recordset.FindNextnameLike王王*注:如果条件中包含变量,则必须使用字符串连接符注:如果条件中包含变量,则必须使用字符串连接符&className“网络技术网络技术”Data1.Recordset.FindFirst&className&返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 NoMatch属性属性用用Find方方法法组组进进行行查查询询时时,如如果果未未找找到到符符合合条条件件的的记记录,则该属性的值为录,则该属性的值为True,否则为否则为False。例如:例如:Data1.Recordset.FindNextnameLike王王*IfData1.Recordset.NoMatchThenMsgBox没有姓王的学生没有姓王的学生EndIf返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 Seek方法方法(适用于适用于Table类型记录集类型记录集)格式:格式:记录集记录集.seek比较运算符,比较运算符,Seek方方法法是是通通过过索索引引字字段段快快速速找找到到符符合合条条件件的的记记录录,所以在使用该方法前必须先打开其相关的索引。所以在使用该方法前必须先打开其相关的索引。例如:例如:Data1.DatabaseName=students.mdbData1.RecordSource=studentData1.RecordType=0设置记录集类型为表类型设置记录集类型为表类型Data1.RefreshData1.Recordset.Index=stuid打开名称为打开名称为stuid的索引的索引Data1.Recordset.Seek=,013002返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 例例7.5在例在例7.4的基础上进行修改的基础上进行修改: 增加一个登录窗体增加一个登录窗体FrmLog,只有当用户输入只有当用户输入user表中正确的表中正确的用户名和相应的密码后,才可以用户名和相应的密码后,才可以进入进入FrmXs(学生情况学生情况)窗体。窗体。操作步骤操作步骤(1)在数据库中增加在数据库中增加user数据表数据表:返回目录返回目录7.3数据控件数据控件(Data)DataData控件的记录集控件的记录集控件的记录集控件的记录集 (2)添加新窗体,保存为添加新窗体,保存为FrmLog。属性设置见教材表属性设置见教材表7.6(3)执行执行“工程工程属性属性”命令,命令,“启动对象启动对象”选选FrmLog(4)编写编写“确定确定”按钮的按钮的Click事件响应代码事件响应代码验证用户名是否为空验证用户名是否为空验证密码是否为空验证密码是否为空查找用户名是否存在查找用户名是否存在若不存在,给出若不存在,给出“非法用户非法用户”的提示信息的提示信息如果存在还需判断密码是否正确如果存在还需判断密码是否正确不正确提示重新输入;正确则显示不正确提示重新输入;正确则显示FrmXs窗体窗体返回目录返回目录7.4应用应用SQL进行查询进行查询SELECTSELECT语句语句语句语句 SELECT语句的语法:语句的语法:Select字段字段1,字段,字段2,字段,字段nFrom表名表名Where查询条件查询条件GroupBy分组字段分组字段OrderBy字段字段Asc|Desc例如:例如:Select*fromstudentSelectname,id,classfromstudentwheresex=女女Selectnamefromstudentwheresex=女女and网络技术网络技术返回目录返回目录7.4应用应用SQL进行查询进行查询多表查询多表查询多表查询多表查询 多多表表查查询询:查查询询时时将将两两个个以以上上表表中中的的内内容容通通过过相相关关字字段段连接在一起。各字段名前应加上相应的表名:连接在一起。各字段名前应加上相应的表名:表名表名.字段名字段名例如:例如:Selectstudent.*,class.classnameFromstudent,classWherestudent.classid=class.classid例例7.9以例以例7.5为基础对为基础对Xs.Vbp工程进行修改,要求:工程进行修改,要求:v用用Select语句描述数据源:连接语句描述数据源:连接student和和class表中的数据表中的数据v多多表表查查询询的的结结果果通通过过FrmXs窗窗体体显显示示,并并且且不不允允许许用用户户对对显显示的数据进行修改示的数据进行修改v新新增增一一个个FrmEdit窗窗体体,在在该该窗窗体体中中完完成成增增加加记记录录或或修修改改记记录的操作录的操作返回目录返回目录7.4应用应用SQL进行查询进行查询多表查询多表查询多表查询多表查询 操作步骤操作步骤(1)修改修改Students.mdb数据库数据库v根据教材表根据教材表7.10修改修改student数据表:数据表:删删除除class字字段段;增增加加classid字字段段,宽宽度度为为2,“顺顺序序位位置置”为为2v在在student数据表各记录的数据表各记录的classid字段中输入代码:字段中输入代码:01(表示表示“网络技术网络技术”班级班级),02(表示表示“汽车营销汽车营销”班级班级)v根据表根据表7.11新建新建class数据表,并输入相应记录数据表,并输入相应记录返回目录返回目录7.4应用应用SQL进行查询进行查询多表查询多表查询多表查询多表查询 (2)打开打开Xs.Vbp,对,对FrmXs窗体上的控件进行属性设置:窗体上的控件进行属性设置:v设置设置Data1控件的控件的RecordSource属性:属性:Selectstudent.*,class.classnameFromstudent,classWherestudent.classid=class.classidv设置设置Txt_class的的DateField属性属性:classnamev将各文本框控件的将各文本框控件的Locked属性设置为属性设置为True返回目录返回目录7.4应用应用SQL进行查询进行查询多表查询多表查询多表查询多表查询 (3)新增新增FrmEdit窗体窗体(在该窗体中完成新增或修改操作在该窗体中完成新增或修改操作)v“性别性别”字段采用单选按钮控件数组字段采用单选按钮控件数组Opt_sexv班级通过下拉列表班级通过下拉列表(Cmd_class)选择选择vData1:DatabaseName设设 为为 Students.mdb, RecordSource选选student,Visible设为设为FalsevData2:DatabaseName设设 为为 Students.mdb, RecordSource选选class,Visible设为设为Falsev编写以下事件的响应代码:编写以下事件的响应代码:窗体窗体Load事件事件窗体窗体Activate(激活激活)事件事件“确定确定”按钮按钮的的Click事件事件“返回返回”按钮的按钮的Click事件事件返回目录返回目录7.4应用应用SQL进行查询进行查询多表查询多表查询多表查询多表查询 (4)修改修改FrmXs窗体中部分控件的事件响应代码窗体中部分控件的事件响应代码PrivateSubCmd_add_Click()flag=1:FrmEdit.Show1EndSubPrivateSubCmd_Dele_Click()MsgBox该功能有待开发!该功能有待开发!,删除记录删除记录EndSubPrivateSubCmd_Update_Click()flag=2:FrmEdit.Show1EndSub(5)添加添加var.bas模块模块(定义全局变量定义全局变量)PublicflagAsInteger返回目录返回目录7.4应用应用SQL进行查询进行查询使用使用使用使用MSFlexGridMSFlexGrid控件控件控件控件 1.添加添加MsFlexGrid控件控件(1)执行执行“工程工程部件部件”命令命令(2)选选“MicrosoftFlexGridControl6.0”2.MSFlexGrid控件的常用属性控件的常用属性vAllowUserResizing:设置是否允许对行列大小进行调整设置是否允许对行列大小进行调整vCol、Row:设定或访问当前单元格设定或访问当前单元格vCols、Rows:返回或设置控件中的列和行的总数返回或设置控件中的列和行的总数vColSel、RowSel:设置选中的列或行设置选中的列或行vClip:返回或设置控件选定区域中的内容返回或设置控件选定区域中的内容vColWidth、RowHeight:返回或设置某列的列宽或某行的行高返回或设置某列的列宽或某行的行高vColAlignment:返回或设置某一列的对齐格式返回或设置某一列的对齐格式vSort:根据设定的属性值排序所选择的行根据设定的属性值排序所选择的行返回目录返回目录7.4应用应用SQL进行查询进行查询使用使用使用使用MSFlexGridMSFlexGrid控件控件控件控件 3.MSFlexGrid控件的常用方法控件的常用方法vAddItem:在:在控件中添加一行控件中添加一行例如,以下代码将数据添加到第例如,以下代码将数据添加到第1行行(原第原第1行变成第行变成第2行行):MSFlexGrid1.AddItem“何何君君”&Chr(9)&“男男”&Chr(9)&“上上海海”,1注:如果代码最后的注:如果代码最后的1省略,则数据将被添加到最后一行省略,则数据将被添加到最后一行vClear:清除控件中的所有内容清除控件中的所有内容(不清除行和列不清除行和列)vRemoveIte:删除控件中指定的行。删除控件中指定的行。注注:固固定定行行(即即呈呈灰灰色色的的行行)不不可可删删除除。例例如如,执执行行以以下下代代码码将报错将报错“不能在固定行上使用不能在固定行上使用RemoveItem”的对话框:的对话框:MSFlexGrid1.RemoveItem0返回目录返回目录7.4应用应用SQL进行查询进行查询使用使用使用使用MSFlexGridMSFlexGrid控件控件控件控件 例例7.10以例以例7.9为基础对为基础对Xs.Vbp工程进行修改,要求:工程进行修改,要求:v新增新增FrmBrowse窗体,在该窗体中完成按班级的查询操作窗体,在该窗体中完成按班级的查询操作v在在FrmXs窗体上增加可进入查询窗体的窗体上增加可进入查询窗体的“查询记录查询记录”按钮按钮操作步骤操作步骤(1)打开打开Xs.Vbp,新增新增FrmBrowse窗体:窗体:v设计窗体界面,属性设置见教材表设计窗体界面,属性设置见教材表7.12返回目录返回目录7.4应用应用SQL进行查询进行查询使用使用使用使用MSFlexGridMSFlexGrid控件控件控件控件 v编写窗体激活事件的响应代码编写窗体激活事件的响应代码Form_Activate()默认查询全部记录默认查询全部记录返回目录返回目录7.4应用应用SQL进行查询进行查询使用使用使用使用MSFlexGridMSFlexGrid控件控件控件控件 v编编 写写 的的 “选选 择择 查查 询询 班班 级级 ”组组 合合 框框 的的 Click事事 件件 响响 应应 代代 码码 Cmb_class_Click()v编写编写“返回返回”按钮的按钮的Click事件响应代码事件响应代码Cmd_exit()返回目录返回目录7.4应用应用SQL进行查询进行查询使用使用使用使用MSFlexGridMSFlexGrid控件控件控件控件 (2)在在FrmXs窗窗体体上上增增加加可可进进入入查查询询窗窗体体的的“查查询询记记录录”按按钮钮Cmd_Browse,并编写相应的事件响应代码并编写相应的事件响应代码:PrivateSubCmd_Browse_Click()FrmBrowse.Show1EndSub返回目录返回目录7.5数据访问对象数据访问对象(DAO)DAO:DataAccessObjects(数据访问对象数据访问对象)1.使用使用DAO的前提的前提“工程工程”引用引用”,选中,选中MicrosoftDAO3.51ObjectLibrary”返回目录返回目录7.5数据访问对象数据访问对象(DAO)2.创建工作区创建工作区确确定定引引用用库库之之后后,可可利利用用数数据据库库引引擎擎对对象象(DBEngine)创创建工作区对象建工作区对象(WorkSpace对象对象):Set workspace对对象象变变量量 = CreateWorkspace(name, user,password,type)注:注:缺缺省省的的工工作作区区对对象象是是Jet类类型型的的DBEngine.WorkSpaces(0),对对于于简简单单的的数数据据库库应应用用程程序序来来说说,无无需需创创建建WorkSpace对对象象,可直接使用系统缺省工作区的属性和方法。可直接使用系统缺省工作区的属性和方法。返回目录返回目录7.5数据访问对象数据访问对象(DAO)3.打开数据库打开数据库利用利用WorkSpace对象的对象的OpenDatabase方法,常用格式:方法,常用格式:Set数据库对象数据库对象=工作区对象工作区对象.OpenDatabase(dbname,options)其中:其中:dbname:需打开的数据库名称,包含路径。需打开的数据库名称,包含路径。Options:对对于于Jet类类型型的的Workspace对对象象,该该参参数数用用来来指指定定数数据据库库的的打打开开方方式式。取取值值为为False(默默认认值值)时时,为为共共享享方方式式;否则为独占方式。否则为独占方式。例如,例如,Setdb=DBEngine.Workspaces(0).OpenDatabase(testdb.mdb)返回目录返回目录7.5数据访问对象数据访问对象(DAO)4.创建记录集创建记录集利用数据库对象的利用数据库对象的OpenRecordset方法,常用格式:方法,常用格式:Set记录集对象记录集对象=数据库对象数据库对象.OpenRecordset(source,type)其中:其中:source:指定记录集内容指定记录集内容(数据表名、查询名或数据表名、查询名或SQL语句语句)type:指定记录集类型,默认打开表型记录集指定记录集类型,默认打开表型记录集例如,例如,Setdb=DBEngine.Workspaces(0).OpenDatabase(testdb.mdb)SetrsSele=db.OpenRecordset(TestSeleDb)返回目录返回目录7.5数据访问对象数据访问对象(DAO)5.记录集对象的属性与方法记录集对象的属性与方法大多与大多与Data控件的控件的Recordset对象的属性及方法一致对象的属性及方法一致例例7.11从从TestDB.mdb(考考试试题题库库)中中随随机机动动态态抽抽取取指指定定数数目的选择题和填充题到目的选择题和填充题到Test.mdb(学生考试库学生考试库)注:数据库结构见教材注:数据库结构见教材操作步骤操作步骤(1)新建工程新建工程设计窗体设计窗体工程存为工程存为TestSele.vbp窗体存为窗体存为FrmSele.frm返回目录返回目录7.5数据访问对象数据访问对象(DAO)(2)引用引用DAO对象库对象库“工工 程程 ”引引 用用 ”, 选选 中中 Microsoft DAO 3.51 ObjectLibrary”(3)编写程序代码编写程序代码使用使用DAO打开题库和学生考试库打开题库和学生考试库清空学生考试库清空学生考试库打开进行查询的相关的索引打开进行查询的相关的索引生成考试库中的选择题表生成考试库中的选择题表生成考试库中的填充题表生成考试库中的填充题表关闭试题库和学生考试库关闭试题库和学生考试库,并给出选题完成的提示信息并给出选题完成的提示信息返回目录返回目录7.6ADO数据控件数据控件ADOADO使用基础使用基础使用基础使用基础 ADO:ActiveXDataObjects(ActiveX数据对象数据对象)1.使用使用ADO数据控件数据控件(1)“工程工程”部件部件”(2)点击工具箱中点击工具箱中在窗体上画出在窗体上画出ADO对象对象返回目录返回目录7.6ADO数据控件数据控件ADOADO使用基础使用基础使用基础使用基础 (3)设置窗体上设置窗体上ADO对象的对象的ConnectionString属性属性返回目录返回目录7.6ADO数据控件数据控件ADOADO使用基础使用基础使用基础使用基础 返回目录返回目录7.6ADO数据控件数据控件ADOADO使用基础使用基础使用基础使用基础 (4)设置窗体上设置窗体上ADO对象的对象的RecordSource属性属性返回目录返回目录选择数据表为记录源选择数据表为记录源由由SQL查询来确定记录源查询来确定记录源7.6ADO数据控件数据控件ADOADO使用基础使用基础使用基础使用基础 例例7.12用用ADO控控件件对对TestDB.mdb中中的的TestseleDb表表进进行行增加、修改、删除、跳转等操作。增加、修改、删除、跳转等操作。操作步骤操作步骤(1)新建工程新建工程设计窗体设计窗体设置设置Adodc控件的属性控件的属性设置绑定控件的属性设置绑定控件的属性工程存为工程存为TestManage.vbp窗体存为窗体存为FrmManage.frm(2)编写事件响应代码编写事件响应代码窗体窗体Load事件事件各按钮的各按钮的Click事件事件返回目录返回目录7.6ADO数据控件数据控件新增绑定控件的应用新增绑定控件的应用新增绑定控件的应用新增绑定控件的应用 DataGrid控控件件与与ADO控控件件绑绑定定后后,可可一一次次显显示示多多条条记记录录,并并允允许许对对显显示示的的记记录录进进行行编编辑辑修修改改,并并可可将将修修改改的的结结果果自自动动更新到数据库中。更新到数据库中。使用使用DataGrid控件:控件:(1)“工程工程”部件部件”(2)点击工具箱中点击工具箱中(3)在窗体上画出在窗体上画出DataGrid对象对象返回目录返回目录7.6ADO数据控件数据控件新增绑定控件的应用新增绑定控件的应用新增绑定控件的应用新增绑定控件的应用 例例7.13修修改改例例7.12:在在原原窗窗体体上上增增加加一一个个“浏浏览览”按按钮钮,再再新新增增一一个个FrmBrowse窗窗体体,单单击击“浏浏览览”按按钮钮,可可打打开开多多记录浏览窗口。记录浏览窗口。返回目录返回目录7.6ADO数据控件数据控件新增绑定控件的应用新增绑定控件的应用新增绑定控件的应用新增绑定控件的应用 操作步骤操作步骤(1)在原窗体上增加一个在原窗体上增加一个“浏览浏览”按钮,名称为按钮,名称为Cmd_Browse(2)新增一个窗体新增一个窗体FrmBrowse.frm添加添加adodc控件、控件、DataGrid控件及命令按钮控件及命令按钮(3)增加事件响应代码增加事件响应代码FrmManage窗体上窗体上“浏览浏览”按钮的按钮的Click事件事件FrmBrowse.Show1FrmBrowse窗体上窗体上“返回返回”按钮的按钮的Click事件事件UnloadMe返回目录返回目录第第8章章 小型试题库系统设计案例小型试题库系统设计案例学习目标:学习目标:了解应用项目的设计、分析及开发过程了解应用项目的设计、分析及开发过程教学内容:教学内容:8.1系统的组成及功能简述系统的组成及功能简述 8.2试题库管理程序的设计试题库管理程序的设计 8.3试题答题及评分程序的设计试题答题及评分程序的设计8.4有待完善的问题与思考有待完善的问题与思考8.1系统组成及功能简述系统组成及功能简述系统组成系统组成系统组成系统组成小型试题库系统的组成模块:小型试题库系统的组成模块:教师模块:实现题库管理功能教师模块:实现题库管理功能学生模块:实现答题及自动评分功能学生模块:实现答题及自动评分功能返回目录返回目录8.1系统组成及功能简述系统组成及功能简述系统组成系统组成系统组成系统组成小型试题库系统的组成模块:小型试题库系统的组成模块:教师模块:实现题库管理功能教师模块:实现题库管理功能学生模块:实现答题及自动评分功能学生模块:实现答题及自动评分功能返回目录返回目录8.1系统组成及功能简述系统组成及功能简述教师模块的功能教师模块的功能教师模块的功能教师模块的功能试题库管理程序试题库管理程序( (教师模块教师模块) )的功能:的功能:登录登录(验证用户的合法性验证用户的合法性)题库的管理与维护:记录的新建、修改、删除和定位题库的管理与维护:记录的新建、修改、删除和定位选选题题:从从题题库库中中自自动动选选择择一一定定数数量量的的选选择择题题和和填填空空题题,作为本次学生考试的考试库。作为本次学生考试的考试库。生成学生考盘生成学生考盘返回目录返回目录8.1系统组成及功能简述系统组成及功能简述学生模块的功能学生模块的功能学生模块的功能学生模块的功能 试试题题答答题题及及评评分分程程序序( (学生模块学生模块) )的功能:的功能:随随机机产产生生题题号号,使使各各考考生生的题目顺序不一样的题目顺序不一样登录登录(验证考生的合法性验证考生的合法性)答答题题。中中途途退退出出,可可再再次次进入答题环境。进入答题环境。答答题题结结束束退退出出时时,系系统统可可自自动动进进行行评评分分。评评分分后后,不能再进入答题界面。不能再进入答题界面。窗体切换流程窗体切换流程返回目录返回目录8.1系统组成及功能简述系统组成及功能简述数据库设计数据库设计数据库设计数据库设计 以以第第7章章例例7.11中中建建立立的的试试题题库库TestDb.MDB和和学学生生考试库考试库Test.MDB为基础为基础为为验验证证学学生生身身份份的的合合法法性性以以及及记记录录学学生生的的成成绩绩,需需在在考试库考试库Test.MDB中增加一个考生表中增加一个考生表UserDb,结构:结构:返回目录返回目录8.2试题库管理程序的设计试题库管理程序的设计 试试题题库库管管理理程程序序(教教师师模模块块)由由四四个个窗窗体体和和一一个个模块文件模块文件(xt.bas)组成组成返回目录返回目录8.2试题库管理程序的设计试题库管理程序的设计 1.用户登录窗体用户登录窗体FrmDl(1)窗体设计:窗体设计:新建一个新建一个VB工程,保存为工程,保存为ctk.vbp将窗体将窗体Form1保存为保存为FrmDl.frm部分控件的属性见教材表部分控件的属性见教材表8.2返回目录返回目录8.2试题库管理程序的设计试题库管理程序的设计 (2)编写代码编写代码:在程序的在程序的“通用通用”声明段定义模块级变量声明段定义模块级变量DimcsAsInteger记录用户登录时出错的次数记录用户登录时出错的次数编编写写窗窗体体的的Load事事件件响响应应代代码码:调调用用xt.bas中中的的通通用用过过程程CenterOnSetupForm(功能:将窗口居中安放功能:将窗口居中安放)编编写写Cmgqd按按钮钮(“确确定定”)的的Click事事件件响响应应代代码码:检检查用户名和密码是否正确。如果连错查用户名和密码是否正确。如果连错3次,只能退出次,只能退出编编写写Cmdml按按钮钮(控控件件数数组组按按钮钮)的的Click事事件件响响应应代代码码:根据选择打开根据选择打开题库管理题库管理、选题选题或或制作考盘制作考盘窗体窗体返回目录返回目录8.2试题库管理程序的设计试题库管理程序的设计 2.添加添加自动选题窗体自动选题窗体FrmXt将将例例7.11中中的的FrmSele.frm窗窗体体添添加加到到本本工工程中,并进行重命名另存:程中,并进行重命名另存:添加添加FrmSele窗体:窗体:执执行行“工工程程添添加加文文件件”命命令令,选选择择例例7.11建建立的立的FrmSele.frm文件文件将将FrmSele.frm另存为另存为FrmXt.frm返回目录返回目录8.2试题库管理程序的设计试题库管理程序的设计 3.添加添加题库管理窗体题库管理窗体FrmSele将将例例7.12中中的的FrmManage.frm窗窗体体添添加加到到本工程中,并进行重命名另存:本工程中,并进行重命名另存:添加添加FrmManage.frm窗体:窗体:执执行行“工工程程添添加加文文件件”命命令令,选选择择例例7.12建立的建立的FrmManage.frm文件文件将将FrmManage.frm另存为另存为FrmSele.frm返回目录返回目录8.2试题库管理程序的设计试题库管理程序的设计 4.设计制作考盘窗体设计制作考盘窗体FrmCopy(1)添加窗体:添加窗体:执执行行“工工程程添添加加窗窗体体”命命令令,添添加加一一个个新新窗窗体体,并保存为并保存为FrmCopy.frm在在窗窗体体上上添添加加两两个个命命令令按按钮钮和和一一个个标标签签。标标签签的的属属性设置:性设置:Caption为空,为空,ForeColor为红色。为红色。返回目录返回目录8.2试题库管理程序的设计试题库管理程序的设计 (2)编写代码编写代码:编编写写窗窗体体的的Load事事件件响响应应代代码码,功功能能:出出现现“请请插入学生考盘!插入学生考盘!”的提示的提示编写通用过程编写通用过程CopyDB,功能:复制试题文件功能:复制试题文件编编写写Cmdqd按按钮钮(“确确定定”)的的Click事事件件响响应应代代码码:调调用用CopyDB过过程程,将将当当前前目目录录中中的的test.mdb复复制制到到A盘的根目录中盘的根目录中编编写写Cmdexit按按钮钮(“返返回回”)的的Click事事件件响响应应代代码码:卸载卸载制作考盘窗体制作考盘窗体返回目录返回目录8.2试题库管理程序的设计试题库管理程序的设计 5.添加模块文件添加模块文件xt.bas执执行行“工工程程添添加加模模块块”命命令令,添添加加一一个个模模块块,并并保存为保存为xt.bas在在模模块块代代码码窗窗口口中中定定义义通通用用过过程程,功功能能:将将窗窗口口居居中安放中安放返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计试试题题答答题题及及评评分分程程序序(学学生生模模块块)也也是是由由四四个个窗窗体体和和一一个个模模块块文文件件组组成成(xt.bas)组成。组成。返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计1.考生登录窗体考生登录窗体FrmDl(1)窗体设计:窗体设计:新新建建一一个个VB工工程程,保保存为存为xz.vbp将将窗窗体体Form1保保存存为为FrmDl.frm按右图进行窗体设计按右图进行窗体设计返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计(2)编写代码编写代码:编写窗体的编写窗体的Load事件响应代码:事件响应代码:v通通过过DAO工工作作区区对对象象的的OpenDatabase方方法法打打开开学学生生考考试试库库Test.MDBv调用调用xt.bas中的过程中的过程(将窗口居中安放将窗口居中安放)编编写写Txtcode文文本本框框(“考考核核证证号号”)的的LostFocus事事件件响响应代码:失去焦点时检查准考证号输入是否正确应代码:失去焦点时检查准考证号输入是否正确编编写写Txtname文文本本框框(“姓姓名名”)的的LostFocus事事件件响响应应代代码:失去焦点时检查姓名是否输入码:失去焦点时检查姓名是否输入返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计编编写写Txtzwh文文本本框框(“座座位位号号”)的的LostFocus事事件件响响应应代码:失去焦点时检查座位号是否正确输入代码:失去焦点时检查座位号是否正确输入编编写写cmdml按按钮钮(“正正确确无无误误”)的的Click事事件件响响应应代代码码:检检查查准准考考证证号号、考考生生姓姓名名和和座座位位号号是是否否按按要要求求输输入入。如如果正确,则:果正确,则:v向向UserDb表表中中添添加加一一条条用用户户记记录录。若若该该记记录录已已存存在在,则则给出相应的提示给出相应的提示v显示显示Frmxz(考生答题考生答题)窗体,卸载窗体,卸载Frmdl(考生登录考生登录)窗体窗体返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计2.考生答题窗体考生答题窗体FrmXz(1)添加窗体:添加窗体:执执行行“工工程程添添加加窗窗体体”命命令令,添添加加一一个个新新窗窗体体,并并保保存为存为FrmXz.frm在在窗窗体体上上添添加加一一个个SSTab控控件件:执执行行“工工程程部部件件”命命令,令,“控件控件”选选MicrosoftTabbedDialogControl6.0设置设置SSTab控件:控件:v属性窗口中设置属性窗口中设置Tabs为为2,设置,设置TabsPerRow为为2返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计设置设置SSTab控件:控件:v右击右击SSTab控件,选控件,选“属性属性”命令,命令,设置如下:设置如下:返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计设置设置SSTab控件:控件:v“单单选选题题”选选项项卡卡界界面面设设置置(部部分分控控件件的的属属性性见见教教材材表表8.3):返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计设置设置SSTab控件:控件:v“填填空空题题”选选项项卡卡界界面面设设置置(部部分分控控件件的的属属性性见见教教材材表表8.4):返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计(2)编写代码编写代码:在在“通用通用”声明段定义模块级变量及通用过程声明段定义模块级变量及通用过程xianshi编写窗体的编写窗体的Load事件响应代码事件响应代码编写单击编写单击Option1按钮按钮(选择答案选择答案)的事件响应代码的事件响应代码编写滚动编写滚动Hscroll(选择题目选择题目)的事件响应代码的事件响应代码编写单击滚动条上的编写单击滚动条上的Optti按钮按钮(选题选题)的事件响应代码的事件响应代码编写窗体的编写窗体的Activate(激活激活)事件响应代码事件响应代码编写单击编写单击Cmdjj按钮按钮(“交卷评分交卷评分”)的事件响应代码的事件响应代码编写单击编写单击Cmdjs按钮按钮(“结束结束”)的事件响应代码的事件响应代码返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计3.考生答题未答完提示窗体考生答题未答完提示窗体FrmTs(1)添加窗体:添加窗体:执行执行“工程工程添加窗体添加窗体”命令,命令,添加一个新窗体,并保存为添加一个新窗体,并保存为FrmTs.frm设计窗体设计窗体(2)编写代码编写代码:编写窗体的编写窗体的Load事件响应代码事件响应代码编写单击命令按钮数组的事件编写单击命令按钮数组的事件响应代码响应代码返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计4.阅卷评分窗体阅卷评分窗体FrmTj(1)添加窗体:添加窗体:执行执行“工程工程添加窗体添加窗体”命令,添加一个新窗体,命令,添加一个新窗体,并保存为并保存为FrmTj.frm设计窗体设计窗体返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计(2)编写代码编写代码:在在“通用通用”声明段定义模块级变量声明段定义模块级变量DimsenumAsInteger记录答对的选择题数记录答对的选择题数DimfinumAsInteger记录答对的填空题数记录答对的填空题数编编写写窗窗体体的的Load事事件件响响应应代代码码:判判别别选选择择题题和和填填空空题题的答题是否正确,并给出考生得分的答题是否正确,并给出考生得分编编写写单单击击cmdml按按钮钮(“结结束束考考试试”)的的事事件件响响应应代代码码:将考生成绩记录在考生表中,并释放记录集对象。将考生成绩记录在考生表中,并释放记录集对象。返回目录返回目录8.3试题答题及评分程序的设计试题答题及评分程序的设计5.添加模块文件添加模块文件xt.bas“工程工程添加模块添加模块”,添加一个模块,保存为,添加一个模块,保存为xt.bas在模块代码窗口中定义全局变量及通用过程在模块代码窗口中定义全局变量及通用过程返回目录返回目录8.4有待完善的问题与思考有待完善的问题与思考在在学学生生考考试试库库中中,由由于于“se_ksda”(学学生生答答案案)和和“se_da”(标标准准答答案案)在在同同一一个个数数据据表表中中,考考生生可可以以直直接接打打开开Access数数据据库库得得到到标标准准答答案案。因因而而在在实实际际应应用中,必须避免发生这种情况。用中,必须避免发生这种情况。在在“自自动动选选题题”程程序序代代码码中中,每每一一条条记记录录被被选选中中的的几几率率是是相相同同的的。而而在在实实际际应应用用中中,可可以以给给每每道道题题赋赋予予一一个个权权值值,用用于于表表示示题题目目的的难难易易程程度度,从从题题库库中中选选择择考考题题时时可可以以选选择择不不同同难难度度的的题题目目,以以增增加加选选题题的多样性。的多样性。返回目录返回目录第第9章章 工资系统开发工资系统开发案例案例学习目标:学习目标:u掌握一个实际应用项目的开发过程掌握一个实际应用项目的开发过程u自主开发一个小型的信息管理系统自主开发一个小型的信息管理系统第第9章章 工资系统开发工资系统开发案例案例教学内容:教学内容:9.1系统结构系统结构 9.2设计系统启动窗体设计系统启动窗体 9.3设计用户登录窗体设计用户登录窗体9.4设计系统主窗体设计系统主窗体9.5设计基本数据输入窗体设计基本数据输入窗体9.6设计基本数据修改窗体设计基本数据修改窗体9.7设计专项数据修改窗体设计专项数据修改窗体9.8设计工资组合查询窗体设计工资组合查询窗体9.9设计查询工资明细窗体设计查询工资明细窗体9.10有待完善的问题与思考有待完善的问题与思考9.1系统结构系统结构1.1.系统流程图系统流程图 返回目录返回目录9.1系统结构系统结构2.系统的中的窗体模块系统的中的窗体模块frmStart:显示开发人员的名单及开发日期等显示开发人员的名单及开发日期等frmLogin:用户登录界面用户登录界面frmMain:含系统菜单的主窗体含系统菜单的主窗体frmInBase:输入每个职工的基本数据输入每个职工的基本数据frmInEdit:浏览、修改、删除及查找职工的基本数据浏览、修改、删除及查找职工的基本数据frmInSpecial:修改指定职工的基本工资和和岗位工资修改指定职工的基本工资和和岗位工资frmQryZh:查询指定职工或指定部门的职工工资情况查询指定职工或指定部门的职工工资情况frmQryGr:查询指定职工详细的工资信息查询指定职工详细的工资信息frmPrtGzd:打印指定职工的工资单打印指定职工的工资单frmPrtDepart:打印指定部门的所有职工的工资单打印指定部门的所有职工的工资单返回目录返回目录9.1系统结构系统结构3.系统中的数据库及数据表系统中的数据库及数据表工资库工资库.MDB基本工资表基本工资表返回目录返回目录9.1系统结构系统结构工资库工资库.MDB部门表部门表工资库工资库.MDB密码表密码表返回目录返回目录9.2设计系统启动窗体设计系统启动窗体frmStart1.窗体设计窗体设计返回目录返回目录工程:工程:wagesystem.vbp窗体:窗体:frmStart2.代码要求代码要求无无论论单单击击窗窗体体、标标签签或或按按下下某某个个键键,均均显显示示登登录录窗体窗体frmLogin9.3设计用户登录窗体设计用户登录窗体frmLogin1.窗体设计窗体设计“工程工程添加窗体添加窗体”保存为保存为frmLogin.frm返回目录返回目录9.3设计用户登录窗体设计用户登录窗体frmLogin2.编写编写代码代码(1)在在“通用通用”声明段定义该模块通用的声明段定义该模块通用的sSQL、sirname、sirpwd变量变量(2)主要的事件响应代码:主要的事件响应代码:窗窗体体的的初初始始化化事事件件(Form_ _Initialize):将将密密码码表表中中的的用用户户名名添加到登录窗体的下拉列表框中。添加到登录窗体的下拉列表框中。“确确定定”按按钮钮的的单单击击事事件件(cmdOK_ _Click):在在“密密码码表表”中中查查找是否有对应的记录。有则显示找是否有对应的记录。有则显示frmMain窗体,否则提示窗体,否则提示重新输入密码。重新输入密码。“密密码码”文文本本框框的的按按键键事事件件(txtPassword_ _KeyPress):输输入入密码后,按回车键相当于单击密码后,按回车键相当于单击“确定确定”按钮按钮返回目录返回目录9.4设计系统主窗体设计系统主窗体frmMain1.窗体设计窗体设计“工程工程添加窗体添加窗体”,保存为,保存为frmMain.frm返回目录返回目录9.4设计系统主窗体设计系统主窗体frmMain2.编写编写代码代码:单击菜单命令打开相应的窗体:单击菜单命令打开相应的窗体返回目录返回目录9.5设计基本数据输入窗体设计基本数据输入窗体frmInBase1.窗体设计窗体设计“工程工程添加窗体添加窗体”,保存为,保存为frmInBase.frm返回目录返回目录注注:“增增加加”按按钮钮与与“确确定定”按按钮钮在在同同一一位位置置9.5设计基本数据输入窗体设计基本数据输入窗体frmInBase2.编写编写代码代码:(1)在在“通用通用”声明段定义该模块通用的声明段定义该模块通用的sum变量变量(2)窗窗体体的的Load事事件件:设设置置“工工号号”和和“职职工工姓姓名名”两两个个文文本框本框处于不活动状态处于不活动状态(3)窗窗体体的的Activate事事件件:将将“部部门门表表”中中“部部门门名名称称”字字段的值段的值添加到添加到“系、部、处系、部、处”下拉列表框中下拉列表框中(4)窗体的窗体的KeyPress事件:按回车相当于单击事件:按回车相当于单击“增加增加”按钮按钮(5)“增增加加”按按钮钮的的Click事事件件:使使各各个个用用于于输输入入职职工工信信息息的的控控件件有有效效,以以便便输输入入新新职职工工的的信信息息;同同时时“增增加加”按按钮钮不不可可见,见,“确定确定”按钮可见按钮可见返回目录返回目录9.5设计基本数据输入窗体设计基本数据输入窗体frmInBase(6)“确确定定”按按钮钮的的Click事事件件:将将一一条条新新记记录录添添加加到到“基基本本工工资表资表”中中(7)“取取消消”按按钮钮的的Click事事件件:使使“确确定定”按按钮钮不不可可见见,“增加增加”按钮可见按钮可见(8)“退出退出”按钮的按钮的Click事件:事件:UnloadMe(9)相应控件的相应控件的KeyPress事件:在控件中按回车键,焦点自事件:在控件中按回车键,焦点自动切换到下一个控件动切换到下一个控件(10)“基基本本工工资资”和和“岗岗位位工工资资”文文本本框框的的LostFocus事事件件:在在这两个文本框中输入数值后,可自动算出别的项目,如这两个文本框中输入数值后,可自动算出别的项目,如所得税、应发工资等所得税、应发工资等返回目录返回目录9.6设计基本数据修改窗体设计基本数据修改窗体frmInEdit1.窗体设计窗体设计“工程工程添加窗体添加窗体”,保存为,保存为frmInEdit.frm返回目录返回目录注:两个注:两个Data控件的属性与控件的属性与frmInBase窗体上的窗体上的Data控件相同控件相同9.6设计基本数据修改窗体设计基本数据修改窗体frmInEdit2.编写编写代码代码:(1)在在“通用通用”声明段定义变量和函数:声明段定义变量和函数:定义该模块通用的定义该模块通用的ssql变量变量brsex函数:根据函数:根据“性别性别”字段的值设定字段的值设定“性别性别”按钮的状态按钮的状态Updsex函数:根据函数:根据“性别性别”按钮的状态设定按钮的状态设定“性别性别”字段的值字段的值BrDepart函数:设定数据控件函数:设定数据控件Data1和和Data2的属性的属性(2)窗体的窗体的Initialize事件:事件:将将“部门名称部门名称”字段所有可能的值字段所有可能的值添加到添加到“系、部、处系、部、处”下拉列表框中,并调用函数下拉列表框中,并调用函数brsex来来根据根据“性别性别”字段的值设定字段的值设定“性别性别”单选按钮的状态。单选按钮的状态。(3)“首首条条”、“上上一一条条”、“下下一一条条”及及“末末条条”按按钮钮的的Click事件:事件:移动指针,并调用移动指针,并调用brsex和和BrDepart函数函数返回目录返回目录9.6设计基本数据修改窗体设计基本数据修改窗体frmInEdit(4)“修修改改”按按钮钮的的Click事事件件:按按钮钮标标题题是是“修修改改”,则则等等待待用户用户修修改改数数据据,并并将将标标题题改改为为“确确定定”;按按钮钮标标题题是是“确确定定”,则则将数据更新到数据库中,并将标题改为将数据更新到数据库中,并将标题改为“修改修改”。(5)“删除删除”按钮的按钮的Click事件:事件:提示用户是否想真的删除纪录提示用户是否想真的删除纪录(6)“查找查找”按钮的按钮的Click事件:事件:根据输入的条件查询纪录集根据输入的条件查询纪录集(7)“退出退出”按钮的按钮的Click事件:事件:UnloadMe(8)相应控件的相应控件的KeyPress事件事件:在控件中按回车键,焦点自在控件中按回车键,焦点自动切换到下一个控件动切换到下一个控件(9)“基基本本工工资资”和和“岗岗位位工工资资”文文本本框框的的LostFocus事事件件:在在这两个文本框中输入数值后,可自动算出别的项目,如这两个文本框中输入数值后,可自动算出别的项目,如所得税、应发工资等所得税、应发工资等返回目录返回目录9.7设计专项数据修改窗体设计专项数据修改窗体frmInSpecial1.窗体设计窗体设计“工程工程添加窗体添加窗体”,保存为,保存为frmInSpecial.frm返回目录返回目录Data1:“工工资库资库”中的中的“部门表部门表”MSFlexGrid控控件件grd_Result9.7设计专项数据修改窗体设计专项数据修改窗体frmInSpecial注:设计时注:设计时Frame1和和Frame2位于相同位置位于相同位置返回目录返回目录Frame2Visible=FalseFrame1Visible为为True设计时设计时Frame2覆盖覆盖Frame19.7设计专项数据修改窗体设计专项数据修改窗体frmInSpecial2.编写编写代码代码:(1)在在“通用通用”声明段定义模块级变量声明段定义模块级变量(2)窗体的窗体的Initialize事件:事件:将将“部门名称部门名称”字段所有可能的值字段所有可能的值添加到添加到Frame1的的“所在部门所在部门”下拉列表下拉列表(3)Frame2“确确定定”按按钮钮的的Click事事件件:根根据据用用户户设设定定的的条条件件修修改指定纪录的工资,然后使改指定纪录的工资,然后使Frame2隐藏隐藏Frame1出现出现(4)Frame1“检检索索”按按钮钮的的Click事事件件:根根据据用用户户输输入入的的条条件件查查询询纪纪录录集集,找找到到则则显显示示在在下下面面的的MSFlexGrid控控件件中中;同同时时使使Frame1隐藏隐藏Frame2出现出现(5)“退出退出”按钮的按钮的Click事件:事件:UnloadMe返回目录返回目录9.8设计工资组合查询窗体设计工资组合查询窗体frmQryZh1.窗体设计:窗体设计:“工程工程添加窗体添加窗体”,保存为,保存为frmQryZh.frm返回目录返回目录Data1:“工资库工资库”中中的的“部门表部门表”属性设置:属性设置:DatabaseName-工资工资库库.mdb代码中:代码中:RecordSource=ssql9.8设计工资组合查询窗体设计工资组合查询窗体frmQryZh2.编写编写代码代码:(1)在在“通用通用”声明段定义模块级变量声明段定义模块级变量(2)窗窗体体的的Load事事件件:“教教师师工工号号”和和“教教师师姓姓名名”文文本本框框为为空空(3)窗窗体体的的Initialize事事件件:将将“部部门门名名称称”字字段段可可能能的的值值添添加加到到“所在部门所在部门”下拉列表框中下拉列表框中(4)“检检索索”按按钮钮的的Click事事件件:根根据据用用户户输输入入的的条条件件查查询询纪纪录录集,找到则显示在下面的集,找到则显示在下面的MSFlexGrid控件中控件中(5)“退出退出”按钮的按钮的Click事件:事件:UnloadMe返回目录返回目录9.9设计查询工资明细窗体设计查询工资明细窗体frmQryGr1.窗体设计:窗体设计:“工程工程添加窗体添加窗体”,保存为,保存为frmQryGr.frm返回目录返回目录属性设置:属性设置:DatabaseName-工资工资库库.mdb代码中:代码中:RecordSource=ssql9.9设计查询工资明细窗体设计查询工资明细窗体frmQryGr2.编写编写代码代码:(1)在在“通用通用”声明段定义模块级变量声明段定义模块级变量(2)窗体的窗体的Load事件:事件:选中选中“职工号职工号”单选按钮单选按钮(3)“查询选项查询选项”框架中四个控件的事件响应代码:框架中四个控件的事件响应代码:v单单击击“职职工工号号”或或“姓姓名名”单单选选按按钮钮,对对应应的的两两个个文文本本框框清清空空v单击单击“职工号职工号”或或“姓名姓名”文本框,则使对应的单选按钮选中文本框,则使对应的单选按钮选中v在在“职职工工号号”或或“姓姓名名”文文本本框框中中按按回回车车,等等价价于于单单击击“检检索索”按钮,同时使按钮,同时使“继续继续”按钮成为缺省命令按钮按钮成为缺省命令按钮(4)“检索检索”按钮的按钮的Click事件:事件:根据用户输入的条件查询纪根据用户输入的条件查询纪录集,找到则显示在下面的标签和文本框中录集,找到则显示在下面的标签和文本框中(5)“继续继续”按钮的按钮的Click事件:事件:显示下一个满足条件的纪录显示下一个满足条件的纪录(6)“返回返回”按钮的按钮的Click事件:事件:UnloadMe返回目录返回目录9.10有待完善的问题与思考有待完善的问题与思考为为了了使使读读者者既既能能学学到到知知识识,又又能能提提高高自自己己,教教材材中中只给出其中绝大多数模块的代码及设计过程。只给出其中绝大多数模块的代码及设计过程。在在已已经经介介绍绍的的窗窗体体模模块块中中也也存存在在一一些些问问题题,例例如如,登登录录用用户户的的数数据据存存放放在在“密密码码表表”中中,这这显显示示不不能能起到保密的作用;有些模块的功能也不完善。起到保密的作用;有些模块的功能也不完善。有有兴兴趣趣的的读读者者还还可可进进一一步步扩扩充充系系统统的的功功能能,如如增增加加数据统计及备份功能等。数据统计及备份功能等。返回目录返回目录第第10章章 高级界面设计高级界面设计 学习目标:学习目标:u了解工具栏和状态栏的设计了解工具栏和状态栏的设计u了解多文档界面的创建和设计了解多文档界面的创建和设计u掌握通用对话框的创建和使用掌握通用对话框的创建和使用u了解多媒体控件的应用技术了解多媒体控件的应用技术u了解了解VB应用程序向导的使用应用程序向导的使用第第10章章 高级界面设计高级界面设计教学内容:教学内容:10.1工具栏和状态栏工具栏和状态栏 10.2多文档界面多文档界面 10.3通用对话框通用对话框10.4多媒体控件应用多媒体控件应用 10.5应用程序向导应用程序向导10.1工具栏和状态栏工具栏和状态栏工具栏的设计工具栏的设计工具栏的设计工具栏的设计 创建工具栏一般须遵循以下四个步骤:创建工具栏一般须遵循以下四个步骤:(1)将将ImageList控件和控件和Toolbar控件添加到工具箱中,控件添加到工具箱中,然后添加到窗体上。然后添加到窗体上。(2)为窗体上的为窗体上的ImageList控件添加所需的图像。控件添加所需的图像。(3)建立建立ToolBar控件与控件与ImageList控件之间的关联。控件之间的关联。(4)对对ToolBar上的上的按钮编写按钮编写Click事件响应代码。事件响应代码。返回目录返回目录10.1工具栏和状态栏工具栏和状态栏工具栏的设计工具栏的设计工具栏的设计工具栏的设计1.添加工具栏控件添加工具栏控件(1)“工程工程部件部件”,选选MicrosoftWindowsCommonControls6.0返回目录返回目录10.1工具栏和状态栏工具栏和状态栏工具栏的设计工具栏的设计工具栏的设计工具栏的设计(2)用用在窗体任意位置添加一个在窗体任意位置添加一个ImageList控件,名称默认控件,名称默认为为ImageList1(3)用用在窗体上添加一个在窗体上添加一个Toolbar控件控件(该控件自动位于菜该控件自动位于菜单栏的下面单栏的下面),其名称默认为,其名称默认为Toolbar1。返回目录返回目录10.1工具栏和状态栏工具栏和状态栏工具栏的设计工具栏的设计工具栏的设计工具栏的设计2.为窗体上的为窗体上的ImageList控件添加所需的图像控件添加所需的图像右击窗体上的右击窗体上的ImageList控件,选择控件,选择“属性属性”命令命令“通用通用”选项卡:设置按钮大小选项卡:设置按钮大小“颜色颜色”选项卡:设定按钮的颜色选项卡:设定按钮的颜色“图像图像”选项卡:选择要加入的图像选项卡:选择要加入的图像返回目录返回目录10.1工具栏和状态栏工具栏和状态栏工具栏的设计工具栏的设计工具栏的设计工具栏的设计“图像图像”选项卡:选择要加入的图像选项卡:选择要加入的图像返回目录返回目录10.1工具栏和状态栏工具栏和状态栏工具栏的设计工具栏的设计工具栏的设计工具栏的设计“图像图像”选项卡:定义选项卡:定义“关键字关键字”(在在ToolBar控件中引用的控件中引用的图像标识名图像标识名)返回目录返回目录10.1工具栏和状态栏工具栏和状态栏工具栏的设计工具栏的设计工具栏的设计工具栏的设计3.建立建立ToolBar控件与控件与ImageList控件之间的关联控件之间的关联右击窗体上的右击窗体上的Toolbar控件,选择控件,选择“属性属性”命令命令“通用通用”选项卡:选项卡:“图像列表图像列表”选择选择ImageList1返回目录返回目录10.1工具栏和状态栏工具栏和状态栏工具栏的设计工具栏的设计工具栏的设计工具栏的设计“按钮按钮”选项卡:单击选项卡:单击“插入按钮插入按钮”返回目录返回目录工具栏第一个按钮:工具栏第一个按钮:u“索引索引”:自动变为:自动变为1u“关关 键键 字字 ”: 输输 入入ImageList1控控件件中中定定义义的相应关键字的相应关键字u“图像图像”:输入:输入“1”以此类推插入其他按钮以此类推插入其他按钮10.1工具栏和状态栏工具栏和状态栏工具栏的设计工具栏的设计工具栏的设计工具栏的设计4.响应响应ToolBar控件事件控件事件单击工具栏上的某个按钮,将引发单击工具栏上的某个按钮,将引发ButtonClick事件事件PrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)EndSub根根 据据 按按 钮钮 的的 关关 键键 字字 (Button.Key)或或 者者 图图 像像 值值(Button.Image)可可判判断断单单击击的的是是哪哪个个按按钮钮,然然后后通通过过SelectCase语句进行相应的处理语句进行相应的处理例例,菜菜单单中中有有一一个个“打打开开”菜菜单单命命令令(名名称称为为mOpen),工工具具栏栏上上有有一一个个“打打开开”按按钮钮(关关键键字字为为open,图图像像值值为为1),单单击击它它们们都都执执行行同同样样的的操操作作(执执行行OpenDoc过过程程),相应的代码如下:,相应的代码如下:返回目录返回目录10.1工具栏和状态栏工具栏和状态栏工具栏的设计工具栏的设计工具栏的设计工具栏的设计PrivateSubmOpen_Click()单击单击“打开打开”菜单命令菜单命令OpenDocEndSubPrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)SelectCaseButton.KeyCase“open”或或Case1,表示单击表示单击“打开打开”按钮按钮OpenDocEndSelectEndSub返回目录返回目录“打打开开”按按钮钮的的关关键键字字为为open,图像值为图像值为110.1工具栏和状态栏工具栏和状态栏状态栏的设计状态栏的设计状态栏的设计状态栏的设计1.添加状态栏控件添加状态栏控件(1)“工程工程部件部件”,选选MicrosoftWindowsCommonControls6.0(2)用用在窗体上添加在窗体上添加Statusbar控件控件(通常位于窗体的底部通常位于窗体的底部)(3)设置窗格属性设置窗格属性返回目录返回目录u“插插入入窗窗格格”按按钮钮:用用于于在在状状态栏上插入窗格,最多态栏上插入窗格,最多16个个u“索引索引”:每个窗格的编号。:每个窗格的编号。u“文文本本”:样样式式为为sbrText时时,窗格中显示的文本窗格中显示的文本u“关关键键字字”:用用于于标标识识窗窗格格的的字符串字符串u“样样式式”:设设置置窗窗格格的的显显示示状状态态10.1工具栏和状态栏工具栏和状态栏状态栏的设计状态栏的设计状态栏的设计状态栏的设计例如,例如,返回目录返回目录10.1工具栏和状态栏工具栏和状态栏状态栏的设计状态栏的设计状态栏的设计状态栏的设计2.程序运行时在状态栏上显示信息程序运行时在状态栏上显示信息设置状态栏窗格属性设置状态栏窗格属性状态栏控件名称状态栏控件名称.Panels(索引值索引值)例例:返回目录返回目录PrivateSubText1_Change()StatusBar1.Panels(2).Text=Str(Len(Text1.Text)EndSub10.2多文档界面多文档界面概述概述概述概述1.Windows应用程序的界面样式应用程序的界面样式单文档界面样式单文档界面样式(SDI-SingleDocumentInterface)应用程序的主窗口内每次最多只能打开一个文档应用程序的主窗口内每次最多只能打开一个文档多文档界面样式多文档界面样式(MDI-MultipleDocumentInterface)应用程序的主窗口内可打开多个文档子窗口应用程序的主窗口内可打开多个文档子窗口子窗口只能在父窗口内活动子窗口只能在父窗口内活动类似于资源管理器的界面类似于资源管理器的界面窗口通常包括两部分:左边为一个树型的或者层次型的窗口通常包括两部分:左边为一个树型的或者层次型的视图,右边为内容显示区视图,右边为内容显示区返回目录返回目录10.2多文档界面多文档界面概述概述概述概述2.多文档界面的特性多文档界面的特性设计阶段特性设计阶段特性v子窗体是独立的,它不被限制在父窗体的区域内。即,设子窗体是独立的,它不被限制在父窗体的区域内。即,设计阶段,子窗体、父窗体计阶段,子窗体、父窗体(MDI窗体窗体)和普通窗体没区别和普通窗体没区别运行期间特性运行期间特性v子窗体的移动、改变大小等都被限制在其父窗体中子窗体的移动、改变大小等都被限制在其父窗体中v子窗体最小化时,图标在其父窗体中显示;父窗体最小化子窗体最小化时,图标在其父窗体中显示;父窗体最小化时,其所有子窗体也被最小化。时,其所有子窗体也被最小化。v子窗体最大化时,其标题与父窗体的标题合并,显示在父子窗体最大化时,其标题与父窗体的标题合并,显示在父窗体的标题条中。窗体的标题条中。v父窗体及其子窗体都可以有各自的菜单,子窗体加载时覆父窗体及其子窗体都可以有各自的菜单,子窗体加载时覆盖其父窗体的菜单。盖其父窗体的菜单。返回目录返回目录10.2多文档界面多文档界面创建和设计多文档界面创建和设计多文档界面创建和设计多文档界面创建和设计多文档界面多文档界面的应用程序至少需要两个窗体:一个多文档界面的应用程序至少需要两个窗体:一个MDI窗窗体体(父窗体父窗体)和一个或若干个子窗体。在不同窗体中共用的和一个或若干个子窗体。在不同窗体中共用的过程和变量一般应存放在标准模块中过程和变量一般应存放在标准模块中1.创建创建MDI窗体窗体添加添加MDI窗体:窗体:“工程工程添加添加MDI窗体窗体”,名称默认为,名称默认为MDIForm1设计设计MDI窗体:同普通窗体,如创建菜单栏、工具栏等。窗体:同普通窗体,如创建菜单栏、工具栏等。2.创建和设计创建和设计MDI子窗体子窗体打开一个现存的或添加一个普通窗体打开一个现存的或添加一个普通窗体将窗体的将窗体的MDIChild属性设置为属性设置为True设计子窗体:同普通窗体设计子窗体:同普通窗体返回目录返回目录10.2多文档界面多文档界面创建和设计多文档界面创建和设计多文档界面创建和设计多文档界面创建和设计多文档界面3.通过创建类的方法实现多个子窗体的创建通过创建类的方法实现多个子窗体的创建例如,已创建了一个名为例如,已创建了一个名为Formchild的子窗体,通过的子窗体,通过DimNewDocAsNewFormchild可可创建创建Formchild的一个对象的一个对象多次调用以下过程,则产生多个子窗体多次调用以下过程,则产生多个子窗体(Formchild实例实例)DimNAsIntegerPublicSubFileNewProc()DimNewDocAsNewFormchildN=N+1NewDoc.Caption=DOC&NNewDoc.Show显示子窗体显示子窗体EndSub返回目录返回目录10.2多文档界面多文档界面创建和设计多文档界面创建和设计多文档界面创建和设计多文档界面创建和设计多文档界面例:例:返回目录返回目录10.2多文档界面多文档界面创建和设计多文档界面创建和设计多文档界面创建和设计多文档界面创建和设计多文档界面(1)添加添加MDI窗体窗体“工程工程添加添加MDI窗体窗体”,名称默认为,名称默认为MDIForm1“工程工程工程工程1属性属性”,“启动对象启动对象”设为设为MDIForm1创建菜单栏创建菜单栏返回目录返回目录10.2多文档界面多文档界面创建和设计多文档界面创建和设计多文档界面创建和设计多文档界面创建和设计多文档界面(2)创建创建MDI子窗体子窗体将原将原Form1窗体名称改为窗体名称改为Formchild将窗体的将窗体的MDIChild属性设置为属性设置为True(3)编写编写MDI窗体的程序代码窗体的程序代码返回目录返回目录10.3通用对话框通用对话框概述概述概述概述1.添加通用对话框控件添加通用对话框控件(1)添加到工具箱:添加到工具箱:“工程工程部件部件”(2)添加到窗体添加到窗体用用在窗体任意位置在窗体任意位置添加添加(无需调整大小无需调整大小),名名称默认为称默认为CommonDialog1利用通用对话框控件可创建六种标准对话框:打开、另利用通用对话框控件可创建六种标准对话框:打开、另存为、颜色、字体、打印、帮助存为、颜色、字体、打印、帮助返回目录返回目录10.3通用对话框通用对话框概述概述概述概述2.通用对话框的基本属性和方法通用对话框的基本属性和方法(1)Action功能属性功能属性(只能在程序中赋值只能在程序中赋值):决定打开何种类:决定打开何种类型型的对话框的对话框0None无对话框显示无对话框显示1Open显示显示“打开打开”对话框对话框2SaveAs显示显示“另存为另存为”对话框对话框3Color显示显示“颜色颜色”4Font显示显示“字体字体”对话框对话框5Print显示显示“打印打印”对话框对话框6Help显示显示“帮助帮助”对话框对话框例如,例如,CommonDialog1.Action=3表示打开表示打开“颜色颜色”对话对话框框(2)DialogTiltle属性:用于设置对话框的标题属性:用于设置对话框的标题返回目录返回目录10.3通用对话框通用对话框概述概述概述概述(3)CancelError属性:确定在用户按下属性:确定在用户按下“取消取消”按钮时是否按钮时是否产产生错误信息生错误信息(默认为默认为False)(4)通用对话框的常用方法通用对话框的常用方法ShowOpen显示显示“打开打开”对话框对话框ShowSave显示显示“另存为另存为”对话框对话框ShowColor显示显示“颜色颜色”对话框对话框ShowFont显示显示“字体字体”对话框对话框ShowPrint显示显示“打印打印”对话框对话框ShowHelp显示显示“帮助帮助”对话框对话框例如,例如,CommonDialog1.ShowColor也表示打开也表示打开“颜色颜色”对话对话框框返回目录返回目录10.3通用对话框通用对话框使用使用使用使用1“打开打开”对话框(该对话框仅供一个选取文件的用户界面,对话框(该对话框仅供一个选取文件的用户界面,而打开文件的具体操作还需编写代码)而打开文件的具体操作还需编写代码)常用属性:常用属性:FileName:设置在设置在“文件名称文件名称”文本框中所显示的文件名,文本框中所显示的文件名,或或返回所选取的文件名返回所选取的文件名FileTitle:返回或设置所要打开文件的文件名返回或设置所要打开文件的文件名(不包含路径不包含路径)Filter:确定文件列表框中所显示的文件类型,例如确定文件列表框中所显示的文件类型,例如CommonDialog1.Filter=Documents(*.DOC)|*.DOC|TextFiles(*.TXT)|*.txt|AllFiles|*.*FilterIndex:表示用户在文件类型列表框中选取的文件类型表示用户在文件类型列表框中选取的文件类型对上例设定的对上例设定的Filter,若选定文本文件,则若选定文本文件,则FilterIndex值为值为2InitDir:指定在指定在“打开打开”对话框中显示的默认目录对话框中显示的默认目录返回目录返回目录10.3通用对话框通用对话框使用使用使用使用例例10.1程序要求:程序要求:单击单击“编辑图片编辑图片”按钮,出现按钮,出现“打开打开”对话框;可调用对话框;可调用Windows的画图程序编辑选定的的画图程序编辑选定的BMP位图文件。位图文件。单击单击“浏览图片浏览图片”按钮,可将选定图片显示在图像框中。按钮,可将选定图片显示在图像框中。返回目录返回目录设计窗体设计窗体运行窗体运行窗体10.3通用对话框通用对话框使用使用使用使用程序代码:程序代码:窗体窗体Load事件响应代码:事件响应代码:设置设置CommonDialog1的相关属性的相关属性“编辑图片编辑图片”按钮的按钮的Click事件响应代码:事件响应代码:用用Shell函数调用函数调用Windows的画图程序编辑选定的的画图程序编辑选定的BMP位图文件位图文件“浏览图片浏览图片”按钮的按钮的Click事件响应代码:事件响应代码:利用利用LoadPicture函数把图片放入函数把图片放入图像图像框中框中返回目录返回目录10.3通用对话框通用对话框使用使用使用使用2“另存为另存为”对话框对话框为保存文件提供一个标准用户界面,供选择或键入文为保存文件提供一个标准用户界面,供选择或键入文件路径名。同样,储存文件的操作需要编写代码。件路径名。同样,储存文件的操作需要编写代码。涉及的属性基本上与涉及的属性基本上与“打开打开”对话框相同。此外,还对话框相同。此外,还有一个有一个DefaultExt属性,表示所存文件的缺省扩展名。属性,表示所存文件的缺省扩展名。3“颜色颜色”对话框对话框最重要的是最重要的是Color属性,用于返回或属性,用于返回或设置选定的颜色。例如:设置选定的颜色。例如:Text1.ForeColor=CommonDialog1.Color返回目录返回目录10.3通用对话框通用对话框使用使用使用使用4“字体字体”对话框常用属性:对话框常用属性:Color:返回所选颜色返回所选颜色FontName:返回所选字体的名称返回所选字体的名称Fontsize:返回所选字体的大小返回所选字体的大小FontBold、FontItalic、FontStrikethru、FontUnderline:这些属性的值取这些属性的值取True或或False,用于设定文本是否粗体、斜用于设定文本是否粗体、斜体、加删除线或加下划线体、加删除线或加下划线Min、Max:确定所能选择的字体大小的最小值和最大值确定所能选择的字体大小的最小值和最大值(单单位为位为Point)Flags:设置值及含义见教材表设置值及含义见教材表10.3注:显示注:显示“字体字体”对话框之前必须设置对话框之前必须设置Flags属性属性返回目录返回目录10.3通用对话框通用对话框使用使用使用使用5“打印打印”对话框对话框“打印打印”对话框同样不能处理具体的打印作业,仅提供对话框同样不能处理具体的打印作业,仅提供一个标准打印界面供用户选择打印参数。所选参数存于各一个标准打印界面供用户选择打印参数。所选参数存于各属性中,比较常用的有:属性中,比较常用的有:Copies:复制份数复制份数FromPage:起始页号起始页号Topage:终止页号终止页号返回目录返回目录10.3通用对话框通用对话框使用使用使用使用例例10.2一个简单的文本文件一个简单的文本文件编辑程序编辑程序界面设计:界面设计:返回目录返回目录10.3通用对话框通用对话框使用使用使用使用事件响应代码事件响应代码:返回目录返回目录10.3通用对话框通用对话框使用使用使用使用6“帮助帮助”对话框:从磁盘中提取已制作好的帮助文件对话框:从磁盘中提取已制作好的帮助文件Helpcommand:返回或设置帮助类型返回或设置帮助类型(cdlHelpContents、cdlHelpContext等等)HelpFile:指定指定Help文件的路径及其文件名称文件的路径及其文件名称HelpKey:指定帮助信息的关键字指定帮助信息的关键字,例如,例如CommonDialog1.HelpCommand=vbHelpContentsCommonDialog1.HelpFile=”VB.HLP”CommonDialog1.HelpKey=”CommonDialogControl”CommonDialog1.Action=6HelpContext:返回或设置所需要的帮助主题返回或设置所需要的帮助主题返回目录返回目录10.3通用对话框通用对话框使用使用使用使用例例10.3PrivateSubCommand1_Click()CommonDialog1.HelpCommand=cdlHelpContentsCommonDialog1.HelpFile=C:WindowsHelpMspaint.HLPCommonDialog1.Action=6EndSub返回目录返回目录10.4多媒体控件应用多媒体控件应用1添加添加MMControl控件控件“工程工程部件部件”“控件控件”选项卡中选择选项卡中选择“MicrosoftMultimidiaControl6.0”说明:说明:MMControl控件仅提供了对控件仅提供了对MCI设备的操作接口。而设备能设备的操作接口。而设备能否使用,则决定于该设备及相关驱动程序是否已安装。否使用,则决定于该设备及相关驱动程序是否已安装。MMControl控件支持的部分设备见教材表控件支持的部分设备见教材表10.5MMControl控件控件Command属性使用的命令见教材表属性使用的命令见教材表10.6。例。例如,打开某一如,打开某一MCI设备:设备:MMControl1.Command=”Open”返回目录返回目录10.4多媒体控件应用多媒体控件应用2打开打开MCI设备设备Notify属性:表示在下一命令完成时,是否产生属性:表示在下一命令完成时,是否产生Done事件事件Wait属性:指定属性:指定MMControl控件是否等到下一命令执行完毕,控件是否等到下一命令执行完毕,才将控制权还给应用程序才将控制权还给应用程序Shareable属性:限制或允许其他应用程序或进程使用该设备属性:限制或允许其他应用程序或进程使用该设备DeviceType属性:指定属性:指定MCI设备的类型设备的类型如:如:MMControl1.Notify=FalseMMControl1.Wait=TrueMMControl1.Shareable=falseMMControl1.DeviceType=”CDAudio”返回目录返回目录10.4多媒体控件应用多媒体控件应用3关闭关闭MCI设备设备使用使用Close命令,例如:命令,例如:MMControl1.Command=”close”4使用使用Error和和ErrorMessage属性属性处理由该控件产生的错误,例如:处理由该控件产生的错误,例如:IfForm1.MMControl1.ErrorThenMsgBoxForm1.MMControl1.ErrorMessage.vbCriticaEndIf返回目录返回目录10.4多媒体控件应用多媒体控件应用例例10.4用用MultimediaMCI控件播放控件播放CD注:运行程序时,光注:运行程序时,光驱中应放有驱中应放有CD盘片。盘片。返回目录返回目录播放播放CD暂停播放暂停播放10.4多媒体控件应用多媒体控件应用例例10.5用用MultimediaMCI控件创建控件创建“媒体播放器媒体播放器”返回目录返回目录10.4多媒体控件应用多媒体控件应用返回目录返回目录10.4多媒体控件应用多媒体控件应用例例10.5窗体设计:窗体设计:返回目录返回目录程序代码:程序代码:10.5使用应用程序向导使用应用程序向导“新建工程新建工程”对话框中选定对话框中选定“VB应用程序向导应用程序向导”,然后,然后按向导提示操作按向导提示操作返回目录返回目录注注:通通过过向向导导生生成成的的只只是是应应用用程程序序的的窗窗体体与与框框架架代代码,许多功能还需要用户根据实际情况加以完善。码,许多功能还需要用户根据实际情况加以完善。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号