VB课程设计报告范例.docx

上传人:b****5 文档编号:26398238 上传时间:2023-06-19 格式:DOCX 页数:21 大小:213.64KB
下载 相关 举报
VB课程设计报告范例.docx_第1页
第1页 / 共21页
VB课程设计报告范例.docx_第2页
第2页 / 共21页
VB课程设计报告范例.docx_第3页
第3页 / 共21页
VB课程设计报告范例.docx_第4页
第4页 / 共21页
VB课程设计报告范例.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

VB课程设计报告范例.docx

《VB课程设计报告范例.docx》由会员分享,可在线阅读,更多相关《VB课程设计报告范例.docx(21页珍藏版)》请在冰豆网上搜索。

VB课程设计报告范例.docx

VB课程设计报告范例

VisualBasic课程设计报告

题目:

学生信息管理难度:

***

指导教师:

袁红兵

姓名:

谭鑫

学号:

1101400114

专业:

工业工程

班级:

11014001

学院:

机械工程学院

日期:

2012年3月1日~26日

VisualBasic课程设计报告

一、题目简介1

二、设计思路与总体方案3

三、设计过程遇到的主要问题及解决方法18

四、设计中尚存的不足分析19

五、心得体会19

六、参考文献20

一、题目简介

本题目旨在设计与一个可对个人日常手入和消费帐目进行管理和查询统计的程序,通过此程序的设计,可以加深我们对上学期的vb基础知识的印象,使理论升华为实际操作,同时也有助于我们培养理财意识,用电子记录的形式取代从前的手写记录,使得信息更加精准,不易丢失。

题目的难度系数相对不高,但牵涉到众多的知识点作为典型的多模块设计类型的题目,本程序由五个窗体模块frm1,form1,frmcssz,frmcxtj,frmlsz和一个标准模块共同构成。

此外根据课本121页要求,另有三个文本文件inputtype.txt,outputtype.txt和balance.txt分别用于保存收入类型,支出类型和收入支出帐目。

本程序的密码按照题目要求保存在了Balance.pas中,并自行设计加密处理。

我的笔记本打不开这个文件,即便打开看到的也不再是密码本身。

这点尽管在这个程序中用处不是太大,但为我们保存重要文件提供了一种思路。

程序要求实现如下功能(主要根据窗口由易到难的顺序来)。

如图1所示,frm1是启动窗体。

有密码的设定和破译,开始时必须先输入密码。

每次错误后会弹出对话框给予提示,连续累计三次则程序自动退出初始密码为空,直接单击即可进入。

图1.程序主界面

2.输入密码后则进入主界面,它是连接所有窗口的平台。

3.单击“参数设置”按钮进入“参数设置”窗口。

窗口的三个选项卡是通过SSTab或Tabstrip控件来制作。

这些陌生的外部空间对于我通过安装了vb企业版方才得到(详见课本6-7页两者对比),因为ssTab控件相对来说简单,所以在这个程序的中我完全采用了SSTab控件。

4.收入类别和支出类别的选项卡分别需要实现对两者的添加,删除,修改,返回操作,更为重要的是要保存在文件中,以备在流水帐和查询统计的combobox中使用。

开始时,“添加”和“返回”按钮可用,而其余两个被置灰,而且文本框不可输入。

因为此时列表框的条目未被选中,所以修改和删除已失去意义,不可用。

“添加”按钮比较繁琐,其本身可以被“确定”按钮替代功能。

本程序中,按下添加按钮,则此时文本框被清空可编辑,而对比来说,按下修改按钮文本框不清空且可编辑。

图2.输入错误的密码时的提示

5通过“密码修改”选项卡修改密码,如果两次输入不一致或者输入有误(图2和3)则会提醒用户。

此外,我把其设为了在保存时也会提醒,有助于我们记忆。

右上角的返回按钮可以随时返回主界面上。

6.单击主界面上的“日常流水帐”进入日常收支原始资料的主要输入窗口。

该窗口主要由“收入记账”和“支出记账”两大部分组成。

我设置了进入窗体时列表框为空,以便于对刚输入的情况一目了然。

这里面就涉及到了另一种新的控件,DTPicker控件的问题,这个控件使用起来极为方便,单击即可弹出日期选择框,且默认当天时间,简明易懂。

其中的列表框中的项目为参数设置所得,只需从中选择即可。

需要我们添加新的收支信息时,我设定了备注为可有可无的输入项但其他三个空如果有一个未填则会在单击保存后弹出msgbox提示,否则则会在底部的列表框中每行显示一个完整项,并且把信息存储到balance.txt中用于接下来的步骤。

单击取消按钮则可以清空各个文本框中的内容以便于重新输入。

添加完毕后单击右上角的返回按钮则回到主界面。

7本程序的重点和难点原先粗步估计集中在查询统计这一窗体模块中,所以采用了由易到难的策略。

该窗体由三个选项卡组成,既可以选择按类型查询从而了解单独的情况,也可以采用时间段的模式,从而宏观大体的知道某个时间内的情况。

设定这两种模式时需要通过单选框的改变来结合visible属性。

实际并非没有想象中的困难,但是,因为框架控件的问题,我在这里还是绕了歧路最终放弃了控件数组,原本代码可能会更简明些。

收入支出对比一项用于显示某段时间内总收入和总支出的量化对比,在输入时间段后按确定按钮即可显示。

返回按钮同上述情况。

8.程序中我设置了一个标准模块,主要用于自定义数据类型中的使用。

借用其配合,可使程序显得更简洁些。

二、设计思路与总体方案

用到哪些控件、难点分析、所使用的模块、过程、变量、数组、自定义数据类型及其相互关系,必要时给出系统结构图等图表

2.1窗体frm1

这是启动窗体,仅使用了两个标签和一个文本框及两个按钮,但是要考虑的地方却有很多。

下面我配合图和文字讲述下加密的过程,及对于输入字符时的对话框,还有累计三次时将自动退出的设置。

此处只有三个通用过程,分别为CmdCancel_Click,Cmdok_Click,txtpassword_KeyPress,难点集中在后两者上,其中txtpassword_KeyPress在后面也会用到;

PrivateSubCmdCancel_Click()

UnloadMe

EndSub

PrivateSubCmdok_Click()'自行设计的简易解密过程

Dimint1AsString

DimaAsLong:

StaticbAsInteger:

DimiAsInteger

Iftxtpassword.Text=""Then

Form1.Show

'使用静态变量三次来累计

frm1.Hide

ExitSub

EndIf

int1=txtpassword.Text

OpenApp.Path&"\balance.pas"ForInputAs1

Input#1,a

Close1

DoWhilei<=Len(CStr(np))Andi>=1

a=a-Asc(Mid("CStr(np)",i,1))

Loop

Ifa=int1Then

Form1.Show

UnloadMe

Else

txtpassword.Text=""

txtpassword.SetFocus

b=b+1

Ifb=3Then

MsgBox"三次密码输入不正确,请查实后再登录,谢谢!

","48","错误!

"

UnloadMe

Else

MsgBox"密码错误,请查实后再登录。

","48","错误!

"

EndIf

EndIf

EndSub

PrivateSubtxtpassword_KeyPress(KeyAsciiAsInteger)

IfKeyAscii<48OrKeyAscii>57Then

KeyAscii=0'密码含非数字字符,则显示错误

MsgBox"密码应当为数字,请重新输入",,"提示"

EndIf

EndSub

2.2窗体form1

这是主界面,最没有难度的环节。

但是我在此退出键上也设了一个对话框,这就提供了返回的余地.此处我设置了四个按钮控件,一个标签,和一个图像控件。

几段代码相似,仅有click过程

PrivateSubCmdlsz_Click()

Frmlsz.Show

UnloadMe

EndSub

PrivateSubCmdCxtj_Click()

Frmcxtj.Show

UnloadMe

EndSub

PrivateSubCmdEsc_Click()

DimiAsInteger

i=MsgBox("Areyousuretoexist?

",49,"Warn")

Ifi=1Then

UnloadMe

Else

Form1.Show

EndIf

EndSub

PrivateSubCmdcssz_Click()

Loadfrmcssz

frmcssz.Show

UnloadMe

EndSub

PrivateSubCmdtjcx_Click()

LoadFrmcxtj

Frmcxtj.Show

UnloadMe

EndSub

2.3窗体frmcssz

该窗体是以三个选项卡所构成的,了解到前两者具有对称性,这就提供给了我们思路,控件数组的使用可以简化两者的代码,从而提高程序的可读性。

窗口共出现了十五个按钮控件,我多将其设置成为了数组的模式,利用index属性的转换,简化工作量。

此外九个标签,四个文本框及两个列表框均是围绕着实现两个框架承载的内部结构所展开。

下述一段是利用数组写文件的过程,仅使用两个变量循环着输出便得以实现

PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)

DimiAsInteger,jAsInteger

OpenApp.Path&"\InputType.txt"ForOutputAs1

OpenApp.Path&"\OutputType.txt"ForOutputAs2

用unload的一个过程写文件

Fori=0To1

Forj=1ToList1(i).ListCount

Write#i+1,List1(i).List(j-1)

Nextj

Nexti

Close

EndSub

下述一段代码为读入列表框时所使用。

仅有一字符串变量来实现

PrivateSubForm_Load()

Dimstr1AsString

OpenApp.Path&"\OutputType.txt"ForInputAs#2

DoWhileNotEOF

(2)

Input#2,str1

List1

(1).AddItemstr1'读文件进入列表框

Loop

OpenApp.Path&"\InputType.txt"ForInputAs#1

DoWhileNotEOF

(1)

Input#1,str1

List1(0).AddItemstr1

Loop

Close

EndSub

PrivateSubCancel_Click()

np.Text="":

np2.Text=""'取消密码输入

EndSub

PrivateSubcmdfh_Click(IndexAsInteger)'返回按钮

Unloadfrmcssz

Form1.Show

EndSub

PrivateSubCmdqx_Click(IndexAsInteger)'取消按钮

DimmAsInteger

m=Index

Text1(m).Text=""

EndSub

PrivateSubCmdsc_Click(IndexAsInteger)'删除按钮

DimjAsInteger:

j=Index

List1(j).RemoveItemList1(j).ListIndex

Text1(j).Text=""

EndSub

PrivateSubCmdtj_Click(IndexAsInteger)'添加按钮

DimmAsInteger

m=Index

Text1(m).SetFocus

Text1(m).Locked=False

Text1(m).Text=""

EndSub

PrivateSubList1_Click(IndexAsInteger)

DimjAsInteger'点击列表框实现两键的去灰

j=Index

Cmdxg(j).Enabled=True

Cmdsc(j).Enabled=True

Text1(j).Text=List1(j).Text

EndSub

PrivateSubCmdxg_Click(IndexAsInteger)'修改按钮。

修改键解除文本框锁定

DimjAsInteger

j=Index

Text1(j).Locked=False

Text1(j).SetFocus

EndSub

PrivateSubCmdqd_Click(IndexAsInteger)

Dimint1AsInteger,kAsInteger'确定按钮。

对栏目的添加,修改

k=Index

IfList1(k).SelCount=0Then

List1(k).AddItemText1(k).Text

Else

int1=List1(k).ListIndex

List1(k).List(int1)=Text1(k).Text

EndIf

Text1(k).Text="":

Text1(k).Locked=True

Cmdxg(k).Enabled=False:

Cmdsc(k).Enabled=False

Cmdtj(k).SetFocus

EndSub

后面一段当时看来显得很费精力,因为需要自行设定加密方法

PrivateSubsure_click()

DimiAsInteger,passwordAsLong

i=1

Ifnp.Text<>np2.TextThen

MsgBox"两次密码不一样(~。

~)/,请重新输入",48,"提示"

ElseIfLen(Trim(np))>8Then

MsgBox"请保证密码不超过8位",48

Else'两次输入一样就加密并保存到文件

MsgBox"密码已修改,a请记住您的密码哦!

",64,"温馨提示"

EndIf

DoWhilei<=Len(np.Text)Andi>=1

np=np+Asc(Mid(np.Text,i,1))

Loop

OpenApp.Path&"\Balance.pas"ForOutputAs#1'设置密码

Write#1,np

Close#1

EndSub

PrivateSubnp_KeyPress(KeyAsciiAsInteger)

IfKeyAscii<48OrKeyAscii>57Then

KeyAscii=0'密码含非数字字符,则显示错误

MsgBox"密码应当为数字,请重新输入",,"提示"

EndIf

2.4窗体frmlsz

窗体frmlsz供用户输入每日的收支帐目,即收支类型、收支时间、金额和备注。

每次加载窗体frmlsz时从Inputtype.txt读出收入类型,从Outputtype.txt读出支出类型给combo控件初始化,便于用户选择相应的类型输入日常流水账。

为实现数据逐条读写采用doloop循环EOF()文件函数和input语句。

利用If语句判断data的int1取值,确定数据是收入还是支出,这是一种较为简便的方式,在后面的数据查询中有很大的发挥空间

Frmlsz在主界面中的default属性被我改成了true。

其结构简单,但设计上还是需要注意些问题,比方说就看下面一段代码,我们有时候确实有必要在细节上较真

PrivateSubCmdbc_Click(IndexAsInteger)

DimjAsInteger:

j=Index

Dimstr1AsString

IfCoblb(j).Text=""Ortxtje(j).Text=""Then'输入信息

MsgBox"请输入完整>o<",,"嘿嘿,注意"

ExitSub

Else

str1=DTPicker1(j).Value&Space(4)&Coblb(j).Text&Space(9)&txtje(j)&Space(12)&txtbz(j)

CallList1(j).AddItem(str1)

EndIf

DimnewdataAsdata

newdata.int1=j

newdata.time1=DTPicker1(j).Value

newdata.moneytype=Coblb(j).Text'收集信息并保存到文件

newdata.money=Str(Val(txtje(j).Text))

newdata.addition=txtbz(j).Text

OpenApp.Path&"\Balance.txt"ForAppendAs#1

Write#1,newdata.int1,newdata.time1,newdata.moneytype,newdata.money,newdata.addition

Close#1

EndSub

PrivateSubcmdfh_Click(IndexAsInteger)'返回

UnloadFrmlsz

Form1.Show

EndSub

PrivateSubCmdqk_Click(IndexAsInteger)'清空按钮

DimjAsInteger:

j=Index

Coblb(j).Text="":

txtje(j).Text="":

txtbz(j).Text=""

EndSub

这段代码基本上在所有类似的情况中都大同小异

PrivateSubForm_Load()'读取信息

Dimstr1AsString

OpenApp.Path&"\OutputType.txt"ForInputAs#2

DoWhileNotEOF

(2)

Input#2,str1

Coblb

(1).AddItemstr1

Loop

OpenApp.Path&"\InputType.txt"ForInputAs#1

DoWhileNotEOF

(1)

Input#1,str1

Coblb(0).AddItemstr1

Loop

Close

EndSub

2.4窗体frmcxtj

窗体frmcxtj算是对于上述窗体的综合应用。

在数组的基础上同时也涉及到了自定义变量类型,利用其寻找到时间或类别上符合要求的项,通过EOF语句不断赋值,再通过doloop循环得到。

两组单选框的value值改变而转化frame的visible属性,这是大致的思路框架。

具体落实到代码的编写上,比方寻找时间段是通过与dtpicker的value值比较

PrivateSubCmd3_Click()

DimnewdataAsdata,iAsInteger

‘此句为收入支出对比一栏上给两个文本框计算的过程

DimamountAsLong,money1AsLong,money2AsInteger

Lbldb.Caption="从"&Space(3)&DTPicker5.Value&Space

(2)&"到"&Space

(2)&DTPicker6.Value&Space

(2)&"期间"‘标签

OpenApp.Path&"\Balance.txt"ForInputAs#1

DoWhileNotEOF

(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<=(DTPicker6.Value))Andnewdata.int1=0Then

money1=money1+newdata.money

EndIf

If(newdata.time1>=(DTPicker5.Value))And(newdata.time1<=(DTPicker6.Value))Andnewdata.int1=1Then

money2=money2+newdata.money

EndIf

Loop

Text1.Text=money1

Text2.Text=money2

Close

Text1.Locked=True

Text2.Locked=True

EndSub

PrivateSubCmd1_Click()’第一个确定按钮

List1.Clear'

DimnewdataAsdata,iAsInteger

DimamountAsLong,moneyAsLong

amount=0

OpenApp.Path&"\Balance.txt"ForInputAs#1'当选择收入类型查询时

IfOption2.Value=TrueThen

DoWhileNotEOF

(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

<=(DTPicker10.Value))Andnewdata.moneytype=Combo1.TextThen

List1.AddItemnewdata.time1&Space(5)&newdata.moneytype&Space(5)&CStr(newdata.money)&Space(5)&newdata.addition

money=newdata.money

EndIf

amount=amount+money

Loop

Labelsr.Caption="从"&DTPicker9.Value&"到"&DTPicker10.Value&"共收入"&amount&"元"

Else

DoWhileNotEOF

(1)

Input#1,ne

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1