《VB程序设计》实验指导书
20学时
实验一 VB集成环境及简单应用程序的建立
一、实验目的
1.掌握Visual Basic启动和退出的方法。
2.熟悉Visual Basic的集成开发环境。
3.掌握Visual Basic程序设计的基本步骤。
4. 掌握窗体的使用方法。
二、实验内容
1 启动Visual Basic,然后创建一个“标准 EXE”工程。了解Visual Basic集成开发环境下各组成部分及其作用。
【要求】
(1)在集成开发环境中分别寻找“窗体窗口”、“属性窗口”、“工程资源管理器”、“窗体布局窗口”、“工具箱窗口”,熟悉它们的默认位置。
(2)在“视图”或“工程资源管理器”中切换显示“代码窗口”和“窗体窗口”。
(3)在“视图”菜单中点击“立即窗口”,观察刚刚显示出来的“立即窗口”。
(4)尝试分别将各部分关闭,然后再用“视图”菜单中对应的菜单命令将其显示。
2 编写一个简单的应用程序。要求窗体的标题为“简单VB实验”;窗体中有一个标题为“显示”的按钮;单击该按钮后在窗体上显示蓝色的“江西农业大学”。
【步骤】
(1)设计应用程序的界面;
(2)设置对象的属性;
(3)编写事件代码;
(4)程序的运行及保存。
【提示】
在窗体上显示“江西农业大学”有两种方法:
(1)用Print方法:颜色应该设置窗体的前景色。
(2)用一个标签控件:颜色应该设置标签控件的前景色。
【思考】为什么在以上两种方法中在颜色的设置问题上有所不同?
3 窗体无最大化和最小化按钮。在窗体装入时,在窗体的标题栏显示“装入窗体”,并在窗体上装入一幅图片作为背景;当用户单击窗体,在标题栏显示“鼠标单击”,在窗体上显示“单击窗体”;当用户双击窗体,在标题栏显示“鼠标双击”。去除窗体的背景图案,并显示“双击窗体”。参考书上例题[2-6]。
三、实验要求
1、做好实验预习,掌握,并熟悉本实验中所使用的VB6.0企业版环境及相应的控件。
2、写出实验报告,内容是:
1).程序的界面设计。
2).程序主要代码。
3).运行结果。
4).实验总结。
四、注意事项
1、注意VB集成开发环境各部分的应用和控件的使用。
2、注意VB程序编码方式及书写习惯。
实验二 VB常用控件的使用
一、实验目的
1.掌握基本控件(标签、命令按钮和文本框)的基本使用方法。
2. 掌握Visual Basic程序设计的基本步骤。
二、实验内容
1 利用标签做浮雕效果文字。参考书上例题[4-1]。
2编写一个应用程序,界面如图2-1所示。窗体中文字“VB应用程序!”为一标签控件,单击标题为“放大”的命令按钮,则“VB应用程序!”的字号放大一号,单击“缩小”按钮则反之;同时,窗体中还有4个含某种指向图案的按钮,若单击某个按钮,则使“VB应用程序!”向该按钮所指向的方向移动50Twip。
【提示】
四种指向的图案自行在网上搜索,也可以选择任意喜欢的图案替换。
实验三 Visual Basic语言基础
一、实验目的
(1)掌握Visual Basic的数据类型和变量定义方法。
(2)正确使用Visual Basic的运算符和表达式。
(3)掌握Visual Basic中数据输入、输出的方法。
(4)掌握Visual Basic常用函数的使用方法。
(5)学会用赋值语句构造简单的顺序结构程序。
二、实验内容
(实例1) 逻辑型数据的使用。
Private Sub Form_click()
Dim a as Boolean,b as Boolean
Dim X as Integer,y as Integer
x = 0
y = -2
a = x
b = y
Print a,b,x,y
a = True
b = FalSe
x = a
y=b
Print x,y,a,b
End Sub
(实例2) 日期型数据。
Private Sub Form_click()
Dim a as Date,S as Date,d as Date
Dim f as Date,S1 as Date,S2 as Date
a = #5/9/2002#
s = #5/12/1999 12:30:15 PM#
Print a,S
End Sub
(实例3) 求余数(模)运算符的使用。
Private Sub Form_cliCk()
Print 20 Mod 3
Print 20 Mod -3
Print -20 Mod 3
Print -20 Mod –3
End Sub
观察运行结果。
(实例4) 关系运算符。
Private Sub Form_click()
Print “abcde” = “abd”
Print “abcde” > “aba”
Print “BC” >= “ABCFF”
Print 31 < 3
Print “34” < “3”
Print “abc” <> “ABC”
End Sub
在比较时注意以下原则:
(1)如果两个操作数是数值型,则按其大小进行比较。
(2)如果两个操作数是字符型,则按字符的ASCⅡ码值从左到右一一比较,也就是说,先比较两个字符串中的第一个字符,其ASCⅡ码值大的字符串大,如果第一个字符相同,则比较第二个字符,依此类推,直到比出结果为止。
(实例5) 算术运算函数的使用。
Private Sub Form_cliCk()
Print Abs(-1.7), Log(12), Sqr(9)
Print Exp(3), Sin(30 * 3.1415926/180)
Print Int(-3.5), Fix(-3.5),Round(1.5), Round(1.512,2)
End Sub
题 假设有变量a=2,b=5,c=4,d=3,e=6,编写程序,计算表达式a+b>c and d*a=e的值,将结果打印在窗体上
答案:Private Sub Form_click()
Const a = 2
Const b = 5
Const c = 4
Const d = 3
Const e = 6
Print a + b > c And a * d = e
End Sub。
【提示】注意复合表达式的运算顺序。
【思考】复合表达式按什么样的顺序运算?
题 在文本框输入一个三位数据,单击窗体后,在窗体打印输出该数的个位数,十位数和百位数。(人民邮电出版社,第52页编程题第1题)
答案:Private Sub Command1_Click()
a = Text1
Text2 = Int(a - Int(a / 100) * 100 - Int((a - Int(a / 100) * 100) / 10) * 10)
End Sub
Private Sub Command2_Click()
a = Text1
Text3 = Int((a - Int(a / 100) * 100) / 10)
End Sub
Private Sub Command3_Click()
a = Text1
Text4 = Int(a / 100)
End Sub
Private Sub Command5_Click()
a = Text1
Text6 = Str(Text2) + Text3 + Text4
End Sub
题 随机生成一个三位正整数,将它顺序和逆序输出。例如,生成的随机三位整数是246,逆序则为642。(Text4、text3、text1值跟上面的一样)
答案:Private Sub Command1_Click()
a = Text1
Text1 = Str(Text4) + Text3 + Text2
End Sub
【提示】
1.把这个整数的个位,十位,百位单独求出来,然后进行个十百的连接。
2.利用字符串函数。
题 编程序,当单击窗体,在窗体上随机位置,随机输出一个大写的英文字母。(人民邮电出版社,第52页编程题第2题)
答案:Private Sub Form_click()
CurrentX = Form1.ScaleWidth * Rnd
CurrentY = Form1.ScaleWidth * Rnd
Print Chr(Int(Rnd * 26) + 65)
End Sub
题 编写一模拟简易计算器的程序,运行界面如图所示。(人民邮电出版社,第53页上机实验第3题)
答案:Private Sub Command1_Click()
Label1 = "+"
Text3 = Val(Text1) + Text2
End Sub
Private Sub Command2_Click()
Label1 = "-"
Text3 = Val(Text1) - Text2
End Sub
Private Sub Command3_Click()
Label1 = "*"
Text3 = Val(Text1) * Text2
End Sub
Private Sub Command4_Click()
Label1 = "/"
Text3 = Val(Text1) / Text2
End Sub
Private Sub Command5_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
实验四 顺序结构程序设计
一、实验目的
1.掌握常量和变量、表达式的基本概念和正确书写格式。
2.掌握赋值语句和常用函数的正确使用方法。
3. 掌握输入、输出对话框(InputBox和MsgBox)的基本使用方法。
二、实验内容
1 已知三角形三条边a、b、c,从键盘输入其值(利用inputbox函数),编写程序,计算三角形的面积。
答案:Private Sub Form_click()
Dim a As Double, b As Double, c As Double, S As Double
a = Val(InputBox("a=?"))
b = Val(InputBox("b=?"))
c = Val(InputBox("c=?"))
x = (a + b + c) / 2
S = Sqr(x * (x - a) * (x - b) * (x - c))
Print "三角形的面积="; S
End Sub
2 编写程序,界面如图4-1所示。使得单击一次按钮可以产生一个[60,90]之间的随机数并显示在标签1上,再求出该数的正弦值,将结果写在标签2上。
【提示】
(1)使用Rnd函数产生随机数,注意,为了防止两次运行程序的随机数序列相同,调用Rnd之前先用Randomize语句进行初始化。
(2)产生某闭区间内的随机数的公式为:(上限-下限+1)*rnd+下限。
(3)求正弦值函数为:sin()。
答案:Private Sub Command1_Click()
Randomize
n = Rnd * 31 + 60
Label2 = n
Label4 = Sin(n)
End Sub
【思考】怎样产生一个[60,90]之间的随机数?
3 编写一个华氏温度F与摄氏温度C之间转换的应用程序,界面如图4-2所示。其中F与C之间的关系为:。
答案:Private Sub Command1_Click()
F = Text1
C = ((F - 32) * 5) / 9
Text2 = C
End Sub
Private Sub Command2_Click()
C = Text2
F = 9 / 5 * C + 32
Text1 = F
End Sub
4 编写计算圆面积和球体积的程序,程序运行界面如图4-3所示。要求输出结果只保留四位小数;如果半径的输入不合法,例如含有非数值字符,应该用MsgBox报告输入错误,并在错误信息得到用户确认(点击MsgBox对话框上的“确定”按钮)之后,将输入焦点转移到输入半径的文本框中,且将当前的非法输入自动选定,反白显示。
答案:Private Sub Command1_Click()
Dim a As Double, S As Double, V As Double
Const PI# = 3.1415926
a = Val(Text1)
S = PI * a ^ 2
S = Fix(S * 10000 + 0.5) / 10000
V = 4 / 3 * PI * a ^ 3
V = Fix(V * 10000 + 0.5) / 10000
Text2 = S
Text3 = V
If Not IsNumeric(Text1) Then
MsgBox "输入错误, vbOKOnly"
Text2 = ""
Text3 = ""
Text1 = ""
Text1.SetFocus
End If
End Sub
【提示】
(1)判断输入值是否为数值类型可用函数IsNumeric();
(2)VB大部分数据类型之间在适当的时候会自动相互转换,此谓隐式转换。例如,文本框的Text属性为字符串类型,当用Text属性值直接参加算术运算时,Text属性值先会自动转换为数值类型,然后再参加算术运算。但是当Text属性值含有非数字字符时,会产生“类型不匹配”的运行时错误,因此有些情况下采用显示转换更为安全妥当。
当字符串类型向数值类型转换时用函数Val();而当数值类型向字符串类型转换时,可以用Str()函数或格式化函数Format()。
实验五 选择结构程序设计(一)
一、实验目的
1、掌握逻辑表达式及关系表达式的正确书写形式。
2、掌握IF语句单行和块书写格式及其正确使用(尤其注意ELSE 和ELSE IF)。
3、掌握多分支情况的控制(使用Select CASE语句)的使用及与多分支条件语句的区别。
二、实验内容
1 有函数:
写一个程序,输入x值后,则输出相应y值。要求用“If…ElseIf…EndIf”和用“Select Case”两种方法完成该题目。
答案:方法一:
Private Sub Form_click()
x = Val(InputBox("请输入x值", "数据输入框"))
If x < 1 Then
y = x
Print y
ElseIf 1 <= x < 10 Then
y = 3 * x - 2
Print y
Else: y = 4 * x - 12
Print y
End If
End Sub
方法二:Private Sub Form_click()
Dim x%, y%
x = Val(InputBox("请输入x值", "输入数据框"))
Select Case Val(x)
Case Is < 1
y = x
Case Is >= 10
y = 4 * x - 12
Case Else
y = 3 * x - 10
End Select
MsgBox "y的值是" & Str(y)
End Sub
【提示】
注意区分1≤x<10和1<=x And x<10有什么不同。
2 编写一个判断给定坐标在第几象限的程序,界面如图5-1所示。
答案:Private Sub Command1_Click()
Dim x As Integer, y As Integer
x = Text1
y = Text2
If x > 0 And y > 0 Then
Print "第一象限"
ElseIf x > 0 And y < 0 Then
Print "第四象限"
ElseIf x < 0 And y < 0 Then
Print "第三象限"
Else
Print "第二象限"
End If
End Sub
实验六 选择结构程序设计(二)
一、实验目的
1、掌握逻辑表达式及关系表达式的正确书写形式。
2、掌握IF语句单行和块书写格式及其正确使用(尤其注意ELSE 和ELSE IF)。
3、掌握多分支情况的控制(使用Select CASE语句)的使用及与多分支条件语句的区别。
二、实验内容
1 设计一个猜数字游戏软件,点击出题按钮,产生一个10到99的随机数,然后在文本框中由用户输入数字,如果结果不对,应提示是大了,还是小了,否则提示正确。运行界面下图所示。(思考:如何限制用户猜数字的次数?)
三、注意事项
1、注意VB集成开发环境各部分的应用和控件的使用。
2、注意VB程序编码方式及书写习惯。
答案:Dim m As Integer
Private Sub Command1_Click()
m = Int(Rnd * 90) + 10
Command1.Enabled = False
End Sub
Private Sub Command2_Click()
If Val(Text1.Text) > m Then
MsgBox "您猜的数字大了!加油加油!"
ElseIf Val(Text1.Text) < m Then
MsgBox "您猜的数字小了!加油加油!"
Else
MsgBox "恭喜,您猜的数字正确!"
End If
End Sub
Private Sub Command3_Click()
Text1 = ""
End Sub
实验七 循环结构程序设计(一)
一、实验目的
1.掌握循环的基本概念。
2.掌握For循环。
3.掌握Do ... While循环和Do While ... Loop循环,注意区分两种循环。
4.了解Do ... Loop Until循环和Do Until ... Loop循环。
5.掌握如何利用循环条件来控制循环,防止死循环的出现。
二、实验内容
1编写一个程序,当程序运行时,单击窗体后,用单循环在窗体上输出规则字符图形,如图4-1所示。
答案:Private Sub Form_click()
n=Int(Rnd*9)+1
For i = 1 To n
Print Tab(i - n - 1); String(i, "*")
Next i
End Sub
【提示】
使用String()函数,String()函数可以重复显示某个字符串。例如,String(4,"*")可以生成4个连续的“*”,即“****”。
2 编写程序,计算Sum=1+2+3+...,的值,直到Sum > 6000为止。
答案:Private Sub Form_click()
Dim S As Integer, I As Integer
n = Int((-1 + Sqr(1 + 48000)) / 2)
S = 0
For I = 1 To n
S = S + I
Next I
Print "S ="; S
End Sub
3 计算的值,当第i项时结束。
运行不出答案:Private Sub Form1_click()
Dim s As single, i As Integer, t As single
i = 0: s = 0: t = 1
Do While t > 0.00001
s = s + 1 / t
i = i + 1
t = t * (i ^ 2)
Loop
Form1.Print "s="; s
End Sub
4使用双重循环,输出“九九乘法表”,如图4-3所示。
【提示】
(1)注意行号和该行乘法单元的个数之间的关系。
(2)注意乘法单元的规律:“4×3=12”中4为行号,3为列号,且列号不大于行号。
(3)乘号“×”可从汉字输入法软键盘菜单的“数学符号”中找到;或从Word中菜单【插入】->【符号】中找到,再从Word中剪切或复制到VB代码中。
(4)可以将窗体的AutoRedraw属性设为True,以防初始大小的窗体显示不下全部内容。
答案:Private Sub Picture1_Click()
For j = 1 To 9
For i = 1 To j
se = i & "*" & j & "=" & i * j
Picture1.Print Tab((i - 1) * 9); se;
Next i
Picture1.Print
Next j
End Sub
实验八 循环结构程序设计(二)
一、实验目的
1.掌握循环的基本概念。
2.掌握For循环。
3.掌握Do ... While循环和Do While ... Loop循环,注意区分两种循环。
4.了解Do ... Loop Until循环和Do Until ... Loop循环。
5.掌握如何利用循环条件来控制循环,防止死循环的出现。
二、实验内容
1 输出如图5-1所示的图形。(没图)
【提示】
(1)注意观察图形的规律:第I行在输出时是m个空格+n个字符x,其中m、n、x均和I有关系。
(2)配合Print方法使用Spc(n)函数,其作用是产生n个连续的空格。
(3)使用Str()函数和Trim()函数。Str(f)函数是将数值f转换为相同形式的字符串;Trim(s)函数可将字符串s的最前和最后的空格(称为前导和后导空格,可为多个空格)剪切掉,字符串中的空格不受影响。当I为7时,Trim(Str(I))则是字符串"7"。
(4)结合(3),当I为1时, String(2*I+1,Trim(Str(I)))则生成字符串"111"。
2编写程序,用循环在窗体上实现图5-2的图形。
答案:Private Sub Form_click()
For i = 9 To -1 Step -1
Print Tab(9 - i); Tab(10 - i); String(i + 1, Trim(Val(i))); String(i, Trim(Val(i)))
Next i
End Sub
3显示所有的水仙花数。所谓水仙花数,就是指一个3位正整数,其各位数字的立方和等于该数本身。例如,,153即为水仙花数。
答案:Private Sub Form_click()
For n = 100 To 999
a = n \ 100
b = (n - 100 * a) \ 10
c = n Mod 10
If n = a ^ 3 + b ^ 3 + c ^ 3 Then
Print n
End If
Next n
End Sub
【提示】
本题目解法有两种:
(1)对3位数的各位数组合进行穷举:利用3重循环,将3个个位数组成一个3位数进行判断。例如,3位数的各位数从高位到低位依次为a、b、c,则对应的3位数为a*100+b*10+c。
(2)对所有3位数进行穷举:利用单循环对所有3位数进行穷举,循环内将一个3位数拆成3个个位数进行判断。例如,对s=678进行拆解时:个位数=s Mod 10;十位数=(s\10) Mod 10;百位数=s\100。当然,也可以将上述拆解过程写为一个循环(这时就是利用双重循环,内层循环即为拆解过程)。
实验九 数组及其应用(一)
一、实验目的
1.掌握数组的基本概念。
2.掌握数组的声明、引用。
3.掌握静态数组和动态数组的区别。
4.掌握控件数组。
4.掌握如何利用数组解决与数组相关的常用算法(特别是排序算法)。
二、实验内容
1用数组保存随机产生的10个介于20到50之间的整数,求其中的最大数、最小数和平均值,然后将10个随机数和其最大数、最小数以及平均值显示在窗体上。
2随机产生10个介于0到100之间的整数,分别用选择法和冒泡法对其进行排序。
3用数组求得Fibonacci数列(1 1 2 3 5 8 13 21 34…)的前20项,并按照每行5个打印在图片框控件(PictureBox)中。Fibonacci数列数学描述式为:F(i)= F(i-2)+F(i-1)。
【提示】
为了便于控制,将打印内容打印到图片框中,例如,Picture1.Print " Hello!"。
实验十 数组及其应用(二)
一、实验目的
1.掌握数组的基本概念。
2.掌握数组的声明、引用。
3.掌握静态数组和动态数组的区别。
4.掌握控件数组。
二、实验内容
1有矩阵A,用二维数组求其转置矩阵B。要求将两矩阵按照矩阵样式显示。
,
【提示】
所谓转置,即:b(i,j)=a(j,i)。
2 有3×4矩阵A,求其中值最大和值最小的那两个元素的值,以及它们所在的行号和列号。其中,。
3 控件数组应用。参考书上习题(第页)第题。