长江大学工程技术学院
VB语言程序设计课程设计报告
(20##-20##学年 第一学期)
一、设计思路
1.要达到的目的 :
(1)联系的范围是:0-9,a-z,A-Z共62个字符,基本能满足键盘练习的要求。
(2)每次从窗口上端随机出现一个彩色字符,每隔一定时间(级数*100毫秒)下降一次,用户从键盘输入相同字符,则字符被击中后消失,用户得分等于10减去增加时间去下降次数字符输入不同则扣十分,若一直不能被击中则下降十次后达到窗口底部消失,窗口上端出现一个新的字符。
(3)游戏共分十级,第十级最低,每级游戏中低分为 50,得到300分则过关。
2.关键问题的解决 :
(1) 打字窗口可以选择PictureBox控件,而字符的下降则可以有Label控件在PictureBox中移动实现。所以在界面设计时先添加一个PictureBox控件,再在PictureBox控件中来添加Label控件,这样Label控件的容量就是PictureBox控件,以实现能在其中实现。
(2)字符通过随机函数(Rnd)来产生,由于三组字符分别在三个连续的ASCII码区域,所以可以先产生一个随机数,确定出现的字符是数字、大学字母还是小写字母,然后在不同的区域产生随机数。字符总是在窗口的顶端出现,水平位置及颜色则随机产生。
(3)用ProgressBar控件来计分,程序中要使用的重要属性有以下几项:
Max:控件允许使用的最大值;
Min:控件允许使用的最小值;
Value:控件当前的值;
Scrorlling:控件显示类型,为0时先时间段进程条,为1时先时间连续程条。
(4)每一级游戏开始时,要将程序焦点赋予给打字窗口即PictureBox控件,通过键盘按键(发生Keypress事件)suodedeASCII码来判断是否击中目标。
二、模块之间的调用关系和程序流程图
游戏设置:F111控制级数,F131控制字符组合,选择开始级别及字符组合。
开始:通过Cmdbegin(Command)控件来控制游戏的开始。
帮助:通过Cmdhelp(Command)来控制游戏说明。
退出:Cmdexit(Command)来控制游戏结束。
显示字符:将lable控件放在PictureBox中来显示并移动字符。
字符颜色:通过Pic控件来控制字符的随即颜色。
计分:通过ProgressBar控件来计分,并通过IF语句来控制得分以及升级。
三、部分程序关键源代码及注释
Dim df, jb, a, xjcs As Integer ’df、jb、xics分别存放得分、级别、下降次数
Timer1.Enabled = True ’定时器开始工作
Private Sub F111_Click(Index As Integer) ’对应菜单栏中的级别
jb = 11 – Index ’把菜单栏中选择的级数赋给jb
Private Sub F131_Click(Index As Integer) ’菜单栏中的字符选择
Lblword.Caption = Chr(char) ’字符标签的标题即为字符
Lblword.Visible = True ’是的字符可见
Pic1.SetFocus ’把程序焦点给Pic1
Private Sub form_load() jb = 10 ’当不再菜单栏中选择级数时,默认级数为10级
If Chr$(keyAscii) = Lblword.Caption Then ’判断分数是否达到升级或结束及通关条件
Lblword.ForeColor = QBColor(Int(Rnd * 14 + 1)) ’随机产生字符颜色
If Chr$(keyAscii) = Lblword.Caption Then
df = df + 10 – xjcs ’控制得分
If jb >= 1 Then MsgBox "恭喜过关!请参加第" & jb - 1 & "级练习.", , "打字练习”"
jb = jb - 1
If jb = 0 Then jb = 10: MsgBox "恭喜全部过关,真是高手!" ’控制升级或通关
Case 5
char = Int(Rnd * 2)
Select Case char
Case 0
char = 97 + Int(Rnd * 26)
Case 1
char = 65 + Int(Rnd * 26)
End Select ’照这样格式写出7种字符组合
四、设计方案的完善及目前存在的问题
1.设计方案要完善的地方
在把书上的东西写到VB中,调试好后,还要用菜单的方式把增强功能做出来,以保证设计版面的整洁、美观。
在程序编好后,还要把程序整体整理一遍,去掉多余的程序,并且尽量把程序简单化,使程序更加简洁,更加易懂。
2. 目前存在的问题
不管在菜单栏中的级数栏中选择级别几,在程序开始时,始终是显示“开始第一关”。
五、本次设计的收获及心得体会(不少于500字)
经过了一个多星期(几个下午)的Vb课程设计,感觉收获不少。
虽然在程序设计的过程中遇到了不少麻烦(代码输入错误、各属性没与程序对应好……),后来由因为增强功能做不出来,也曾打算放弃这个程序的设计,去做其它的程序,但最后还是硬着头皮的做了下来,当我用TextBox(用一个这个控件控制开始级数)和CheckBox(用三个来控制字符的选择)控件做的差不多了的时候,还有点小问题,问老师后,老师又说不能用这种方法做,这种方法使界面不美观,一定要用菜单方式把增强功能做出来,这样做出来的东西版面才会更加美观整洁。
当时,我真的一点都不想再做下去了,但想到这个题目已经做了一大半,快接近尾声了,也不想就此放弃,再做其它的程序。于是,就还是坚持坐了下来,不懂的就问老师,经过数次修改后,加了增强功能的程序终于给我编出来了。
从中也清楚了VB编程中需要注意的各方面问题(控件代码、属性及程序输入错误……),也体会到任何事,不能轻言放弃,只要坚持下去,就有机会成功!
在VB方面,我还对控件的灵活运用有了更深的了解,能更加灵活的使用各种控件,还是我清楚了控件个属性和程序编写使各方面对应及需要注意的事项!
六、参考文献
[1] 邵洁,刘岳峰,蒲阳,程劼编著. Visual Basic 实验与测试(第四版). 东南大学出版社,2008
[2] 邵洁,刘岳峰,蒲阳,程劼编著. Visual Basic 程序设计(第四版). 东南大学出版社,2008
[3] 邵洁,刘岳峰,苏萍编著. Visual Basic 6.0复习指导和实习教程. 杭州:中国美术学院出版社,2008
第二篇:VB程序设计实验要求及报告8答案详解
上海立信会计学院本科实验报告
班级: 学号: 姓名: 指导教师:
系部: 专业: 实验时间:
实验8 数据文件及图形操作
一、 实验目的
1. 掌握顺序文件的特点和使用
2. 掌握顺序文件的打开、关闭和读写操作
3. 掌握在应用程序中使用文件
4. 掌握图形操作
二、实验要求
1. 在C:\下建立子文件夹“VB实验8”,按照题目要求,在该文件夹下为各题保存相应的文件,如本实验中的第一题,需保存的文件有:工程文件(81.vbp)、窗体文件(81.frm) 及可执行文件(81.exe),本实验中的第二题,需保存的文件有:工程文件(82.vbp)、窗体文件(82.frm) 及可执行文件(82.exe),其余实验依此类推。
2. 撰写实验过程中出现了哪些问题、错误,你是如何解决的,做一个小结。
三、 实验内容:
1. 设计一个应用程序,窗体内所有控件字体为宋体、大小为五号,运行界面如图8-1所示。若单击“建立文件”按钮,则分别用Print # 和 Write # 语句将三个同学的学号、姓名和成绩写入(当前目录)文件Score.dat和Score1.dat;若单击“读取文件”按钮,则用line Input 语句按行将两个(当前目录)文件中的数据送往相应的文本框。其中:学号和姓名是字符串类型,成绩是整型:数据如下: "051023", "王海涛", 66
"051024", "周文英", 88
"051025", "王海涛", 71
图8-1
Private Sub Command1_Click()
Open "score.dat" For Output As #1
Print #1, "051023", "王海涛anghai", 66
Print #1, "051024", "周文英", 88
Print #1, "051025", "王海涛", 71
Close #1
Shell "notepad score.dat"
Open "score1.dat" For Output As #1
Write #1, "051023", "王海涛", 66
Write #1, "051024", "周文英", 88
Write #1, "051025", "王海涛", 71
Close #1
Shell "notepad score1.dat"
End Sub
Private Sub Command2_Click()
Dim inputdata As String
Open "score.dat" For Input As #1
Do While Not EOF(1)
Line Input #1, inputdata
Text1.Text = Text1.Text + inputdata + vbCrLf
Loop
Close #1
Open "score1.dat" For Input As #1
Do While Not EOF(1)
Line Input #1, inputdata
Text2.Text = Text2.Text + inputdata + vbCrLf
Loop
Close #1
End Sub
Private Sub Form_Load()
Text1.Text = ""
Text2.Text = ""
End Sub
2. 设计一个应用程序,界面如图8-2(1),窗体内所有控件字体为宋体、大小为五号,点击“建立文件”按钮,则建立数组num,数组元素为10个小于100的随机整数,将数组数据写入文件(当前目录)Fb.dat,文件内容及格式如图8-2(2);点击“读取文件”按钮,则从(当前目录)Fb.dat文件中将数据读取出来,显示在列表框中,并计算这些数的合计与平均数,并把计算结果也显示在列表框中。
图8-2 (1) 图8-2 (2)
Private Sub Command1_Click()
Dim num(9) As Integer
Dim i%, outputstring As String
Open "Fb.dat" For Output As #1
For i = 0 To 9
num(i) = Int(Rnd * 100)
outputstring = "num(" & i & ")="
Write #1, outputstring, num(i)
Next i
Close #1
End Sub
Private Sub Command2_Click()
Dim sum%, ave!
Dim inputstring As String, inputdata As Integer
Open "Fb.dat" For Input As #1
sum = 0
Do While Not EOF(1)
Input #1, inputstring, inputdata
List1.AddItem inputstring & inputdata
sum = sum + inputdata
Loop
Close #1
List1.AddItem "合计:" & sum
ave = sum / 10
List1.AddItem "平均:" & ave
End Sub
Private Sub Form_Load()
'
Randomize
End Sub
3. 设计一个应用程序,界面如图8-3,窗体内所有控件字体为宋体、大小为五号。
要求:
1) 点击“打开文件”按钮,则弹出一个“打开”通用对话框,用户选择文件后将文件内容显示在文本框中;“C:\VB实验8”下的“实验83.txt”供调试使用;
2) 点击“保存文件”按钮,则弹出“另存为”通用对话框,用户确定文件保存目录为“C:\VB实验8”,文件名为83.dat,保存内容为文本框中显示的所有文字内容;
3) 点击“结束”,则退出程序。
图8-3
Private Sub Command1_Click()
CommonDialog1.Filter = "Text files(*.txt)|*.txt|Data files(*.dat)|*.dat|All files(*.*)|*.*"
CommonDialog1.FilterIndex = 1
CommonDialog1.FileName = ""
CommonDialog1.Action = 1
Open CommonDialog1.FileName For Input As #1
Do While Not EOF(1)
Line Input #1, inputdata
Text1.Text = Text1.Text + inputdata + vbCrLf
Loop
Close #1
End Sub
Private Sub Command2_Click()
CommonDialog1.Filter = "Text files(*.txt)|*.txt|Data files(*.dat)|*.dat|All files(*.*)|*.*"
CommonDialog1.FilterIndex = 2
CommonDialog1.FileName = ""
CommonDialog1.Action = 2
Open CommonDialog1.FileName For Output As #1
Print #1, Text1.Text
Close #1
End Sub
Private Sub Command4_Click()
End
End Sub
Private Sub Form_Load()
Text1.Text = ""
End Sub
4. 编一循环程序,单击窗体后,用Line方法在屏幕上随机产生20条长度、颜色(用QBColor实现)、宽度(2-4单位)各异的直线,效果图8-4所示。
图8-4
Private Sub Form_Click()
Cls
Dim i%, lx1%, lx2%, lx3%, lx4%, c$
Randomize
For i = 1 To 20
lx1 = Rnd * Form1.ScaleWidth
ly1 = Rnd * Form1.ScaleHeight
lx2 = Rnd * Form1.ScaleWidth
ly2 = Rnd * Form1.ScaleHeight
Form1.DrawWidth = Int(Rnd * 3 + 2)
c = RGB(Rnd * 255, Rnd * 255, Rnd * 255) 'QBColor(Rnd * 15)
Line (lx1, ly1)-(lx2, ly2), c
Next i
End Sub
5. 编一程序,单击窗体后,用Pest方法在窗体内画200个随机彩色点(颜色用QBColor实现),点的大小在单位3~6之间变化,如图8-5所示。
图8-5
Private Sub Form_Click()
Cls
Dim i%, lx1%, lx2%, c$
Randomize
For i = 1 To 200
lx1 = Rnd * Form1.ScaleWidth
ly1 = Rnd * Form1.ScaleHeight
Form1.DrawWidth = Int(Rnd * 4 + 3)
c = RGB(Rnd * 255, Rnd * 255, Rnd * 255) 'QBColor(Rnd * 15)
PSet (lx1, ly1), c
Next i
End Sub
6. 编一程序,在窗体上放置一个“绘图”按钮。单击“绘图”按钮,定义窗体的坐标体系为(-5, 5) - (7, -8);用Line方法在窗体上按阿基米德螺线方程在0~2π之间展开直线(直线的一端为坐标系原点,另一端坐标用阿基米德方程计算),要求直线的颜色随机变化(用QBColor实现),步长为0.1,如图8-6所示。
图8-6
Private Sub Command1_Click()
Cls
Dim a!, c$
Randomize
Form1.DrawWidth = 1
Form1.Scale (-4, 4)-(4, -8)
For a = 0 To 6.28 Step 0.1
c = RGB(Rnd * 255, Rnd * 255, Rnd * 255) 'QBColor(Rnd * 15)
Line (0, 0)-(a * Cos(a), a * Sin(a)), c
Next a
End Sub
7. 编一程序,单击窗体后,用Circle方法在窗体上绘制如图8-7所示图案,圆心x随坐标递增,y始终为窗体高度的一半,半径随x而变化。
图8-7
Private Sub Form_click()
Dim x%
For x = 0 To 20## Step 50
Form1.Circle (500 + x, Form1.ScaleHeight / 2), x / 2
Next x
End Sub
四、 实验过程中的问题、错误,解决方法,总结、体会、建议。