版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目四选择结构程序设计任务4.1单条件选择语句If任务4.2多分支条件选择语句SelectCase任务4.3计时器、单选钮和复选框控件
任务4.1单条件选择语句If
任务导入
在分支现象中,经常遇到具有两个分支的现象,即双分支。例如,在计算分段函数
的值时,首先应根据x的值进行判断,当x0时,y的值是x的平方根;否则,y的值是x的取负。学习目标
(1)能熟练使用If语句解决双分支现象。
(2)会使用IIf函数。
(3)会使用If语句的嵌套解决多分支现象。任务实施
1.比较单行结构条件语句与块结构条件语句的异同
1)单行结构条件语句
单行条件语句比较简单,其语法格式为
If〈条件〉Then[〈语句组1〉][Else〈语句组2〉]
【说明】
(1)〈条件〉可以是关系表达式、逻辑表达式或数值表达式。如果以数值表达式做条件,则非0值为真,0为假。
(2)单行条件语句的执行过程为:判断〈条件〉,若为真,则执行〈语句组1〉;否则执行Else后面的〈语句组2〉。
(3)如果没有Else子句,则〈语句组1〉为必要参数,在〈条件〉为真时执行;〈条件〉为False时,什么都不做,执行If语句下面的语句。
【课堂演练】
【实例4-1】输入x,计算y的值。其中:
【实现步骤】
(1)问题分析。该题是数学中的一个分段函数,它表示当x≥0时,用公式y =
来计算y的值;当x < 0时,用公式y
=–x来计算y的值。在选择条件时,即可以选择x≥0作为条件,也可以选择x < 0作为条件。在这里,选x≥0作为选择条件。这时,当x≥0为真时,执行y = ;为假时,执行y
=–x。
(2)建立应用程序用户界面,并设置对象属性,如图4.1
所示。图4.1计算分段函数y的值
(3)编写事件代码。命令按钮Command1的单击(Click)事件代码为
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle‘定义x、y为单精度数
x=Val(Text1.Text)’输入x的值
Ifx>=0Theny=Sqr(x)Elsey=-x‘判断并计算
Text2.Text=y’输出结果
Text2.Locked=True
EndSub
(4)运行程序,结果如图4.1所示。
【实例4-2】已知两个数x和y,比较它们的大小,输出较大数。
【实现步骤】
(1)建立应用程序用户界面,并设置对象属性,如图4.2
所示。图4.2输出两数中的较大数
(2)编写事件代码。命令按钮Command1的单击(Click)事件代码为
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle‘定义变量数据类型为单精度
x=Val(Text1.Text)
y=Val(Text2.Text)
Ifx<yThenLabel3.Caption=“较大数为”&Str(y)
Ifx>yThenLabel3.Caption=“较大数为”&Str(x)
EndSub或者编写代码为
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle'定义变量数据类型为单精度数
x=Val(Text1.Text)
y=Val(Text2.Text)
Ifx<yThent=x:x=y:y=t '如果x小,则交换x、y的值
Label3.Caption="较大数为"&Str(x)'输出比较结果
EndSub
(3)运行程序,结果如图4.2所示。
2)块结构条件语句
使用单行结构条件语句,可以满足许多选择结构程序设计的需要,但是当Then部分和Else部分包含较多内容时,在一行中就难以容纳所有命令了,即使能够容纳,也将使程序结构变得不清晰。为此,VB提供了块If语句,将一个选择结构用多个语句行来实现。块If语句又称为多行If语句,其语法格式如下:
If〈条件〉Then
〈语句组1〉
[Else
〈语句组2〉]
EndIf
【说明】
(1)在块结构中,If语句必须是第一行语句。If块必须以一个EndIf语句结束。
(2)当程序运行到If块时,首先测试〈条件〉,如果为True,则执行Then之后的〈语句组1〉;如果为False,且有Else子句,则执行Else部分的〈语句组2〉。执行完Then或Else之后的语句列后,从EndIf之后的语句继续执行。
(3) Else子句是可选的。
【课堂演练】
【实例4-3】将【实例4-1】中命令按钮Command1的单击(Click)事件代码改为块结构语句。
【修改代码】
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle
x=Val(Text1.Text)
Ifx>=0Then
y=Sqr(x)
Else
y=-x
EndIf
Text2.Text=y
Text2.Locked=True
EndSub
【实例4-4】将【实例4-2】中命令按钮Command1的单击(Click)事件代码改为块结构形式。
【修改代码】
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle
x=Val(Text1.Text)
y=Val(Text2.Text)
Ifx<yThen
Label3.Caption=“较大数为”&Str(y)
Else
Label3.Caption=“较大数为”&Str(x)
EndIf
EndSub
2.使用IIf函数
使用IIf函数也可以实现一些比较简单的选择结构。IIf函数的语法结构为
IIf(〈条件表达式〉,〈真部分〉,〈假部分〉)
【说明】
(1)〈条件表达式〉可以是关系表达式、布尔表达式或数值表达式。如果用数值表达式做条件,则非0为真,0为假。
(2)〈真部分〉是当条件表达式为真时函数返回的值,可以是任何表达式。
(3)〈假部分〉是当条件表达式为假时函数返回的值,可以是任何表达式。
(4)语句
y=IIf(〈条件表达式〉,〈真部分〉,〈假部分〉)
相当于
If〈条件表达式〉theny=〈真部分〉Elsey=〈假部分〉
(5)执行IIf函数时,先分别计算真部分和假部分的值,然后根据条件输出结果。例如:
y=IIf(x>=0,Sqr(Abs(x)),–x)
3.认知If语句的嵌套
1)If语句嵌套语句形式
If语句的嵌套是指If或Else后面的语句块中又包含If语句。语句形式如下:
If〈条件1〉Then
If〈条件2〉Then
EndIf
EndIf
【课堂演练】
【实例4-5】用键盘输入三个不同的数,将它们从大到小排序。
【实现步骤】
(1)问题分析。对逐个数进行比较,如果后面的数大于前面的数,则交换。
(2)建立应用程序用户界面,并设置对象属性,如图4.3
所示。图4.3从大到小排序
(3)编写事件代码。命令按钮Command1的单击(Click)事件代码为
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle,zAsSingle
x=Val(Text1.Text) ‘输入数据
y=Val(Text2.Text)
z=Val(Text3.Text)
Ifx<yThen‘将第1个数与第2个数进行比较,使大数在前
t=x:x=y:y=t’交换数据
EndIf
Ify<zThen
t=y:y=z:z=t ‘使得y>z
Ifx<yThen
'使得x>y,此时的x、y已不再是原x、y的值
t=x:x=y:y=t
EndIf
EndIf
Label4.Caption=“从大到小排序结果:”&Str(x)&Str(y)&Str(z)
EndSub
(4)运行程序。在文本框中分别输入三个数,单击“排序”按钮后,排序后的数显示在标签控件中,如图4.3所示。
【实例4-6】某百货公司为了促销,采用购物打折的优惠办法,如图4.4所示。每位顾客一次购物:
(1)在1000元以上、2000元以下者,按九五折优惠;
(2)在2000元以上、3000元以下者,按九折优惠;
(3)在3000元以上、5000元以下者,按八五折优惠;
(4)在5000元以上者,按八折优惠。
【实现步骤】
(1)问题分析。设购物款数为x元,优惠价为y元,优惠付款公式如下:
(2)建立应用程序用户界面,并设置对象属性,如图4.4
所示。
(3)编写程序代码。命令按钮Command1的Click事件代码如下:
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle
x=Val(Text1.Text)
Ifx<1000Then
y=x '1000元以下不优惠Else
Ifx<2000Then
y=0.95*x '1000~2000元,九五折
Else
Ifx<3000Then
y=0.9*x '2000~3000元,九折
Else
Ifx<5000Then
y=0.85*x '3000~5000元,八五折Else
y=0.8*x '5000元以上,八折
EndIf
EndIf
EndIf
EndIf
Text2.Text=y
EndSub
(4)运行程序,结果如图4.4所示。图4.4计算优惠价
2)掌握If语句的嵌套格式ElseIf的使用方法
从【实例4-6】可以看出,程序代码中出现了多层If语句嵌套,这影响了程序的清晰性。这种情况下,可以使用If语句的嵌套格式ElseIf进行设计,即ElseIf的块If语句,它能使程序简化易懂。
If语句嵌套格式的语法格式如下:
If〈条件1〉Then
〈语句组1〉
ElseIf〈条件2〉Then
〈语句组2〉
[Else
〈语句组n+1〉]
EndIf
【说明】
(1)在If块中,Else和ElseIf子句都是可选的,可以放置任意多个ElseIf子句,但是都必须在Else子句之前。
(2)执行过程:当程序运行到If块时,测试〈条件1〉,如果为真,则执行Then之后的语句;如果为假,则依次计算每个ElseIf部分的条件式(如果有的话),并加以测试。如果找到某个为真的条件时,则紧接在其相关的Then之后的语句组被执行。如果没有一个ElseIf条件为真(或是根本就没有ElseIf子句),则程序会执行Else部分的〈语句组n+1〉。在执行完Then或Else之后的语句列后,会从EndIf之后的语句继续执行。
【课堂演练】
【实例4-7】修改【实例4-6】的程序代码,使用带ElseIf的块If语句计算优惠价。
【修改代码】
只需将“计算”命令按钮Command1的Click事件代码改写为
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle
x=Val(Text1.Text)Ifx<1000Then
y=x
'1000元以下不优惠
ElseIfx<2000Then
y=0.95*x '1000~2000元,九五折
ElseIfx<3000Then
y=0.9*x '2000~3000元,九折
ElseIfx<5000Then
y=0.85*x '3000~5000元,八五折
Else
y=0.8*x ‘5000元以上,八折
EndIf
Text2.Text=y
EndSub
【实例4-8】编制命令按钮代码,要求每单击一次命令按钮,会依次在窗体上显示下面诗词中的诗句。
【实现步骤】
(1)问题分析。设一整型变量i,当其值为1时,显示第一句诗词,当其值为2时,显示第二句诗词,依次类推。
(2)建立应用程序用户界面,并设置对象属性,如图4.5
所示。
(3)编写事件代码。命令按钮Command1的单击(Click)事件代码为
PrivateSubCommand1_Click()
Label1.FontName=“隶书”
Label1.FontSize=14
Label1.ForeColor=QBColor(4)Label1.Caption="静夜思"'设置标签Label1的标题
Command1.Caption="显示"'设置命令按钮的标题属性
StaticiAsInteger'声明静态变量i为整型数
i=i+1
Mytext1="床前明月光,"
Mytext2=Mytext1+Chr(13)+"疑是地上霜。" 'Chr(13)表示换行Mytext3=Mytext2+Chr(13)+"举头望明月,"
Mytext4=Mytext3+Chr(13)+"低头思故乡。"
Ifi=1Then
Label2.Caption=Mytext1
ElseIfi=2Then
Label2.Caption=Mytext2
ElseIfi=3Then
Label2.Caption=Mytext3
Else
Label2.Caption=Mytext4
i=0
EndIf
EndSub
(4)运行程序,结果如图4.5所示。图4.5显示诗句
任务4.2多分支条件选择语句SelectCase
任务导入
用If语句实现的选择结构是从两个分支中选择其中之一。在有些问题的处理中,往往不止两个分支,而是有多个分支,要求从多条路径中选择其中一条。当然,用If语句的嵌套形式也能实现,但不够便捷。这样,当需要根据某一表达式的结果执行多种可能的动作时,使用SelectCase语句更为简洁。学习目标
(1)理解多分支选择结构的特点。
(2)能熟练使用SelectCase语句解决多分支问题。任务实施
1.掌握SelectCase语句的语法格式
使用SelectCase语句进行多分支选择的特点是:从多个选择分支中,选择第一个条件为真的路线作为执行路线。
SelectCase语句的语法格式为
SelectCase〈测试条件〉
[Case〈表达式表1〉
〈语句组1〉]
[Case〈表达式表2〉
〈语句组2〉]
[CaseElse
〈语句组n+1〉]
EndSelect
【说明】
(1)〈测试条件〉为必要参数,可以是任何数值表达式或字符串表达式。
(2)〈语句组〉为可选参数,是一条或多条语句,当〈表达式表〉中有值与〈测试条件〉相匹配时执行。
(3)CaseElse子句用于指明其他语句组,当〈测试条件〉和所有的Case子句的〈表达式表〉中的值都不匹配时,则会执行这些语句。虽然不是必要的,但是在SelectCase块中,最好还是加上CaseElse语句来处理不可预见的测试条件值。如果没有Case值匹配测试条件,也没有CaseElse语句,则程序会从EndSelect之后的语句继续执行。
2.掌握SelectCase语句中〈表达式表〉的使用方法
在SelectCase语句中的Case子句中,〈表达式表〉为必要参数,用来测试其中是否有值与〈测试条件〉相匹配。
Case子句中的〈表达式表〉是一个或多个表达式的列表,有三种形式,见表4-1。当使用多个表达式的列表时,表达式与表达式之间要用逗号“,”隔开。
在Case子句中使用多个表达式时,所列表达式的形式可以不相同,既可以使用值,也可以使用条件或范围,还可以混合使用。例如:
Case2,4,6To8,Is>10
【课堂演练】
【实例4-9】用SelectCase语句修改【实例4-7】中的代码计算优惠价。
【修改代码】
将“计算”命令按钮Command1的Click事件代码改写为
PrivateSubCommand1_Click()
DimxAsSingle,yAsSingle
x=Val(Text1.Text)
SelectCasex
CaseIs<1000
y=x
CaseIs<2000
y=0.95*x
CaseIs<3000
y=0.9*x
CaseIs<5000
y=0.85*x
CaseElse
y=0.8*x
EndSelect
Text2.Text=y
Text2.Locked=True
EndSub
【实例4-10】用Select语句编制命令按钮代码实现【实例4-8】。
【修改代码】
PrivateSubCommand1_Click()
StaticiAsInteger ‘声明静态变量i为整型数
i=i+1
Mytext1=“床前明月光,”
Mytext2=Mytext1+Chr(13)+“疑是地上霜。”
Mytext3=Mytext2+Chr(13)+"举头望明月,"Mytext4=Mytext3+Chr(13)+"低头思故乡。"
SelectCasei
Case1
Label2.Caption=Mytext1
Case2
Label2.Caption=Mytext2
Case3
Label2.Caption=Mytext3
Case4
Label2.Caption=Mytext4
i=0
EndSelect
EndSub
【实例4-11】编写一个对输入字符进行转换的程序。转换规则为,将其中的大写字母转换成小写字母,小写字母转换成大写字母,空格不转换,其余转换成“*”。要求每输入一个字符,马上就进行判断和转换。
【实现步骤】
(1)建立应用程序用户界面,如图4.6所示。
(2)设置对象属性,如图4.7所示。图4.6设置用户界面图4.7设置对象属性
(3)编写事件代码。根据题中要求,当在“输入字符串”文本框中每输入一个字符键时,马上就进行判断,这就要求对“输入字符串”文本框对象Text1对应的KeyPress事件进行编程。
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
DimaaAsString*1
aa=Chr$(KeyAscii) '将ASCII码转换成字符SelectCaseaa
Case“A”To“Z”
aa=LCase(aa) ‘大写转换成小写
Case“a”To“z”
aa=UCase(aa)
'小写转换成大写
Case""
aa=""
CaseElse
aa="*"EndSelect
Text2.Text=Text2.Text&aa '将转换文本框已有的内容与刚输入并转换的字符连接
EndSub
命令按钮Command1的Click事件代码为
PrivateSubCommand1_Click()
Text1.Text="" '清除文本框Text1的内容
Text2.Text="" '清除文本框Text2的内容
EndSub命令按钮Command2的Click事件代码为
PrivateSubCommand2_Click()
UnloadMe
EndSub
(4)运行程序,结果如图4.8所示。图4.8大小字母转换
任务4.3计时器、单选钮和复选框控件
任务导入
Windows环境下的应用程序非常注重用户界面的美观和实用。控件是构成用户界面的基本元素,只有掌握好控件所具有的属性、方法以及该控件能接收的事件,才能写出界面友好、操作简练的应用程序。在VB工具箱中有20个标准控件,我们在前面已经介绍了其中的三个控件,即标签控件Label、文本框控件Text和命令按钮控件CommandButton。本任务将再介绍三个标准控件:计时器Timer、单选钮OptionButton和复选框CheckBox。其他控件将在以后任务中逐渐介绍。学习目标
(1)会使用计时器(Timer)控件进行编程。
(2)能熟练使用单选钮(OptionButton)控件。
(3)能熟练使用复选框(CheckBox)控件。任务实施
1.使用计时器控件进行编程
计时器(Timer)控件能有规律地以一定的时间间隔激发计时器事件,从而执行相应的程序代码。
计时器控件在设计时显示为一个小时钟图标,而在运行时并不显示此图标,通常用标签来显示时间。计时器控件的主要属性如表4-3所示。
Interval(时间间隔)属性是一个非常重要的属性,表示两个计时器事件之间的时间间隔,其值以毫秒(ms)为单位,介于0~64767ms之间,所以最大的时间间隔约为1.5min。当Interval为0时表示屏蔽计时器。
如果需要屏蔽计时器,则将Interval设为0。
如果需要每0.5秒产生一个计时器事件,则将Interval属性值设为500,这样,每隔500毫秒(即0.5秒)就激发一次计时器事件,从而执行相应的Interval事件过程。
如果需要每1秒产生一个计时器事件,则将Interval属性值设为1000,这样,每隔1000毫秒(即1秒)就激发一次计时器事件。
【课堂演练】
【实例4-12】设计数字计时器。
【实现步骤】
(1)建立用户界面。在窗体上建立一个计时器控件和两个标签控件,如图4.9所示。图4.9建立用户界面
(2)按表4-4所示设置对象属性。
(3)编写程序代码。编写计时器控件Timer1的Timer(计时器)事件代码:
PrivateSubTimer1_Timer()
Label2.Caption=Time$‘在标签上显示当前时间
EndSub
(4)运行程序,结果如图4.10所示。图4.10程序运行结果
2.熟悉单选钮控件的主要属性
单选钮的左边有一个图标。一般来说,单选钮总是成组(单选钮组)出现的,用户在一组单选钮中必须选择一项,并且最多只能选择一项。当某一项被选定后,其左边的圆圈中出现一个黑点。单选钮主要用于在多个选项中由用户选择一个选项的情况。
单选钮的主要属性如表4-5所示。
【说明】
(1)要使某个按钮成为单选按钮组中的缺省按钮,只要在设计时将其Value属性设置成True即可。它将保持被选中状态,直到用户选择另一个不同的单选钮或用代码改变它。
(2)要禁用某单选钮,可将其Enabled属性设置为False。程序运行时,若此单选钮变为灰色,则表示无法选取该单选钮。
3.掌握选用单选钮的方法
选择某个单选钮可以用下面方法之一:
(1)在运行期间,单击选中单选钮。
(2)用Tab键定位到单选钮组,然后在组内使用方向键定位单选钮。
(3)用代码将它的Value属性设置为真:Option1.Value=
True。
(4)使用在单选钮标题中指定的快捷键。
4.了解单选钮的事件
单选钮和复选框都可以接受Click事件,但一般不需要编写Click事件代码。因为当用户单击单选钮或复选框时,它们会自动改变状态。
5.使用单选钮组
单选钮的一个特点是当选定其中一个后,其余就自动关闭。但当需要在同一窗体中建立几组相互独立的单选钮时,就要用框架(Frame)将每一组单选钮框起来,这样在一个框架内的单选钮为一组,它们的操作不影响框外其他组的单选钮。
【课堂演练】
【实例4-13】如图4.11所示,利用单选按钮设置字体和字号。
【实现步骤】
(1)建立应用程序用户界面和设置对象属性。在窗体中建立了两组单选钮,分别放在名称为“字体”和“字号”的框架中,如图4.11所示。当用户选定了“宋体”单选钮后,还可以选定“14号”单选钮。该应用程序运行时,只有当用户选定了字体和大小,并选择“确定”按钮后,文本框的字体和大小才改变。图4.11建立用户界面和属性
(2)编写事件代码。下面是该窗体中涉及的两个事件过程:
PrivateSubCommand1_Click()
IfOption1.ValueThen
Text1.FontName=“宋体”
Else
Text1.FontName=“黑体”
EndIf
IfOption3.ValueThen
Text1.FontSize=10
Else
Text1.FontSize=14
EndIf
EndSub
PrivateSubCommand2_Click()
UnloadMe
EndSub
(3)运行程序,结果如图4.12所示。图4.12单选钮程序运行结果
【实例4-14】将单选钮设计成图形按钮示例。设计流动字幕板,使滚动字幕内容“海阔凭鱼跃,天高任鸟飞”在窗体中从右向左反复地移动。
【实现步骤】
(1)建立应用程序用户界面。选择“新建”工程,进入窗体设计器,增加一个计时器控件Timer1、一个标签控件Label1和一个命令按钮Command1,四个单选钮Option1~Option4。其中,计时器控件Timer1可以放在窗体的任何位置,参见图4.13。图4.13建立用户界面
(2)设置对象属性。修改Timer1的属性:Interval改为100,Enabled改为False。修改Option1~Option4的Style属性为:
1-Graphical(图形方式)。其他属性修改参见图4.14。图4.14滚动字幕程序运行结果
(3)编写事件代码。命令按钮Command1的Click事件代码:
PrivateSubCommand1_Click()
IfCommand1.Caption=“&S暂停”Then
Command1.Caption=“&C继续”
Timer1.Enabled=False
Else
Command1.Caption=“&S暂停”
Timer1.Enabled=True
EndIf
EndSub通过在不断激发的Timer事件中改变标签的Left属性,可改变标签的位置。编写Timer1的Timer事件代码:
PrivateSubTimer1_Timer()
IfLabel1.Left+Label1.Width>0Then
Label1.MoveLabel1.Left–20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《业务经营过程控制》课件
- 2024年城市渣土清理专项协议
- 2024专业金属打磨工职业合同
- 《Rood治疗技术》课件
- 【大学课件】建筑企业管理总论
- 《儿童咳嗽》课件
- 《语文下册兰兰过桥》课件
- 幼儿园中班健康教育计划范文
- 2024乡镇府人文宣传工作计划范文
- 托班第二学期计划范文
- 2024年深圳中考数学真题及答案
- 2024年档案知识竞赛考试题库300题(含答案)
- 枸杞知识简介
- 2024年统编版新教材语文小学一年级上册第六单元检测题及答案
- 2023秋苏教版二年级科学上册1-1《今天天气怎么样》(教案及反思)
- 国家开放大学本科《人文英语3》一平台机考真题及答案(第一套)
- 10000字万能检讨书【九篇】
- 个人和企业间资金拆借合同
- 范进中举省公开课一等奖新名师课比赛一等奖课件
- 电视节目策划智慧树知到期末考试答案章节答案2024年浙江传媒学院
- 长塘水库工程环评报告书
评论
0/150
提交评论