长江大学工程技术学院
VB语言程序设计课程设计报告
(20##-20##学年 第一学期)
一 、功能描述[g1]
这是一个简单的打字小游戏。适用于刚开始接触打字的初学者,我们的游戏实现的是单个的字母练习这就降低了难度,我们设有不通的速度等级,当你击中的字母达到规定值时速度就会增加。随之增加难度.但是字母的个数不会改变,还是原来的6个字母下落,同时打字窗口还设有返回上一级菜单的按钮,练习者可以随时停止游戏返回上一级。在打字的过程中如果字母没有被击中就会落下,落下一个字母剩余能量就会减一(我们舍得剩余能量为15.)当剩余能量减到小于零的时候游戏就会结束,打对一个字母旁边的分数栏就会曾加1,我们设定的时间是2分钟,当你进入游戏的同时倒计时也就开始了,如果在规定的2分钟结束时你的剩余能量大于零,你就胜利了。同时会弹出一个窗体显示你的速度等级和得分。胜利后你也可以选择再来一次。重新开始。
二、概要设计[微软用户2]
图1[g3] :打字游戏流程图
三、详细设计[g4]
1、利用一个数组控和一个随机函数来实现字母的随机赋值
Randomize /保证字母是随机抽取的
For i = 0 To 5 /利用循环给数组控件赋值
Label1(i).Caption = Chr$(Rnd * 26 + 97)[g5]
Next i
2、在文本框的单击事件里用for循环实现了打中后字母的重新赋值和重新下落、以及得分的增加等功能代码如下所示
For i = 0 To 5 '
If Right(Text1.Text, 1) = Label1(i).Caption Then
defen = defen + 1 /当打对后得分就加一
Label2.Caption = defen /定义label2的值表示得分
Label1(i).Caption = Chr$((Rnd * 26) + 97) /当打对后字母有重新更换
Label1(i).Top = 400 /打对后字母从top为400的地方开始掉下
Text1.Text = "" /text进行清空
End If
Next i
3、在该游戏中有速度快慢的控制。随着得分的不断增加速度的等级也会不断增加,另外也可以直接选择速度的等级直接进入不同等级的打字游戏。利用一个参数n实现
If Label2.Caption = 30 Then '当打对30个字母时
n = 50 /速度变为50向下落
Label3.Caption = dengji
dengji = 2 /等级的值变为2
ElseIf Label2.Caption = 70 Then /当打对70个字母
n = 70 /速度变为70
Label3.Caption = dengji
dengji = 3 /等级的值为3
ElseIf Label2.Caption = 100 Then /当打对100个字母时,打字游戏的胜利
Form3.Show /form3窗体显示
Unload Form2 /form2窗体卸载
End If
4、用两个时钟控件实现对字母下落、剩余能量减少、和时间递减的功能。
For i = 0 To 5 '用循环使控件实现下面的功能
Label1(i).Top = Label1(i).Top + n /字母往下掉的速度
If Label1(i).Top >= Form1.Height Then /当字母没有被打中落下
Label9.Caption = Label9.Caption - 1 /落一个剩余能量就减一
m(i) = 0 /定义的数组参数值为零
If m(i) = 0 Then /当参数为零的时候
Label1(i).Top = 400 /空间从400 的高度开始下落
Label1(i).Caption = Chr$(Rnd * 26 + 97) /重新赋值改变字母
End If
Next i
5、上面的代码是时钟控件一。实现的是前两个功能。下面的是时钟控件2实现的是时间递减的功能。代码如下:
Label4.Caption = Label4.Caption - 1 '每秒时间就会减一
If Label4.Caption = 0 Then '当时间为零的时候
Form3.Show 'form3显示
Unload Form2 'form2窗体卸载
End If
四、效果分析以及设计方案的完善[微软用户6]
游戏的开始界面
图2 打字游戏开始界面
游戏的运行界面,有时间、得分、剩余能量等的显示,返回按钮课返回主页面。当字母没有被击中而落下时剩余能量就会减少一。剩余能量为零时游戏就结束了
图3 打字游戏运行界面
规定的时间不为零,但剩余能量为零了。则游戏结束
图4 打字游结束界面
如果剩余能量不为零,但时间为零了则游戏闯关成功。显示您的等级和分数
图5 打字游戏得分界面
在我们的游戏中有等级的难易之分。当打中的个数到达一定数量时即分数到达一定值时速度的等级就会随之增加我们也可以直接选择速度的等级进行游戏。初始的速度默认等级为1。界面如下:
图6 打字游戏等级界面
存在的问题:当选择速度等级进入游戏时,刚开始速度不会增加。当按键后才会进入相应的速度等级。以后会改进使程序更加完善。
五、心得体会[g7]
这次的visual basic课程设计。通过自己的努力完成了一个简单的打字小游戏。在设计的过程中遇到了不少问题,发现了自己的很多不足。通过不断的改进和完善程序终于有了一个简单的模型。这是学vb以来第一次做程序,虽然我的程序还有很多的缺陷和不足,但在编程中学到了不少东西,也懂得了作为一个编程人员应具备一定的素质。现在我们的专业知识还很少,以后会更加努力的学习专业课,做一个合格的编程人员。
六、参考文献[g8]
1.邵杰.Visual Basic程序设计(第4版),东南大学出版社.2000
2.邵杰.Visual Basic实验与测试(第4版),东南大学出版社.2000
3.《Visual Basic 6.0程序设计教程》,罗朝盛,人民邮电出版社
附 录[g9]
程序源代码
1、form1窗体。(Form1窗体是开始界面)
Private Sub Command1_Click()
Form1.Hide 'form1窗体隐藏
Form2.Show 'form2窗体出现
End Sub
Private Sub Command2_Click()
End '程序结束
End Sub
Private Sub Command3_Click()
Form1.Hide
Form5.Show
End Sub
2、form2窗体(运行的窗体)
Dim i%
Dim m%
Private Sub Command1_Click()
Unload Form2 'form2窗体卸载
Form1.Show 'form1窗体显示
defen = 0 '得分重新从0开始
End Sub
Private Sub Form_Load()
Randomize '保证字母是随机抽取的
For i = 0 To 5 '利用循环给数组控件赋值
Label1(i).Caption = Chr$(Rnd * 26 + 97)
Next i
Label2.Caption = 0 'label2的初始值
Label3.Caption = 1 'label3的初始值
Label4.Caption = 120 'label4的初始值
Label9.Caption = 15 'label9的初始值
n = 40 'n的初始值(n表示向下掉的速度)
End Sub
Private Sub Text1_Change()
For i = 0 To 5 '利用循环使数字空间实现下面的功能
If Right(Text1.Text, 1) = Label1(i).Caption Then '选择语句的条件是打对字母(和text右边的字母进行比较)
defen = defen + 1 '当打对后得分就加一
Label2.Caption = defen '定义label2的值表示得分
Label1(i).Caption = Chr$((Rnd * 26) + 97) '当打对后字母有重新更换
Label1(i).Top = 400 '打对后字母从top为400的地方开始掉下
Text1.Text = "" 'text进行清空
End If '选择的结束语句
Next i '向下个字母循环
If Label2.Caption = 30 Then '当打对30个字母时
n = 50 '速度变为50向下落
Label3.Caption = dengji 'label3表示等级
dengji = 2 '等级的值变为2
ElseIf Label2.Caption = 70 Then '当打对70个字母
n = 70 '速度变为70
Label3.Caption = dengji 'label3表示等级
dengji = 3 '等级的值为3
ElseIf Label2.Caption = 100 Then '当打对100个字母时
Form3.Show 'form3窗体显示
Unload Form2 'form2窗体卸载
End If
If dengji = 1 Then n = 40
If denfji = 2 Then n = 50
If dengji = 3 Then n = 70
End Sub
Private Sub Timer1_Timer()
Dim m(5) As Integer '定义一个数组
For i = 0 To 5 '用循环使控件实现下面的功能
Label1(i).Top = Label1(i).Top + n '字母往下掉的速度
If Label1(i).Top >= Form1.Height Then '当字母没有被打中落下
Label9.Caption = Label9.Caption - 1 '落一个剩余能量就减一
m(i) = 0 '定义的数组参数值为零
If m(i) = 0 Then '当参数为零的时候
Label1(i).Top = 400 '空间从400 的高度开始下落
Label1(i).Caption = Chr$(Rnd * 26 + 97) '重新赋值改变字母
End If
End If
If Label9.Caption <= 0 Then '当剩余能量为零时
Unload Form2 '卸载form2
Form4.Show 'form4窗体显示
Timer2.Enabled = False '时钟控件2不可用
End If
Next i
End Sub
Private Sub Timer2_Timer()
Label4.Caption = Label4.Caption - 1 '每秒时间就会减一
If Label4.Caption = 0 Then '当时间为零的时候
Form3.Show 'form3显示
Unload Form2 'form2窗体卸载
End If
End Sub
3、form3窗体(显示胜利时的最后得分)
Private Sub Form_Load()
Text1.Text = defen 'txet1的内容是显示得分
Text2.Text = dengji 'text2的内容是显示等级
End Sub
4、form4窗体(失败后显示的窗体)
Private Sub Command1_Click()
Form4.Hide 'form4窗体隐藏
Form1.Show 'form1窗体显示
Unload Form2 ' 卸载form2
End Sub
5、form5窗体(速度选择的窗体)
Private Sub Command1_Click()
Form2.Show
Form5.Hide
If Val(Text1.Text) = 1 Then
dengji = 1
ElseIf Val(Text1.Text) = 2 Then
dengji = 2
ElseIf Val(Text1.Text) = 3 Then
dengji = 3
End If
End Sub
[g1]一级标题 黑体 四号 段前段后0.5行
[微软用户2]可参考教材第二点1.邵杰.Visual Basic程序设计(第4版),东南大学出版社.2000
2.邵杰.Visual Basic实验与测试(第4版),东南大学出版社.2000
3.《Visual Basic 6.0程序设计教程》,罗朝盛,人民邮电出版社
概要设计格式编写
[g3]黑体五号 要有图名
[g4]内容主要为游戏关键程序部分,程序段要有必要的文字注释
[g5]Times New Roman 小四
[微软用户6]首先对完成效果进行分析,然后指出其中存在的问题,以及以后如何进行完善
[g7]要求500字以上
[g8]至少5个,格式如参考文献1
[g9]另起一页,居中 黑体4号
第二篇:《VB程序设计》实验报告
台州学院
《VB程序设计》实验报告
实验1.1 设计一个程序,程序运行的初始界面如图1-1所示。当单击“显示”按钮时,在文本框中显示“欢迎使用VB!(”图1-1);当单击“清除”按钮时,清除文本框内的文本;当单击“退出”按钮时,结束程序运行。 Private Sub Command1_Click() Text1.Text = "欢迎使用VB!" End Sub
Private Sub Command2_Click() Text1.Text = "" End Sub
Private Sub Command3_Click() End End Sub
实验1.2 设计一个程序,程序运
行的初始界面如图1-3所示,其中“显
示”按钮为不可用。同时要求:
(1)当单击“改变文字”按钮时,在左边标签文字内容改为“你好,张三!,”同时“改变文字”按钮变为不可用(图1-4);
(2)当单击“隐藏”按钮时,将左边标签设为不可见,同时“隐藏”按钮变为不可用,“显示”按钮变为可用(图1-5);
(3)当单击“显示”按钮时,重新显示左边标签,同时“隐藏”按钮变为可用,“显示”
Private Sub Command1_Click() Label1.Caption = "你好,张三!" Command1.Enabled = False End Sub
Private Sub Command2_Click()
Label1.Visible = False
Command3.Enabled = True Command2.Enabled = False End Sub
Private Sub Command3_Click() Label1.Visible = True Command2.Enabled = True Command3.Enabled = False End Sub
实验2.1 设计一个程序,运行时界面如图2-1所示。当单击“左”、“右”、“上”、“下”按钮时,标签分别向左、右、上、下移动。
Private Sub Command1_Click() Label1.Left = Label1.Left - 100
实验2.2 设计一个程序,在文本框中输入一个3位整数,单击按钮后,在标签上输出该数的百位数、十位数和个位数,运行界面如图2-2所示。 Private Sub Command1_Click()
End Sub
Private Sub Command2_Click() Label1.Left = Label1.Left + 100 End Sub
Private Sub Command3_Click() Label1.Top = Label1.Top - 100 End Sub
Private Sub Command4_Click() Label1.Top = Label1.Top + 100 End Sub
Label1.Caption = "百位数:" + Left(Text1.Text, 1) + " 十位数:" + Mid(Text1.Text, 2, 1) + " 个位数:" + Right(Text1.Text, 1) End Sub
实验2.3 设计一个程序,实现简单计算的功能、
Private Sub Command1_Click() Dim a As Single, b As Single, c As Single
a = Text1.Text b = Text2.Text c = a + b
Label1.Caption = "+" Text3.Text = c End Sub
Private Sub Command2_Click() Dim a As Single, b As Single, c As Single
a = Text1.Text b = Text2.Text c = a - b
Label1.Caption = "-" Text3.Text = c End Sub
Private Sub Command3_Click() Dim a As Single, b As Single, c As Single
a = Text1.Text b = Text2.Text c = a * b
Label1.Caption = "*" Text3.Text = c End Sub
Private Sub Command4_Click() Dim a As Single, b As Single, c As Single
a = Text1.Text b = Text2.Text c = a / b
Label1.Caption = "/" Text3.Text = c End Sub
Private Sub Command5_Click()
Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub
Private Sub Command6_Click() End End Sub
实验2.4 设计一个程序,单击“输入”按钮可弹出一个输入对话框,提示用户输入带区号的电话号码,区号为4为,号码为8位,比如输入“0571-86281517”,然后将区号和电话号码在消息对话框中显示出来,运行界面如图2-4所示。
Private Sub Command1_Click() Dim c As String
c = InputBox("输入带区号的电话号码,区号为4为,号码为8位,比如输入“0571-86281517”:")
MsgBox ("区号:" + Left(c, 4) + Chr(13) + Chr(10) + "号码:" + Right(c, 8)) End Sub
实验3.1 在两个文本框中输入实数,单击按钮,显示“较小值是xxx。” Private Sub Command1_Click() Dim a As Single, b As Single, m As Single
a = Text1.Text b = Text2.Text If a < b Then m = a Else m = b End If
MsgBox "较小值是" & m End Sub
实验3.2 输入三个实数,计算其中的最大值,运行界面如图3-1所示。
采用变量m来存放中间过程和结果 Private Sub Command1_Click() Dim a As Single, b As Single, c As Single, m As Single a = Text1.Text b = Text2.Text c = Text3.Text
If a > b Then '将a,b的较大值存入
m
m = a
Else
m = b
End If
If c > m Then m = c '再将m与c比
较,得到最大值
Text4.Text = m
End Sub
注:比较a,b部分可以写成单行If结
构:
If a > b Then m = a Else m = b
实验3.3 用输入对话框输入x,根据下式计算对应的y,并在窗体上输出y的值。
Private Sub Command1_Click() Dim x As Single, y As Single
x = InputBox("请输入x的值:",0)
If x > 10 Then
y = Sqr(x) + Sin(x)
ElseIf x < 10 Then
y = 2 * x ^ 3 + 6 '注意:乘号不
能省略
Else
y = 0
End If
Print "y的值是" & y
End Sub
实验3.4 由键盘输入(1~7)范围内
的整数,试编程将其转换为中文表示的星期几,运行界面如图3-2所示。 Private Sub Command1_Click() Dim n As Integer, w As String '注意:w的类型必须为String n = Text1.Text If n = 1 Then w = "星期一" ElseIf n = 2 Then w = "星期二" ElseIf n = 3 Then w = "星期三" ElseIf n = 4 Then w = "星期四" ElseIf n = 5 Then w = "星期五" ElseIf n = 6 Then w = "星期六" ElseIf n = 7 Then w = "星期日" Else
w = "错误的输入"
End If
Text2.Text = w End Sub
实验3.5(选做)由键盘输入3个数,试编程将它们的中间数打印出来 Private Sub Command1_Click() Dim a As Single, b As Single, c As Single, m As Single a = Text1.Text b = Text2.Text c = Text3.Text
If a >= b And b >= c Then m = b
ElseIf a >= c And c >= b Then m = c
ElseIf b >= a And a >= c Then m = a
ElseIf b >= c And c >= a Then m = c
ElseIf c >= a And a >= b Then
m = a Else m = b End If
Text4.Text = m End Sub
实
验
4.1
编
写
过
程
Commandl_Click,显示对话框输入n(n>0),循环n次,每次随机产生一个两位数,求出其中的偶数之和,并在标签框Label1上显示。 Private Sub Command1_Click() Dim n As Integer, i As Integer, a As Integer, s As Integer Randomize '初始化随机数 n = InputBox("请输入n:") For i = 1 To n
a = Int(Rnd * 90) + 10 '随机生成一个两位数存于变量a中
Print a; '显示在屏幕上,以便校对(实际编程可以省略) If a Mod 2 = 0 Then s = s + a '判断是否为偶数 Next i
Label1.Caption = s End Sub
说明:随机生成两位数也可以用 a=(Int(Rnd*9)+1)*10+Int(Rnd*10)
实
验
4.2
编
写
过
程
Commandl_Click,用InputBox函数输入10个学生的成绩,统计后依次用标签控件Labell~Labe13显示优秀(85-100)、通过(60-84)和未通过(小于60)的人数。
Private Sub Command1_Click() Dim n1 As Integer, n2 As Integer, n3 As Integer, CJ As Integer For i = 1 To 10
CJ = InputBox("请输入成绩(一共10个成绩):")
If CJ >= 85 And CJ <= 100 Then
n1 = n1 + 1
ElseIf CJ >= 60 And CJ <= 84 Then
n2 = n2 + 1 ElseIf CJ < 60 Then n3 = n3 + 1 End If Next i
Label1.Caption = n1 Label2.Caption = n2 Label3.Caption = n3 End Sub
实验
4.3 编制事件程序
Dim n As Integer, i As Integer, s As Single
n = InputBox("请输入n:") s = 1 For i = 2 To n
s = s + i / ((i + 1) * (i + 2)) Next i Text1.Text = s End Sub
实验4.4 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数。例如,153是一水仙花数,因为153?13?53?33 程序1:用3个数字组合成百位数的办法,生成所有的三位数进行判断。 Dim a As Integer, b As Integer, c As Integer 'a代表百位数字,b十位,c各位
Dim s As Integer 's存放组合成的三位数
Command1_Click,执行该过程时输入n,并计算下列表达式的值,然后将计算结果在文本框控件Text1中显示。
Private Sub Command1_Click()
For a = 1 To 9 '百位数字取值范围是1-9
For b = 0 To 9 '十位数字取值范围是0-9
For c = 0 To 9 '个位数字取值范围是0-9
s = a * 100 + b * 10 + c '组合成的三位数
If s = a * a * a + b * b * b + c * c * c Then '判断是否水仙花数 Print s End If Next c Next b Next a ---------------
程序2:将百位数拆分出每一位,来判断是否水仙花数。
Dim i As Integer '存放循环取值的三
位数
Dim a As Integer, b As Integer, c As Integer 'a存放百位数字,b十位,c各位
For i = 100 To 999 a = Int(i/100)
b = Int((i - a * 100) / 10) c = i Mod 10
If i = a * a * a + b * b * b + c * c * c Then '判断是否水仙花数 Print i End If Next i
实
验
4.5
用
?
2
?116
?
11
2
2
2
?
3
2
???
1n
2
近似公式求
?值,当
1?5
n
2
?10
时不再累加。
Private Sub Command1_Click() Dim i As Integer, s As Single, t
As Single
t = 1 Do
i = i + 1
s = s + 1 / i ^ 2 Loop Until 1 / i ^ 2 < 10 ^ -5 Print Sqr(6 * s) End Sub
实验4.6(选做)一个两位数的正整数,如果将其个位数与十位数对调所生成的数称为对调数,如28是82的对调数。现给定一个两位的正整数,请找到另一个两位的正整数,使这两个数之和等于它们各自的对调数之和,如56+32=65+23。 Private Sub Form_Click()
Dim i As Integer, j As Integer, m As Integer, n As Integer m = InputBox("")
n = (m Mod 10) * 10 + m \ 10 For i = 10 To 99
j = (i Mod 10) * 10 + i \ 10 If i + m = j + n Then Print m, i Exit For
End If Next i End Sub
实验5.1 输入10个数给x数组,找出其中值为最大的元素并将其与第一个元素互换,找出值最小的元素并将其与最后一个元素互换,其他元素不动。如
原来: 8,7,9,15,0,3,-8,19,31, 5
输出:31,7,9,15,0,3, 5,19, 8,-8 -----------
Private Sub Form_Click() Dim x(10) As Integer, i As
Integer
Dim Max As Integer, m As Integer, Min As Integer, n As Integer 'Max、m存最大值和最大值位置;Min、n存最小值和最小值位置
For i = 1 To 10
x(i) = InputBox("请输入第" & i & "个数:")
Print x(i);
'
显示在窗体上 Next i Print
'显示换行
Max = x(1) Min = x(1) m = 1 n = 1
For i = 1 To 10 If Max < x(i) Then Max = x(i) m = i
End If
If Min > x(i) Then Min = x(i) n = i
End If
Next i
If m > 1 Then '如果最大元
素不是第一个,则与第一个交换
x(m) = x(1)
x(1) = Max
End If
If n < 10 Then '如果最小元
素不是第10个,则与第10个交换 x(n) = x(10) x(10) = Min
End If
For i = 1 To 10
'
在窗体上显示结果 Print x(i);
Next i
End Sub
注意:如果第一个为最小元素,则结'记录最大值位置
果出错,因为最小值被最大值调换了。可以这么改:在最后一个If前添加一行“If n = 1 Then n = m”可以设定新的最小值所在位置。'记录最小值位置 ==================== 实验5.2 编写事件过程
Command1_Click,完成下列运算: (1)输入10个数到整型数组a;
(2)将a(1)各位数字和赋值到b(1)、a(2)各位数字和赋值到b(2)、...、a(10)各位数字和赋值到b(10);
(3)在窗体上以一行输出a数组各元素值(保持原输入值不变); (4)在窗体上以一行输出b数组各元素值。 -----------
Private Sub Command1_Click()
Dim a(10) As Integer, b(10)
As Integer, i As Integer '下面完成(1): For i = 1 To 10
a(i) = InputBox("请
输入第" & i & "个数:") Next i
'(1)完成,下面完成(2): For i = 1 To 10 t = a(i) '取元素
While t > 0 '分解t
的每一位,并加入到b(i)中
b(i) = b(i) +
(t Mod 10) '取出t的个位数,加入b(i)中
t = t \
10 ’t缩小十倍,去掉原来的个位 Wend
Next i
'(2)完成,下面完成(3): For i = 1 To 10 Print a(i); Next i Print
'(3)完成,下面完成(4): For i = 1 To 10 Print b(i);
Next i
End Sub
====================
实验5.3 利用随机函数产生30个不同的三位正整数,打印出这30个数,然后将它们按从大到小的次序排序,并打印出排序后的结果。
(完全可以参照:书上实例,可以用冒泡排序法,也可以用选择排序法) ====================
实验5.4(选做)输入n后,再输入n个数a1,a2,…,an,按照下列公式计算s的值并显示。
公式1:v=(a1+a2+...+an)/n 公式2:
s=Sqr((a1-v)^2+(a2-v)^2+...+(an-v)^2))/n -----------
Private Sub Form_Click()
Dim a() As Single, n As
Integer, i As Integer
Dim sum As Single, v As
Single, s As Single n = InputBox("请输入元素个
数:") ReDim a(n) For i = 1 To n
a(i) = InputBox("请
输入第" & i & "个数:")
Print a(i); '
显示在窗体上 Next i Print
'显示换行
'求出v: For i = 1 To n sum = sum + a(i)
Next i v = sum / n '求出s: sum = 0 For i = 1 To 10
sum = sum + (a(i) - v) ^ 2 Next i
s = Sqr(sum) / n '显示结果:
Print v, s End Sub
====================
实验6.1 编写一个求三个数最大值的函数max(x,y,z),然后调用此函数求下列表达式的值,首先在文本框中输入a,b,c三个数,然后单击“计算”按钮,在文本框中输出表达式的值m。表达式为: -----------
'功能:返回x,y,z的最大值 Function max(ByVal x As Single, ByVal y As Single, ByVal z As Single) As Single max = x
If max < y Then max = y If max < z Then max = z End Function
Private Sub Command1_Click() Dim a As Single, b As Single, c As Single, m As Single a = Text1.Text b = Text2.Text
c = Text3.Text
m = max(a, b, c) / (max(a + b, b, c) * max(a, b, b + c)) Text4.Text = m End Sub
==================== 实验6.2 编一求素数的函数过程Prime(x),若x是素数返回True,否则返回False。主调程序调用Prime(x)函数输出100之内的所有素数。 ------------
'功能:判断整数x是否素数,如果是返回True,否则返回False Function Prime(ByVal x As Integer) As Boolean
Dim i As Integer
If x < 2 Then Exit Function '当x<2返回False For i = 2 To Sqr(x)
If x Mod i = 0 Then Exit Function '如果x被i整除,说明x不是素数,立刻返回 Next i
Prime = True 'x是素数 End Function
Private Sub Form_Click() Dim i As Integer For i = 1 To 100
If Prime(i) Then Print i; Next i End Sub
=================== 实验6.3(选做)编一过程
Find(S1,S2),用于在字符串S1中查找子串S2,并用消息框输出结果:未找到或找到的个数。(提示:利用Mid函数反复在字符串S1找S2子串。)------------
'功能:在字符串S1中查找子串S2,返回找到的个数,未找到返回0 Function Find(S1 As String, S2 As String) As Integer
Dim i As Integer, j As Integer, L1 As Integer, L2 As Integer L1 = Len(S1) L2 = Len(S2)
For i = 1 To L1 - L2 + 1 If Mid(S1, i, 1) = Left(S2, 1) Then '如果S1中第i个字母与S2的首字母是否相同,进行下面的判断 For j = 2 To L2 '判断S1中第i+1个开始的字母序列与S2中第2个开始的字母序列是否相同 If Mid(S1, i + j - 1, 1) <> Mid(S2, j, 1) Then Exit For Next j
If j > L2 Then Find = Find + 1 '找到相同的子串,子串计数+1
End If
Next i End Function
Private Sub Form_Click()
Dim S1 As String, S2 As String, n As Integer
S1 = Input("请输入一个字符串:")
S2 = Input("请输入要查找的子串:")
n = Find(S1, S2) If n > 0 Then
MsgBox "找到" & n & "个子串。" Else
MsgBox "未找到。" End If End Sub
实验7.1 设计一个字体修饰的程序,界面如图7-1所示。要求:框架1中有两个复选框,可以选择粗体和斜体
对标签中的文字进行修饰;框架2中有两个单选按钮,可以选择宋体或楷体对标签中的文字进行修饰;标签Label1的文字内容为“Visual Basic 程序设计”,宋体,常规,三号;文字对齐方式为居中。
Private Sub Check1_Click() If Check1.Value = 1 Then Label1.FontBold = True Else
Label1.FontBold = False End If End Sub
Private Sub Check2_Click() If Check2.Value = 1 Then Label1.FontItalic = True Else
Label1.FontItalic = False End If End Sub
Private Sub Option1_Click() Label1.FontName = "宋体" End Sub
Private Sub Option2_Click() Label1.FontName = "楷体_GB2312" End Sub
实验7.2 设计一个点菜的程序,界面如图7-2所示。要求:框架中的复选框提供可选择的三种套餐,右边的文本框中可以输入数量;输入时文本框只接受数字键;并且只有选取了相应的套餐后才可以进行输入;如果没有选取套餐,那么文本框不能编辑并清空;单击“确定”按钮,统计点餐的金额,并用消息框显示出来。
Private Sub Check1_Click()
If Check1.Value = 0 Then Text1.Text = "" Text1.Enabled = False Else
Text1.Enabled = True End If End Sub
Private Sub Check2_Click() If Check2.Value = 0 Then Text2.Text = "" Text2.Enabled = False Else
Text2.Enabled = True End If End Sub
Private Sub Check3_Click() If Check3.Value = 0 Then Text3.Text = "" Text3.Enabled = False Else
Text3.Enabled = True End If End Sub
Private Sub Command1_Click() Dim s As Single
If Check1.Value = 1 Then s = 13 * Val(Text1.Text)
If Check2.Value = 1 Then s = s + 18 * Val(Text2.Text)
If Check3.Value = 1 Then s = s + 25 * Val(Text3.Text)
MsgBox "总价" & s & "元" End Sub
Private Sub Form_Load() Text1.Text = "" Text1.Enabled = False Text2.Text = "" Text2.Enabled = False Text3.Text = "" Text3.Enabled = False
End Sub
Private Sub
Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 End If End Sub
Private Sub
Text2_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 End If End Sub
Private Sub
Text3_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 End If End Sub
实验7.3 设计一密码修改程序,要求: 1) 当单击“确定”按钮后,首先比较“用户名”和“原密码”是否一致,若一致且都为“admin”,则继续执行步骤2;否则弹出消息框,提示用户出错,并让用户重新输入。
2) 比较“新密码(N) ”和“新密码(S) ”,若两者一致,弹出密码修改成功消息框,程序终止执行。否则弹出错误消息,并让用户重新输入。
3) 当单击“取消”按钮后,程序终止执行。
Private Sub Command1_Click() If Text1.Text = "admin" And Text2.Text = "admin" Then If Text3.Text = Text4.Text Then
MsgBox "密码修改成功。"
End Else
MsgBox "输入的新密码不一致,请重新输入。" End If Else
MsgBox "用户名或密码错误,请重新输入。" End If End Sub
Private Sub Command2_Click() End End Sub
实验7.4(选做)设计一个拨号盘的程序。界面如图7-4所示。要求:命令按钮数组构成数字键,单击数字键按钮,将拨号的内容显示在文本框Text1中;单击“重拨”按钮,再现原来的拨号过程;
(提示:再现过程由定时器实现)定时器的时间间隔为0.5秒;设置文本框最多接受10个字符。
Dim Number As String Dim n As Integer
Private Sub Command1_Click(Index As Integer)
Text1.Text = Text1.Text & Command1(Index).Caption End Sub
Private Sub Command2_Click() Number = Text1.Text Text1.Text = "" n = 0
Timer1.Enabled = True End Sub
Private Sub Form_Load() Timer1.Enabled = False Text1.MaxLength = 10 End Sub
Private Sub Timer1_Timer() If n < Len(Number) Then n = n + 1
Text1.Text = Text1.Text & Mid(Number, n, 1) Else
Timer1.Enabled = False End If End Sub
实验8.1 下列程序运行时,先输入各公司月销售额,然后单击命令按钮,图片框中将显示各公司销售额的圆饼图(如图8-1所示)。要求:在文本框中只能输入数字字符;在圆饼图中分别用红、绿、篮色显示A、B、C公司的扇区填充色。
Private Sub Command1_Click() Dim a As Single, b As Single, c As Single, d As Single Const pi = 3.1415926 a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) d = a + b + c
Picture1.Scale (-1.5, 1.5)-(1.5, -1.5) '设置图片框的坐标,左上角为(-1.5,1.5),右下角为(1.5,-1.5) Picture1.FillStyle = 0 '设置填充方式为实心(原来默认为1,透明) Picture1.FillColor = vbRed
Picture1.Circle (0, 0), 1, , -2 * pi, -2 * pi * a / d
Picture1.FillColor = vbGreen Picture1.Circle (0, 0), 1, , -2 * pi * a / d, -2 * pi * (a + b) / d Picture1.FillColor = vbBlue Picture1.Circle (0, 0), 1, , -2 * pi * (a + b) / d, -2 * pi End Sub
Private Sub
Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 End If End Sub
Private Sub
Text2_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 End If End Sub
Private Sub
Text3_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 End If End Sub
实验8.2(选做)坐标系作图:设置如图8-2所示的运行界面,单击“坐标系”按钮,将图片框的坐标系设置为原点
在中央,x轴[-10,10],y轴[-10,10],并画出该坐标系;单击“扇形”按钮,在图片框中画出一个圆心在原点,半径为5,圆周为红色,线宽为2,内部为绿色,起始角为30度,终止角为150度的扇形;单击“退出”按钮,结束程序运行。
Private Sub Command1_Click()
Picture1.Scale (-10, 10)-(10, -10) '设置图片框的坐标系
Picture1.Line (-10, 0)-(10, 0) Picture1.Line (0, 10)-(0, -10) Picture1.CurrentX = 0 'CurrentX, CurrentY 指示当前输入位置
Picture1.CurrentY = -0.3 Picture1.Print "(0,0)" End Sub
Private Sub Command2_Click()
Picture1.DrawWidth = 2 '画图的线粗为2
Picture1.FillColor = vbGreen Picture1.FillStyle = 0 '填充方式为实心
Picture1.Circle (0, 0), 5, vbRed, -3.14159 / 6, -3.14159 * 5 / 6 End Sub
Private Sub Command3_Click() End End Sub
实验9.2 某文本文件以下列格式存储若干学生的学号和两门课成绩,编写单击窗体的事件过程:
(1)用通用对话框控件Commondialog1选择该文件;
(2)在Label1(0)~Label1(1)显示总分最高的学生之学号、总分。
文本文件格式 “05010101”,78,89
“05010102”,83,79 ……
Private Sub Form_Click()
Dim xh As String, cj1 As Integer, cj2 As Integer
Dim topxh As String, topcj As Integer
CommonDialog1.ShowOpen Open
CommonDialog1.FileName For Input As #1
Do While Not EOF(1) Input #1, xh, cj1, cj2 If cj1 + cj2 > topcj Then topcj = cj1 + cj2 topxh = xh End If Loop Close #1
Label1(0).Caption = topxh Label1(1).Caption = topcj End Sub