VB课程设计报告_vb课程设计报告
VB课程设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“vb课程设计报告”。
Visual Basic课程设计报告
题目1: 难度: *** 题目2: 难度: 指导教师:
姓 名:
学 号:
专 业:
班 级:
学 院:
日 期:
目录
1、题目简介.....................................................................................................................................22、设计思路与总体方案.................................................................................................................4
2.1 窗体frm1...........................................................................................................................4 2.2窗体form1..........................................................................................................................6 2.3窗体 frmcz......................................................................................................................7 2.4 窗体frmlsz......................................................................................................................10 2.5窗体 frmcxtj.....................................................................................................................12 2.6 标准模块..........................................................................................................................173、设计过程遇到的主要问题及解决方法...................................................................................184、设计中尚存的不足分析...........................................................................................................185、心得体会...................................................................................................................................186、参考文献...................................................................................................................................19
1、题目简介
(简要说明课程设计所设计的程序的主要功能。)
本题目旨在设计与一个可对个人日常手入和消费帐目进行管理和查询统计的程序,通过此程序的设计,可以加深我们对上学期的vb基础知识的印象,使理论升华为实际操作,同时也有助于我们培养理财意识,用电子记录的形式取代从前的手写记录,使得信息更加精准,不易丢失。
题目的难度系数相对不高,但牵涉到众多的知识点作为典型的多模块设计类型的题目,本程序由五个窗体模块frm1,form1,frmcz,frmcxtj,frmlsz和一个标准模块共同构成。此外根据课本121页要求,另有三个文本文件inputtype.txt,outputtype.txt和balance.txt分别用于保存收入类型,支出类型和收入支出帐目。本程序的密码按照题目要求保存在了Balance.pas中,并自行设计加密处理。我的笔记本打不开这个文件,即便打开看到的也不再是密码本身。这点尽管在这个程序中用处不是太大,但为我们保存重要文件提供了一种思路。
程序要求实现如下功能(主要根据窗口由易到难的顺序来)。
如图1所示,frm1是启动窗体。有密码的设定和破译,开始时必须先输入密码。每次错误后会弹出对话框给予提示,连续累计三次则程序自动退出初始密码为空,直接单击即可进入。
图1.程序主界面
2.输入密码后则进入主界面,它是连接所有窗口的平台。
3.单击“参数设置”按钮进入“参数设置”窗口。窗口的三个选项卡是通过SSTab或Tabstrip控件来制作。这些陌生的外部空间对于我通过安装了vb企
业版方才得到(详见课本6-7页两者对比),因为Tab控件相对来说简单,所以在这个程序的中我完全采用了SSTab控件。
4.收入类别和支出类别的选项卡分别需要实现对两者的添加,删除,修改,返回操作,更为重要的是要保存在文件中,以备在流水帐和查询统计的combobox中使用。
开始时,“添加”和“返回”按钮可用,而其余两个被置灰,而且文本框不可输入。因为此时列表框的条目未被选中,所以修改和删除已失去意义,不可用。“添加”按钮比较繁琐,其本身可以被“确定”按钮替代功能。本程序中,按下添加按钮,则此时文本框被清空可编辑,而对比来说,按下修改按钮文本框不清空且可编辑。
图2.输入错误的密码时的提示通过“密码修改”选项卡修改密码,如果两次输入不一致或者输入有误(图2和3)则会提醒用户。此外,我把其设为了在保存时也 会提醒,有助于我们记忆。右上角的返回按钮可以随时返回主界面上。
6.单击主界面上的“日常流水帐”进入日常收支原始资料的主要输入窗口。该窗口主要由“收入记账”和“支出记账”两大部分组成。我设置了进入窗体时列表框为空,以便于对刚输入的情况一目了然。
这里面就涉及到了另一种新的控件,DTPicker控件的问题,这个控件使用起来极为方便,单击即可弹出日期选择框,且默认当天时间,简明易懂。其中的列表框中的项目为参数设置所得,只需从中选择即可。
需要我们添加新的收支信息时,我设定了备注为可有可无的输入项但其他三个空如果有一个未填则会在单击保存后弹出msgbox提示,否则则会在底部的列表框中每行显示一个完整项,并且把信息存储到balance.txt中用于接下来的步骤。单击取消按钮则可以清空各个文本框中的内容以便于重新输入。添加完毕后单击右上角的返回按钮则回到主界面。本程序的重点和难点原先粗步估计集中在查询统计这一窗体模块中,所以采用了由易到难的策略。该窗体由三个选项卡组成,既可以选择按类型查询从而
了解单独的情况,也可以采用时间段的模式,从而宏观大体的知道某个时间内的情况。设定这两种模式时需要通过单选框的改变来结合visible属性。实际并非没有想象中的困难,但是,因为框架控件的问题,我在这里还是绕了歧路最终放弃了控件数组,原本代码可能会更简明些。
收入支出对比一项用于显示某段时间内总收入和总支出的量化对比,在输入时间段后按确定按钮即可显示。返回按钮同上述情况。
8.程序中我设置了一个标准模块,主要用于自定义数据类型中的使用。借用其配合,可使程序显得更简洁些。
2、设计思路与总体方案
(说明用到哪些控件并进行难点分析,说明所使用到的模块、过程、变量、数组、自定义数据类型及其相互关系,必要时给出系统结构图等图表。
对如下事项逐步进行必要的分析、说明:
程序设计的主要思想,程序功能是如何实现的?
设计了几个程序模块(有几个窗体模块、几个标准模块),各个功能模块的作者及想到之间的关系(模块间是如何传递信息和数据的,采用什么方式,为什么?)?
程序中定义了哪些主要的变量(分别定义了哪些过程级变量?模块级变量和全局变量),这些变量起什么作用?是否全局变量? 这里不需要给出大段的源程序,只需要给出关键的实现代码即可。)
2.1 窗体frm1 这是启动窗体,仅使用了两个标签和一个文本框及两个按钮,但是要考虑的地方却有很多。下面我配合图和文字讲述下加密的过程,及对于输入字符时的对话框,还有累计三次时将自动退出的设置。此处只有三个通用过程,分别为CmdCancel_Click,Cmdok_Click,txtpaword_KeyPre,难点集中在后两者上,其中txtpaword_KeyPre在后面也会用到;
Private Sub CmdCancel_Click()Unload Me End Sub
Private Sub Cmdok_Click()'自行设计的简易解密过程 Dim int1 As String Dim a As Long: Static b As Integer: Dim i As Integer If txtpaword.Text = “” Then Form1.Show '使用静态变量三次来累计 frm1.Hide Exit Sub End If int1 = txtpaword.Text Open App.Path & “balance.pas” For Input As 1 Input #1, a Close 1 Do While i = 1 a = a1)
Next j
Next i
Close End Sub
下述一段代码为读入列表框时所使用。仅有一字符串变量来实现 Private Sub Form_Load()
Dim str1 As String Open App.Path & “OutputType.txt” For Input As #2
Do While Not EOF(2)
Input #2, str1
List1(1).AddItem str1'读文件进入列表框
Loop
Open App.Path & “InputType.txt” For Input As #1
Do While Not EOF(1)
Input #1, str1
List1(0).AddItem str1
Loop
Close End Sub
Private Sub Cancel_Click()np.Text = “”: np2.Text = “”
'取消密码输入 End Sub
Private Sub cmdfh_Click(Index As Integer)'返回按钮 Unload frmcz Form1.Show End Sub
Private Sub Cmdqx_Click(Index As Integer)'取消按钮 Dim m As Integer m = Index Text1(m).Text = “” End Sub
Private Sub Cmdsc_Click(Index As Integer)'删除按钮
Dim j As Integer: j = Index List1(j).RemoveItem List1(j).ListIndex Text1(j).Text = “” End Sub
Private Sub Cmdtj_Click(Index As Integer)'添加按钮 Dim m As Integer
m = Index Text1(m).SetFocus Text1(m).Locked = False Text1(m).Text = “” End Sub
Private Sub List1_Click(Index As Integer)
Dim j As Integer
'点击列表框实现两键的去灰
j = Index
Cmdxg(j).Enabled = True
Cmdsc(j).Enabled = True
Text1(j).Text = List1(j).Text End Sub
Private Sub Cmdxg_Click(Index As Integer)
'修改按钮。修改键解除文本框锁定
Dim j As Integer
j = Index
Text1(j).Locked = False
Text1(j).SetFocus End Sub
Private Sub Cmdqd_Click(Index As Integer)
Dim int1 As Integer, k As Integer
'确定按钮。对栏目的添加, 修改
k = Index
If List1(k).SelCount = 0 Then
List1(k).AddItem Text1(k).Text
Else
int1 = List1(k).ListIndex
List1(k).List(int1)= Text1(k).Text
End If
Text1(k).Text = “”: Text1(k).Locked = True
Cmdxg(k).Enabled = False: Cmdsc(k).Enabled = False
Cmdtj(k).SetFocus End Sub 后面一段当时看来显得很费精力,因为需要自行设定加密方法 Private Sub sure_click()
Dim i As Integer, paword As Long i = 1
If np.Text np2.Text Then
MsgBox “两次密码不一样(~。~)/,请重新输入”, 48, “提示”
ElseIf Len(Trim(np))> 8 Then
MsgBox “请保证密码不超过8位”, 48
MsgBox “密码已修改,a请记住您的密码哦!”, 64, “温馨提示”
End If Do While i = 1 np = np + Asc(Mid(np.Text, i, 1))
Loop Open App.Path & “Balance.pas” For Output As #1
'设置密码
Write #1, np
Close #1
End Sub
Private Sub np_KeyPre(KeyAscii As Integer)
If KeyAscii 57 Then
KeyAscii = 0
'密码含非数字字符,则显示错误
MsgBox “密码应当为数字,请重新输入”, , “提示”
End If
Else
'两次输入一样就加密并保存到文件
2.4 窗体frmlsz 窗体frmlsz供用户输入每日的收支帐目,即收支类型、收支时间、金额和备注。每次加载窗体frmlsz时从Inputtype.txt读出收入类型,从Outputtype.txt读出支出类型给combo控件初始化,便于用户选择相应的类型输入日常流水账。为实现数据逐条读写采用do loop循环 EOF()文件函数和
input语句。利用If语句判断data的int1取值,确定数据是收入还是支出,这是一种较为简便的方式,在后面的数据查询中有很大的发挥空间
Frmlsz在主界面中的default属性被我改成了true。其结构简单,但设计上还是需要注意些问题,比方说就看下面一段代码,我们有时候确实有必要在细节上较真
Private Sub Cmdbc_Click(Index As Integer)Dim j As Integer: j = Index Dim str1 As String If Coblb(j).Text = “” Or txtje(j).Text = “” Then '输入信息
MsgBox “请输入完整 >o
Private Sub cmdfh_Click(Index As Integer)'返回 Unload Frmlsz Form1.Show End Sub
Private Sub Cmdqk_Click(Index As Integer)'清空按钮 Dim j As Integer: j = Index Coblb(j).Text = ”“: txtje(j).Text = ”“: txtbz(j).Text = ”“ End Sub 这段代码基本上在所有类似的情况中都大同小异
Private Sub Form_Load()'读取信息 Dim str1 As String Open App.Path & ”OutputType.txt“ For Input As #2 Do While Not EOF(2)Input #2, str1 Coblb(1).AddItem str1 Loop Open App.Path & ”InputType.txt“ For Input As #1 Do While Not EOF(1)Input #1, str1 Coblb(0).AddItem str1 Loop Close End Sub 2.5窗体 frmcxtj 窗体frmcxtj算是对于上述窗体的综合应用。在数组的基础上同时也涉及到了自定义变量类型,利用其寻找到时间或类别上符合要求的项,通过EOF语句不断赋值,再通过do loop循环得到。两组单选框的value值改变而转化frame的visible属性,这是大致的思路框架。具体落实到代码的编写上,比方寻找时间段是通过与dtpicker的value值比较
Private Sub Cmd3_Click()Dim newdata As data, i As Integer ‘此句为收入支出对比一栏上给两个文本框计算的过程 Dim amount As Long, money1 As Long, money2 As Integer Lbldb.Caption = ”从“ & Space(3)& DTPicker5.Value & Space(2)& ”到“ & Space(2)& DTPicker6.Value & Space(2)& ”期间“ ‘标签
Open App.Path & ”Balance.txt“ For Input As #1 Do While Not EOF(1)Input #1, newdata.int1 Input #1, newdata.time1 Input #1, newdata.moneytype Input #1, newdata.money Input #1, newdata.addition If(newdata.time1 >=(DTPicker5.Value))And(newdata.time1 =(DTPicker5.Value))And(newdata.time1
Private Sub Cmd1_Click()’第一个确定按钮
List1.Clear ' Dim newdata As data, i As Integer Dim amount As Long, money As Long amount = 0 Open App.Path & ”Balance.txt“ For Input As #1 '当选择收入类型查询时
If Option2.Value = True Then Do While Not EOF(1)Input #1, newdata.int1
Input #1, newdata.time1 Input #1, newdata.moneytype Input #1, newdata.money Input #1, newdata.addition If(newdata.time1 >=(DTPicker9.Value))And(newdata.time1 =(DTPicker7.Value))And(newdata.time1
Private Sub Cmd2_Click()第二个确定按钮 List2.Clear Dim newdata As data, i As Integer Dim amount As Long, money As Long amount = 0
Open App.Path & ”Balance.txt“ For Input As #2 '当选择支出类型查询时 If Option4.Value = True Then Do While Not EOF(2)Input #2, newdata.int1 Input #2, newdata.time1 Input #2, newdata.moneytype Input #2, newdata.money Input #2, newdata.addition
If(newdata.time1 >=(DTPicker3.Value))And(newdata.time1
If(newdata.time1 >=(DTPicker1.Value))And newdata.time1
Private Sub Command1_Click(Index As Integer)'返回 Unload Me Form1.Show End Sub
Private Sub Form_Load()'读取信息 Dim str1 As String Open App.Path & ”OutputType.txt“ For Input As #2 Do While Not EOF(2)Input #2, str1 Combo2.AddItem str1 Loop Open App.Path & ”InputType.txt“ For Input As #1 Do While Not EOF(1)Input #1, str1 Combo1.AddItem str1 Loop Close End Sub Private Sub Option1_Click()'以下为单选框的四类情况
Frame2.Visible = False Frame1.Visible = True End Sub
Private Sub Option2_Click()Frame2.Visible = True Frame1.Visible = False End Sub
Private Sub Option3_Click()Frame3.Visible = True Frame4.Visible = False End Sub
Private Sub Option4_Click()Frame3.Visible = False Frame4.Visible = True End Sub 2.6 标准模块
标准模块中我设立了自定义类型的变量用来声明自定义数据类型 data,它有5个元素,其中int1为难点和重点。其值可用于区分收入和支出的性质,在frmcxj中显得尤为重要,另外我就是刚才犯了个错误,time 是关键字,在编写程序时一直出现了溢出的错误,幸好及时得到了改正,np,np2用来存放密码,密码的设立主要是通过把每个数字的ascii码求出然后求和的过程,用到了Mid(),Asc(),Len()函数和For循环。
Public np As Integer, np2 As Integer Public Type data int1 As Integer time1 As Date moneytype As String money As Long addition As String End Type
3、设计过程遇到的主要问题及解决方法
3.1作为编程者的角度看,需要的是考虑用户的感受。当我调试程序后,遇到过当输入的数据类型与设置的变量类型不统一时,会出现许多错误,为避免如此,必须添加显式转换语句避免错误
3.2在参数设置的模块中,我当时在其load的事件中编完了列表框的ADDItem的方法,也检查代码,没有任何问题,但是该窗体就是无法显示出列表框的条目来。后来把把原先的frmcz_load改成了form_load情况当即就解决了。至今我也没曾想通
3.3 在自定义数据类型中原先有一项我命名其为time,但是我在数据查询之中就遇到了麻烦。定义错误,文件超出。我于是将其名称改去,代码便可顺利运行
4、设计中尚存的不足分析
4.1如图可见,这一段本可使用控件数组大大简化这后面过程。一开始我也确实是如此设计。我的失策主要由于当时建立的全部为控件数组的形式包括了框架,当两个框架重叠之后其中一个被另一个完全包进去了,所以我无论怎么设option.value都得不到想要的情况。后来便放弃了这一想法,采用了一般的步骤而变得更为费时费力,可以看到查询统计模块下的代码特别冗长
4.2 在参数设置模块中,当点击添加之后虽然清空了文本框,但若是列表框依然有条目被选,则再输入其实变成了另一形式的修改。我希望接下来的时间可以去完善一下一些细节方面,有些是已经考虑到的,有些只有时间久些才会慢慢感觉到
4.3 密码的设置上目前情况不是太理想,有待考虑新的算法提高某些文件的保密度
5、心得体会
这个程序从难度上讲只有三颗星而已,但我想说我确实摸索了很久,从界面的制作排版到代码的编写。由于计算机编程知识当初只学了些皮毛,很多次我在 18 编程时不断调试却依然出现这样那样的毛病,可能是无意中拼写错误,但有些确实是因为不了解vb的某些较为冷僻的用法所致。这段时间,常会向同学请教,也自觉地去借了些书看看,基本上完成了要求,但是功能、界面都还不是很完善,我会借助以后的时间继续去加工的,我需要的是学以致用。
我体会到了编写程序是个有条理的逻辑过程,首先必须有个大致的思路,整体的规划出来。然后再是分步地去具体完成,尤为重要的是需要投入相当一部分精力去精益求精,这样你的成果才不会是毛糙的。思维调动是件另人愉快的事情,而我们应该去学会享受脑力劳动的过程,哪怕是一次次地失利。这就是一个月的课程设计所教会我的。
6、参考文献
[1].王栋,visual basic课程设计,北京,清华大学出版社 [2].王栋,visual basic程序设计实用教程,北京,清华大学出版社 [3].兰友,vb应用程序设计,北京,交通大学出版社
[4].董爱红等,二级visual basic语言程序设计,北京:机械工业出版社,2005