




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Visual Basic课程设计报告题目1: 难度: * 题目2: 难度: 指导教师: 姓 名:学 号:专 业:班 级:学 院:日 期:目录1、题目简介22、设计思路与总体方案42.1 窗体frm142.2窗体form162.3窗体 frmcssz72.4 窗体frmlsz102.5窗体 frmcxtj122.6 标准模块173、设计过程遇到的主要问题及解决方法184、设计中尚存的不足分析185、心得体会186、参考文献191、题目简介(简要说明课程设计所设计的程序的主要功能。)本题目旨在设计与一个可对个人日常手入和消费帐目进行管理和查询统计的程序,通过此程序的设计,可以加深我们对上学期的vb
2、基础知识的印象,使理论升华为实际操作,同时也有助于我们培养理财意识,用电子记录的形式取代从前的手写记录,使得信息更加精准,不易丢失。报告正文请采用“小四号”“宋体”,行间距20磅。单倍行间距,段头空两个空格的位置。“两端对齐格式”。题目的难度系数相对不高,但牵涉到众多的知识点作为典型的多模块设计类型的题目,本程序由五个窗体模块frm1,form1,frmcssz,frmcxtj,frmlsz和一个标准模块共同构成。此外根据课本121页要求,另有三个文本文件inputtype.txt,outputtype.txt和balance.txt分别用于保存收入类型,支出类型和收入支出帐目。本程序的密码按
3、照题目要求保存在了Balance.pas中,并自行设计加密处理。我的笔记本打不开这个文件,即便打开看到的也不再是密码本身。这点尽管在这个程序中用处不是太大,但为我们保存重要文件提供了一种思路。程序要求实现如下功能(主要根据窗口由易到难的顺序来)。如图1所示对插图的引用标记, frm1是启动窗体。有密码的设定和破译,开始时必须先输入密码。每次错误后会弹出对话框给予提示,连续累计三次则程序自动退出初始密码为空,直接单击即可进入。屏幕截图或插图要作居中处理,大小要合适。可通过按快捷键Alt+PrtScr组合键来复制当前窗口至操作系统剪切板,切换到Word中用Ctrl+V进行粘贴操作。也可以用其它截图
4、软件,如QQ或360等作截屏操作。图1. 程序主界面每个图都要给出一个图名,并给图进行统一编号处理。2. 输入密码后则进入主界面,它是连接所有窗口的平台。3. 单击“参数设置”按钮进入“参数设置”窗口。窗口的三个选项卡是通过SSTab或Tabstrip控件来制作。这些陌生的外部空间对于我通过安装了vb企业版方才得到(详见课本6-7页两者对比),因为ssTab控件相对来说简单,所以在这个程序的中我完全采用了SSTab控件。4收入类别和支出类别的选项卡分别需要实现对两者的添加,删除,修改,返回操作,更为重要的是要保存在文件中,以备在流水帐和查询统计的combobox中使用。开始时,“添加”和“返回
5、”按钮可用,而其余两个被置灰,而且文本框不可输入。因为此时列表框的条目未被选中,所以修改和删除已失去意义,不可用。“添加”按钮比较繁琐,其本身可以被“确定”按钮替代功能。本程序中,按下添加按钮,则此时文本框被清空可编辑,而对比来说,按下修改按钮文本框不清空且可编辑。图2. 输入错误的密码时的提示5 通过“密码修改”选项卡修改密码,如果两次输入不一致或者输入有误(图2和3)则会提醒用户。此外,我把其设为了在保存时也 会提醒,有助于我们记忆。右上角的返回按钮可以随时返回主界面上。6. 单击主界面上的“日常流水帐”进入日常收支原始资料的主要输入窗口。该窗口主要由“收入记账”和“支出记账”两大部分组成
6、。我设置了进入窗体时列表框为空,以便于对刚输入的情况一目了然。这里面就涉及到了另一种新的控件,DTPicker控件的问题,这个控件使用起来极为方便,单击即可弹出日期选择框,且默认当天时间,简明易懂。其中的列表框中的项目为参数设置所得,只需从中选择即可。需要我们添加新的收支信息时,我设定了备注为可有可无的输入项但其他三个空如果有一个未填则会在单击保存后弹出msgbox提示,否则则会在底部的列表框中每行显示一个完整项,并且把信息存储到balance.txt中用于接下来的步骤。单击取消按钮则可以清空各个文本框中的内容以便于重新输入。添加完毕后单击右上角的返回按钮则回到主界面。7 本程序的重点和难点原
7、先粗步估计集中在查询统计这一窗体模块中,所以采用了由易到难的策略。该窗体由三个选项卡组成,既可以选择按类型查询从而了解单独的情况,也可以采用时间段的模式,从而宏观大体的知道某个时间内的情况。设定这两种模式时需要通过单选框的改变来结合visible属性。实际并非没有想象中的困难,但是,因为框架控件的问题,我在这里还是绕了歧路最终放弃了控件数组,原本代码可能会更简明些。收入支出对比一项用于显示某段时间内总收入和总支出的量化对比,在输入时间段后按确定按钮即可显示。返回按钮同上述情况。8. 程序中我设置了一个标准模块,主要用于自定义数据类型中的使用。借用其配合,可使程序显得更简洁些。2、设计思路与总体
8、方案(说明用到哪些控件并进行难点分析,说明所使用到的模块、过程、变量、数组、自定义数据类型及其相互关系,必要时给出系统结构图等图表。对如下事项逐步进行必要的分析、说明:l 程序设计的主要思想,程序功能是如何实现的?l 设计了几个程序模块(有几个窗体模块、几个标准模块),各个功能模块的作者及想到之间的关系(模块间是如何传递信息和数据的,采用什么方式,为什么?)?l 程序中定义了哪些主要的变量(分别定义了哪些过程级变量?模块级变量和全局变量),这些变量起什么作用?是否全局变量?这里不需要给出大段的源程序,只需要给出关键的实现代码即可。)2.1 窗体frm1这是启动窗体,仅使用了两个标签和一个文本框
9、及两个按钮,但是要考虑的地方却有很多。下面我配合图和文字讲述下加密的过程,及对于输入字符时的对话框,还有累计三次时将自动退出的设置。此处只有三个通用过程,分别为CmdCancel_Click,Cmdok_Click,txtpassword_KeyPress,难点集中在后两者上,其中txtpassword_KeyPress在后面也会用到;Private Sub CmdCancel_Click()Unload MeEnd SubPrivate Sub Cmdok_Click() 自行设计的简易解密过程 Dim int1 As String Dim a As Long: Static b As In
10、teger: Dim i As Integer If txtpassword.Text = Then Form1.Show使用静态变量三次来累计frm1.Hide Exit Sub End If int1 = txtpassword.Text Open App.Path & balance.pas For Input As 1 Input #1, a Close 1 Do While i = 1 a = a - Asc(Mid(CStr(np), i, 1) Loop If a = int1 Then Form1.Show Unload Me Else txtpassword.Text = t
11、xtpassword.SetFocus b = b + 1 If b = 3 Then MsgBox 三次密码输入不正确,请查实后再登录,谢谢!, 48, 错误! Unload Me Else MsgBox 密码错误,请查实后再登录。, 48, 错误! End If End IfEnd SubPrivate Sub txtpassword_KeyPress(KeyAscii As Integer)If KeyAscii 57 Then KeyAscii = 0 密码含非数字字符,则显示错误 MsgBox 密码应当为数字,请重新输入, , 提示 End If End Sub2.2窗体form1
12、这是主界面,最没有难度的环节。但是我在此退出键上也设了一个对话框,这就提供了返回的余地.此处我设置了四个按钮控件,一个标签,和一个图像控件。几段代码相似,仅有click过程Private Sub Cmdlsz_Click() Frmlsz.Show Unload MeEnd SubPrivate Sub CmdCxtj_Click() Frmcxtj.Show Unload MeEnd SubPrivate Sub CmdEsc_Click()Dim i As Integer i = MsgBox(Are you sure to exist?, 49, Warn) If i = 1 Then
13、Unload Me Else Form1.ShowEnd If End SubPrivate Sub Cmdcssz_Click()Load frmcsszfrmcssz.ShowUnload MeEnd SubPrivate Sub Cmdtjcx_Click()Load FrmcxtjFrmcxtj.ShowUnload MeEnd Sub2.3窗体 frmcssz该窗体是以三个选项卡所构成的,了解到前两者具有对称性,这就提供给了我们思路,控件数组的使用可以简化两者的代码,从而提高程序的可读性。窗口共出现了十五个按钮控件,我多将其设置成为了数组的模式,利用index属性的转换,简化工作量。
14、此外九个标签,四个文本框及两个列表框均是围绕着实现两个框架承载的内部结构所展开。下述一段是利用数组写文件的过程 ,仅使用两个变量循环着输出便得以实现Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim i As Integer, j As Integer Open App.Path & InputType.txt For Output As 1 Open App.Path & OutputType.txt For Output As 2 用unload的一个过程写文件 For i = 0 To 1
15、For j = 1 To List1(i).ListCount Write #i + 1, List1(i).List(j - 1) Next j Next i CloseEnd 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 & Inp
16、utType.txt For Input As #1 Do While Not EOF(1) Input #1, str1 List1(0).AddItem str1 Loop CloseEnd SubPrivate Sub Cancel_Click()np.Text = : np2.Text = 取消密码输入End SubPrivate Sub cmdfh_Click(Index As Integer) 返回按钮Unload frmcsszForm1.ShowEnd SubPrivate Sub Cmdqx_Click(Index As Integer) 取消按钮Dim m As Integ
17、erm = IndexText1(m).Text = End SubPrivate Sub Cmdsc_Click(Index As Integer) 删除按钮 Dim j As Integer: j = Index List1(j).RemoveItem List1(j).ListIndex Text1(j).Text = End SubPrivate Sub Cmdtj_Click(Index As Integer) 添加按钮Dim m As Integerm = IndexText1(m).SetFocusText1(m).Locked = FalseText1(m).Text = En
18、d SubPrivate 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).TextEnd SubPrivate Sub Cmdxg_Click(Index As Integer) 修改按钮。修改键解除文本框锁定 Dim j As Integer j = Index Text1(j).Locked = False Text1(j).SetFocusEnd
19、 SubPrivate 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 =
20、 False: Cmdsc(k).Enabled = False Cmdtj(k).SetFocusEnd Sub后面一段当时看来显得很费精力,因为需要自行设定加密方法Private Sub sure_click() Dim i As Integer, password As Long i = 1 If np.Text np2.Text Then MsgBox 两次密码不一样 (。)/,请重新输入, 48, 提示 ElseIf Len(Trim(np) 8 Then MsgBox 请保证密码不超过8位, 48 Else 两次输入一样就加密并保存到文件 MsgBox 密码已修改,a请记住您的密码
21、哦!, 64, 温馨提示 End IfDo 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_KeyPress(KeyAscii As Integer) If KeyAscii 57 Then KeyAscii = 0 密码含非数字字符,则显示错误 MsgBox 密码应当为数字,请重新输入, , 提示 End If2.4 窗体frmlsz窗体frmlsz供用
22、户输入每日的收支帐目,即收支类型、收支时间、金额和备注。每次加载窗体frmlsz时从Inputtype.txt读出收入类型,从Outputtype.txt读出支出类型给combo控件初始化,便于用户选择相应的类型输入日常流水账。为实现数据逐条读写采用do loop循环 EOF()文件函数和input语句。利用If语句判断data的int1取值,确定数据是收入还是支出,这是一种较为简便的方式,在后面的数据查询中有很大的发挥空间Frmlsz在主界面中的default属性被我改成了true。其结构简单,但设计上还是需要注意些问题,比方说就看下面一段代码,我们有时候确实有必要在细节上较真Private
23、 Sub Cmdbc_Click(Index As Integer)Dim j As Integer: j = IndexDim str1 As String If Coblb(j).Text = Or txtje(j).Text = Then 输入信息 MsgBox 请输入完整 o= (DTPicker5.Value) And (newdata.time1 = (DTPicker5.Value) And (newdata.time1 = (DTPicker9.Value) And (newdata.time1 = (DTPicker7.Value) And (newdata.time1 =
24、(DTPicker3.Value) And (newdata.time1 = (DTPicker1.Value) And newdata.time1 = (DTPicker2.Value) And 1 = 1 Then List2.AddItem newdata.time1 & Space(5) & newdata.moneytype & Space(5) & CStr(newdata.money) & Space(5) & newdata.additionmoney = newdata.moneyEnd Ifamount = amount + money Loop La
25、belzc.Caption = 从 & DTPicker1.Value & 到 & DTPicker2.Value & 共支出 & amount & 元 End IfCloseEnd SubPrivate Sub Command1_Click(Index As Integer) 返回Unload MeForm1.Show End SubPrivate Sub Form_Load() 读取信息 Dim str1 As String Open App.Path & OutputType.txt For Input As #2 Do While Not EOF(2) Input #2, str1 C
26、ombo2.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 SubPrivate Sub Option1_Click() 以下为单选框的四类情况Frame2.Visible = False Frame1.Visible = TrueEnd SubPrivate Sub Option2_Click()Frame2.Visible = True Frame1.Visible = F
27、alseEnd SubPrivate Sub Option3_Click() Frame3.Visible = True Frame4.Visible = FalseEnd SubPrivate Sub Option4_Click() Frame3.Visible = False Frame4.Visible = TrueEnd Sub2.6 标准模块标准模块中我设立了自定义类型的变量用来声明自定义数据类型 data ,它有5个元素,其中int1为难点和重点。其值可用于区分收入和支出的性质,在frmcxj中显得尤为重要,另外我就是刚才犯了个错误,time 是关键字,在编写程序时一直出现了溢出的
28、错误,幸好及时得到了改正,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 StringEnd Type3、设计过程遇到的主要问题及解决方法3.1作为编程者的角度看,需要的是考虑用户的感受。当我调试程序后,遇到过当输入的数据类型与设置的变量类型不统一时,会出现许多错误,为避免如此,必须添加显式转换语句避免错误3.2在参数设置的模块中,我当时在其load的事件中编完了列表框的ADDItem的方法,也检查代码,没有任何问题,但是该窗体就是无法显示出列表框的条目来。后来把把原
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年光纤用GECL4项目资金申请报告代可行性研究报告
- 2024年原奶项目项目投资筹措计划书代可行性研究报告
- 医疗协同政策解读课件教学
- 融资平台项目制管理办法
- 衡阳市固体废物管理办法
- 街道应急消防车管理办法
- 装配式物业用房管理办法
- 西安市能源管理办法规定
- 计日工管理办法百度文库
- 证券投资基金管理公司管理办法
- GB/T 20975.1-2007铝及铝合金化学分析方法第1部分:汞含量的测定冷原子吸收光谱法
- 粮食行业技能竞赛粮油保管员考试试题及答案
- 清真食堂承包投标书
- 马克思主义的世界观和方法论
- 医院处方笺-模板
- 道路综合巡查工作流程
- 香港联合交易所有限公司证券上市规则
- 测量成果验收单
- 冰毯机的使用与护理
- 封样标签样本(1)
- 北京市村合作经济组织会计制度实施细则
评论
0/150
提交评论