导图社区 Visual Basic 程序设计
根据所给定的条件为真(条件成立)与否,而某决定从各实际可能不同分支中执行某一分支的相应操作,并且任何情况下总有:“无论分支多寡,必择其一;纵然分支众多,仅选其一”的特性。
编辑于2022-03-24 17:02:17Visual Basic 程序设计(5)
单元5 选择结构程序设计
单元说明
顺序现象是客观世界最常见、最简单的普遍现象,但是在自然界中还存在许许多多的分支现象
选择结构是一种常用的基本结构,是计算机科学用来描述自然界和社会生活中分支现象的重要手段
其特点是
根据所给定的条件为真(条件成立)与否,而某决定从各实际可能不同分支中执行某一分支的相应操作,并且任何情况下总有:“无论分支多寡,必择其一;纵然分支众多,仅选其一”的特性
本单元将通过若干教学任务,介绍VB中提供的实现选择结构程序设计的多种语句和相关选择性控件。主要内容包括:
关系表达式和布尔表达式的运算方法
简单条件选择结构的程序实现方法
多分支条件选择结构的程序实现方法
计时器、单选钮和复选框控件的使用
5.1条件表达式
任务导入
在选择结构中,需要根据给定的条件为来判断执行不同的分支,在条件语句中,作为判断依据的表达式称为“条件表达式”
根据“条件”的简单或复杂程度条件表达式可分为两类
关系表达式与布尔表达式
条件表达式的结果为布尔值:Ture或False
在VB中,True的值为-1,False的值为0
本任务学习条件表达式和布尔表达式的计算方法
学习目标
掌握关系表达式的计算方法
掌握布尔表达式的计算方法
够正确运用各种运算符的优先级
任务实施
5.1.1关系表达式
关系表达式是用关系运算符将两个表达式连接起来的式子
关系表达式的格式为
<表达式1> <关系运算符> <表达式2> [ <关系运算符> <表达式3> ...]
说明
在VB中,提供了6种关系运算符,即小于“<”、小于或等于“<="、大于“>”、大于或等于“>=”、等于“=”、不等于“<>”
1、一元二次方程ax² + bx + c = 0有实根的条件为:a≠ 0,并且b²- 4ac ≥ 0,其相应的VB布尔表达式为 ?
【答】a <> 0 And b^2 – 4 * a * c >= 0
关系表达式的运算次序:先分别求出关系运算符两侧表达式的值,然后把二者进行比较, 二者的关系若与关系运算符指示的一样, 则关系运算的结果为True, 否则为False
关系运算符两侧可以是数值型表达式、字符型表达式或日期型表达式,也可以是作为表达式特例的常量、变量或函数
数值型数据:按数值大小进行比较
字符型数据:按ASCII码值进行比较
首先比较两个字符串的第一个字符, ASCII码值较大的字符所在的字符串大
如果第一个字符相同, 则比较第二个,……,以此类推
常见字符值的大小为
"空格"<“0”<…<"9”<“A”<…<“Z”<“a”<…<“z”<“任何汉字”
日期型数据:将日期看成“yyyymmdd”的8位整数, 按数值大小比较
关系运算符的运算级别相同,从左向右进行计算
关系运算符的运算级别相同,从左向右进行计算
例如:
“8”<10, 值为True, 强制转换为数值型
1>(2>1) , 值为True, 强制转换为数值型
1=True, 值为False, 强制转换为数值型
数学不等式:1≤x≤5,在VB中不能写成1<=x<=5
因为, 令x=6, 不满足1≤x≤5, 但在VB中1<=x<=5中却是True。这是由于在VB中,1<=x<=5相当于(1<=x)<=5
正确写法为1<=x And x<=5
不要对单精度数或双精度数进行等于“=”比较
例如: 1.0/3.0*3.0=1.0
在数学上该表达式为恒等式。但由于计算机运算时的浮点误差,将造成不相等
【实例5.1】
计算下列表达式的值
3<6
值为True
8<=5
值为False
3>2
值为True
2>=3
值为False
2=3
值为False
"a"<>"b"
值为True
3*4<1+2
值为False
5.1.2布尔表达式
布尔表达式是指用布尔运算符连接若干关系表达式或布尔值而组成的式子
布尔表达式的值也是一个布尔值
VB中,常用的布尔运算符有3种:Not、And、Or
非“Not”,表示由真变假,或由假变真,进行取“反“操作
与“And",两个表达式的值均为真,结果才为真,否则为假
“Or”,两个表达式中只要有一个值为真,结果就为真,只果有两个表达式的值均为假,结果才为假
布尔运算真值表5-1
注意
关系表达式绝不能比较布尔型数据
例如,设Yn为布尔型变量,则下面的写法是错误的:Yn=True
【实例5.2】
计算下列表达式的值:
Not(1>0)
值为False
Not(“a”<>“a”)
值为True
(2>3) And(1<2)
值为False
(2>3)Or(1<2)
值为True
5.1.3运算符的优先顺序
当在一个表达式中需要进行多种运算操运时,VB会按一定的顺序进行求值,这个顺序称为运算符的优先顺序
运算符的优先顺序表5-2
注意
同级运算按照从左到右的顺序进行
括号内的运算优先于括号外的运算,在括号内运算符的优先顺序不变
【实例5.3】
写出VB表达式2+3>1+4 And Not 6<8的值
【解答】在计算前,先要看清表达式中有哪些运算符,根据运算符的优先级进行计算。本题中应按下面的步骤进行计算:
算术运算:5>5 And Not 6< 8
关系运算:False And Not True
非运算: False And False
结果:False
5.2简单条件选择结构的程序设计
任务导入
简单条件选择结构是最常见的典型分支结构,其功能是对所给条件进行判断,从而决定在两个分支中选择哪一个来执行
在VB中,简单条件选择结构用If语句来实现。它有两种格式:一种是单行结构条件语句,另一种是块结构条件语句
本任务学习用If语句来实现简单条件选择结构的方法和技巧
学习目标
能熟练使用If语句解决双分支现象
会使用If语句的嵌套解决多分支现象
任务实施
5.2.1单行结构条件语句If...Then...Else
单行条件语句比较简单,其语法格式为
If <条件> Then [<语句组1>] [Else<语句组2>]
说明
〈条件)可以是关系表达式、布尔表达式或数值表达式。如果以数值表达式作为条件,则非0值为真,0为假
单行条件语句的执行过程:判断〈条件) , 若为True, 则执行(语句组1) ; 否则执行Else后面的〈语句组2)
如果没有Else子句, <语句组1>为必要参数, 在〈条件) 为True时执行了(条件)为False时, 什么都不做, 执行If下面的语句
【实例5.4】
在窗体上由用户任意输入一个整数,设计程序判定该数是奇数还是偶数
5.2.2多行结构条件语句If...Then...Else...End If
使用单行If语句时, 如果Then部分和Else部分包含内容较多, 可以用VB提供的多行If语句,其语法格式为:
If<条件> Then <语句组1> [Else <语句组2>] End If
说明
在多行形式中, If语句必须是第一行语句。If块必须以一个End If语句结束
当程序运行到If块时, 首先测试(条件) , 如果为True, 则执行Then之后的<语句组1> :如果为False, 且有Else子句, 则执行Else部分的<语句组2> 。执行完Then或Else之后的语句列后, 从End If之后的语句继续执行
Else子句是可选的
【实例5.5】
修改实例5.4中“判定”命令按钮Command 1的Click(单击) 事件代码如下。重新运行程序,观察效果是否与实例5.4相同
Private SubCommand 1 Click() Dim x As Integer x=Val(Text1.Text) Labe12.FontSize= 20 If x Mod 2=0 Then Label2.Caption="偶数" Else Label2.Caption=“奇数” End If End Sub
【实例5.6】
由用户任意输入两个数,程序可以输出较大数
5.2.3 If语句的嵌套
If语句的嵌套是指If或Else后面的语句块中又包含If语句。语句形式如下:
If<条件1> Then If<条件2> Then End If End If
【实例5.7】
铁路托运行李,从甲地到乙地,规定每张客票托运费计算方法如下:行李质量不超过50千克时,每千克0.25元;超过50千克而不超过100千克时,其超过部分每千克0.35元;超过100千克时,其超过部分每千克0.45元。编写程序,输入行李质量,计算并输出托运的费用,
5.2.4 If语句的嵌套格式ElseIf
If〈条件1〉Then 〈语句组1〉 ElseIf〈条件2〉Then 〈语句组2〉 ... [Else 〈语句组n+1〉] End If
【实例5.8】
某百货公司为了促销,采用购物打折扣的优惠办法,即每位顾客一次购物: (1) 在1000元以上2000元以下者,按九五折优惠; (2) 在2000元以上3000元以下者,按九折优惠; (3) 在3000元以上5000元以下者,按八五折优惠; (4) 在5000元以上者,按八折优惠
5.3多分支条件选择结构的程序设计
任务导入
本任务将学习多分支选择结构Select Case语句的编程方法
学习目标
理解多分支选择结构的特点
能熟练使用Select Case语句解决多分支问题
任务实施
5.3.1 SelectCase语句的语法格式
SelectCase<测试条件> [Case<表达式表1> <语句组1>] [Case<表达式表2> <语句组2>] ... [Case Else<语句组n+1>] End Select
说明
在Select Case语句中的Case子句中,<表达式表>为必要参数,用来测试其中是否有值与<测试条件>相匹配
5.3.2 SelectCase语句中<表达式表>的使用说明
Case子句的中的〈表达式表>是一个或多个表达式的列表,形式有以下3种
表达式
说明:表达式为数值表达式或字符串表达式
例如:Case 3*x
表达式To表达式
说明:用来指定一个值范围,较小的值要出现在To之前
Case 1 To 10
Case "a" To "d"
Is关系运算表达式
说明:可以配合比较运算符来指定一个数值范围。如果没有提供,则Is关键学会被自动插入
Case Is< 100
注意
当使用多个表达式的列表时,表达式与表达式之间要用逗号“,”隔开。
例如: Case 2,4, 6 Case 10To20, 100 To 200 Case Is<10,Is> 30
在Case子句中使用多个表达式时, 所列表达式的形式可以不相同, 既可以使用值, 又可以使用条件或范围,还可以混合使用
倒如: Case 2,4,6,10To20,Is> 30
【实例5.9】
为某航空公司设计程序,根据月份和订票张数决定票价的优惠率。假设优惠规定如下: ①在旅游的旺季7~9月份,如果订票数超过或等于20张,票价优惠15%;20张以下,优惠5%。 ②在旅游的淡季1~5月份、10月份、11月份,如果订票数超过或等于20张,票价优惠30%;20张以下,优惠20%。 ③其他情况一律优惠10%
5.4计时器控件Timer
任务导入
Windows环境下的应用程序非常注重用户界面的美观和实用。控件是构成用户界面的基本元素,只有掌握好控件所具有的属性、方法及该控件能接收的事件,才能写出界面友好、操作简练的应用程序
在VB工具箱中有20个标准控件,我们在前面已经介绍了其中的3个控件,即标签控件Label、文本框控件Text、命令按钮控件CommandButton
本任务将再介绍3个标准控件:计时器Timer、单选钮OptionButton、复选框CheckBox。其他控件将在以后任务中逐渐介绍
学习目标
会使用计时器(Timer)控件进行编程
能熟练使用单选钮(OptionButton)控件
能熟练使用复选框(CheckBox)控件
任务实施
5.4.1 Timer(计时器)控件
Timer(计时器)控件能有规律地以一定的时间间隔激发Timer事件而执行相应的程序代码
Timer控件在设计时显示为一个小时钟图标,而在运行时并不显示在屏幕上,通常用标签来显示时间
计时器控件Timer的主要属性有以下两个
Enabled属性:该属性为Tnue时,计时器开始工作:为Palse时,暂停
Interval属性:表示两个计时器事件之间的时间间隔,其值以毫秒(ms)为单位,介于0与64767之间,所以最大的时间间隔约为1.5min,例如:
如果需要屏蔽计时器,则将Interval设为0
如果需每0.5s产生一个计时器事件,则将Interval属性值设为500.这样,每隔500ms就激发一次计时器事件, 从而执行相应的Interval l事件过程
如果需每1秒产生一个计时器事件, 则将Interval属性值设为1000.这样, 每隔1000ms
【实例5.10】
在窗体上建立一个数字计时器
5.4.2 Option Button(单选钮) 控件的主要属性
一般来说, 单按钮总是成组(单选按钮组)出现用户在一组单选钮中必须选择一项,并且最多只能选择一项。当某一项被选定后其左边的圆圈中出现一个黑点,单选钮主要用于在多种功能中由用户选择一种功能的情况
单选钮的主要属性有:
Alignment属性
当其值为0时,表示单选钮在左边,标题显示在右边,为默认设置;当值为1时,表示单选钮在右边,标题显示在左边
Value属性
当值为True时,表示单选钮被选定:值为False,表示单选钮未被选定,为默认设置
Enabled属性
要禁用某单选钮,可将其Enabled属性设置为False。程序运行时,若此单选钮显示模糊,表示无法选取
5.4.3选择单选钮的方法
选择某单选钮可以用下面的方法之一:
在运行期间,用鼠标单击某单选钮
用Tab键定位到单选按钮组,然后在组内使用方向键定位单选钮
用代码将它的Value属性设置为真(Optionl.Value=True)
使用在OptionButton标题中指定的快捷键
5.4.4单选钮的事件
单选钮和复选框都可以接受Click事件,但一般不需要编写Click事件代码。因为当用户单击单选钮和复选框时,它们自动改变状态
5.4.5单选钮应用实例【实例5.11】
输入圆的半径r,利用选项按钮,选择计算圆面积、圆周长
5.4.6.使用单选按钮组
单选钮的一个特点是当选定其中一个,其余就自动关闭。但当需要在同一窗体中建立几组相互独立的单选钮时,就需要用框架(Frame)将每一组单选钮框起来,这样在一个框架内的单选钮为一组,它们的操作不影响框外其他组的单选钮
对于其他类型的控件用框架框起来,可提供视觉上的区分和总体的激活或屏蔽特性
【实例5.12】
在窗体中建立两组单选钮,分别放在名称为“字体”和“字号”的框架中,当分别选择不同的字体和字号时,文本框中文字的字体和字号会随之改变。例如,若用户选定了“宋体”单选钮,还可以选定“14号”单选钮。该应用程序运行时,只有当用户选定了字体和大小,再单击"确定"按钮后,文本框的字体和大小才改变
5.4.7使用图形选项按钮
使用单选钮的Style属性可以将单选钮设计成图形按钮的形式
Style属性值为0-Standard , 标准方式
Style属性值为1-Graphical , 图形方式
【实例5.13】
将单选钮设置成图形按钮的形式,设计流动字幕板,使滚动字幕内容“海阔凭鱼跃,天高任鸟飞”在窗体中从右向左反复地移动
5.4.8复选框控件CheckBox
复选框的常用属性与单选钮基本相同,如复选框的Caption属性可以指定出现在复选框旁边的文本,而Picture属性用来指定当复选框被设计成图形按钮时的图像
复选框的状态属性Value与单选钮不同,复选框的Value属性的取值如下:
0-Unchecked:复选框未被选定,为默认设置
1-Checked:复选框被选定
2-Grayed:复选框变成灰色,禁止用户选择
【实例5.14】
用复选框控制文本输入是否加上“下划线”和“斜体显示”
单元五 巩固与提高答案
一、填空题
1. 下面语句正确的是( ) A)If x<3*y And x>y Then y=x^3 B)If x<3*y And x>y Then y=3x C)If x<3*y : x>y Then y=x^3 D)If x<3*y : x>y Then y=x**3
【答】A
2. 下列语句正确的是( ) A)If A ≠B Then Print "A不等于B" B)If A < >B Then Printf "A不等于B" C)If A < >B Then Print "A不等于B" D)If A ≠B Print "A不等于B"
【答】C
3. 计算z的值,当x大于y时,z=x;否则z=y。下列语句错误的是( ) A)If x>=y Then z=x : z=y B)If x>=y Then z=x Else z=y C)z=y : If x>=y Then z=x D)If x<=y Then z=y Else z=x
【答】A
4. 下列程序段的执行结果为( ) X=2 Y=5 If X * Y <1 Then Y=Y-1 Else Y=-1 Print Y - X>0 A)True B)False C)-1 D)1
【答】B
5. 下列程序段执行结果为( ) x=5 y=-6 If Not x>0 Then x=y-3 Else y=x+3 Print x-y;y-x A)-3 3 B)5 -9 C)3 -3 D)-6 5
【答】A
6. 下列程序段的执行结果为( ) a=95 If a>60 Then I=1 If a>70 Then I=2 If a>80 Then I=3 If a>90 Then I=4 Print ″I=″; I A)I=1 B)I=2 C)I=3 D)I=4
【答】D
7. 下面程序段执行结果为( ) x=Int(Rnd()+4) Select Case x Case 5 Print "excellent" Case 4 Print "good" Case 3 Print "pass" Case Else Print "fail" End Select A)excellent B)good C)pass D)fail
【答】B
8. 在窗体上画一个名称为Timer1的计时器控件,要求每隔0.5秒发生一次计时器事件,则以下正确的属性设置语句是( ) A)Timer1.Interval=0.5 B)Timer1.Interval=5 C)Timer1.Interval=50 D)Timer1.Interval=500
【答】D
二、填空题
1. 闰年的条件是:年号(year)能被4整除,但不能被100整除;或者能被400整除。闰年的VB布尔表达式是_____。
【答】设y表示年份,判断闰年的布尔表达式为: (y Mod 4 = 0 And y Mod 100 <> 0) Or (y Mod 400 = 0) 或表示为: (Int(y / 4) = y / 4 And Int(y / 100) <> y / 100) Or (Int(y / 400) = y / 400)
2. 一元二次方程ax2 + bx + c = 0有实根的条件为:a≠ 0,并且b2 - 4ac ≥ 0,其相应的VB布尔表达式为____。
【答】a <> 0 And b^2 – 4 * a * c >= 0
3. 有下面一个程序段,从文本框中输入数据,如果该数据满足条件,除以4余1,除以5余2,则输出,否则,将焦点定位在文本框中,并清除文本框的内容。 Private Sub Command1_Click() x=Val(Text1.Text) If ____ Then Print x Else Text1.Text="" ____ End If End Sub
【答】x Mod 4 = 1 And x Mod 5 = 2; Text1.Setfoucs
4. 下列程序的功能是:当x<50时,y=0.8×x;当50≤x≤100时,y=0.7×x;当x>100时,没有意义。请填空。 Private Sub Command1_Click() Dim x As Single x=InputBox("输入x的值") ____ Case Is<50 y=0.8 * x Case 50 To 100 y=0.7 * x ____ Print "输入的数据出界!" End Select Print x , y End Sub
【答】Select Case x;Case Else。
5. 在窗体上画一个文本框和一个计时器控件,名称分别为Text1和Timer1,在属性窗中把计时器的Interval属性设置为100,Enabled属性设置为False。程序运行后,如果单击命令按钮,则每隔一秒钟在文本框中显示一次当前的时间。请补充程序。 Private Sub Command1_Click() Timer1.____ End Sub Private Sub Timer1_Timer() Text1.Text=Time End Sub
【答】Enabled=True。
三、编程题
1. x, y关系如下,设计程序,输入x,可计算出y的值。 
【解答】
该题是数学中的一个分段函数,它表示当x ≥ 0时,用公式y = 1 + x来计算y的值;当x < 0时,用公式y = 1 – 2x来计算y的值。在选择条件时,既可以选择x≥0作为条件,也可以选择x < 0作为条件。在这里,选x≥0作为选择条件。这时,当x≥0为真时,执行y = 1 + x;为假时,执行y = 1 – 2x。
设计步骤如下:
(1)建立应用程序用户界面并设置对象属性,参见图
(2)编写程序代码。 命令按钮Command1的Click事件代码为: Private Sub Command1_Click() Dim x As Single, y As Single x = Val(Text1.Text) If x >= 0 Then y = 1 + x Else y = 1 - 2 * x Text2.Text = y End Sub 程序运行结果如图所示。
也可以利用多行If语句编写代码: Private Sub Command1_Click() Dim x As Single, y As Single x = Val(Text1.Text) If x >= 0 Then y = 1 + x Else y = 1 – 2 * x End If Text2.Text = y Text2.Locked = True End Sub
2. 若基本工资大于等于600元,增加工资20%;若小于600元,且大于等于400元,则增加工资15%;若小于400元,则增加工资10%。请根据用户输入的基本工资,计算出增加后的工资。
【解答】
(1)建立应用程序用户界面,并设置对象属性,如图所示
(2)编写程序代码。 编写文本框Text1的KeyPress(按键)事件代码: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then n = Val(Text1.Text) Select Case n Case Is >= 600 gz = n * 1.2 Case Is >= 400 gz = n * 1.15 Case Else gz = n * 1.1 End Select Label1.Caption = "增加后的基本工资为:" & gz & "元" Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End If End Sub
3. 利用单选钮组控制输入文本的字体,界面如图所示
【解答】
(1)建立应用程序用户界面并设置对象属性。 新建一个工程,进入窗体设计器,增加一个标签Label1,一个文本框Text1和四个单选钮Option1~Option4,如图所示。
然后设置对象属性,见表
表5-1 属性设置 对 象 属 性 属 性 值 说 明 Label1 Caption 请输入文本 Text1 Text 清空 Option1 Caption 宋体 Value True 单选钮组中的默认按钮 Option2 Caption 隶书 Option3 Caption 黑体 Option4 Caption 楷体 并设置适当的字体大小,如图所示。
(2)编写程序代码。 编写单选钮Option1的Click事件代码: Private Sub Option1_Click( ) Text1.FontName = "宋体" End Sub 编写单选钮Option2的Click事件代码: Private Sub Option2_Click( ) Text1.FontName = "隶书" End Sub 编写单选钮Option3的Click事件代码: Private Sub Option3_Click( ) Text1.FontName = "黑体" End Sub 编写单选钮Option4的Click事件代码: Private Sub Option4_Click( ) Text1.FontName = "楷体_GB2312" End Sub
【说明】 一个单选钮可以用以下方法之一进行选择。 在运行期间单击单选钮。 用Tab键定位到单选钮组,然后在组内使用方向键(箭头键)定位单选钮。 用代码将单选钮的Value属性设置为True。 按下在Label的标题中指定的快捷键,并结合TabIndex属性使用。
4. 文本框的PasswordChar属性可以隐蔽用户通过键盘输入的字符。编写程序,利用文本框检查用户口令,如图所示。
【解答】
(1)建立应用程序用户界面,如图所示
(2)设置对象属性,见表
表5-2 属性设置 对 象 属 性 属 性 值 说 明 Frame1 Caption 请输入您的口令: Text1 Text 清空 PasswordChar * 只显示字符“*” Label1 Caption FontName 黑体 字体名称 FontSize 三号 字体大小
(3)编写代码。 只需编写文本框Text1的KeyPress事件代码: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then If LCase(Text1.Text) = "abcde" Then Label1.Caption = "欢迎使用本系统" Else Label1.Caption = "对不起,口令错!" End If Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End If End Sub
5. 设计一个计时器,能够设置倒计时的时间,并进行倒计时
【解答】
(1)建立应用程序用户界面并设置属性。 新建一个工程,进入窗体设计器,首先在窗体中增加一个框架Frame1,一个命令按钮Command1和一个计时器控件Timer1。选定框架Frame1,在其中增加一个文本框Text1,如图
属性设置参见表
表5-3 属性设置 对 象 属 性 属 性 值 说 明 Frame1 Caption 请输入倒计时的分钟数: Command1 Caption 开始 Default True 设置默认按钮 Timer1 Interval 1000 Enabled False
(2)编写代码。 编写命令按钮Command1的Click事件代码: Private Sub Command1_Click( ) Timer1.Enabled = True Timer1.Tag = Text1.Text * 60 Frame1.Caption = "现在开始倒计时" End Sub 编写计时器Timer1的Timer事件代码: Private Sub Timer1_Timer( ) Timer1.Tag = Timer1.Tag – 1 m = Timer1.Tag If m < 0 Then Timer1.Enabled = False MsgBox "预定的时间到了!", 0, "倒计时" Frame1.Caption = "请输入计时的分钟数:" Text1.Text = 0 Exit Sub End If n1 = Format(m Mod 60, "00") n2 = Format((m \ 60) Mod 60, "00:") n3 = Format(m \ 3600, "00:") Text1.Text = n3 & n2 & n1 End Sub 运行程序,输入时间后按“开始”按钮,即开始倒计时,如图5所示。计时结束后将弹出对话框,如图
6. 任给定一年,判断该年是否闰年,并根据给出的月份来判断是什么季节和该月有多少天。闰年的条件是:年号能被4整除但不能被100整除,或者能被400整除。
【解答】
根据闰年条件可得出闰年的逻辑表达式: (y Mod 4=0 And y Mod 100<>0) Or (y Mod 400=0) 每月的天数可根据月份来判定。 设计步骤如下:
(1) 建立用户界面,参见图
(2) 设置对象属性,见表
表5-4 属性设置 对象 属性 属性值 说明 Form1 Caption 判断闰年、季节、天数 Command1 Caption 开始 Default True 缺省命令按钮 Command2 Caption 清除 Text1 Text 清空 Text2 Text 清空 Label1 Caption 年份: Label2 Caption 月份: Label3 Caption 空 BorderStyle 1—Fixed Single 边框样式 Label4 Caption 空 BorderStyle 1—Fixed Single 边框样式 Label5 Caption 空 BorderStyle 1—Fixed Single 边框样式
(3) 编写事件代码。 编写“开始”命令按钮Command1的Click(单击)事件代码: Private Sub Command1_Click() Dim y As Integer, m As Integer, days As Integer Dim leapyear As Boolean ' 闰年标记 y = Val(Text1.Text) ' y为年份 m = Val(Text2.Text) ' m为月份 ' 判断闰年 If (y Mod 4 = 0 And y Mod 100 <> 0) Or (y Mod 400 = 0) Then leapyear = True ' True为闰年 Label3.Caption = "闰年" Else leapyear = False ' False为非闰年 Label3.Caption = "不是闰年" End If ' 判断季节 Select Case m Case 3 To 5 Label4.Caption = "春季(Spring)" Case 6 To 8 Label4.Caption = "夏季(Summer)" Case 9 To 11 Label4.Caption = "秋季(Autumn)" Case 12, 1, 2 Label4.Caption = "冬季(Winter)" End Select ' 判断月中天数 Select Case m Case 1, 3, 5, 7, 8, 10, 12 Label5.Caption = "31天!" ' 大月为31天 Case 4, 6, 9, 11 Label5.Caption = "30天!" ' 小月为30天 Case 2 ' 判断2月份的天数 If leapyear Then days = 29 ' 闰年为29天 Else days = 28 ' 非闰年为28天 End If Label5.Caption = Str(days) + "天" End Select Text1.SetFocus End Sub 编写“清除”命令按钮Command2的Click(单击)事件代码: Private Sub Command2_Click() Text1.Text = "" Text2.Text = "" Label3.Caption = "" Label4.Caption = "" Label5.Caption = "" End Sub 运行程序,输入年份和月份后,单击“开始”按钮,将输出结果,如图5-9所示。单击“清除”按钮,清除文本框中输入的内容。