资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二层,第三层,第四层,第五层,*,*,*,Visual Basic,程序设计与应用案例,第,1,章 走进,Visual Basic,学习目标:,认识Visual Basic 6.0的集成开发环境,理解对象、属性、事件和方法的概念,了解Visual Basic事件驱动的编程特点,了解VB程序的组成,学会使用Visual Basic的帮助系统,第,1,章 走进,Visual Basic,教学内容:,1.1 Visual Basic,编程入门,1.2 VB,的对象与编程特点,1.3 VB,的程序组成与代码窗口,1.4,使用,VB,的帮助系统,1.1 Visual Basic,编程入门,VB程序示例:,模拟彩票开奖器,简易编辑器,返回目录,1.1 Visual Basic,编程入门,集成开发环境,1,.进入,VB,集成环境,返回目录,1.1 Visual Basic,编程入门,集成开发环境,2,.,VB,集成环境中的窗口,属性窗口,窗体设计器,工程资源,管理器,窗体布局窗口,工具箱,返回目录,1.1 Visual Basic,编程入门,创建,VB,程序的步骤,一般步骤,:建立工程设计界面设置对象属性编写代码保存程序运行程序生成可执行文件,例1.1,返回目录,1.1 Visual Basic,编程入门,创建,VB,程序的步骤,1. 建立工程,工程是组成一个应用程序的文件集合,(,.vbp,),,最常用的是标准,EXE,类型的工程。,2. 设计应用程序界面,使用工具箱中的各种控件,在窗体设计器上“画”界面。,返回目录,1.1 Visual Basic编程入门,创建,VB,程序的步骤,3. 设置对象属性,通过属性窗口,通过程序代码,对象名.属性名称 = 属性值,例如,,Label1.Caption = VB程序设计示例,返回目录,1.1 Visual Basic编程入门,创建,VB,程序的步骤,返回目录,对象名称,属性名称,设置值,Label1,Caption,Font,宋体、四号,Command1,Caption,白色窗体,Font,楷体、小四,Command2,Caption,红色文本,Font,楷体、小四,Command3,Caption,退出程序,Font,楷体、小四,1.1 Visual Basic编程入门,创建,VB,程序的步骤,4. 编写程序代码(事件响应代码),对象名称,事件,响应,Command1,单击,(Click),将窗体的背景设置为白色,Command2,单击,(Click),将窗体中文本的颜色设置为红色,Command3,单击,(Click),结束程序运行,Form,装入,(Load),显示“,VB,程序设计示例”,返回目录,双击,1.1 Visual Basic编程入门,创建,VB,程序的步骤,返回目录,1.1 Visual Basic编程入门,创建,VB,程序的步骤,5. 保存程序,返回目录,6. 运行程序,“运行启动,”,或,7. 生成可执行文件,生成能够脱离VB集成环境运行的exe文件,1.1 Visual Basic编程入门,创建,VB,程序的步骤,返回目录,上述步骤中最主要的是:,设计应用程序的界面,设置界面对象的属性,编写程序代码,1.2 VB的对象与编程特点,VB,的对象,VB编程的核心是针对对象所响应的事件编写代码。,1. 对象和类,对象是代码和数据的组合,可作为一个整体来处理。,VB中的对象是由类创建的,对象是类的一个实例。,2. 对象的属性,属性是描述对象特征的数据,属性值的设置或修改可通过属性窗口和程序代码实现,对象的属性有两类:读写属性、只读属性,返回目录,1.2 VB的对象与编程特点,VB,的对象,3. 对象的事件与事件过程,事件是预先设置好的、能够被对象识别和响应的动作,事件过程:对象对事件响应的程序代码,事件过程的一般格式:,Private Sub对象名称_事件(),事件过程代码,End Sub,例如:,Private Sub Command1_Click(),Form1.BackColor = vbWhite,End Sub,返回目录,1.2 VB的对象与编程特点,VB,的对象,4. 对象的方法,方法告诉对象应做的事情,即对象的动作。,调用格式:,对象名称.方法名称,例如:,Private Sub Form_Click(),Debug.Print 你好! ,End Sub,返回目录,单击窗体,1.2 VB的对象与编程特点,VB,的编程特点,面向对象的可视化的程序设计方法,事件驱动的程序设计机制,简单易学的程序设计语言,交互式的集成开发环境,返回目录,1.3 VB的程序组成与代码窗口,VB程序组成,一个VB应用程序(工程)可由多种类型的文件模块组成的,最常用的是窗体模块和标准模块。,与工程有关的全部文件和对象的清单,以及所设置的环境选项信息都保存在工程文件中(.vbp)。,1. 窗体模块 界面和代码,返回目录,1.3 VB的程序组成与代码窗口,VB程序组成,2. 标准模块,没有窗体,扩展名为.bas,通常声明其他模块共同使用的全局变量或通用过程,返回目录,1.3 VB的程序组成与代码窗口,代码窗口,返回目录,过程查看,全模块查看,1.3 VB的程序组成与代码窗口,选项设置,“工具选项”,返回目录,1.4 使用VB的帮助系统,注:系统中需安装帮助文档MSDN,1. 通过“帮助”菜单,返回目录,1.4 使用VB的帮助系统,2. 通过F1键,返回目录,F1,第,2,章,Visual Basic语言基础,学习目标:,掌握VB的编码规则,了解VB的数据类型,掌握变量、常量的声明和使用,掌握运算符和表达式的使用,掌握VB数据的输入与输出,了解VB的内部函数,第,2,章,Visual Basic语言基础,教学内容:,2.1 VB,编码,规则,2.2 VB,的数据类型,2.3,变量与常量,2.4,运算符与表达式,2.5,数据的输入输出,2.6,VB,的常用内部函数,2.1 VB,编码规则,例2.1,单击窗体可输出内容交换后的a变量和b变量的值。,Private Sub Form_Click(),Dim a As Integer, b As Integer, intTemp As Integer,声明变量,a = 10,变量赋值,b = 20,Print a,变量和,b,变量内容交换前:,; a; b,变量交换,intTemp = a,a = b,b = intTemp,Print a变量和b变量内容交换后:; a; b,End Sub,返回目录,2.1 VB,编码规则,语句书写规则,语句输入时不区分大小写,一条语句通常写在一行中。,一行中若输入多条语句,需用“:”分隔。例如,,intTemp = a,:,a = b,:,b = intTemp,长语句可通过续行符“ _”(空格后加下划线)分行。,例如,,Print a,变量和,b,变量内容交换前:,; a; b,可分成以下两行输入:,Print a,变量和,b,变量内容交换前:,;,_,a; b,单引号后面的内容为注释,可放在一行语句的最后,或单独占据一行。,数值前加上前缀,&H和&0,分别表示十六进制和八进制数。,返回目录,2.1 VB,编码规则,标识符命名规则,标识符,:变量、常量、类型、过程、函数、以及其它对象的名字。,命名规则,:,由字母、汉字、数字或下划线组成,第一个字符必须是字母或汉字。,长度不超过255个字符。其中,窗体、控件和模块的标识符长度不能超过40个字符。,不要与,VB,中的关键字同名,最好能 “见名知义”,返回目录,2.1 VB,编码规则,赋值语句,语法格式:,Let,变量名=表达式,作用:变量赋值或属性设置。例如:,Pi = 3.14159,strTemp=“Hello!”,Label1.Caption = “VB,程序设计示例,”,Form1.BackColor = vbWhite,说明:,只有当表达式的类型与变量的数据类型兼容时,该表达式的值才可以赋给相应的变量或属性。,不管表达式是什么类型,都可以赋给,Variant,(变体类型)变量。,返回目录,2.2 VB,的数据类型,基本数据类型,VB,提供的基本数据类型见教材表,2.1,。,1.,数值型,字节型(Byte):存,放,无符号整数,取值范围0 255,整型:,Integer,和,Long,,存放整数,浮点型(实型):单精度型,(Single),和双精度型,(Double),存放带小数的数值,例:,单精度数 -6.25E8表示 -6.2510,8,双精度数,7.878D-6,表示,7.878,10,6,货币型,(Currency),:一种精确的定点类型数据,支持,15位整数和4,位小数,返回目录,2.2 VB,的数据类型,基本数据类型,2.,字符串型(,String),VB,字符串是由,双引号,括起来的一串字符,不含任何字符(长度为,0)的字符串称为空串,String型变量,有变长和定长之分,例:,Dim NameA As String,声明变长字符串变量,Dim NameB As String,* 20,声明定长字符串变量,3.,逻辑型,(Boolean),逻辑型,数据的取值:,True,或,False,,例:,Dim BoolR As Boolean,BoolR = 68,Print BoolR,输出,:,False,返回目录,2.2 VB,的数据类型,基本数据类型,4.,日期型(,Date),日期型变量可存放日期和时间,日期型常数的表现形式:,#,mm/dd/yyyy hh:mm:ss,#,mm/dd/yyyy hh:mm:ss,日期型数据的输出格式取决于系统的区域设置,例,:,Dim d As Date,声明日期型变量D,D = # 10/5/2002 #,日期型变量赋值,Print D,输出日期型变量的值,返回目录,2.2 VB,的数据类型,基本数据类型,5.,对象型,(Object),声明,对象,变量后,用,Set,语句指定实际引用的对象,例,窗体上有命令按钮Command1,执行如下语句,,可将该按钮的显示文字改为OK,Dim a,As Object,声明,a,为对象型变量,Set,a = Command1,指定,a,引用,Command1,命令按钮,a.Caption = “OK”,与,Command1,.Caption等价,6.,变体型,(Variant),变体,:在程序运行期间可存放不同类型的数据。,例:,Dim X,X缺省为 Variant类型,X = 17,X被赋予字符串 17,X = X 2,X被赋予数值15,X = A & X,X被赋予字符串 A15,返回目录,2.2 VB,的数据类型,自定义数据类型,在模块的“通用”声明段声明,Private | Public Type 数据类型名,元素名1 As 类型名,元素名2 As 类型名,End Type,Public:声明的类型在工程中所有模块的任何过程中可用,Private,:声明的类型只能在当前模块中使用,声明自定义数据类型后,可使用该类型。例,Dim studTemp,As student,声明为student,类型变量,访问自定义数据类型的变量:,变量名.成员名,,如:,studTemp.id=“030005”,studTemp.xm=“李斌”,返回目录,2.3,变量与常量,变量,1.,变量的声明,通过类型符号:直接在变量名后面加上类型符号,S,&,= 10,声明S为长整型变量,使用声明语句,Dim 变量名 As 类型,Dim 变量名 类型符,例如,下面两条声明语句的效果相同:,Dim a As Integer , b As Long , c As Single , d As Double,Dim a,%, b,&, c,!,d,#,若省略类型说明,被声明的变量为,Variant,型。例如:,Dim a,b,a和b均为变体型变量,Dim S1,S2 As String*6,S1为变体型变量,S2为定长字符串,返回目录,见表2.2,2.3,变量与常量,变量,2.,变量的隐式及显式声明,不声明就用的变量被隐式声明为,Variant,,初值,Empty,强制进行变量的显式声明,“通用”声明段中加上语句:,Option Explicit,“工具选项”“编辑器”,返回目录,对新模块起作用,遇到未经声明的变量包括输错的变量,系统会发出错误警告,2.3,变量与常量,变量,3.,变量的有效范围,(1),局部变量:在一个,过程内部声明,的变量,有效范围限于声明它的过程,自动变量:,用Dim声明,,变量值只在过程执行期间才存在,静态变量:用Static声明,,变量值在程序运行期间一直存在,例2.2 统计单击窗体的次数,Private Sub Form_Click(),Static,intCount As Integer,intCount = intCount+1,Print intCount,End Sub,返回目录,单击窗体,3,次,将,Static,改为,Dim,2.3,变量与常量,变量,(2),模块变量:,“通用”声明段用,Private或Dim,语句声明,可被该模块中的任何过程所访问,例2.3,Private a As Integer, b As Integer,声明模块变量,Private Sub Command1_Click(),Dim intTemp As Integer,声明局部变量,a = 10 : b = 20,Print a和b内容交换前:; a; b,intTemp = a: a = b: b = intTemp,变量交换,End Sub,Private Sub Command2_Click(),Print : Print a和b内容交换后:; a; b,End Sub,返回目录,2.3,变量与常量,变量,(3),全局变量:,标准模块的声明段用,Public或Global,声明,有效范围是整个工程的所有模块,说明:,标准模块:只含有程序代码的文件,扩展名为,.bas,添加标准模块:“工程添加模块”,如果在窗体模块的“通用”,返回目录,声明段用Public声明变量,其它模块可通过如下方式引用该变量:,窗体模块名.变量名,2.3,变量与常量,常量,1.,内部常量,由应用程序和控件提供。例如:,Form1.BackColor =,vbBlue,vbBlue是表示蓝色的内部常量,查看系统预定义常量:“视图,对象浏览器”,返回目录,2.3,变量与常量,常量,2.,符号常量(自定义常量),命名:遵循标识符命名的规则,声明格式:,Public|Private Const 常量名As 类型 = 表达式,例:,Const conMax As Integer = 9,声明,Integer,型常量,Const conDate= #10/5/2002#,声明,Date,型常量,Const CodeName = ASCII,声明,String,型常量,有效范围:局部常量、模块常量、全局常量,声明常量的表达式中不能出现函数调用和循环引用,例:错误的常量声明,Const conS =,Sqr(10),Const,conA = conB,+10,conB = conA,+1,返回目录,2.4,运算符与表达式,运算符,1.,算术运算符,返回目录,优先级,运算,运算符,举例,结果,高,低,乘方,2 3,8,取负,-,- 2 3,- 8,乘、除,* /,5 * 3 / 2,7.5,整除,5 * 3 2,7,求余,Mod,5 * 3 Mod 2,1,加、减,+ -,10 - 3 + (-2),5,2.4,运算符与表达式,运算符,2.,字符串运算符,运算符:,&,和,+,例:,VB = “Visual ” + “Basic”,连接为字符串“,Visual Basic,”,label1.Caption = 第 & Str(N) & 条记录,Str,为数值型转字符型函数。若,N,为,1,,标签上显示“第,1,条记录”,说明:,使用,+,号,,要求连接的两个表达式均为字符串型,使用,&,号,,连接的两个表达式可以为任何类型,但结果为字符串型,,,如,“,当前日期,”,&,#10/8/2002#,返回目录,2.4,运算符与表达式,运算符,3.,关系运算符,返回目录,运 算,运算符,举 例,结 果,等于,=,Hello = hello,False,不等于,Hello hello,True,大于,Hello hello,False,大于等于,=,45 + 10 = 55,True,小于,a ab,True,小于等于,=,45 + 10 5),结果为True,And:两个表达式均为True时,结果为True,例如,(4 5) And (8 7),结果为False,Or:两个表达式均为False时,结果为False,例如,(4 5) Or (8 7),结果为True,返回目录,X,Y,Not Y,X And Y,X Or Y,False,False,True,False,False,False,True,False,False,True,True,False,True,False,True,True,True,False,True,True,2.4,运算符与表达式,表达式,表达式:用运算符和圆括号将常量、变量、函数和常数连接起来组成的有意义的式子。,如,,数值表达式,Cos (180 * Pi / 180 ) * 100,逻辑表达式,( N = 0 ) And ( N Mod 2 0 ),运算优先顺序(从高到低):,函数算术运算(乘方取负乘/除整除求余加/减),字符串运算符关系运算符逻辑运算符(NotAndOr),用括号可以改变运算顺序,乘方和负号相邻时,取负优先。,例如:2 -2 的结果是0.25,相当于2(-2),返回目录,2.5,数据的输入输出,数据输出,1. Print方法,功能:在窗体/立即窗口/图片框/打印机上输出信息,格式:,对象. Print 输出项 , | ; ,对象,缺省为当前窗体,,输出项,缺省则打印一空白行,输出项之间可用分号或逗号分隔:使用分号,其后的输出项紧接着前一个输出项输出;使用逗号,其后的输出项在下一个输出区输出。,两个输出区默认相隔14列,各输出项表示要打印的表达式,组成,Spc(n) | Tab(n) 表达式,Spc(n),:指定在输出之前插入,n,个空白字符,Tab(n),:指定在第,n,列上输出,返回目录,2.5,数据的输入输出,数据输出,例,,Private Sub Form_Click(),Print,Print Tab(15); *,Print Tab(13); *; Spc(1); *; Spc(1); *“,End Sub,返回目录,2.5,数据的输入输出,数据输出,2.,格式输出函数,功能:使数值、日期或字符串按指定的格式输出,格式:,Format(expression , format),expression需要格式化输出的表达式,format ,输出的格式模式,返回目录,2.5,数据的输入输出,数据输出,3. MsgBox函数,功能:创建预定义的消息对话框,常用格式:,MsgBox(prompt, buttons , title),prompt字符串,指定消息框中显示的信息,Buttons指定消息框中显示的按钮数目及形式、图标样式等,,缺省值为vbOKOnly,常用的设置值见教材表,2.6,Title指定消息框的标题,缺省值为工程名,用户所选按钮的返回值(见教材表,2.7),可作为继续执行程序的依据。,返回目录,2.5,数据的输入输出,数据输出,例,2.4,Private Sub Form_Click(),prompt = ,真的新增该条记录吗,answer =,MsgBox(prompt, vbOKCancel, Add Record),If answer =,vbOK,Then Debug.Print ,您选择的是“确定”按钮,If answer =,vbCancel,Then Debug.Print ,您选择的是“取消”按钮,End Sub,返回目录,2.5,数据的输入输出,数据输出,说明:,如果消息框中显示的信息过长,可使用回车符Chr(13) 和换行符Chr(10),如果不需要返回值,可使用没有括号的MsgBox语句:,MsgBox prompt, buttons , title,例, ,Msg =,非法的数据输入,! & Chr(13) & Chr(10) & ,请重新输入,Title = ,出错提示,MsgBox,Msg, vbCritical, Title, ,返回目录,2.5,数据的输入输出,数据输入,功能:生成输入对话框,常用格式:,InputBox(prompt, title , default , xpos , ypos),prompt字符串,指定输入框中显示的信息,Title指定输入框的标题,缺省值为工程名,Default,字符串,指定文本框中的初始内容,缺省为空。,xpos和ypos数值表达式,成对出现或者成对缺省,,指定输入框左上角相对于屏幕的位置。,InputBox,函数一次只能输入一个值,返回目录,2.5,数据的输入输出,数据输入,例2.5,Private Sub Form_Click(),Dim Username,Username =,InputBox(,输入姓名后单击,确定, ,输入,),Print Username,End Sub,返回目录,2.6,常用内部函数,数学函数,常用数学函数见教材表,2.8,几点说明:,由基本函数可导出所需的数学函数,例如,Log(X)/Log(N)可求出以N为底的对数,对,Rnd(N),,,N,的值决定了,Rnd,生成随机数的方式,N0,或者缺省:产生序列中的下一个随机数,N=0,:返回最近生成的随机数,返回目录,例如:随机产生,1-selenum,之间的数,Randomize (Timer),Selenum = 7,Rn = Int(Selenum) * Rnd + 1),调用Rnd之前,使用Randomize语句可产生不相同的随机数数列,2.6,常用内部函数,字符串函数,常用字符串函数见教材表,2.9,几点说明:,表,2.9,只对常用的字符串函数进行了简单的说明,使用Str函数将数字转成字符串时,字符串的首位,一定是空格或是正负号。例如,,S1 = Str(67),返回,67,S2 = Str(-67.5),返回 -67.5,使用,Val,函数时,如果遇到不能识别为数字的字符,,则停止转换。例如,,Val(“24 and 57”),返回24,Val(not 57),返回0,返回目录,2.6 常用内部函数,日期函数,常用的日期函数见下表。其中,D表示日期类型表达式。,返回目录,函数名,功能简述,示例,Date/Time,返回系统日期或时间,Date,返回系统当前日期,Now,返回系统日期和时间,略,Year/ Month/Day (D),返回年、月、日,Year(Now),返回2003,WeekDay(D),返回星期几,WeekDay(Now),返回3,Hour(time),返回小时数,Hour(Time),返回21,上述示例的当前日期时间是2003年3月18号、星期三、晚上9点10分。,2.6 常用内部函数,类型转换函数,作用:,强制将一个表达式转换成某种特定数据类型,返回目录,函数名,返回类型,函数名,返回类型,CBool(X),Boolean,CInt(X),Integer,CDate(X),Date,CLng(X),Long,CCur(X),Currency,CSng(X),Single,第,3,章,控制语句与程序调试,学习目标:,掌握If 条件语句和Select Case选择语句,掌握ForNext和DoLoop循环语句,掌握两重循环,了解多重循环,了解Exit、End和Goto语句,掌握程序的简单调试方法,第,3,章,控制语句与程序调试,教学内容:,3.1,选择结构与相关语句,3.2,循环语句,3.3,其它语句,3.4,程序调试,3.1,选择结构,选择结构:当设定条件成立时执行某些语句,条件不成立时则跳过这些语句或执行其它的语句。,选择结构中要使用选择语句,有两路分支和多路分支两种情况 ,对应的选择语句有If语句(两路出口)和Select Case语句(多路出口)。,返回目录,3.1,选择结构,If,条件语句,1.,If Then ,其中,,是一个条件表达式或逻辑表达式,例如,,If Data=90 Then Print “,优秀,”,例3.1,输入一个数,如果是,3,的,倍数则通过消息框输出。,Private Sub Form_Click(),Dim Data As Integer,Data = InputBox(,请输入一个值:,),If,Data Mod 3 = 0,Then MsgBox Data,End Sub,返回目录,Data是3的倍数,Data=90?,输出“优秀”,Yes,No,Data=90?,输出“优秀”,Yes,No,输出“合格”,输出“计算完毕”,3.1,选择结构,If,条件语句,2.,If Then Else ,例如,,Dim Data As Integer,Data = InputBox(“,请输入成绩:,),If,Data = 90,Then,Print “,优秀,”,Else,Print “,合格,”,Print ,计算完毕,上例的If 语句可以改写为:,If Data 90 Then Print 合格 Else Print 优秀,返回目录,3.1 选择结构,If条件语句,3. 块状If语句,返回目录,If Then,End If,例3.2,If Then,Else,End If,A = InputBox(“A,值,”) : B = InputBox(B,值,),Print A, B,If A B Then,T = A : A = B : B = T,End If,Print A, B,3.1 选择结构,If条件语句,4. If,语句嵌套,If,语句嵌套使用可形成多分支的条件语句结构,If, Then,Else,If, Then,Else,End If,返回目录,说明:,ElseIf,之间不要加空格。,Else,和位于其上方的最近的,If,配对,3.1 选择结构,If条件语句,例,3.3,Weight = InputBox(,输入西瓜重量:, ,计算西瓜款,),If Weight 4 Then,Price = 1,ElseIf Weight = 7 Then,Price = 1.3,Else,Price = 1.1,End If,Money = Price * Weight,MsgBox “,西瓜重,” & Weight & “,公斤,单价,” & _,Price & ,元,应收瓜款, & Money & _,元, , ,计算西瓜款,返回目录,4公斤以下:1.00元/公斤,4至7公斤: 1.3元/公斤,超过7公斤: 1.1元/公斤,If Weight = 4 And Price 7 Then Price = 1.1,3.1 选择结构,If条件语句,例,3.4,Char = InputBox(,输入一个字符, ,测试字符值,),If Char = 0 And Char = A And Char = a And Char = z Then,MsgBox ,输入的字符是小写字母,Else,MsgBox ,输入的字符是其它符号,End If,返回目录,判断输入的是大写字母、小写字母、数字还是其它符号,3.1 选择结构,If条件语句,例,3.5,Private Sub Command1_Click(),单击,“正确无误”按钮,If Len(TxtCode.Text) 8 Then,LblWarn.Caption = ,考核证号必须输入,长度为,8,位,TxtCode.SetFocus,ElseIf Len(TxtName.Text) = 0 Then,LblWarn.Caption = ,考生姓名必须输入,TxtName.SetFocus,ElseIf Len(TxtSeat.Text) = 0 Then,LblWarn.Caption = ,座位号必须输入,TxtSeat.SetFocus,Else,LblWarn.Caption = ,Debug.Print TxtCode.Text,Debug.Print TxtName.Text,Debug.Print TxtSeat.Text,End If,End Sub,返回目录,3.1 选择结构,Select Case,选择语句,语法格式:,Select Case ,Case ,Case ,Case Else,End Select,功能:根据测试表达式的值,决定程序的流向。,返回目录,值的类型是数值型、字符串型、日期型等,一旦与某个Case后的值相等,则执行这个Case中的,完成后执行End Select后的语句。,如果所有的Case后的都不与项匹配,则执行Case Else后的。,3.1 选择结构,Select Case,选择语句,例3.6 学生成绩分等,Data = InputBox(,请输入一个成绩, ,成绩分等,),Select Case Int(Data / 10),Case 10,MsgBox ,满分, , ,成绩分等,Case 9,MsgBox ,优秀, , ,成绩分等,Case 8,MsgBox ,良好, , ,成绩分等,Case 7,MsgBox ,一般, , ,成绩分等,Case 6,MsgBox ,合格, , ,成绩分等,Case Else,MsgBox ,不合格, , ,成绩分等,End Select,返回目录,单,击,窗,体,确,定,3.1 选择结构,Select Case,选择语句,例3.7 测试输入的字符,Char = InputBox(,请输入一个字符, ,测试,),Select Case Char,Case 0 To 9,MsgBox ,字符是数字, , ,测试,Case a To z,MsgBox ,字符是小写字母, , ,测试,Case A To Z,MsgBox ,字符是大写字母, , ,测试,Case Else,MsgBox ,字符是其它符号, , ,测试,End Select,关于,Select Case,语句的一些说明见教材,返回目录,确,定,单,击,窗,体,3.2,循环语句,程序的另一种结构是循环结构,循环结构作用是重复执行一段程序,循环是有条件的、次数是有限的,VB的循环语句:ForNext、Do WhileLoop,For EachNext、WhileWend,应用最多的:ForNext与Do WhileLoop,返回目录,3.2,循环语句,ForNext,循环,ForNext循环一般应用于循环次数已知的场合,For = 初值 To 终值 Step 步长,语句块(循环体),Next ,循环变量,工作原理,返回目录,循环变量=初值,循环变量超出范围?,循环体,循环变量增加一个步长,No,Yes,Step缺省为 1,3.2,循环语句,ForNext,循环,例,3.8,求,1+3+5+7+,+99,Private Sub Form_Click(),Dim Sum As Integer, I As Integer,Sum = 0 ,保存累加和,先清零,For I = 1 To 99 Step 2,Sum = Sum + I,Next I,MsgBox 1+3+5+,+99= & Sum, , ,求和,End Sub,返回目录,本例的特点是数据项之间相差2,,即Step的值为2,思考:,例中当输出对话框出现时,,I,的值是多少?,如果省略,Step 2,,,程序的结果如何?,For,语句能不能改写成,For I=99 To 1 Step -2,?,3.2,循环语句,ForNext,循环,例,3.9,求平均成绩,Const,N = 40,学生人数,Private Sub Form_Click(),Dim Sum As Integer, I As Integer,Dim Data As Integer, Average As Single,Sum = 0,存放累加值的变量清零,For I,=,1 To N,循环,40,次,步长值为,1,省略,Data = InputBox(,输入第, &,I,& ,位同学的成绩, ,求平均分,),Sum = Sum + Data,Next I,Average =,Sum / N,MsgBox ,全班, &,N,& ,名学生的平均分为, & Average, , ,求平均分,End Sub,返回目录,确,定,本例的循环变量 I 控制人数,3.2,循环语句,ForNext,循环,例3.11 求斐波那契级数的前20项,Private Sub Form_Click(),Dim A, B, I, T As Integer,A = 1 : B = 1,生成级数第一、二项,Print A; B;,For I =,3 To 20,T = A + B,产生级数新的一项,A = B,让,B,成为下一组的,A,B = T,原来,A+B,的值成为下一组的,B,Print B;,If I Mod 6 = 0 Then Print,Next I,End Sub,返回目录,斐波那契级数:,第一、二项为,1,第三项开始,每一项,的值是前两项值之和,每,6,个数一行,3.2,循环语句,DoLoop,循环,1.,当型循环,返回目录,Do While ,循环体,Loop,Do,循环体,Loop While ,条件表达式,成立?,循环体,No,Yes,条件表达式,成立?,循环体,No,Yes,先判断后执行,先执行后判断,特点:条件表达式,成立执行,循环体内容,3.2,循环语句,DoLoop,循环,例3.12 计算平均分,Private Sub Form_Click(),Dim Data As Integer, Sum As Integer, N As Integer,Dim Average As Single,Sum = 0 : N = 0,Data = InputBox(,输入第, & N + 1 & ,个同学的成绩, ,求平均分,),Do While Data -1,-1表示结束输入,Sum = Sum + Data,N = N + 1,Data = InputBox(,输入第, & N + 1 & ,个同学的成绩, ,求平均分,),Loop,Average = Sum / N,MsgBox N & ,位同学的平均分为, & Average, , ,求平均分,End Sub,返回目录,3.2,循环语句,DoLoop,循环,例3.13 Sum=1+2+3+,+N,求,Sum,不超过,10000,的最大整数值和数据项数,N,Private Sub Form_Click(),Dim Sum, N As Integer,N = 0,开始时项数为,0,Sum = 0,保存累加值的变量,Sum,清零,Do While Sum = 10000,N = N + 1,Sum = Sum + N,Loop,Sum = Sum - N,N = N - 1,Print Sum=; Sum, N=; N,End Sub,返回目录,当Sum的值超出10000时循环才终止。因此Sum值要减去多加的一个N;而在循环过程中,N也被多加了一个1,需要减去。,3.2,循环语句,DoLoop,循环,2.,直到型循环,返回目录,Do Until ,循环体,Loop,Do,循环体,Loop Until ,特点:条件表达式,不成立执行,循环体内容,先判断后执行,条件表达式,成立?,循环体,No,Yes,先执行后判断,条件表达式,成立?,循环体,No,Yes,3.2,循环语句,DoLoop,循环,例,3.14,计算平均分(要求同,例3.12,),Private Sub Form_Click(),Dim Data As Integer, Sum As Integer, N As Integer,Sum = 0 : N = 0,Data = InputBox(,输入成绩, ,计算总分,),Do Until,Data = -1,Sum = Sum + Data,N = N + 1,Data = InputBox(,输入数据, ,计算总分,),Loop,Print ,全班平均分为,:; Sum / N,End Sub,返回目录,Do While,Data -1,Sum = Sum + Data,N = N + 1,Data = InputBox(,输入数据, ,计算总分,),Loop,3.2,循环语句,两重循环,两重循环,:在一个循环的循环体中还包含另一个循环,例3.15 在窗体上显示一个几何图形,Private Sub Form_Click(),Dim I, J As Integer,I,、,J,为循环变量,For I = 1 To 8, I,控制行数(8行),Print Tab(10 - I);,定每行,*,的起始位,For J = 1 To I, J,控制每行输出I个,*,Print *;,Next J,Print,换行,Next I,End Sub,返回目录,注意:两重循环不能形成交叉,3.2,循环语句,两重循环,例3.16,输出乘法口诀表,Private Sub Form_Click(),Dim I As Integer, J As Integer, M As Integer,For I = 1 To 9,For J = 1 To I,M = I * J,Print J ,Next J,Print,打印换行,Next I,End Sub,返回目录,3.2,循环语句,两重循环,例3.17 计算,Private Sub Form_Click(),Dim I As Integer, J As Integer,Dim F As Long,阶乘值用长整型保存,Dim e As Double,For I = 0 To 10,F = 1,每个阶乘值先置,1,以便累乘,For J = 1 To I,F = F * J,Next J,e = e + 1 / F,Next I,Print e=; e,End Sub,返回目录,本循环计算F= I!,3.2,循环语句,多重循环,多重循环,:循环次数在两重以上的循环结构,例3.19 计算,将,1,角钱兑换成零钱有多少种方案,Private Sub Form_Click(),Dim I, J, K, S As Integer,S = 0,统计兑换,1,角钱的方案数,For I = 0 To 10,1,分钱个数,For J = 0 To 10 Step 2,2,分钱个数,For K = 0 To 10 Step 5,5,分钱个数,If I + J + K = 10 Then S = S + 1,Next K,Next J,Next I,MsgBox 1,角钱兑换成零钱的方案有, & S & ,种, , ,兑换零钱,End Sub,返回目录,1角钱以下的硬币有1分、2分和5分种,1角钱全换成1分需10个,1角钱全换成2分需5个,1角钱全换成5分需2个,3.3,其他语句,Exit与End,1. Exit,语句,Exit Do,:跳出DoLoop循环,Exit For,:跳出ForNext循环,例,3.20,判断一个正整数是否为素数,(,质数,),N = InputBox(,请输入一个正整数, ,验证素数,),For I = 2 To N - 1,If N Mod I = 0 Then,Exit For,End If,Next I,If I = N Then,MsgBox N & ,是素数, , ,验证素数,Else,MsgBox N & ,不是素数, , ,验证素数,End If,返回目录,素数,:一个正整数N除了能被1和自身所整除外,不能被其它任何数所整除,。,3.3,其他语句,Exit与End,2. End,语句,End,:终止程序的运行,End Sub,:终止一个过程;,End Function,:终止函数过程,End If,:终止条件语句,End Type,:终止类型声明,End Select,:终止情况语句,End Property,:终止属性过程,End With,:终止With语句,返回目录,例如:,Private Sub Command1_Click(),End,End Sub,3.3,其他语句,Goto,功能:无条件转向,格式:,Goto ,label,称为语句标号(数字或标识符),例3.22 求若干个同学的成绩总分,Private Sub Form_Click(),Dim Data, Sum As Integer,Sum = 0,loop1:,Data = InputBox(,输入成绩,),If Data = -1 Then,GoTo loop2,Else,Sum = Sum + Data,GoTo loop1,End If,loop2:,Print ,总分,=; Sum,End Sub,返回目录,Goto语句不符合结构化程序设计的要求,所以不提倡使用。,3.4,程序调试,程序的错误类型,语法错误 运行错误,返回目录,中文逗号,n未赋过值,逻辑错误:算法不正确。,显然系统不会报告这类出错信息,。,3.4,程序调试,简单调试,方法:在程序中适当插入,Print,语句跟踪变量值的变化,返回目录,应该是6与24,3.4,程序调试,使用调试工具,1.,断点调试,断点,:程序执行到该此自动暂停,单击“继续”按钮 ,,程序可继续执行。,返回目录,设置断点:在代码窗口中单击该语句左侧的阴影边框。,暂停时,将鼠标指针移动到程序中的各个变量上略作停留,系统将以浮动标签的方式显示该变量的值。,3.4,程序调试,使用调试工具,2.,逐语句执行,启动逐语句执行:“调试逐语句” 或 按,F8,终止,逐语句执行,:,“调试跳出”,3.,使用立即窗口,程序运行处于暂停状态时,,在立即窗口中输入:,Print 或 ? ,4.,逐过程,
展开阅读全文