Visual-Basic程序设计综合教程第4章-控制结构_第1页
Visual-Basic程序设计综合教程第4章-控制结构_第2页
Visual-Basic程序设计综合教程第4章-控制结构_第3页
Visual-Basic程序设计综合教程第4章-控制结构_第4页
Visual-Basic程序设计综合教程第4章-控制结构_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 控制结构 VB语言的开发过程主要由两部分组成:设计用户界面和编写事件驱动代码。我们可以利用VB语言提供的各种控件对象和各种工具来创建可视化的用户界面;然后编写相应的事件代码。对于每一个程序代码段而言,必须遵守结构化程序的设计思想。结构化程序代码无论大小,都是由三种基本结构(顺序结构、选择结构、循环结构)构成,我们通常称其为控制结构,熟练掌握控制结构的概念及使用是程序设计的最基本的要求。 顺序结构最为简单,只要语句按顺序一行接着一行执行就是顺序结构。本章着重介绍选择结构和循环结构以及用于界面设计的部分常用控件。 【主要内容】常用控件单选按钮、复选框和框架选择结构IF和SELECT-CAS

2、E语句循环结构FOR-NEXT、WHILE-WEND和DO-LOOP语句4.1 引例 【例4.1】查询教师一周课程安排情况。界面设计如图4.1(a)所示。要求选择某一工作日,然后单击“查询”命令按钮,在相应位置显示该工作日的课程安排情况。 图4.1(a)【例4.1】用户界面 工作日1、2节3、4节5、6节周一网络基础VB周二计算机基础周三VB周四计算机基础周五网络基础假设某教师的课表如下表所示: 详细设计步骤见示例说明: 【例4.1】的用户界面设计,用到了单选按钮(optionbutton)、命令按钮、标签和框架(Frame)几种控件,命令按钮和标签在前面的章节中已经介绍过,单选按钮(opti

3、onbutton)、框架(Frame)和其余几种常用控件在本章中将会作详细介绍。命令按钮“查询”的Click事件过程代码的中心语句使用单分支选择语句If语句或多分支选择语句Select-Case语句实现。【例4.2】设计一个需要密码才能进入的“系统进入界面”。要求:若输入的密码正确,则进入该系统。为简便起见,只给出进入系统的提示信息;若输入的密码不正确,要求重新输入,并提供相关提示信息和输入界面;同时,若三次输入密码都不正确,则自动退出。 详细设计步骤见示例说明:对象Form的Load事件过程代码的中心语句采用循环结构语句while-Wend语句和选择结构语句If-Then-Else语句实现。

4、综合上述内容可以看出,【例4.1】和【例4.2】涉及到的主要知识点有: 设计用户界面用到的控件对象:单选按钮(optionbutton)和框架(Frame)。 构成程序代码的中心语句有选择结构语句和循环结构语句。在本章的各个小节中,我们将对上述内容和相关知识作详细介绍。 4.2 单选按钮、复选框和框架单选按钮、复选框和框架都是设计用户界面的常用控件。在工具箱中的位置和图标如下图所示。在本小节中,将依次介绍上述控件的用途、属性、方法和事件。框架单选按钮复选框4.2.1 单选按钮1 用途 单选按钮(OptionButton)也称作选择按钮。一组单选按钮控件可以提供一组彼此相互排斥的选项,任何时刻用

5、户只能从中选择一个选项,实现一种“单项选择”的功能,被选中项目左侧圆圈中会出现一黑点。【例4.1】用户界面中使用了“单选按钮”实现用户对工作日的选择。 2. 重要属性(1) Caption:文本标题。设置单选按钮的文本注释内容。如下图所示用户界面,单选按钮(option1)的Caption属性值为“周一”。 (2) Alignment属性: 0Left Justify(缺省)控件按钮在左边,标题显示在右边。1Right Justify 控件按钮在右边,标题显示在左边。 如左图和右图所示用户界面,单选按钮(option1)的Alignment属性值分别为“0”和“1”。 (3)Value 属性T

6、rue: 单选按钮被选定False: 单选按钮未被选定(缺省设置) 如左图和右图所示用户界面,单选按钮(option1)的Value属性值分别为“False”和“True”。 (4) Style 属性0-Standard:标准方式 1-Graphical:图形方式说 明: 在Style属性设置为1时,可使用 Picture 属性、DownPicture属性、DisabledPicture属 性在如下左图和右图所示的用户界面,单选按钮(option1)的Style属性值分别为“0”和“1”。 3 方法 SetFocus方法是单选钮控件最常用的方法,可以在代码中通过该方法将Value属性设置为“T

7、rue”。 与命令按钮相同,使用该方法之前,必须要保证单选钮处于可见和可用状态(即Visible与Enabled属性值均为True)。4 事件Click事件是单选钮控件最基本的事件,一般情况用户无需为单选钮编写Click事件过程,当用户单击单选钮时,它会自动改变状态。 4.2.2 复选框(检查框) 1 用途复选框(CheckBox)也称作检查框、选择框。一组检查框控件可以提供多个选项,它们彼此独立工作,用户可以同时选择任意多个选项,实现一种“多项选择”的功能。选择某一选项后,该控件将显示“”,而清除此选项后,“”消失。 2 重要属性Caption、Alignment、Style与单选钮相同Va

8、lue属性与单选按钮不同,其值为数值型数据,可取“ 0”,“1”,“2”0-Unchecked:表示该复选框未被选定1-Checked:表示选定该复选框2-Grayed:表示该复选框被禁止选择(灰色) 复选框名Value属性值意义Check10未被选定Check2Check31被选定Check4Check52被禁止选择Check6如下表所示各复选框的Value属性值,其显示状态如下图所示。Value=0 Value=Value= 4 方法同单选按钮一样,SetFocus方法也是复选框常用的方法。5 事件Click事件是复选框控件最基本的事件。用户一般无需为复选框编写Click事件过程,但其对V

9、alue属性值的改变遵循以下规则:单击未选中的复选框时,Value属性值变为1;单击已选中的复选框时,Value属性值变为0;单击变灰的复选框时,Value属性值变为0。 4.2.3 框架 1 用途框架(Frame) 控件是一个容器控件,为控件提供可标识的分组,提供了视觉上的区分和总体的激活/屏蔽特性 2 重要属性(1)Caption属性:框架标题(2)Enabled属性:缺省为True,框架内的对象是“活动”的。 False:标题呈灰色,框架内的所有对象均被屏蔽,不允许对其进行操作。 (3)Visible属性:True:框架及其控件可见。False:框架及其控件被隐含起来。3 事件:框架可以

10、响应的事件有Click、DblClick。说明:一般不需要有关框架的事件过程,它不接受用户输入,不能显示文本和图形,也不能与图形相连。 4 操作使用框架的主要目的是为了对相关控件进行分组,在同一框架内的控件为一组,可作为一个整体和框架一起移动,而且不同框架内的控件的操作互相不会影响,相互独立。通常有两种方法把指定的控件放到框架中,对控件进行分组。方法一: 在指定位置画出框架。 在框架内画出需要成为一组的控件。 方法二:有时,可能需要对窗体上(不是框架内)已有的控件进行分组,把它们“移动”到不同的框架内。操作步骤如下: 选择需要分组的控件。 执行“编辑”菜单中的“剪切”命令(或按Ctrl+X),

11、即把选择的控件放入剪贴板。 在窗体上画出框架,并保持它为活动状态。 执行“编辑”菜单中的“粘贴”命令(或按Ctrl+V)。 运用框架操作的方法一,在窗体中建立三个框架(Frame1、Frame2和 Frame3);然后将六个单选按钮(Option1、Option2、Option3、Option4、Option5和Option6)分别放置在三个框架中,建立如下图所示的用户界面。在同一框架内的单选按钮为一组,和对应框架成为一个整体,可以随着框架的移动而移动,并且不同框架内单选按钮的操作互不影响。说明:在一个窗体中,若没有使用框架对多个单选按钮进行分组,而是直接将多个按钮放置在窗体中,如果选择其中一

12、个单选按钮,那么,其它单选按钮将会自动关闭。但是,当需要在同一个窗体上建立几组相互独立的单选按钮时,则必须采用框架为单选按钮分组,使得在不同框架内的单选按钮的操作互不影响,即每个框架内的单选按钮的操作不影响其它组的按钮。4.3 选择结构 选择结构是根据选择条件来控制程序的流程走向,有选择的执行相应的语句块。在VB语言中,构成选择结构的语句有If语句和Select-Case语句。前者较适合用于只有两种选择的情况,而后者较适合用于存在多种选择的情况。4.3.1 if语句【例4.3】 设计一个程序,通过单选按钮设置简单个人信息,如性别、民族和入党信息。同时将选择后的信息显示出来。操作界面如下图所示:

13、说明:【例4.3】中用户界面设计采用三个框架。将代表不同性质的几个单选按钮分为三个不同的组。使得在不同组内的单选按钮的操作互不影响。 命令按钮“显示”的Click事件过程的功能主要由if选择语句实现。 1 If语句格式格式1:If Then Else Endif格式2:If Then Else 说明:“格式1”是一种最常见的If语句格式。执行过程为: 判断If 语句的条件是否为真,为真,转;若为假,转。 执行Then子句,不执行Else子句;转。 跳过Then子句, 执行Else子句。 执行Endif的后继语句。总之,Then子句和Else子句必须二者择一的选择执行。“格式2”是“格式1”行书

14、写形式,省略了关键字Endif。执行过程同“格式1”。格式3:If Then Endif说明:“格式3”是“格式1”省略else子句的形式。执行过程为: 判断If 语句的条件是否为真,为真则转;若为假,转。 执行Then子句,转。 执行Endif的后继语句。格式4:result=IIf(条件,为真的结果值,为假的结果值)说明:“格式4”称为IIf函数,是“格式2”的简写版本。执行过程为:条件若为真,则将“为真的结果值”赋给变量result,条件若为假,则将为假的结果值赋给变量result。显然,使用IIf函数可大大简化代码,但并不是所有的if语句都可改写为IIf函数,只有当then子句和els

15、e子句都为简单的赋值语句,且赋值的对象为同一个变量时,才可使用IIf函数。 【例4.4】根据给定范围的年份,判断该年份是否为闰年。界面设计如下图: 分析:我们知道,某一年份是闰年的条件是该年号能被400整除,或者能被4整除而不能被100整除,因此可将上述条件作为选择结构的判断条件,如满足该条件则输入的年份为闰年,否则输入的年份不是闰年。另外,若输入的年份不在要求的范围内,则要求继续重新输入,直到输入的年份在要求的范围内。显然代码段需要使用选择结构。说明: 【例4.4】中命令按钮“判断”的Click事件过程代码的中心语句是If条件选择语句,根据实际情况,为了判断输入的年份是否在要求的范围内,使用

16、了If语句的嵌套,外层If语句用来判断输入的年份是否在要求的范围内,若在要求的范围,则在内层If语句来判断输入的年份是否是闰年,并显示相应判断结果;若输入的年份不在要求的范围内,则要求继续重新输入。 外层If语句的判断条件(y = 1) And (y = 5000) 和内层If语句的判断条件(y Mod 4 = 0) And (y Mod 100 0) Or (y Mod 400 = 0)都是逻辑表达式,逻辑结果值均由具体输入的年份而定。条件(y = 1) And (y = 5000)用来判断输入的年份是否在要求的范围内。条件(y Mod 4 = 0) And (y Mod 100 0) Or

17、 (y Mod 400 = 0) 则用来判断输入的年份是否能被400整除,或者能被4整除而不能被100整除,即用来判断输入的年份是否为闰年。4.3.2 Select-Case语句 在实际应用中,经常会出现多种选择的情况,使用If语句的嵌套可以实现这种功能,但程序结构显得较为凌乱,不便于调试,使用多重选择结构语句Select-Case语句能够简便的实现这种功能,并且会使程序的结构更清晰、更直观。通常将Select-Case语句称为多分支选择语句,或多重选择语句。一般可以实现在多种选择的情况下,选择其中之一执行的功能。 1 Select-Case语句格式 Select Case 变量或表达式 Ca

18、se 表达式列表1 语句块1 Case 表达式列表2 语句块2 Case Else 语句块n+1End Select2 说明: (1)格式中的又可称为。 (2):是与 同类型的下面四种形式之一: 表达式 a +5 一组枚举表达式(用逗号分隔) 2, 4, 6, 8 表达式1 To 表达式2 60 to 100 Is 关系运算符表达式 Is = 90 Text2.Text = 优秀 Case Is = 80 Text2.Text = 良好 Case Is = 70 Text2.Text = 中等 Case Is = 60 Text2.Text = 及格 Case Else Text2.Text

19、= 不及格 End SelectEnd Sub 其中Case子句中的表达式也可以改为其他形式,如: Case Is = 70 Text2.Text = 中等 Case 70 to 79 Text2.Text = 中等“思考:如若改为如下形式: Case 70=grade and grade80 Text2.Text = 中等 是否可以得到正确的运行结果?请读者自行测试。 【例4.6】设计一个程序,在窗体的中心位置放置一个较小的图像,当按下并且释放键盘上的A、S、D、W键时,图像分别向左、下、右、上方向移动。 设计用户界面 根据题目要求,当按下并且释放键盘上的某个键时,可触发窗体上图像的移动,因

20、此应编写窗体的键盘事件Form_KeyPress的驱动代码。代码如下:Private Sub Form_KeyPress(KeyAscii As Integer)以参数KeyAscii为测试表达式,KeyAscii表示被按键的ASCII码值Select Case KeyAscii Case 97 按下并且释放A键时图像向左移动,键A对应的ASCII码值是97 Image1.Left = Image1.Left - 500 Case 100 按下并且释放D键时图像向右移动,键D对应的ASCII码值是100 Image1.Left = Image1.Left + 500 Case 119 按下并且

21、释放S键时图像向右移动,键S对应的ASCII码值是119 Image1.Top = Image1.Top - 500 Case 115 按下并且释放W键时图像向右移动,键W对应的ASCII码值是115 Image1.Top = Image1.Top + 500End SelectEnd Sub通过【例4.6】,读者应注意以下知识点: 多重选择结构Select Case语句的语法及执行过程。 键盘事件的运用。如本例中的Form_KeyPress键盘事件。 图像控件和图片框控件在使用上的区别。 图像控件的Left属性和Top属性的使用。 思考:可否将上述代码的Select Case语句改为If语句

22、。 【例4.7】根据输入的年和月,判断该年、月的天数。 分析:根据常识可知,1,3,5,7,8,10,12月份的天数为31天,4,6,9,11月份的天数为30天,2月的平年为28天,闰年为29天。因此程序可以采用Select-Case语句来完成不同天数的选择。另外,给定的年份若能被400整除,或者能被4整除而不能被100整除的话,则该年号为闰年;否则为平年。程序应采用If语句来完成对闰年的判断。根据题意,“计算天数”命令按钮的click事件过程代码如下:Private Sub Command1_Click()Dim y, m, d, fy = Val(Text1.Text)m = Val(Te

23、xt2.Text)Select Case m Case 1, 3, 5, 7, 8, 10, 12 d = 31 Case 4, 6, 9, 10, 11 d = 30 Case 2 If (y Mod 400= 0) Then f = 1 Else If (y Mod 4 = 0 And y Mod 100 0) Then f = 1 Else f = 0 End If End If If (f = 1) Then d = 29 Else d = 28 Case Else Text2.Text = End SelectLabel3.Caption = Str$(y) + 年 + Str$(m

24、) + 月份的天数为:Text3.Text = Str$(d)End Sub“清除”命令按钮的click事件过程代码如下:Private Sub Command2_Click() Text1.Text = Text2.Text = Text3.Text = Label3.caption= End Sub上述“计算天数”命令按钮的click事件过程代码中的代码段中的If-Else-End If语句中Else子句又是一条IF-Else-End If语句。这种结构称为“选择结构的嵌套”,即选择语句的子句又可以是其它选择语句;嵌套时应注意以下几点: IF语句和Select语句可以互相嵌套。 嵌套中要注

25、意相关语句的配对; 嵌套的层次不要太多,能不用嵌套的尽量不用嵌套。 嵌套时处于同一层次的代码要对齐,尽量提高程序的可读性。 4.4 循环结构 循环结构是结构化程序设计的基本结构之一,和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。Visual Basic提供了多种不同风格的循环结构语句,包括For-Next、While-Wend、For Each-Next和Do-Loop等语句。由于篇幅有限,本小节主要介绍For-Next、 While-Wend和Do-Loop语句。 4.4.1 For-Next语句 For-Next语句是使用最灵活方便的一种循环语句,通常用于已知循环次数的情况。1

26、For-Next语句格式 For循环变量=初值 To 终值 Step 步长 循环体 Next 循环变量 2 说明: 格式中的“初值”、“终值”、“步长”均为数值表达式。“步长”为循环变量的增量。其值若为正,初值应小于终值;若为负,初值应大于终值。如步长为1,Step 1可省略不写。 Next后面的循环变量若与For语句中的循环变量相同,可以省略。 For-Next语句执行过程: 循环变量得到初值,系统记录下终值和步长的值。 循环变量和终值进行比较,若“超过”终值,则转,否则转。 执行循环体。 循环变量自动增加“步长”的值,转。 退出循环,执行Next的后继语句。 上述执行过程中的“超过”有两种

27、含义。当步长为正时,循环变量大于终值为“超过”;当步长为负时,循环变量小于终值为“超过”。 在循环体内任何位置放置Exit For语句可以用来随时退出循环。【例4.8】求,n的值由用户输入。 在循环结构中,最常用的算法就是累加和累乘。 “求和”按钮的click事件过程代码如下:Private Sub Command1_Click() Dim s%, n%, i% n = Val(Text1.Text) s = 0 For i = 1 To n s = s + i Next i Text2.Text = sEnd Sub 从上面简单的例子可以看出,一般累加求和是通过循环结构和循环体内的一句表示累

28、加性语句来实现的,如上例中的s = s + i ,通常把程序中s变量称为累加器。要注意,s的初值赋为0,并且赋初值的操作一定要在循环结构外进行。 思考:采用类似方法求n!。(注意累乘器的初值) 4.4.2 While-Wend语句 在已知循环次数的情况下,使用For-Next语句组织循环比较方便,但是,当不知道循环次数时,使用For-Next语句来组织循环就显得无能为力,在这种情况下,使用While-Wend语句会更为方便。1 While-Wend语句格式: While 循环条件 循环体 Wend2 说明: 循环条件为关系表达式或逻辑表达式。 While-Wend语句执行过程: 判断“循环条件

29、”是否为真,若为真,转;若为假,转。 执行循环体,转。 退出循环,执行Wend的后继语句。 注意,While-Wend语句不能像For-Next语句那样自动修改循环变量的值用来改变循环条件,为避免死循环,在While-Wend语句的循环体内一定要有改变循环条件的语句。【例4.9】运用While-Wend语句实现例4.8。 用户界面同例4.8。“求和”按钮的click事件过程代码如下: Private Sub Command1_Click() Dim s%, n%, i% n = Val(Text1.Text) s = 0 i = 0 While i = n s = s + i i = i +

30、1 Wend Text2.Text = sEnd Sub 思考:上述代码While-Wend语句的循环体内如果没有i=i+1会如何?4.4.3 Do-Loop语句 1 Do-Loop语句格式Do-Loop语句非常灵活,有四种格式。格式1: Do 循环体 Loop While 循环条件格式2:Do 循环体 Loop Until 循环条件格式3: Do While 循环条件 循环体 Loop 格式4: Do Until 循环条件 循环体 Loop 2 说明: “格式1”语句执行过程: 执行循环体。 判断循环条件是否为真,若为真,则转;若为假,转。 退出循环,执行Loop Wend的后继语句。 “格

31、式2”语句执行过程: 执行循环体。 判断循环条件是否为假,若为假,则转;若为真,转。 退出循环,执行Loop Until的后继语句。 “格式3”语句执行过程: 判断循环条件是否为真,若为真, 转 ;若为假,转。 执行循环体,转。 退出循环,执行Loop的后继语句。 “格式4”语句执行过程: 判断循环条件是否为假,若为假,转;若为真,转。 执行循环体,转。 退出循环,执行Loop的后继语句。 从上述四种格式的执行过程可以看出,格式1和格式2的共同特点是:不管循环条件成立与否,循环体至少要被执行一次;而格式3和格式4的共同特点是:首先要判断循环条件是否成立,才能决定是否执行循环体,在这种情况下,循

32、环体有可能一次也不执行。 在上述四种格式中,使用While时(如格式1 和格式3),循环条件为“真”,执行循环体,循环条件为“假”,退出循环,通常将这种循环称为“当型循环”;相反,使用Until(如格式2 和格式4)时,循环条件为“假”,执行循环体,循环条件为“真”,退出循环,通常将这种循环称为“直到循环” 。 为避免死循环,四种格式的循环体内都要有改变循环条件的语句。 Do While -Loop语句和While-Wend语句在语法、使用和执行过程各个方面都一样,可以混用。 在四种格式的循环体内任何位置放置Exit Do语句可以用来随时退出循环。【例4.10】运用Do-Loop语句实现例4.

33、8,即累加运算。 用户界面同例4.8。经过分析,可以使用Do-Loop语句的其中两种格式(格式3和格式4)实现例4.8,求和按钮的click事件过程代码如下:方法一:(采用格式3)Private Sub Command1_Click() Dim s%, n%, i% n = Val(Text1.Text) s = 0 i = 0 Do While i = n s = s + i i = i + 1 Loop Text2.Text = sEnd Sub方法二:(采用格式4)Private Sub Command1_Click() Dim s%, n%, i% n = Val(Text1.Text

34、) s = 0 i = 0 Do Until i n s = s + i i = i + 1 Loop Text2.Text = sEnd Sub【例4.11】通过键盘输入任意多个数值数据,将其累加并输出,同时以-1作为数据输入结束的标志。并且如果没有进行累加,给出相关提示信息。 经过分析,该题目用户界面设计简单,只需在窗体上放置一个开始累加求和标志的命令按钮即可。命令按钮“累加求和”的click事件过程代码如下:Private Sub Command1_Click()s = 0 :x = InputBox(请输入加数, 累加求和)f = 0 f作为未输入任何数据的判断标志(即首先输入-1)Do Until x = -1 f = 1 s = s + x x = InputBox(请输入加数, 累加求和)Loop在未输入任何数据(即首先输入-1)和

温馨提示

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

评论

0/150

提交评论