vb课程设计报告Word下载.docx
《vb课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《vb课程设计报告Word下载.docx(34页珍藏版)》请在冰豆网上搜索。
我们设计该软件的主要目的是:
1.通过该题目的设计,掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
2.掌握菜单的使用方法;
3.掌握多窗体的调用方法;
4.掌握数据库的应用;
5.数据库的调用,及对数据的管理。
第二章系统功能需求分析
2.1系统概述
我设计的软件,模仿了万能收藏窗体布局、其中部分功能与它相似。
窗体大致分为:
标题栏、菜单栏、工具栏、工作区、状态栏几个部分。
系统拥有网址的保存、修改、删除,和浏览网页;
联系簿的保存、修改、删除;
及备忘等功能。
2.2系统的构成
我们设计的软件,窗体布局简洁,方便实用。
软件主要有气个窗体构成,登陆、主窗口、添加网址、添加联系人,备忘录、数据查找窗体、标准模块。
登录窗口主要包括combo、text录入。
验证码的使用、数据库的链接等
主窗口主要包括viewtree、dgbrid显示数据,快捷键的使用、菜单栏、数据库的链接等
添加窗体主要包括combo输入及下拉菜单的使用、数据的显示、数据库的链接等
备忘录窗体主要包括栏、文本编辑、文字计数、数据库的链接等。
数据查找窗体主要包括combo输入及下拉菜单的使用、dbgrid数据显示数据库的链接等。
标准模块主要包括各种函数、全局变量的声明,文件初始化等功能。
2.3各模块的功能
登录窗体与数据库链接实现单对单(一个账户对应一个密码)登陆模式,实用随机数产生验证码限制登录。
主窗体使用viewtree与dbgrid显示数据库内容,同时是viewtree中节点与dbgrid相连,实现随时变化。
菜单栏中添加、修改按钮能实现对其他窗体的调用,同时改变显示窗体的标题栏属性;
菜单栏中的删除按钮可以删除对应项在数据库的数据内容,并同时改变dbgrid格内容;
菜单栏中的查看网址按钮可打开浏览器浏览相应网页;
查找按钮可查找数据库中相应内容。
下方的状态栏可以显示操作人的信息,与系统详细时间等内容。
添加窗体与数据库相连,单击保存改变数据库中数据,取消关闭相应窗口。
修改窗体可读取显存数据库中的内容,并进行修改,取消关闭相应窗口。
当改变关系与类型与数据库中无相符内容时,则改变数据树内容。
编辑菜单项具有编辑文本文件的最基本、最常见的功能,复制菜单项可以复制已选定的文本,剪切菜单项可以剪切已选定的文本,粘贴菜单项可以可以再光标插入点处插入一已复制或已剪切的文本。
全选菜单项可以把当前文本全部选中。
同时字体菜单可改变字体属性。
在文本框中内容改变时,统计其中字数显示在下方,当字数超出一定限制是给出提示。
2.4系统的运行环境
系统的运行环境是win7、Vista、XP等常用系统软件。
2.5各模块的功能
软件具有储存修改网址、联系簿、备忘录的功能。
登录窗口有数据库连接,实现单对单(一个账号对应一个密码)登陆系统。
使用随机数产生验证码限制登录情况。
主窗口使用viewtree显示数据库中类型表的显示,使用dbgrid显示数据中的详细数据,菜单栏是文件功能的具体体现者,具有对其他窗体的显示的调用功能。
新建菜单调用添加网址、添加联系人或添加备忘窗体;
修改菜单调用修改网址、修改联系人或修改备忘窗体;
点击删除会在数据库中删除相应项;
查找联系人会调用查找窗体,查看网址会启动浏览器查看相应网页。
当点击添加时,窗体的caption属性为添加,当点击确定时改变数据库内容;
取消退出窗体。
当点击修改时,窗体的caption属性会变为修改,同时读取数据库文件显示相应数据,当内容数据发生改变时对数据库内容进行修改;
点击取消突出窗体。
当窗体中的类型或关系框中内容与数据库中内容不符,则同时在类型数据表中进行修改。
备忘录菜单中菜单栏编辑菜单项具有编辑文本文件的最基本、最重要、也是最常见的功能,复制菜单项可以复制已选定的文本,剪切菜单项可以剪切已选定的文本,粘贴菜单项可以可以再光标插入点处插入一已复制或已剪切的文本。
第三章系统代码
3.1主窗体代码
OptionExplicit
Consttreewide=2000'
TREEVIEW的最小宽度
Constbiaowide=2000'
DBGRID的最小宽度
PrivateSubForm_Load()
imgPointer.Left=ReadIni("
chuangti"
"
imgpointerleft"
1200"
)'
从ini文件中确定窗体大小
Me.MoveReadIni("
formleft"
100"
),ReadIni("
formtop"
formwidth"
2400"
formheight"
'
Me关键字像是隐含声明的变量。
这个关键字适用于类模块中的每个过程。
当类有多个实例时,Me在代码正在执行的地方提供引用具体实例的方法。
要把当前执行类实例的有关信息传递到另一个模块的过程,Me非常有用
Data1.DatabaseName=dizhi&
"
shuju.mdb"
SetDatashuju=Workspaces(0).OpenDatabase(dizhi&
False,False)
ListTree
lianxibiao
EndSub
PrivateSubForm_Resize()'
当一个对象第一次显示或当一个对象的窗口状态改变时该事件发生
OnErrorResumeNext'
resume在错误处理程序结束后,恢复原先的运行。
如果错误和错误处理程序出现在同一个程序中,则从紧随产生错误的语句的下个语句恢复运行。
如果错误发生在被调用的过程中,则对最后一次调用包含错误处理程序的过程的语句(或OnErrorResumeNext语句),从紧随该语句之后的语句处恢复运行
IfMe.Width<
treewide+biaowideThenMe.Width=treewide+biaowide
IfMe.WindowState<
>
1ThenchicunimgPointer.Left'
windowstate返回或设置一个值,该值用来指定在运行时窗体窗口的可视状态。
0为正常,1最小化,2最大化
PrivateSubchicun(XAsLong)
X=treewide
TreeView1.Width=X
imgPointer.Left=X+40
DBGrid1.Left=X+40
DBGrid1.Width=Me.Width-(TreeView1.Width+100)
TreeView1.Top=Toolbar1.Height
DBGrid1.Top=TreeView1.Top+2
imgPointer.Top=TreeView1.Top
picMove.Top=TreeView1.Top
TreeView1.Height=Me.ScaleHeight-TreeView1.Top-300'
设置height
DBGrid1.Height=TreeView1.Height
imgPointer.Height=TreeView1.Height
picMove.Height=TreeView1.Height
StatusBar1.Top=Me.ScaleHeight-TreeView1.Height-TreeView1.Top-300
StatusBar1.Height=300
PublicSubListTree()'
显示树形列表
DimaAsNode
DimbAsLong
添加地址薄类型
TreeView1.Nodes.Clear
Seta=TreeView1.Nodes.Add(,,"
l"
联系人"
object.Add(relative,relationship,key,text,image,selectedimage)
WithDatashuju.OpenRecordset("
select*fromlistwherebook='
lianxiren'
"
WhileNot.EOF
b=b+1
Seta=TreeView1.Nodes.Add("
tvwChild,"
&
b,!
Type)'
TvwChild4(缺省)子节点。
该Node节点是relative命名节点的子节点
.MoveNext
Wend
EndWith
a.EnsureVisible
添加网址薄类型
W"
网址薄"
wangzhi'
Type)
添加备忘列表
b"
备忘录"
beiwang'
WhileNot.EOF
Wend
PublicSublianxibiao(OptionalstrRelationAsString)
DimaAsString
a="
select姓名,关系,电话,地址,qq,Email,备注fromlianxiren"
IfstrRelation<
Thena=a&
where关系='
strRelation&
Data1.RecordSource=a'
ecordSource设置一个数据控件的底层表、sql语句或querydef
Data1.Refresh
shujudbg7,"
lianxiren"
ThenDBGrid1.Columns
(1).Visible=True
PublicSubwangzhibiao(OptionalstrTypeAsString)
select名称,网址,类型,备注fromwangzhi"
IfstrType<
where类型='
strType&
Data1.RecordSource=a'
Data1.Refresh
shujudbg4,"
wangzhi"
PublicSubbeiwangbiao(OptionalstrTypeAsString)
select文件名,内容frombeiwang"
shujudbg2,"
beiwang"
PrivateSubshujudbg(lieshuAsLong,shujukumingAsString)
DimyuanlieshuAsLong,iAsInteger,bAsInteger
yuanlieshu=DBGrid1.Columns.Count
b=lieshu-yuanlieshu
Fori=1Tob
DBGrid1.Columns.Add
(1)
Next
Forlieshu=0Tolieshu-1'
设置字段、宽度
DBGrid1.Columns(lieshu).Width=ReadIni(shujukuming,"
colwid"
lieshu,2000)
PrivateSubtreeview1_NodeClick(ByValNodeAsComctlLib.Node)
SelectCaseNode.Key
Case"
lianxibiao
l1"
To"
l9"
l10"
l99"
lianxibiaoNode.Text
wangzhibiao
W1"
W9"
W10"
W99"
wangzhibiaoNode.Text
beiwangbiao
b1"
b9"
b10"
b99"
beiwangbiaoNode.Text
EndSelect
PrivateSubTreeView1_BeforeLabelEdit(CancelAsInteger)
Cancel=True'
取消标签编辑操作
PrivateSubmen_Click(IndexAsInteger)'
点击菜单事件
SelectCaseIndex
Case1
lianxiadd.liancaozuo=1
lianxiadd.ShowvbModal,Me
Case2
shanlian
Case3
lianxiadd.liancaozuo=2
Case4
chazhao.Show
EndSelect
PrivateSubwang_Click(IndexAsInteger)'
DimaAsLong
SelectCaseIndex
wangzhiadd.wangcaozuo=1
wangzhiadd.ShowvbModal,Me
shanwang
wangzhiadd.wangcaozuo=2
IfInStr(Data1.RecordSource,"
)>
0Then
WithData1.Recordset
IfNot.EOFAndNot.BOFThen'
指针处于中间位置
IfLeft(!
网址,7)="
Open"
!
网址,"
App.Path,1)
Else
'
shellexecute(byvalhwandasLong,byvalipoperationasString,byvalipfileasString,byvalipparamelersasString,byvalipdirectoryasString,byvalnshowcmdasLong)
shellexecute函数:
查找与制定相关程序的文件名
hwnd制定一个窗口的句柄,有时候windows程序有必要在创建自己的主窗口前显示一个消息框
ipoperation制定字符串"
open"
来打开ipfile文档,或指定"
print"
来打印它
ipfile想用关联程序打印或打开一个程序名或文件名
ippatameters如果ipszfile是可执行文件,则这个字符串包括传递给执行程序的参数
ipkirectory使用的完整路径
nshowsmd定义了如何显示启动程序的常数值
a=ShellExecute(Me.hwnd,"
1)'
EndIf
EndWith
PrivateSubbei_Click(IndexAsInteger)'
beiwanglu.beicaozuo=1
beiwanglu.ShowvbModal,Me
shanbei
beiwanglu.beicaozuo=2
PrivateSubshanwang()
DimaAsString,bAsString
a=MsgBox("
确定删除"
vbCrLf&
!
网址&
?
vbQuestion+vbYesNo)
Ifa=vbYesThen
Data1.Recordset.Delete
Data1.Recordset.MoveNext
IfData1.Recordset.EOFThenData1.Recordset.MoveLast
ListTree
PrivateSubshanlian()
姓名&
PrivateSubshanbei()
备忘&
PrivateSubToolbar1_ButtonClick(ByValButtonAsComctlLib.Button)
IfButton.Index<
5Then
men_Click(Button.Index)
ElseIfButton.Index>
wang_Click(Button.Index-5)
EndIf
PrivateSubStatusBar1_PanelClick(ByValPanelAsComctlLib.Panel)
Ifdenglu.Combo1.Text=douThenStatusBar1.Panels.Item
(1).Text="
操作者:
窦军强"
Ifdenglu.Combo1.Text=gaoThenStatusBar1.Panels.Item
(1).Text="
高树青"
StatusBar1.Panels.Item
(2).Text=Format(Date,"
yyyy年mm月dd日"
n=Weekday(Data)
Ifn=1ThenStatu