职教Visual Basic程序设计教案:第三章 VB基本语言_第1页
职教Visual Basic程序设计教案:第三章 VB基本语言_第2页
职教Visual Basic程序设计教案:第三章 VB基本语言_第3页
职教Visual Basic程序设计教案:第三章 VB基本语言_第4页
职教Visual Basic程序设计教案:第三章 VB基本语言_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章VB基本语言为开发较为复杂的应用程序,VB的学习者必须首先掌握VB的基本语法和基本语言,有了扎实的程序设计语言基础,才能够对数据处理和功能复杂的窗体和模块进行编程工作,使之满足工作需要,进而顺利完成应用程序的程序设计工作。【本章教学目标】知识点:1.VB中使用的数据类型及定义方法。2.常量及变量的定义方法。运算符及表达式的使用。常用内部函数的作用及调用方法。5.结构化程序设计的三种程序结构。6.数组的应用。7.自定义函数和子程序。8.创建多个窗体。技能点:.理解并能正确掌握VB的语法规则及书写习惯。.熟悉并基本掌握VisualBasic程序的流程控制。.熟练掌握基本程序模块的编制方法。.正确掌握程序的调试方法。3.1编码基础【教学目标】学会VB编程的基本方法,以及编程中应遵循的规则与书写要求。【教学要求】了解:注释语句在程序书写中的作用。理解:VB源程序的编写规则。掌握:几个常用方法的作用及使用方法。【本节重点】重点掌握Print方法的作用及使用方法。VB源程序的编写规则和书写要求。一、VB语法规则1、VB代码不区分大小写。2、在同一行中可写多个语句,但须用:号隔开。3、一行最多允许255个字符。4、语句可以续行,续行标志为“空格加下划线”。二、VB中的注释语句VB用单引号和Rem定义符作为注释语句。注释语句不但用于程序的注解,以增加源程序的可读性,而且经常用于程序的调试。三、VB中常用的方法VB中常用的方法较多,下面先介绍三个方法,其中Print方法和Cls方法基本延用了原Basic中的语句,其功能主要用于学习和练习VB的基本语句,在应用程序的开发方面,基本没有实际意义。1、Print方法Print方法可在对象上输出文本或表达式的值。其语法格式为:[对象.]Print[{Tab(n)ISpc(n)}][表达式列表][;I,]说明:(1)“对象”可以是Form、PictureBox、Printer,省略对象,则在窗体上输出。(2)“表达式列表”是用“,”或“;”隔开的一个或多个表达式。如选用“;”隔开,则各项之间无间隔。如选用“,”隔开,则各项的宽度为14。(3)Tab函数:Tab(n) Tab函数的功能是在其后面的表达式前加n个空格。(4)Spc函数:Spc(n) Spc函数的功能是在下一个表达式之前加n个空格。例:在窗体上的一行内每隔5个空格分别打印输出4个“#”号和4个“@”号。PrintTab(5);"#####";Spc(5);"@@@@"2、Cls方法Cls方法用以清除程序在运行时在窗体或图形中显示的文本或图形。其语法格式为:[对象.]Cls使用Cls方法后,图形坐标中两坐标轴的x与y值均被置为0,并清除运行时窗体上显示的文本及图形,但不清除窗体在设计时的文本和图形。“对象”选项省略时指窗体。3、Move方法Move方法用于移动窗体或控件,并改变其大小。其语法格式为:[对象.]Move〈左边距离,[,上边距离[,宽度[,高度口说明:(1)“对象”可以是除时钟、菜单外的所有控件,省略对象时默认对象为窗体。(2)左边距离、上边距离、宽度、高度:数值表达式,以twip(缇)为单位。如果对象是窗体,则“距离”以屏幕为参照,否则以窗体为参照。例:首先编程设置图形控件Imagel在窗体中的位置,并向Imagel中装载图形。然后令该图形控件移动并放大。PrivateSubForm_Load()’设置图形控件Imagel在窗体中的位置,并向Imagel中装载图形Image1.Top=100Image1.Left=100Image1.Picture=LoadPicture("MYCOMP.ICO")EndSubPrivateSubImage1_Click()‘令图形控件移动并放大Image1.Stretch=TrueImage1.MoveImage1.Left+100,Image1.Top+100,_Image1.Width+100,Image1.Height+100EndSub四、源程序的书写要求1、在主要的程序段落应用汉语对程序的功能进行标注,以增加程序的可读性。2、书写的程序要具有锯齿形风格,即每当书写到条件判断和循环等结构语句时,结构内的语句应有规律地后移,遇到嵌套结构时,嵌套结构内的语句不但需要后移而且要分出层次。每一个程序员都要培养此种书写程序的风格与习惯,以便在编写复杂和大程序时仍能保证程序语法和逻辑的正确性。3.2数据类型【教学目标】掌握VB中主要的数据类型及其表示方法。【教学要求】了解:数据类型的概念及种类。理解:各种标准数据类型的应用场合。掌握:各种标准数据类型的表示方法及表示范围。【本节重点】自定义数据类型。各种标准数据类型的表示方法及表示范围。一、标准数据类型1、数值(Numeric)数据类型(1)整型(1成0801)和长整型⑴^8)整形用于保存整数,整数运算速度快,但所表示数的范围小。其中Integer的取值范围是:一32768〜32767,占2个字节,类型符是%号;Long的取值范围是:—2147483648〜2147483647,占4个字节,类型符是&号。(2)单精度型㈠漉也)Single用于保存浮点实数,其取值范围是±1.4E—45〜±3.4E38,占4个字节,类型符是!号。(3)双精度型(Double)Double也用于保存浮点实数,但所保存数值的精确度比Single高,其取值范围是±4.9E—324〜±1.8E308,占8个字节,类型符是#号。Double是应用程序中存贮数据的常用类型。(4)字节型$丫1©)Byte用于存储二进制数,取值范围0〜255,占1个字节。(5)货币型(Currency)Currency型用于存储定点实数或整数,可保留4位整数及15位小数,在所表示的数后会自动增加@符号。2、日期类型⑴加)Date型按8个字节的浮点数进行存储,表示日期的范围从100年1月1日到9999年12月31日。这种数据在引用时一定要用#号前后括起来。如:#2004—02—24#。3、逻辑类型(Boolean)Boolean型只有两个常量:True和False。当逻辑数据转换为整型数据时,True转换为一1,False转换为0。4、字符类型㈠红亩8)String型存放字符型数据,String型数据必须用单引号或双引号前后括起来,占8个字节,类型符是$号。5、对象类型(Object)对象数据类型用来表示应用程序中的对象,可用Set语句来指定一个被声明为Object的变量,去引用应用程序中的任何实际对象。如:SubForm_Click()DimTempAsObjectSetTemp=Form1EndSub于是,Temp即为对象类型,表示Form16、变体类型(Variant)Variant是一种特殊的数据类型,是所有未定义的变量的缺省数据类型,它对数据的处理完全取决于程序上下文的需要,它可以包括数值型、日期型、字符型、对象型的数据,此外,还可以包含四种特殊的数据:①Empty:空,表示未确定的数据。②Null:无效,表示这个数据不合法。③Error:出错,指出过程中出现了一个错误条件。④Nothing:无指向,表示数据还没有指向一个具体对象。上述四种特殊数据,在我们进行数据库应用程序的开发中经常使用。如Error常用于程序中,假设在程序中写入:OnErrorResumeNext语句,则当程序出现错误语句时,VB不会中断程序的运行,继续执行后面的语句。二、自定义类型在VB中,用户也可以根据自己的需要自定义数据类型。自定义类型通过Type语句实现,其形式为:Type<自定义类型名><元素名>[(下标)]As<类型名><元素名>[(下标)]As<类型名>EndType说明:(1)元素名:表示用户自定义的一个数据类型;(2)下标:表示定义数组;(3)类型名:标准类型。例:定义一个关于高考考生信息的自定义类型。TypeStud ‘自定义高考考生信息类型NomAsInteger ‘定义考生编号为整型NamAsString*20 ‘定义考生姓名为字符型SexAsString*1 ‘定义考生性别为字符型EndType定义了类型之后,便可在变量声明中使用该类型。如:DimStudentasStud在程序中使用变量的元素的形式为:<变量名>.<元素名>如:Student.Nom注意:(1)自定义类型必须在标准模块(.BAS)中定义,默认为Publico(2)自定义类型中的元素类型可以是字符串,但必须是定长字符串。(3)请注意将自定义类型与变量区分开。3.3常量与变量【教学目标】学习VB中常量及变量的基本概念和定义方法。【教学要求】了解:常量及变量的基本概念。理解:为何要使用常量及变量。掌握:常量、变量的定义及使用方法。【本节重点】变量的作用域。系统常量的表示方法。一、常量与变量的命名规则1、必须以字母或汉字开头,由字母、汉字、数字或下划线组成,长度不大于255。2、不能使用VB中的保留字。1、不区分大小写。二、变量声明1、使用Dim语句语句格式:Dim<变量名表>[As类型]例如:DimS_1,S_2,S_3AsstringDimSSAsDate2、用Static语句说明语句格式:Static<变量名>[As数据类型]用Static语句说明的变量称为静态变量,即执行一个过程后,这种变量的值会保留,下次再调用此过程时,该变量的值是上次保留的值。3、用Public语句说明语句格式:Public<变量名>[As数据类型]这种变量称为全局变量,可被一个工程中的各个模块引用。4、隐式声明VB允许对未经声明的变量直接使用,未经声明的变量在使用时可以视为被隐式声明,所有隐式声明的变量都是Variant类型。注意:数组在使用前必须给出声明。三、常量1、用户声明常量语句格式:Const<常量名>[as类型]=<表达式>例:定义两个常量pi和s1。Constpi=3.1416Consts1asInteger=1002、系统提供的常量VB提供系统已定义的常量,这些常量位于对象库中,如:PrivateSubCommand1_Click()x=MsgBox("确定",vbOKCancel,"aaaa",10,100)EndSub在上述过程中,赋值语句中的vbOKCancel就是一个VB的系统常量。3.4运算符和表达式【教学目标】学会正确地书写VB的表达式,能够熟练地使用VB中的函数。【教学要求】了解:表达式、函数的概念。理解:运算符、表达式、函数的分类。掌握:运算符的使用;表达式的书写方法;常用内部函数的作用及使用方法。【本节重点】正确识别并使用运算符。掌握表达式的书写规则。常用内部函数的使用方法。一、运算符VB中的运算符可分为:算术运算符、字符串运算符、关系运算符和逻辑运算符四类。1、算术运算符八(乘方) 一(负号)*(乘)/(除) '(整除)Mod(同余)十(加)一(减)2、字符串运算符+(合并运算)&(合并运算)说明:+运算符两边数据的类型必须为字符型,否则出错。&运算符两边的数据允许不是字符型,VB会在操作前自动将两边的数据先转换成字符型,然后进行合并运算。3、关系运算符<(小于)<=(小于等于)<>(不等)=(等于)>=(大于等于)>(大于)Like(字符串匹配)Is(对象引用比较,用于两个变量引用比较)说明:(1)关系运算的结果为True或False,分别用“一1”、“0”表示。(2)若两个操作数是数值型,按大小比较;若为字符型,按ASCII码(拼音)值进行比较。(3)Like用于字符串之间的匹配比较,如:"ABCDEF"like"*CD*"的值为true。4、逻辑运算符Not(非)And(与)Or(或)Xor(异或)Eqv(等价)Imp(蕴含)逻辑运算符对数值进行运算,以数字的二进制值逐位进行逻辑运算。如:10and7的运算是:1010and0111结果为:0010,即十进制的2。二、表达式1、表达式的组成表达式是由常量、变量、运算符、对象及圆括号按一定规则组成的式子。2、表达式的书写规则(1)常量、变量和函数是表达式的特例。(2)“*”号不能省略,也不能用其它符号代替。(3)按运算的优先顺序运算,同级由左向右,括号优先。(4)在同一基准行用小写字母书写。3、不同数据类型的转换在算术运算中,若操作数具有不同的精度,则运算结果用精度高的数据类型。但Long和Single运算后的数据类型为Double。4、运算的优先级VB表达式中的运算优先级依次为:算术运算、关系运算、逻辑运算。在算术运算和逻辑运算中对每一个具体运算还存在优先级。具体如下:(1)算术运算①乘方最优先,负号乘法和除法整除取模加法和减法(2)逻辑运算Not最优先,And③Or和XorEqvImp注意:在VB表达式中优先级为:1优先级为:2优先级为:3优先级为:4优先级为:5优先级为:6优先级为:1优先级为:2优先级为:3优先级为:4优先级为:5()运算优先于一切。

三、常用的内部函数VB中的内部函数,在编程中有不可替代的作用,必须认真学习和掌握。VB的内部函数很多,我们仅介绍常用的内部函数。在下面的函数自变量中,N表示算术表达式,C表示字符表达式,D表示日期表达式,每个函数后面标注的是其含义。1、数学函数Abs(N)Cos(N)Exp(N)Log(N)Rnd(NAbs(N)Cos(N)Exp(N)Log(N)Rnd(N)cosxexlnxRnd(N)函数生成(0,数,使用Randomize语句,Randomize[number]1)区间的均匀分布的随机数(伪随机)。若要生成真随机其语法格式为:其中,number将Rnd函数的随机数生成器初始化。若省略之,则用系统计时器返回的值做为number值。(6)Sin(N)(7)Sgn(N)(8)Sqr(N)2、转换函数sinx符号函数N的平方根Asc(C)Chr$(N)Fix(N)Int(N)Lcase$(C)Ucase(C)Str$(N)Val(C)Cdate(D)求C中第一个字符的ASCII值求ASCII值为N的字符取整取不大于N的最大整数大写字母转换成小写字母小写字母转换成大写字母将数值转换成字符串将字符串转换成数值将日期转换成字符3、字符串函数(1)InStr([N1,]C1,C2)InStr([N1,]C1,C2)的功能是在C1中从N1位置起开始找C2,并返回C2在C1中第一次出现的位置值,若没找到C2则返回数值0。若省略N1,则在C1中从头找C2。Left$(C,N)Right$(C,N)Mid$(C,N,K)Len(C)Trim(C)Ltrim(C)Rtrim(C)Space$(N)取出C左边的N个字符取出C右边的N个字符取出C第N个字符开始的K个字符求C的长度去掉C前后的空格去掉C左面的空格去掉C右面的空格产生N个空格注意:在内部函数中,函数名中的$符号可以省略。如Space$可以写为Space。4、日期函数(1)Date生成系统日期(2)Day(D)求日期(结果为N型)(3)Month(D)求月份(结果为N型)(4)Year(D)求年份(结果为N型)(5)Now生成系统日期和时间(6)Time生成系统时间(7)DateAdd()增减日期函数DateAdd()函数的语法形式为:DateAdd("要增减的日期形式",增减量,要增减的日期变量)例:DateAdd("ww",2,#2004—03—03#)表示在指定的2003年3月3日的日期上加2周,结果为:#2004-03-17#(8)DateDiff() 计算日期相差函数DateDiff()函数的语法形式为:DateDiff("要间隔的日期形式",日期1,日期2)例:DateDiff("dd",#2004—03—03#,#2004—03—17#)函数用2004年3月17日减2004年3月3日,结果为14。DateDiff函数中"要间隔的日期形式”的符号与含义对照表如下:日期形式Yyyyqmydwwwhns含义年季月一年的天数日一周的日数星期时分秒5、格式输出函数格式化输出函数Format可以使数值、日期、字符串按指定的格式输出,此函数主要用于文档输出中,其形式如下:Format(表达式[,格式字符串])说明:表达式是要格式化的数值、日期和字符串表达式,格式字符串要加引号""。(1)数值格式化格式符“0”用于表示数字,若实际数值位数小于格式位数,则补“0”;格式符“#”用于表示数字,若实际数值位数小于格式位数,则不补“0”,此时按四舍五入计算;在数值前可强行加“+”号、“-”号、“$”号,在数值中间可强行加小数点“.”、千分位“,”;数值若按百分比输出,可在格式中加“%”;数值也可按指数格式输出。例:对数值12345.657分别用以下格式输出:数值表达式格式化字符串输出结果12345.657"###,###,##0.00"12,345.6612345.657"000000.0000"012345.657012345.657"######.####"12345.65712345.657"$00000.00"$12345.6612345.657"######.##%"1234565.7%说明:①Format能自动对数值型数据根据格式进行四舍五入。函数值的类型为字符型。注意:在经济类应用程序的报表输出中,常用的格式化字符串为:"###,###,##0.00"。此种格式化字符串的使用,可以使得输出的报表格式统一,并在报表的函数所定义列中按小数点对齐,小数位不足,可自动补0。(2)日期和时间格式化缺省格式为yy-mm-dd(年年一月月一日日)若使用中文日期,在yyyy、mm、dd后分别加“年”、“月”、“日”例:将当前日期与时间赋值给变量rq,并按以下格式打印输出:rq=NowPrintFormat(rq)PrintFormat(rq,"yy-mm-dd")PrintFormat(rq,"yyyy-mm-ddhh:mm:ss")PrintFormat(rq,"yyyy年mm月dd日hh:mm:ss")执行了以上输出语句后,在窗体上的输出的结果如下:2004-2-2815:20:2604-02-282004-02-2815:20:262004年02月28日15:20:26(3)字符串格式化格式符“>”表示将字符强行大写,“<”表示将字符强行小写;格式符“@”表示实际字符位数小于格式位数,前后补空格;格式符“&”表示实际字符位数小于格式位数,前后不补空格;例:给t变量中赋值字符串“abcd”,然后在窗体上用以下格式打印输出:t="abcd"PrintFormat(st,">")t=UCase(st)PrintFormat(st,"<")PrintFormat(st,"@@@@@@@@")PrintFormat(st,"&&&&&&&&")执行了以上输出语句后,在窗体上打印输出的结果如下:ABCDAbcdABCDABCD6、Shell函数在VB中利用Shell函数可调用外部可执行程序,其格式如下:Shell(命令字符串[,窗口类型])说明:(1)命令字符串:用于指示要执行可执行程序的路径及文件名。(2)窗口类型:表示执行应用程序窗口的大小,一般取“1”。例如,如下语句执行的结果是显示计算器界面:I=Shell("C:\windows\calc.exe")注意:Shell函数是一个很重要的函数,它可以使我们在所开发的应用程序中嵌入其他的应用软件,完成各种复杂的综合应用。7、DoEvents函数DoEvents是一个较为特殊的函数,它既可以作为函数,又可以作为VB的语句,其格式如下:[窗体号=]DoEvents[()]DoEventsd主要功能是:当应用程序在执行循环的过程中进行其他操作。注意:DoEvents函数不能滥用,当应用程序的某些关键部分需要独占计算机时间,以防止被键盘、鼠标或其他程序中断的情况下,不得使用DoEvents函数。§3.5基本语句【教学目标】通过运用VB的基本语句编制中小型程序,来培养和训练学习者的编程能力。【教学要求】了解:表达式、函数的概念。理解:控制程序流程的三种程序结构的程序执行过程。掌握:赋值语句、条件语句、循环语句的使用;两个交互性函数的使用方法。【本节重点】两个交互性函数的使用方法。条件语句的嵌套。循环语句的不同使用格式及区别;循环嵌套的使用及注意事。一、赋值语句格式:<变量名>=<表达式>功能:先计算表达式的值,然后将表达式的值赋给赋值号左边的变量。二、与用户交互的函数和过程VB与用户交互可以通过InputBox函数、MsgBox函数和MsgBox过程进行。1、InputBox函数格式:InputBox(提示信息[,标题][,缺省][,X坐标位置儿Y坐标位置])说明:(1)提示信息:不可省略;

(2)标题:若省略标题,系统将自动以应用程序名代之;(3)缺省:“确省”表示输入过程中的默认值。即若用户没有在输入对话框中输入任何值,则以该确省值作为输入的内容;X坐标位置,Y坐标位置用于确定InputBox对话框在计算机屏幕上的位置。注意:各参数次序必须一一对应,若省略某项,也要使用“,”占位。函数返回字符型数据。若程序运行时按下“取消”按钮,则函数无值。例:在InputBox函数的使用中设置输入的默认值为“男”。DimTSAsStringTS=InputBox("请输入性别",,"男",100,100)2、MsgBox函数格式:MsgBox(提示[,按钮][,标题])3、MsgBox过程格式:MsgBox提示[,按钮][,标题](1)MsgBox函数和MsgBox过程中语法格式项说明其中函数和过程中的“提示信息”不可省略;若省略标题,系统将自动以应用程序名代之。其中函数和过程中“按钮”项的值用VB系统常数表示,常用的有:0-0-VbOkOnly1-VbOkCancel2-VbAboutRetryIgnore3-VbYesNoCancel4-VbYesNo5-VbRetryIgnore(2)MsgBox函数和MsgBox返回值说明下:1-VbOk2-VbCancel3-VbAbout下:1-VbOk2-VbCancel3-VbAbout4-VbRetry5-VbIgnore6-VbYes7-VbNo(表示用户按“确定”按钮)(表示用户按“取消”按钮)(表示用户按“终止”按钮)(表示用户按“重试”按钮)(表示用户按“忽略”按钮)(表示用户按“是”按钮)(表示用户按“否”按钮)MsgBox函数和MsgBox过程是VB中十分重要的对话框,两者的功能和对话框界面都相同,只是在书写格式和编制判断程序时有所区别。例:编制一个输入密码程序。人机界面是一个窗体,命令按钮Commandl表示输入密码“确认”功能。设计要求是:设用户的操作密码是:ABCD,当用户三次输入错误,显示警告信息,并退出程序。PrivateSubCommand1_Click()Dimi,jAsIntegerDimmmAsStringmm=InputBox("请输入密码”,一2000,2000)j=1DoWhilej<=2IfUCase(mm)<>"ABCD"Theni=乂$88似"输入错误!是否重新输入?",VbYesNoCancel,输入密码")Ifi<>6ThenEndElsemm=InputBox("请输入密码”,一2000,2000)j=j+1EndIfElseMsgBox"输入正确"EndEndIfLoopMsgBox"非法操作者!!!",48EndSub三、选择结构1、If—Then语句(1)形式1:If<条件>Then<语句组>EndIf(2)形式2:If<条件>Then<语句>说明:If—Then语句中的“条件”一般是逻辑表达式或关系表达式,如果是数值表达式,当表达式值非零时为True。例:用If—Then语句判断x和y变量值的大小,若x的值小于小则将两变量中的值互换。下面用If—Then语句的“形式1”和“形式2”分别编制判断和互换的程序语句:形式1: 形式2:Ifx<ythen Ifx<ythent=x:x=y:y=tt=x:x=y:y=tEndif2、If—Then—Else语句形式1:If<条件>Then<语句组1>Else<语句组2>EndIf形式2:If <条件>Then<语句1>Else<语句2>例:编程输入a,b,c的值,求一元二次方程ax2+bx+c=0的解。PrivateSubCommand1_Click()Dima,b,c,d,x1,x2AsSinglea=InputBox("输入a的值”,,,1000,1000)b=InputBox("输入b的值”,,,1000,1000)c=InputBox("输入c的值”,,,1000,1000)d=b*b-4*a*cIfd>0Thenx1=(-b+Sqr(d))/2/ax2=(-b-Sqr(d))/2/aPrint"x1=";x1,"x2=";x2ElseMsgBox"输入有错",,2EndIfEndSub3、If—Then—Elself语句语句形式:If<条件1>Then<语句组1>ElseIf<条件2>Then<语句组2>ElseIf<条件3>Then<语句组3>[Else语句组n+1]Endif例:设已在strC中存入了一个字符,编程判断该字符是英文字母、数字、其它,并显示结果。IfstrC>="a"andstrC<="z"orstrC>="A"andstrC<="Z"ThenPrintstrC+"是英文字母"ElseIfstrC>="0"andstrC<="9"ThenPrintstrC+"是数字ElsePrintstrC+"是其它字符”Endif4、If语句的嵌套例:编程比较三个变量x,y,z的大小,并按从小到大的顺序排列,结果仍存放在x,y,z变量中。Ifx>yThent=x:x=y:y=tIfx>zThent=x:x=z:z=tEndIfIfy>zThent=y:y=z:z=tEndIfElseIfx>zThent=x:x=z:z=tEndIfIfy>zThent=y:y=z:z=tEndIfEndIf5、SelectCase语句语句形式:SelectCase<变量或表达式>Case表达式列表1语句组1>Case表达式列表2语句组2>Case表达式列表n语句组n>[CaseElse语句组n+1]EndSelect例:编程判断strC中字符的类型。SelectCasestrCCase"a"to"z","A"to"Z"PrintstrC+"是英文字母"Case"0"to"9"PrintstrC+"是数字CaseElsePrintstrC+"是其它字符”EndSelect6、条件函数(1)IIf函数形式:IIf(〈条件表达式,,〈表达式为真,,〈表达式为假,)例:编程将x,y中值较大者的值赋给z。z=IIf(x>y,x,y)(2)Choose函数形式:Choose(<字符类型变量,,〈值为1的返回值,,〈值为2的返回值,,……)例:假设变量Nop中存放了1、2、3、4中的某一个值,编程将变量Nop中的值转换成算术四则运算符,其中1转换为十;2转换为一;3转换为X;4转换为♦,并将转换结果存放到OP变量中。Op=Choose(Nop,"+", "―","X",":")四、循环结构1、For—Next语句语句形式:For<循环变量>=<初值>To<终值>[Step步长]<语句组1>[exitfor]<语句组2>Next[循环变量]注意:若缺省“Step步长”选项,系统默认步长为1。例:编程计算1到100中奇数之和。Dimi,sAsIntegers=0Fori=1To100Step2s=s+iNextiPrints例:编程将ASCII码制成表格在图形控件Picture1中输出,每行打印7个字符。PrivateSubPicture1_Click()Dimasc,IAsIntegerPictureLPrintTab(30);"ASCII码对照表”Picture1.PrintForasc=32To126Picture1.PrintTab(10*I+2);Chr(asc);"=";asc;I=I+1IfI=7ThenI=0Picture1.PrintEndIfNextEndSub2、Do―Loop语句语句形式:DoWhile<循环条件><语句组1>[exitdo]<语句组2>LoopDo—Loop循环语句在执行时先判断循环条件,若循环条件为真,执行循环体内的语句,否则终止循环。例1:编程计算自然对数e的近似值,要求计算的误差小于0.000001,计算自然对数e的公式为:e=1+1/1!+1/2!+1/3!+1/4!H——H/n!+…。PrivateSubCommand1_Click()Dimi,nAsIntegerDime,sAsDoubles=1e=1DoWhiles>0.000001i=i+1s=s/ie=e+sLoopPrinteEndSub例2:编程用转辗相除法求两个正整数m,n的最大公约数和最小公倍数。求两个正整数m,n的最大公约和最小公倍数的算法如下:①求两个正整数m,n的最大公约数算法:第一步:对已知的m和n,先使m>n.;第二步:m除以n,得余数r;第三步:若r=0,则n为所求的最大公约数,计算结束;否则将n的值赋值给m,将r的值赋值给n,然后重复执行第二步,直至r=0。②求两个正整数m,n的最小公倍数算法:当取得m和n的最大公约数后,将m和n相乘再除以最大公约数就可得到m和n的最小公倍数。求两个正整数m,n的最大公约数和最小公倍数的源程序如下:PrivateSubCommand1_Click()Dimm,n,p,mnAsIntegerm=Val(Text1)n=Val(Text2)Ifm<=0Orn<=0ThenEndIfm<nThent=m:m=n:n=tDoWhile(n<>0)r=mModnm=nn=rLoopPrint"最大公约为";nPrint"最小公倍为";m*n/nEndSub在循环结构中,VB还有Do—Until等循环语句,由于语句的功能与上述两种循环语句基本相同,不再赘述,感兴趣的同学可自学。3、循环的嵌套在一个循环体内又包含一个完整的循环结构称为循环的嵌套。循环的嵌套是编程中常用技术,是每一个计算机程序设计员必须掌握的技术。计算机语言中,循环可以并列,可以嵌套,但不能相交。例1:古代数学中有一个“百文买百鸡”的问题,题目是:“鸡翁一值三文,鸡母一值二文,鸡雏三值一文,问:百文买百鸡,各买几何?”。用现代数学方法来考虑这一问题,可以发现这是一个简单的三元一次方程组的求解问题,方程组的数学公式为:设公鸡买X只,母鸡买Y只,小鸡买Z只,根据已知条件可列出以下方程组:X+Y+Z=100 其中X的取值范围:1—33;Y的取值范围:1—50;3X+2Y+Z/3=100 其中Z的取值范围:1—99。由于方程组中有三个未知量,而方程只有两个,因此方程为多解。解该方程的程序如下:PrivateSubCommand1_Click()DimX,Y,ZAsIntegerForX=1To33ForY=1To50ForZ=1To99If3*X+2*Y+Z/2=100AndX+Y+Z=100ThenPrintX,Y,ZEndIfNextEndSub例2:用循环语句编制一个在图形控件Picturel中打印“九九乘法表”的程序。PrivateSubPicture1_Click()DimssAsStringPicture1.PrintTab(40);"九九乘法表"Picture1.PrintFori=1To9Forj=1Toiss=j&"X"&i&"="&i*jPicture1.PrintTab(j*8);ss;NextPicture1.PrintPicture1.PrintNextEndSub五、其它辅助控制语句1、GoTo语句

语句格式:GoTo<行号|标号>GoTo语句的作用是无条件地转移到行号或标号指定的语句行。注意:在VB程序设计中要尽量少用或不用GoTo语句,以保证所编程序的结构化。2、End语句End语句用于结束一个程序的运行,返回Windows。在一个应用程序中,逻辑上只允许有一个End语句。3、With_EndWith语句语句格式:With<对象><语句组>EndWithWith_EndWith语句用于在不重复指出对象名称的情况下,对某对象执行一系列的语句。例:对照下面两个过程,就可以认识到With_EndWith语句的作用:PrivateSubCommand1_Click()WithLabel1.Height=2000.Width=2000PrivateSubCommand1_Click()WithLabel1.Height=2000.Width=2000PrivateSubCommand1_Click()Label1.Height=2000Label1.Width=2000.FontSize=24.Caption="标签"Label1.FontSize=24Label1.Caption="标签"EndSubEndWithEndSub§3.6数组数组是按一定顺序排列,具有相同类型的变量的集合。VB中将数组分为静态数组和动态数组,静态数组在声明时必须指明数组的维数和变量的个数;动态数组在声明时仅定义数组的名称和类型,然后在执行程序的过程中,根据实际需要再用ReDim语句定义数组的维数及变量的个数,而且允许使用简单变量来进行数组中变量个数的定义。数组的使用在管理信息系统软件的程序设计中有着不可替代的作用,离开数组的使用,某些程序的编制将会变得非常麻烦,甚至导致程序编制的失败,因此数组是程序设计人员必须熟悉和掌握的必备知识。【教学要求】了解:数组的概念。理解:静态数组和动态数组的区别;控件数组的作用。掌握:数组的定义及使用方法;控件数组的应用。【本节重点】动态数组的应用。控件数组的应用。【本节难点】动态数组的应用。一、静态数组及声明1、一维数组一维数组的定义如下:Dim〈数组名,([下界To]上界)[As类型]若缺省下界,系统默认为0。例:Dimnum(1To50)AsInteger2、多维数组VB中数组的维数允许最多可达60维。多维数组的定义格式如下:Dim〈数组名〉([下界1To]上界1,[下界2To]上界2……)[As类型]例:DimA(12,50),C(10)AsDouble二、动态数组动态数组在声明时只定义数组名或数组名及类型,不指定大小,在执行程序的过程中,再根据需要用Redim语句重新定义数组的大小。重新定义动态数组的语句格式如下:Redim〈数组名〉(下标1[,下标2……])注意:(1)Redim语句中的下标可以是已被赋值的变量。(2)在过程中可多次使用Redim来改变数组的大小和维数。(3)每次使用Redim语句都会使原数组中的数据丢失,如需要保留原数组数据,可用Preserve参数来保留,使用该参数只能改变最后一维的大小。例:在程序运行时由操作者指定一个一维数组的变量个数,然后由计算机自动产生一组随机数存放到一维数组中,并将此组随机数在窗体上打印出来。完成此项工作的源程序如下:Dimx()AsDoublePrivateSubForm_Click()W=InputBox("请问需要产生多少个随机数?",,100,100)W=Val(W)ReDimx(W)Fori=1ToWx(i)=RndPrintx(i);"";NextEndSub注意:动态数组主要用于编程时尚不能确定数组中变量的个数,而只能在程序执行过程中根据统计或外部提供的信息才能确定数组中变量个数的情况。三、数组的基本操作1、用循环语句为数组元素赋初值例:使用For—Next语句为一维数组赋初值0。PrivateSubForm_Load()Dima(10)AsIntegerFori=0To10a(i)=0NextEndSub2、使用Array函数给数组赋值例:给a数组赋值5个奇数;给b数组赋值3个英文字母。DimaAsVariant,bAsVariant,I%a=Array(1,3,5,7,9)b=Array("x","y","z")注意:(1)利用Array函数对数组各元素赋值,声明的数组是可调数组,并且其类型只能是Variant。(2)数组的下界为0,上界由函数括号中的参数个数决定。四、数组的应用举例例1、排序:令计算机用随机函数自动生成20个10—100之间的整数,将其按由小到大的顺序排列,并将这20个随机数打印出来。DimX(20)AsIntegerDimi,j,kAsIntegerPrivateSubForm_Load()RandomizeFori=1To20X(i)=Rnd*90+10NextEndSubPrivateSubForm_Click()Fori=1To19Forj=i+1To20IfX(i)>X(j)Thenk=X(i):X(i)=X(j):X(j)=kEndIfNextPrintX(I);NextEndSub例2、编程实现:当用户由键盘输入一串英文字母到文本框Textl中后,令计算机自动统计出Textl中各种英文字母出现的次数(不区分大小写),并将统计结果打印出来。PrivateSubCommand1_Click()DimssAsStringDima(1To26)AsInteger,i,kAsIntegerk=Len(Text1.Text)Fori=1Tokss=UCase(Mid(Text1.Text,i,1))Ifss>="A"Andss<="Z"Thena(Asc(ss)-64)=a(Asc(ss)-64)+1EndIfNextFori=1To26PrintChr(i+64)&"=";a(i);"";IfiMod8=0ThenPicture1.PrintNextEndSub五、控件数组1、控件数组的概念控件数组是由一组相同类型的控件组成,它们共用一个控件名,并享用同样的事件过程。系统自动赋予每个控件唯一下标索引(Index),Index从0开始,然后按自然数依次编号。控件数组最多可有32767个元素。2、建立控件数组的方法建立控件数组的方法有以下两种:(1)在设计时建立在设计时建立控件数组的方法及其过程如下:在窗体上制作第一个控件,并设置其相关属性;选中该控件,对第一个控件进行复制;③在窗体中粘贴控件,粘贴时在“创建一个控件数组吗?”对话框中选择“是,”系统就会自动创建这个控件的控件数组;④根据需要,可多次粘贴,以满足控件数量的需求。⑤建立共享的事件过程。例:编制一个狮子选大王的游戏程序。图3.1设有16头狮子,要从中选一个大王,选择的方法是:第一步:首先将16头狮子编号并围成一圈;第二步:确定一个间隔数,如3;第三步:从16头狮子中任意选择一头狮子,作为起始;第四步:从起始狮子开始绕狮子圈依次数3,将被数到3的狮子淘汰出局,取消作大王的资格;第五步:重复绕狮子圈依次数3,并淘汰被数到3的狮子,最后所剩的唯一一头狮子就是大王。例题界面设计:在窗体中创建狮子画面的图形控件组:Image1(0)、Image1(1)、Image1(2)、…Image1(16);窗体中设计两个命令按钮Command1和Command2,用于运行和结束游戏程序;窗体中设计两组合框Combo1和Combo2,用于用户选择序输入起始狮子编号和间隔数。最后设计一个文本框Text1用于显示所选狮子大王的编号。狮子选大王的游戏的主要源程序如下:Dimi,j,k,l,m,nAsIntegerPrivateSubForm_Load()TextLVisible=FalseFori=1To16Combo1.AddItemiNextiFori=2To7Combo2.AddItemiNextiEndSubPrivateSubCommand1_Click()i=Val(Combo1.Text)j=Val(Combo2.Text)m=i-1n=16DoWhilen>1Fork=1Tojm=m+1m=mMod16DoWhileNot(Label1(m).Visible)m=m+1m=mMod16LoopNextkLabel1(m).Visible=FalseImage1(m).Visible=Falsen=n-1DoEventsti=DateAdd("s",1,Now)DoWhileti>NowLoopLoopFori=0To15IfImage1(i).VisibleThenk=i+1EndIfNextiText1.Visible=TrueText1.Text="最后剩的是第"&k&"号狮子"EndSub(2)程序运行时添加控件数组在程序运行时,可添加或删除控件数组元素,具体操作步骤如下:①在窗体上创建一个控件,设置其Index值为0;②在编程时使用Load方法添加其余元素,也可使用Unload方法删除某个元素,语句格式如下:Load控件数组名(Index)Unload控件数组名(Index)③每个新添加的控件数组元素通过Left和Top属性确定其在窗体的位置,并将Visible属性设置为True。例:在窗体设计时先建立一个命令按钮,然后在程序运行时添加9个命令按钮控件数组的元素,这10个命令按钮的标题分别为0-9十个数字。第一步:在设计时建立一个命令按钮Commandl,然后设置其Caption属性值为:0,Index属性值为:0,使得Command1成为控件数组中的第一个元素。第二步:其它9个控件数组元素在程序运行时添加,添加控件数组元素的源程序如下:PrivateSubForm_Load()Dimi,m,nAsIntegerm=Command1(0).Heightn=Command1(0).WidthFori=1To9LoadCommand1(i)Command1(i).Visible=TrueCommand1(i).Caption=iIfiMod3=1ThenCommand1(i).Top=Command1(i-1).Top-Command1(i).Height-230Command1(i).Left=Command1(0).LeftElseCommand1(i).Top=Command1(i-1).TopCommand1(i).Left=Command1(i-1).Left+Command1(i).Width+465EndIfNextCommand1(0).Width=Command1(0).Width*3+465*2EndSub§3.7过程所谓过程,就是在程序中可以被调用的一段子程序。VB中的过程分为两类,第一类是系统提供的函数过程和事件过程,另一类是用户自定义的过程。自定义过程又分为:①子过程:以Sub保留字开始;②函数过程:以Function保留字开始;③属性过程:以Property保留字开始;④事件过程:以Event保留字开始。其中用户经常定义的是子过程和函数过程。【教学目标】使学习者能够编写有参和无参过程和自定义函数,来实现应用程序中的各种功能。【教学要求】了解:过程的概念、递归的概念。理解:函数和过程的区别、参数的传递方式;参数传递中传值和传地址的区别。理解:过程和变量的作用域。掌握:过程的定义及调用。【本节重点】过程定义及调用的方法。过程和变量的作用域。【本节难点】过程参数的传递。过程的递归调用【本节应注意的问题】过程和自定义函数的区别、传址与传值的区别。一、过程的定义子过程和函数过程都是为完成某种特定功能而由用户编写的一组程序代码,不同之处是函数过程是带有返回值的特殊过程。定义子过程和函数过程有以下两种方法:1、在模块中定义过程在模块中定义过程的步骤如下:(1)先打开要编写过程的窗体或模块的代码窗口;(2)选择“工具”菜单中的“添加过程”;(3)在“名称”框中填写过程名(不允许有空格);(4)在“类型”选项组中决定所添加的是“子程序”还是“函数”过程;(5)在“范围”选项组中决定过程被调用的范围。“范围”选项组中只有“公有的”和“私有的”两项,其中“公有的”表示公共级的全局过程;“私有的”表示标准模块级或窗体级的局部过程。2、在代码窗口中定义过程在窗体或标准模块的代码窗口中定义过程是常用的过程定义方法,用户可通过用键盘输入程序语言直接定义过程或函数。(1)自定义过程的形式如下:[Static][Public][Private]Sub<子过程名>[(参数列表)]局部变量或常量定义<语句组>[ExitSub]<语句组>EndSub(2)自定义函数的形式如下:[Static][Public][Private]Function〈函数名,([参数列表])[As类型]局部变量或常量定义<语句组><函数名>=返回值EndFunction自定义函数中有关内容的说明:①自定义函数中可以插入ExitFunction语句终止函数的运行,但终止函数运行前仍需写入“<函数名>=返回值”语句,以保证函数有返回值。②Static、Public、Private分别表示静态、全局和局部量。函数定义中的“As类型”表示该函数返回的类型,若缺省说明,则返回变体类型值。参数列表的形式为:[ByVal]<变量名>[()][As类型][,ByVal]<变量名>[()][As类型……]注:ByVal表示值传递,否则为地址传递。二、过程的调用1、子过程的调用语句格式:[Call]<子过程名>[(参数列表)]注:其中Call命令可省略,省略Call命令时也必须省略“参数列表”的圆括号。例:在窗体中定义一个命令按钮Commands当用户单击命令按钮时,计算:3!+5!+7!,其中计算一个数阶乘的算法编写成子过程,并在事件过程中调用。首先编写计算一个数阶乘的子过程PrivateSubjc(ByValjAsInteger,ss)DimiAsIntegerss=1Fori=1Tojss=ss*iNextEndSub编写命令按钮的事件驱动过程PrivateSubCommand1_Click()Dimjj,xAsLongDimi,jAsInteger'调用子过程求3的阶乘=3Calljc(i,ss)x=x+ss'调用子过程求5的阶乘,在调用子过程时省略Call命令=5jci,ssx=x+ss'调用子过程求7的阶乘=7Calljc(i,ss)x=x+ssprint“3!+5!+7!=”;xEndSub2、函数过程的调用由于函数过程可由函数名返回一个值,因此函数过程不能作为单独的语句加以调用,被调用的函数必须作为表达式的一部分,其调用方法与调用VB系统内部函数的方法相同。例:将计算3!+5!+7!的阶乘再用函数过程编程计算。①首先编写计算一个数阶乘的函数过程PrivateFunctionjc(ByVali)AsLongDimjAsInteger,kAsLongk=1Forj=1Toik=k*jNextjc=kEndFunction②编写命令按钮的事件驱动过程PrivateSubCommand1_Click()DimiAsInteger,mAsLongx=jc(3)+jc(5)+jc(7)print“3!+5!+7!=”;xEndSub注意:(1)子过程和函数中定义的参数称为“形参”;调用子过程和函数时定义的参数称为“实参”,形参与实参在个数、类型和位置必须相一致并一一对应;(2)调用子程序或函数时系统将实参的值传递给形参。若形参用ByVal定义,则调用时,实参的值不会随形参值的变化而改变;(3)当参数为数组时,形参与实参声明时应省略其维数,但括号不可省略;(4)调用子过程使用Call时,其实参必须用圆括号括起来。三、过程参数传递1、参数的传递方式在调用过程时,主调过程与被调用过程或函数之间可能会有数据的传递,此种数据的传递称为过程参数传递。过程参数传递的方式有两种:传址和传值。①传址传址的过程是:当主调程序调用过程时,将主调程序中的实参的地址传递给被调过程中的形参,因此实参的值会随形参值的变化而改变。传址又称为引用,是系统默认的方法。使用传址方式时,实参不允许是表达式或常数。②传值传值的过程是:当主调程序调用过程时,将主调程序中的实参值复制给被调过程中的形参,因此被调过程对形参的值任何改变都不会影响到实参的值。使用传值方式时,必须在被调过程的形参定义时前面加“ByVal”关键字。2、数组参数的传递在VB中,允许参数是数组,数组通过传址方式进行数据传递。四、变量、过程的作用域在VB的应用程序中,任何一个变量或过程都会随所处位置及定义方式的不同,造成可被访问范围的不同。变量和过程可被访问的范围称为变量和过程的作用域。1、过程的作用域(1)局部过程(窗体/模块级)局部过程主要是指在某窗体(也可以在标准模块)内用Private定义的过程,这种过程只能被本窗体(或本标准模块)中的过程调用。(2)全局过程全局过程主要是指在标准模块(也可以在窗体)内用Public定义(也可缺省定义)的过程,全局过程可供该应用程序的所有窗体和所有标准模块中的过程调用。在标准模块定义的过程,外部过程均可随时调用。在窗体中定义的全局过程,外部过程要调用时,必须在过程名前加该过程所处的窗体名,如:Forml.summ,其中Forml表示窗体名,summ表示过程名。有关规则如下表所示:作用范围模块级全局级窗体标准模块窗体标准模块定义方式过程名前加Private过程名前加Public或缺省能否被本模块其它过程调用能能能能能否被本应用程序其它模块调用不能不能能,但必须在过程名前加窗体名能,但过程名必须唯一,否则要加标准模块名2、变量的作用域每一名程序设计人员必须熟悉和正确掌握应用程序中变量的作用域,否则所编程序在运行时会产生各种错误,使应用程序不能正确完成程序员所期望的各种功能。(1)局部变量局部变量是指在某一过程内用Dim或Static语句声明的变量,以及不加声明直接使用的变量。局部变量只能在本过程中使用,一旦本过程执行完毕,变量中存储的内容会自动消失,因此其它过程不可访问局部变量。在不同的过程中,允许有同名的局部变量,这些同名变量之间彼此互不相干。(2)窗体或模块级变量窗体或模块级变量指在窗体或模块的“通用声明”段中,用Dim或Private语句声明的变量。此类变量可在本窗体或模块的任何过程中使用。(3)全局变量全局变量只能在标准模块的“通用声明”段中,用Public语句声明的变量。全局变量可被应用程序的任何过程或函数访问,全局变量的值在整个应用程序中始终不会消失和重新初始化,只有当整个应用程序执行结束时,才会消失。五、递归1、递归的概念在一个过程或函数中调用自身,称为“递归”。递归算法可以使编程得到很大的简化,但消耗的机时和占据的内存空间较大。设计一个递归的子过程或函数必须其本身具备递归的条件,而且具备递归结束的条件。递归最典型的一个例子就是求阶乘,由,!=n*(n-1)!,用阶乘本身来定义阶乘,这样的定义就称为“递归定义”。2、递归子过程应用举例汉诺塔问题:十九世纪末,欧洲出现了一种称为汉诺塔的游戏,游戏的规则是在一块铜板上有三根金钢针(编号依次是1,2,3),

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论