1、Visual Basic 课 程 设 计 报告题目 1: 难度: * 题目 2: 难度: 指导教师: 姓 名:学 号:专 业:班 级:学 院:日 期:0目录1、题目简介 .22、设计思路与总体方案 .42.1 窗体 frm1.42.2 窗体 form1.62.3 窗体 frmcssz .72.4 窗体 frmlsz .102.5 窗体 frmcxtj.122.6 标准模块 .173、设计过程遇到的主要问题及解决方法 .184、设计中尚存的不足分析 .185、心得体会 .186、参考文献 .19Comment h1: 报告正文请采用“小四号” “宋体” ,行间距 20磅。单倍行间距,段头空两个空
2、格的位置。“两端对齐格式” 。Comment i2: 对插图的引用标记Comment i3: 屏幕截图或插图要作居中处理,大小要合适。可通过按快捷键 Alt+PrtScr组合键来复制当前窗口至操作系统剪切板,切换到 Word中用 Ctrl+V进行粘贴操作。也可以用其它截图软件,如 QQ或 360等作截屏操作。Comment i4: 每个图都要给出一个图名,并给图进行统一编号处理。11、题目简介(简要说明课程设计所设计的程序的主要功能。)本题目旨在设计与一个可对个人日常手入和消费帐目进行管理和查询统计的程序,通过此程序的设计,可以加深我们对上学期的 vb基础知识的印象,使理论升华为实际操作,同时
3、也有助于我们培养理财意识,用电子记录的形式取代从前的手写记录,使得信息更加精准,不易丢失。题目的难度系数相对不高,但牵涉到众多的知识点作为典型的多模块设计类型的题目,本程序由五个窗体模块 frm1,form1,frmcssz,frmcxtj,frmlsz 和一个标准模块共同构成。此外根据课本 121页要求,另有三个文本文件inputtype.txt,outputtype.txt和 balance.txt分别用于保存收入类型,支出类型和收入支出帐目。本程序的密码按照题目要求保存在了 Balance.pas中,并自行设计加密处理。我的笔记本打不开这个文件,即便打开看到的也不再是密码本身。这点尽管在
4、这个程序中用处不是太大,但为我们保存重要文件提供了一种思路。程序要求实现如下功能(主要根据窗口由易到难的顺序来) 。如图 1所示, frm1是启动窗体。有密码的设定和破译,开始时必须先输入密码。每次错误后会弹出对话框给予提示,连续累计三次则程序自动退出初始密码为空,直接单击即可进入。图 1. 程序主界面2. 输入密码后则进入主界面,它是连接所有窗口的平台。3. 单击“参数设置”按钮进入“参数设置”窗口。窗口的三个选项卡是通过 SSTab或 Tabstrip控件来制作。这些陌生的外部空间对于我通过安装了 vb企2业版方才得到(详见课本 6-7 页两者对比) ,因为 ssTab 控件相对来说简单,
5、所以在这个程序的中我完全采用了 SSTab 控件。4收入类别和支出类别的选项卡分别需要实现对两者的添加,删除,修改,返回操作,更为重要的是要保存在文件中,以备在流水帐和查询统计的combobox 中使用。开始时, “添加”和“返回”按钮可用,而其余两个被置灰,而且文本框不可输入。因为此时列表框的条目未被选中,所以修改和删除已失去意义,不可用。 “添加”按钮比较繁琐,其本身可以被“确定”按钮替代功能。本程序中,按下添加按钮,则此时文本框被清空可编辑,而对比来说,按下修改按钮文本框不清空且可编辑。图 2. 输入错误的密码时的提示5 通过“密码修改”选项卡修改密码,如果两次输入不一致或者输入有误(图
6、 2 和 3)则会提醒用户。此外,我把其设为了在保存时也 会提醒,有助于我们记忆。右上角的返回按钮可以随时返回主界面上。6. 单击主界面上的“日常流水帐”进入日常收支原始资料的主要输入窗口。该窗口主要由“收入记账”和“支出记账”两大部分组成。我设置了进入窗体时列表框为空,以便于对刚输入的情况一目了然。 。这里面就涉及到了另一种新的控件,DTPicker 控件的问题,这个控件使用起来极为方便,单击即可弹出日期选择框,且默认当天时间,简明易懂。其中的列表框中的项目为参数设置所得,只需从中选择即可。需要我们添加新的收支信息时,我设定了备注为可有可无的输入项但其他三个空如果有一个未填则会在单击保存后弹
7、出 msgbox 提示,否则则会在底部的列表框中每行显示一个完整项,并且把信息存储到 balance.txt 中用于接下来的步骤。单击取消按钮则可以清空各个文本框中的内容以便于重新输入。添加完毕后单击右上角的返回按钮则回到主界面。7 本程序的重点和难点原先粗步估计集中在查询统计这一窗体模块中,所以采用了由易到难的策略。该窗体由三个选项卡组成,既可以选择按类型查询3从而了解单独的情况,也可以采用时间段的模式,从而宏观大体的知道某个时间内的情况。设定这两种模式时需要通过单选框的改变来结合 visible 属性。实际并非没有想象中的困难,但是,因为框架控件的问题,我在这里还是绕了歧路最终放弃了控件数
8、组,原本代码可能会更简明些。收入支出对比一项用于显示某段时间内总收入和总支出的量化对比,在输入时间段后按确定按钮即可显示。返回按钮同上述情况。8. 程序中我设置了一个标准模块,主要用于自定义数据类型中的使用。借用其配合,可使程序显得更简洁些。2、设计思路与总体方案(说明用到哪些控件并进行难点分析,说明所使用到的模块、过程、变量、数组、自定义数据类型及其相互关系,必要时给出系统结构图等图表。对如下事项逐步进行必要的分析、说明: 程序设计的主要思想,程序功能是如何实现的? 设计了几个程序模块(有几个窗体模块、几个标准模块),各个功能模块的作者及想到之间的关系(模块间是如何传递信息和数据的,采用什么
9、方式,为什么?)? 程序中定义了哪些主要的变量(分别定义了哪些过程级变量?模块级变量和全局变量),这些变量起什么作用?是否全局变量?这里不需要给出大段的源程序,只需要给出关键的实现代码即可。)2.1 窗体 frm1这是启动窗体,仅使用了两个标签和一个文本框及两个按钮,但是要考虑的地方却有很多。下面我配合图和文字讲述下加密的过程,及对于输入字符时的对话框,还有累计三次时将自动退出的设置。此处只有三个通用过程,分别为CmdCancel_Click,Cmdok_Click,txtpassword_KeyPress,难点集中在后两者上,其中 txtpassword_KeyPress 在后面也会用到;P
10、rivate Sub CmdCancel_Click()Unload MeEnd Sub4Private Sub Cmdok_Click() 自行设计的简易解密过程Dim int1 As StringDim a As Long: Static b As Integer: Dim i As Integer If txtpassword.Text = “ ThenForm1.Show使用静态变量三次来累计frm1.HideExit Sub End Ifint1 = txtpassword.Text Open App.Path & “balance.pas“ For Input As 1Input
11、#1, aClose 1Do While i = 1a = a - Asc(Mid(“CStr(np)“, i, 1) LoopIf a = int1 ThenForm1.ShowUnload MeElsetxtpassword.Text = “txtpassword.SetFocusb = b + 1If b = 3 ThenMsgBox “三次密码输入不正确,请查实后再登录,谢谢!“, “48“, “错误!“Unload MeElseMsgBox “密码错误,请查实后再登录。“, “48“, “错误!“End IfEnd IfEnd SubPrivate Sub txtpassword_K
12、eyPress(KeyAscii As Integer)If KeyAscii 57 Then5KeyAscii = 0 密码含非数字字符,则显示错误MsgBox “密码应当为数字,请重新输入“, , “提示“End IfEnd Sub2.2 窗体 form1这是主界面,最没有难度的环节。但是我在此退出键上也设了一个对话框,这就提供了返回的余地.此处我设置了四个按钮控件,一个标签,和一个图像控件。几段代码相似,仅有 click 过程Private Sub Cmdlsz_Click()Frmlsz.ShowUnload MeEnd SubPrivate Sub CmdCxtj_Click()Fr
13、mcxtj.ShowUnload MeEnd SubPrivate Sub CmdEsc_Click()Dim i As Integeri = MsgBox(“Are you sure to exist?“, 49, “Warn“)If i = 1 ThenUnload MeElseForm1.ShowEnd If End SubPrivate Sub Cmdcssz_Click()Load frmcsszfrmcssz.ShowUnload MeEnd Sub6Private Sub Cmdtjcx_Click()Load FrmcxtjFrmcxtj.ShowUnload MeEnd Su
14、b2.3 窗体 frmcssz该窗体是以三个选项卡所构成的,了解到前两者具有对称性,这就提供给了我们思路,控件数组的使用可以简化两者的代码,从而提高程序的可读性。窗口共出现了十五个按钮控件,我多将其设置成为了数组的模式,利用 index属性的转换,简化工作量。此外九个标签,四个文本框及两个列表框均是围绕着实现两个框架承载的内部结构所展开。下述一段是利用数组写文件的过程 ,仅使用两个变量循环着输出便得以实现Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)Dim i As Integer, j As Int
15、egerOpen App.Path & “InputType.txt“ For Output As 1Open App.Path & “OutputType.txt“ For Output As 2 用 unload 的一个过程写文件For i = 0 To 1For j = 1 To List1(i).ListCountWrite #i + 1, List1(i).List(j - 1)Next jNext iCloseEnd Sub 下述一段代码为读入列表框时所使用。仅有一字符串变量来实现Private Sub Form_Load()Dim str1 As StringOpen App.P
16、ath & “OutputType.txt“ For Input As #2Do While Not EOF(2)7Input #2, str1 List1(1).AddItem str1读文件进入列表框LoopOpen App.Path & “InputType.txt“ For Input As #1Do While Not EOF(1)Input #1, str1List1(0).AddItem str1LoopCloseEnd SubPrivate Sub Cancel_Click()np.Text = “: np2.Text = “ 取消密码输入End SubPrivate Sub
17、cmdfh_Click(Index As Integer) 返回按钮Unload frmcsszForm1.ShowEnd SubPrivate Sub Cmdqx_Click(Index As Integer) 取消按钮Dim m As Integerm = IndexText1(m).Text = “End SubPrivate Sub Cmdsc_Click(Index As Integer) 删除按钮Dim j As Integer: j = IndexList1(j).RemoveItem List1(j).ListIndexText1(j).Text = “End SubPrivate Sub Cmdtj_Click(Index As Integer) 添加按钮Dim m As Integer