580 likes | 792 Views
Visual Basic 程序设计教程. 机械工业出版社同名教材 配套电子教案. 2003 年 6 月. 第 4 章 选择结构程序设计. 1. 条件表达式. 1. 1 关系运算符与关系表达式 <1> 关系运算符 <2> 关系表达式 关系表达式的格式为 〈 表达式 1〉〈 关系运算符 〉〈 表达式 2〉[〈 关系运算符 〉〈 表达式 3〉…] 布尔运算符与布尔表达式 VB 提供的布尔运算符有: And 、 Or 、 Not 、 Xor 、 Eqv 、 Imp 等 6 种. 3 运算符的优先顺序.
E N D
Visual Basic 程序设计教程 机械工业出版社同名教材配套电子教案 2003 年 6月
第4章 选择结构程序设计 1 条件表达式 1 • 1 关系运算符与关系表达式 • <1> 关系运算符 • <2> 关系表达式 • 关系表达式的格式为 • 〈表达式1〉〈关系运算符〉〈表达式2〉[〈关系运算符〉〈表达式3〉…] • 布尔运算符与布尔表达式 • VB提供的布尔运算符有:And、Or、Not、Xor、Eqv、Imp等6种
3 运算符的优先顺序 【例4-1】设变量x = 4,y = –1,a = 7.5,b = – 6.2,求表达式x + y > a + b And Not y < b的值。 分析:将按下面步骤计算: (1) 先作算术运算: 3 > –1.3 And Not y < b (2) 再作关系运算: True And Not False (3) 作非运算: True And True (4) 最后得: True
【例4-2】判断某个年份是闰年的根据是年份数满足下述条件之一。【例4-2】判断某个年份是闰年的根据是年份数满足下述条件之一。 (1) 能被4整除,但不能被100整除的年份都是闰年。 (2) 能被100整除,又能被400整除的年份都是闰年。 设变量y表示年份,写出判断y是否闰年的布尔表达式。 解:判断y是否满足条件(1)的布尔表达式是y Mod 4 = 0 And y Mod 100 <> 0 判断y是否满足条件(2)的布尔表达式是y Mod 100 = 0 And y Mod 400 = 0 两者取“或”,即得判断闰年的布尔表达式 y Mod 4 = 0 And y Mod 100 <> 0 Or y Mod 100 = 0 And y Mod 400 = 0
2.单条件选择语句IF 1 单行结构条件语句IF…THEN…ELSE 单行If语句的语法格式为 If〈条件〉Then [〈语句序列1〉] [ Else〈语句序列2〉] 【例4-3】输入x,计算y的值。其中:
设计步骤如下: (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
【例4-4】学校对学习成绩优良的学生进行奖励,获奖的条件如下:【例4-4】学校对学习成绩优良的学生进行奖励,获奖的条件如下: (1) 所考5门课的总分超过450分。 (2) 每门课的成绩都在88分以上。 (3) 前3门(主课)的成绩都在95分以上,其他两门(非主课)的成绩都在80分以上。 输入某学生5门课的成绩s1、s2、s3、s4、s5,判断他是否能够获奖。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写程序代码。
图4-5 判断能否获奖 可以写出命令按钮Command1的单击(Click)事件代码为: Private Sub Command1_Click() Dim s1 As Single, s2 As Single, s3 As Single, s4 As Single, s5 As Single Dim p As String s1 = Val(InputBox("请输入第1门课的成绩:", "输入框", 0)) s2 = Val(InputBox("请输入第2门课的成绩:", "输入框", 0)) s3 = Val(InputBox("请输入第3门课的成绩:", "输入框", 0))
s4 = Val(InputBox("请输入第4门课的成绩:", "输入框", 0)) s5 = Val(InputBox("请输入第5门课的成绩:", "输入框", 0)) t1 = (s1 + s2 + s3 + s4 + s5 >= 450) t2 = (s1 >= 88 And s2 >= 88 And s3 >= 88 And s4 >= 88 And s5 >= 88) t3 = (s1 >= 95 And s2 >= 95 And s3 >= 95 And s4 >= 80 And s5 >= 80) If t1 Or t2 Or t3 Then p = " 可以获奖!" Else p = " 不能获奖!" p = Str(s1) & "," & Str(s2) & "," & Str(s3) & "," & Str(s4) & "," & Str(s5) & Chr(13) & p Label1.Caption = " 该生五门课的成绩分别是:" & Chr(13) & p End Sub
【例4-5】利用输入框函数输入3个不同的数,选出其中最大的数。【例4-5】利用输入框函数输入3个不同的数,选出其中最大的数。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写程序代码。
可以写出命令按钮Command1的单击(Click)事件代码为可以写出命令按钮Command1的单击(Click)事件代码为 Private Sub Command1_Click() Dim a As Single, b As Single, c As Single a = Val(InputBox("请输入第1个数:", "输入框", 0)) b = Val(InputBox("请输入第2个数:", "输入框", 0)) c = Val(InputBox("请输入第3个数:", "输入框", 0)) p = " " & a & "," & b & "," & c p = p & "三个数中最大的数是:" If a > b And a > c Then p = p & a If b > a And b > c Then p = p & b If c > a And c > b Then p = p & c Label1.Caption = p End Sub
2 使用IIF函数 IIf函数的语法结构为 IIf(〈条件表达式〉,〈真部分〉,〈假部分〉) 【例4-6】例4-3中命令按钮Command1的单击(Click)事件代码可以改为 Private Sub Command1_Click() Dim x As Single, y As Single x = Val(Text1.Text) y = IIf(x >= 0, 1 + x, 1 – 2 * x) Text2.Text = y End Sub
3.块结构条件语句IF…THEN…ELSE…END IF 其语法结构为 If〈条件1〉Then [语句列1] [Else [语句列2]] End If
【例4-7】将例4-3中命令按钮Command1的单击(Click)事件代码改为多行If语句:【例4-7】将例4-3中命令按钮Command1的单击(Click)事件代码改为多行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 End Sub
4. IF语句的嵌套 • IF语句的嵌套 • 【例4-8】铁路托运行李,从甲地到乙地,规定每张客票托运费计算方法是行李重量不超过50kg时,0.25元/kg,超过50kg而不超过100kg时,其超过部分按0.35元/kg收费,超过100kg时,其超过部分按0.45元/kg收费。编写程序,输入行李重量,计算并输出托运的费用。 • 设计步骤如下: • (1) 建立应用程序用户界面与设置对象属性。 图4-9 计算托运费
(2) 编写程序代码。 可以写出命令按钮Command1的单击(Click)事件代码为 Private Sub Command1_Click() Dim w As Single, x As Single w = Val(Text1.Text) If w <= 50 Then x = 0.25 * w Else If w <= 100 Then x = 0.25 * 50 + 0.35 * (w – 50) Else
x = 0.25 * 50 + 0.35 * 50 + 0.45 * (w – 100) End If End If Text2.Text = x End Sub 可以将上例中命令按钮Command1的单击(Click)事件代码改为: Private Sub Command1_Click() Dim w As Single, x As Single w = Val(Text1.Text) x = IIf(w <= 50, 0.25 * w, 0.25 * 50 + IIf(w <= 100, 0.35 * (w – 50), 0.35 * 50 + 0.45 * (w – 100))) Text2.Text = x End Sub
【例4-9】某百货公司为了促销,采用购物打折扣的优惠办法:每位顾客一次购物【例4-9】某百货公司为了促销,采用购物打折扣的优惠办法:每位顾客一次购物 (1) 在1000元以上者,按九五折优惠; (2) 在2000元以上者,按九折优惠; (3) 在3000元以上者,按八五折优惠; (4) 在5000元以上者,按八折优惠。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写程序代码。
可以写出命令按钮Command1的单击(Click)事件代码为可以写出命令按钮Command1的单击(Click)事件代码为 Private Sub Command1_Click() Dim x As Single, y As Single x = Val(Text1.Text) If x < 1000 Then y = x Else If x < 2000 Then y = 0.95 * x Else If x < 3000 Then
y = 0.9 * x Else If x < 5000 Then y = 0.85 * x Else y = 0.08 * x End If End If End If End If Text2.Text = y End Sub
2. IF语句的嵌套格式ELSEIF 其语法结构为 If〈条件1〉Then [语句列1] ElseIf〈条件2〉Then [语句列2] ... [Else [其他语句列]] End If
【例4-10】在例4-9中使用带ElseIf的块If语句来计算出优惠价,只需将其中命令按钮Command1的单击(Click)事件代码改为【例4-10】在例4-9中使用带ElseIf的块If语句来计算出优惠价,只需将其中命令按钮Command1的单击(Click)事件代码改为 Private Sub Command1_Click() Dim x As Single, y As Single x = Val(Text1.Text) If x < 1000 Then y = x ElseIf x < 2000 Then y = 0.95 * x
ElseIf x < 3000 Then y = 0.9 * x ElseIf x < 5000 Then y = 0.85 * x Else y = 0.08 * x End If Text2.Text = y End Sub
多分支条件选择语句SELECT CASE • SELECT CASE结构与语法 • 语句的语法格式为 • Select Case〈测试条件〉 • [Case〈表达式表1〉 • [〈语句列1〉]] • [Case〈表达式表2〉 • [〈语句列2〉]] • ... • [Case Else • [〈其他语句列〉]] • End Select
2. SELECT CASE结构的应用 【例4-11】在例4-9中使用Select Case语句来计算优惠价,只需将其中命令按钮Command1的单击(Click)事件代码改为 Private Sub Command1_Click() Dim x As Single, y As Single x = Val(Text1.Text) Select Case x Case Is < 1000 y = x
Case Is < 2000 y = 0.95 * x Case Is < 3000 y = 0.9 * x Case Is < 5000 y = 0.85 * x Case Else y = 0.08 * x End Select Text2.Text = y End Sub
【例4-12】某航空公司规定在旅游的旺季7~9月份,如果订票数超过20张,票价优惠15%,20张以下,优惠5%;在旅游的淡季1~5月份、10月份、11月份,如果订票数超过20张,票价优惠30%,20张以下,优惠20%;其他情况一律优惠10%。【例4-12】某航空公司规定在旅游的旺季7~9月份,如果订票数超过20张,票价优惠15%,20张以下,优惠5%;在旅游的淡季1~5月份、10月份、11月份,如果订票数超过20张,票价优惠30%,20张以下,优惠20%;其他情况一律优惠10%。 设计程序,根据月份和订票张数决定票价的优惠率。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。
(2) 编写程序代码。 根据流程图,可以写出命令按钮Command1的单击(Click)事件代码为: Private Sub Command1_Click() Dim m As Integer, n As Integer, r As Integer m = Val(Text1.Text) n = Val(Text2.Text) Select Case m Case Is <= 5, 10, 11 If n < 20 Then r = 20 Else r = 30
Case 7 To 9 If n < 20 Then r = 5 Else r = 15 Case Else r = 10 End Select Label4.Caption = "所订机票的优惠率为:" & Str(r) & "%" End Sub 为了使用更加方便,再增加如下代码。 窗体的Load事件代码:
Private Sub Form_Load() Text1.Text = Month(Date) ' Text1中的默认值为当前月份 End Sub 文本框Text1的GotFocus事件代码: Private Sub Text1_GotFocus() Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub
文本框Text1的按健(KeyPress)事件代码: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' 在Text1按回车键,光标跳到Text2 If Text1.Text > 0 And Text1.Text < 13 Then Text2.SetFocus End If End If End Sub 文本框Text2的GotFocus事件代码: Private Sub Text2_GotFocus()
Text2.SelStart = 0 Text2.SelLength = Len(Text2.Text) End Sub 文本框Text2的按健(KeyPress)事件代码: Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' 在Text2按回车键,光标跳到Command1 If Text2.Text > 0 Then Command1.SetFocus End If End Sub
使用计时器控件 1. 设计一个电子表 【例4-13】在窗体上设计一个数字时钟,如图4-15所示。 图4-16 建立界面与设置属性 图4-15 数字时钟
设计步骤如下: (1) 建立应用程序用户界面。 (2) 设置对象属性, (3) 编写程序代码。 编写计时器控件Timer1的Timer事件代码: Private Sub Timer1_Timer() Label1.Caption = Format(Time, Form1.Tag) Label2.Caption = IIf(Hour(Time) > 12, "下午", "上午") End Sub
编写命令按钮Command1的Click事件代码: Private Sub Command1_Click() If Command1.Caption = "改为12小时" Then Form1.Tag = "hh:mm:ss AM/PM" Command1.Caption = "改为24小时" Label2.Visible = True Else Form1.Tag = "hh:mm:ss" Command1.Caption = "改为12小时" Label2.Visible = False End If End Sub
2.设计一个计时器 【例4-14】一个简单计时器。如图4-17所示。 图4-18 计时器的设计 图4-17 简单计时器
设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写程序代码。 编写Command1(开始)的Click事件代码: Private Sub Command1_Click() If Command1.Caption = "&S 暂停" Then Command1.Caption = "&C 继续" Timer1.Enabled = False Else Command1.Caption = "&S 暂停" If Label1.Caption = "00:00:00:0" Then Form1.Tag = Timer Timer1.Enabled = True End If End Sub
编写Command2(重置)的Click事件代码: Private Sub Command2_Click() Form1.Tag = Timer Label1.Caption = "00:00:00:0" End Sub 编写Timer1的Timer事件代码: Private Sub Timer1_Timer() m = Timer – Form1.Tag n0 = (m * 10) Mod 10 m = Int(m) n1 = Format(m Mod 60, "00.") n2 = Format((m \ 60) Mod 60, "00:") n3 = Format(m \ 3600, "00:") Label1.Caption = n3 & n2 & n1 & n0 End Sub
3.设计一个流动字幕板 【例4-15】为一个应用系统设计流动字幕板,如图4-19所示,标题“欲穷千里目,更上一层楼”在窗体中自右至左地反复移动。 图4-19 电子标题板 图4-20 用户界面的设计
设计步骤如下: (1) 建立应用程序用户界面与设置对象属性 (2) 编写程序代码。 编写命令按钮Command1的Click事件代码: Private Sub Command1_Click() If Command1.Caption = "&S 暂停" Then Command1.Caption = "&C 继续" Timer1.Enabled = False Else Command1.Caption = "&S 暂停" Timer1.Enabled = True End If End Sub
编写Timer1的Timer事件代码: Private Sub Timer1_Timer() If Label1.Left + Label1.Width > 0 Then Label1.Move Label1.Left – 20 Else Label1.Left = Form1.ScaleWidth End If End Sub 提供简单选择的控件 1.选项按钮 【例4-16】在例4-13中使用选项按钮组来选择时间的格式
编写新增控件的事件代码。 编写选项按钮Option1的Click事件代码: Private Sub Option1_Click() Form1.Tag = "hh:mm:ss AM/PM" Label2.Visible = True End Sub 编写选项按钮Option2的Click事件代码: Private Sub Option2_Click() Form1.Tag = "hh:mm:ss" Label2.Visible = False End Sub
例4-17】设银行定期存款年利率为:1年期2.25%,2年期2.43%,3年期2.70%,5年期2.88%(不计复利)。今有本金a元,5年以后使用,共有以下6种存法:例4-17】设银行定期存款年利率为:1年期2.25%,2年期2.43%,3年期2.70%,5年期2.88%(不计复利)。今有本金a元,5年以后使用,共有以下6种存法: l存一次5年期。 l存一次3年期,一次2年期。 l存一次3年期,两次1年期。 l存两次2年期,一次1年期。 l存一次2年期,三次1年期。 l存五次1年期。 分别计算各种存法5年后到期时的本息合计
编写命令按钮Command1的单击(Click)事件代码:编写命令按钮Command1的单击(Click)事件代码: Private Sub Command1_Click() Dim a As Single, y As Single Dim x1 As Single, x2 As Single Dim x3 As Single, x5 As Single a = Val(Text1.Text) x1 = 0.0225: x2 = 0.0243 x3 = 0.027: x5 = 0.0288 Select Case True Case Option1.Value y = (1 + 5 * x5) * a
Case Option2.Value y = (1 + 3 * x3) * (1 + 2 * x2) * a Case Option3.Value y = (1 + 3 * x3) * (1 + x1) ^ 2 * a Case Option4.Value y = (1 + 2 * x2) ^ 2 * (1 + x1) * a Case Option5.Value y = (1 + 2 * x2) * (1 + x1) ^ 3 * a Case Option6.Value y = (1 + x1) ^ 5 * a End Select
Text2.Text = y Text1.SetFocus End Sub 编写文本框Text1的GotFocus事件代码: Private Sub Text1_GotFocus() Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub
2. 使用图形选项按钮 【例4-18】用图形选项按钮组控制流动字幕中的字体,如图4-23所示。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写程序代码。 依次编写选项按钮Option1~Option4的Click事件代码: Private Sub Option1_Click()
Text1.FontName = "宋体" End Sub Private Sub Option2_Click() Text1.FontName = "隶书" End Sub Private Sub Option3_Click() Text1.FontName = "黑体" End Sub Private Sub Option4_Click() Text1.FontName = "楷体_GB2312" End Sub
2 复选框 复选框的状态由其Value属性决定: 0 —— 假 1 —— 真 2 —— 暗 1. 使用单个复选框 【例4-19】在上例中,增加复选框,控制选项按钮组的显示。 增加复选框控件Check1的Click事件代码: Private Sub Check1_Click() Option1.Visible = Check1.Value Option2.Visible = Check1.Value Option3.Visible = Check1.Value Option4.Visible = Check1.Value End Sub
2. 使用多个复选框 【例4-20】设计一个个人资料输入窗口,使用选项按钮组输入性别与民族,使用复选框输入个人爱好,如图4-25所示。 . 图4-25 使用多个复选框 图4-26 建立用户界面