图书管理系统.docx
《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
![图书管理系统.docx](https://file1.bdocx.com/fileroot1/2022-11/30/0ad83914-7d4e-46d3-b44d-7fd2cc6c9f35/0ad83914-7d4e-46d3-b44d-7fd2cc6c9f351.gif)
图书管理系统
河北理工大学
数据库课程设计说明书
设计题目:
图书销售管理系统
姓名:
李想
专业:
地理信息系统
指导教师:
交通与测绘学院
年月日
目 录
1概述1
1.1系统背景1
2需求分析1
3结构设计1
4行为设计2
5系统开发流程3
5.1数据库结构设计3
5.2创建“图书销售管理”工程4
6系统使用说明及主要代码8
7课程设计体会及心得16
参考文献17
1概述
1.1系统背景
图书销售在我国古时已有,现已成为我国零售业的一种重要形态。
随着图书销售的发展,其经营管理也变得愈加复杂,早期的售货员站柜台的形式早已不能满足现有销售业的发展,这样就迫切的需要引入新的思想技术和管理技术进入到图书销售管理之中。
在目前状态下,图书销售存在零售业、商业、企业所共有的落后的一面,如:
不能有效地管理每一种图书,盘点效率低等,而且在图书销售日常管理中,图书进、销、存、决策以经验为主,缺乏实时分析功能,管理人员及时传递资料的要求始终得不到满足。
随着图书销售的发展,其经营管理也变得越加复杂,日常所需处理的数据量也逐渐增大,原始的人工管理已无法应对复杂的市场。
本图书销售管理系统,依靠现代化的计算机信息处理技术来管理图书销售,从而节省了大量的人力和物力,改善了员工的工作条件,减轻了劳动强度,并能快速反映出图书销售的各种信息,加强图书销售的管理。
2需求分析
由于图书种类繁多,人工管理存在诸多不方便因素。
而使用计算机对图书销售进行管理,具有手工管理所无法比拟的优点。
例如:
查找方便、可靠性高、存储量大、保密性好、成本低等。
本系统主要面向系统管理员,能满足用户的各种操作需求。
其主要功能如下:
系统用户管理:
管理员数据管理和查找;
图书信息管理:
图书信息数据管理和查找;
图书订单管理:
图书订单管理和查找。
3结构设计
按照软件开发的流程,进行完需求分析,就应该进行结构设计,主要解决实现本系统需求的程序的模块问题。
本系统需要完成的功能有管理员信息管理、图书信息管理、订购信息管理三个部分,其E-R图如下:
图书销售管理系统E-R图
4行为设计
根据需求分析和结构设计,得到如下图所示的图书销售管理系统功能模块结构图。
5系统开发流程
5.1数据库结构设计
按照前面分析的图书销售管理系统数据字典,设计出图书销售管理系统数据库中各个数据表,包括图书信息表、管理员数据表、图书订购数据表共3个数据表。
本图书销售管理系统数据库命名为“图书销售”,数据库中的各个数据表名称和结构分别如下:
管理员
列名
数据类型
长度
允许空
说明
admin_name
varchar
20
保存用户命令
admin_pwd
varchar
10
保存口令
其中,admin_name定义为主键。
图书信息
列名
数据类型
长度
允许空
说明
book_id
int
4
保存图书编号
book_name
varchar
50
保存图书书名
book_writer
varchar
20
保存图书作者姓名
book_press
varchar
50
保存图书出版社名称
book_pdate
smalldatetime
4
保存图书出版日期
book_brief
varchar
1000
保存图书内容简介
book_page
smallint
2
保存图书页数
book_price
smallmoney
4
保存图书单价
其中,book_id定义为主键。
订购记录
列名
数据类型
长度
允许空
说明
rec_id
int
4
保存记录编号
book_id
varchar
10
保存图书编号
book_sum
varchar
18
保存图书订购数量
sale_date
smalldatetime
50
保存图书订购日期
其中,rec_id定义为主键。
使用SQLServer2000创建数据库“图书销售”。
5.2创建“图书销售管理”工程
使用VisualBasic6.0创建“图书销售管理”工程,用于实现图书销售系统的基本数据管理。
在“图书销售管理”工程下依此创建“图书信息管理”窗体(frmBooks)、“订单管理”窗体(frmSubscribe)、“图书信息”窗体(frmBookInfo)、“系统登录”窗体(frmLogon)、“系统用户管理”窗体(frmManagers)和“图书销售管理”窗体(frmMain)。
其具体设计如下图所示:
依此设置各窗体及窗体中控件的属性并为各窗体添加代码。
打开工程属性对话框,在“通用”选项卡的“启动对象”下拉列表框中选择frmLogon,将“系统登录”设置为启动窗体。
6系统使用说明及主要代码
图书销售管理系统通过“系统登录”进入“图书销售”主窗体。
点击系统管理子菜单可进入“图书信息管理”窗体、“系统用户管理”窗体和“订单管理”窗体,并执行相应功能。
单击“订单管理”窗体中的“图书信息”按钮即可进入“图书信息”窗体显示当前选中的图书的图书信息。
“系统登录”主窗体的代码如下:
ConstMaxLogTimesAsInteger=3'定义允许尝试登录的最大次数
PrivateSubForm_Load()
'清空用户名和口令文本框
txtName=""
txtPwd=""
EndSub
PrivateSubcmdCancel_Click()
'请求用户确认是否真的退出系统登录
IfMsgBox("你选择了退出系统登录,退出将不能启动管理系统!
"&vbCrLf_
&"是否真的退出?
",vbYesNo+vbQuestion,"登录验证")=vbYesThen
UnloadMe'卸载登录窗体
EndIf
EndSub
PrivateSubcmdOk_Click()
DimobjCnAsConnection,objRsAsRecordset,strSql$
IfTrim(txtName)=""Then'检验是否输入用户名
MsgBox"请输入用户名!
",vbExclamation,"登录验证"
txtName=""
txtName.SetFocus
ExitSub
EndIf
IfTrim(txtPwd)=""Then'检验是否输入登录口令
MsgBox"请输入登录口令!
",vbExclamation,"登录验证"
txtPwd=""
txtPwd.SetFocus
ExitSub
EndIf
'静态常量intLogTimes用于保存用户请求验证的次数
StaticintLogTimesAsInteger
intLogTimes=intLogTimes+1'保存当前登录次数
IfintLogTimes>MaxLogTimesThen
'超过允许的登录次数,显示提示信息
MsgBox"你已经超过允许的登录验证次数!
"&vbCr_
&"将退出登录!
",vbCritical,"登录验证"
End'结束应用程序
EndIf
'输入合法,进一步检验正确性
'创建与数据库的联接
SetobjCn=NewConnection'实例化联接对象
WithobjCn'建立数据库联接
.Provider="SQLOLEDB"
.ConnectionString="IntegratedSecurity=SSPI;DataSource=(local);"&"InitialCatalog=图书销售"
.Open
EndWith
strSql="selectadmin_pwdfrom管理员whereadmin_name='"&Trim(txtName)&"'"
'执行查询获得用户登陆密码
SetobjRs=NewRecordset
WithobjRs
Set.ActiveConnection=objCn
.CursorLocation=adUseClient
.CursorType=adOpenStatic
.OpenstrSql
If.RecordCount<1Then
MsgBox"用户名输入错误!
",vbCritical,"登录验证"
txtName.SetFocus
txtName.SelStart=0
txtName.SelLength=Len(txtName)
Else
If.Fields!
admin_pwd<>Trim(txtPwd)Then
MsgBox"口令错误,请重新输入!
",vbCritical,"登录验证"
txtPwd.SetFocus
txtPwd=""
Else
'显示登录成功信息
MsgBox"欢迎使用图书销售管理系统!
",vbInformation,"登录成功"
UnloadMe'关闭登录窗体
frmMain.Show'显示系统主窗体
EndIf
EndIf
EndWith
objCn.Close'关闭数据库连接
SetobjCn=Nothing'释放数据库连接
SetobjRs=Nothing
EndSub
“图书销售”主窗体的代码如下:
PrivateSubmnuExit_Click()
UnloadMe'关闭系统主窗体
EndSub
PrivateSubMDIForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)
IfMsgBox("你选择了关闭图书销售管理系统,是否继续?
",_
vbYesNo+vbQuestion,"图书销售管理系统")=vbYesThen
'判断在所有子窗体关闭之后才能关闭系统主窗体
IfNotMe.ActiveFormIsNothingThen
MsgBox"请先关闭打开的子窗体!
",vbCritical,"图书销售管理"
Cancel=1
EndIf
Else
Cancel=1
EndIf
EndSub
PrivateSubmnuAdmins_Click()
frmManagers.Show:
frmManagers.SetFocus
EndSub
PrivateSubmnuBooks_Click()
frmBooks.Show:
frmBooks.SetFocus
EndSub
PrivateSubmnuCascade_Click()
Me.ArrangevbCascade'层叠排列子窗体
EndSub
PrivateSubmnuIcons_Click()
Me.ArrangevbArrangeIcons'重新排列最小化的子窗体图标
EndSub
PrivateSubmnuSubscribe_Click()
frmSubscribe.Show:
frmSubscribe.SetFocus
EndSub
PrivateSubmnuTileH_Click()
Me.ArrangevbTileHorizontal'水平平铺子窗体
EndSub
PrivateSubmnuTileV_Click()
Me.ArrangevbTileVertical'垂直平铺子窗体
EndSub
“订单管理”窗体的代码如下:
DimobjCnAsConnection,objRsAsRecordset
PrivateSubForm_Load()
'建立数据库联接
SetobjCn=NewConnection'实例化联接对象
WithobjCn'建立数据库联接
.Provider="SQLOLEDB"
.ConnectionString="IntegratedSecurity=SSPI;DataSource=(local);"&"InitialCatalog=图书销售"
.Open
EndWith
'获取订购记录
SetobjRs=NewRecordset'实例化objRs对象
WithobjRs
Set.ActiveConnection=objCn
.CursorLocation=adUseClient'指定使用客户端游标
.CursorType=adOpenStatic'指定使用静态游标
.LockType=adLockOptimistic
.Open"SELECT*FROM订购记录"
EndWith
SetDataGrid1.DataSource=objRs
IfobjRs.RecordCount=0Then
MsgBox"无图书订购记录!
"
cmdBookInfo.Enabled=False
cmdFilter.Enabled=False
cmdDeleteAll.Enabled=False
cmdDelete.Enabled=False
EndIf
EndSub
PrivateSubForm_Resize()
DataGrid1.Width=Abs(Me.Width-2*DataGrid1.Left-100)
DataGrid1.Height=Abs(Me.Height-DataGrid1.Top-800-cmdExit.Height)
cmdExit.Top=DataGrid1.Top+DataGrid1.Height+200
cmdBookInfo.Top=cmdExit.Top
cmdFilter.Top=cmdExit.Top
cmdDeleteAll.Top=cmdExit.Top
cmdDelete.Top=cmdExit.Top
EndSub
PrivateSubcmdDelete_Click()
IfobjRs.AbsolutePosition>0Then
IfMsgBox("是否删除rec_id="&objRs!
rec_id&"的订购记录?
",vbQuestion+vbYesNo,"删除记录")=vbYesThen
objRs.Delete
objRs.MoveNext
IfobjRs.EOFThenobjRs.MoveLast
IfobjRs.RecordCount=0Then
MsgBox"无图书订购记录!
"
cmdBookInfo.Enabled=False
cmdFilter.Enabled=False
cmdDeleteAll.Enabled=False
cmdDelete.Enabled=False
EndIf
EndIf
EndIf
EndSub
PrivateSubcmdDeleteAll_Click()
IfobjRs.AbsolutePosition>0Then
IfMsgBox("是否删除全部的订购记录?
",vbQuestion+vbYesNo,"删除记录")=vbYesThen
objCn.Execute"truncatetable订购记录"
objRs.Requery
cmdBookInfo.Enabled=False
cmdFilter.Enabled=False
cmdDeleteAll.Enabled=False
cmdDelete.Enabled=False
EndIf
EndIf
EndSub
PrivateSubcmdFilter_Click()
DimstrFilter$
strFilter=InputBox("请输入图书编号(book_id):
","按图书编号筛选")
IfstrFilter=""Then
objRs.Filter=adFilterNone
objRs.Requery
Else
objRs.Filter="book_id="&Val(strFilter)
EndIf
EndSub
PrivateSubcmdBookInfo_Click()
DimstrSql$,objTemAsRecordset,objStmAsStream
SetobjTem=NewRecordset
SetobjStm=NewStream
WithobjTem
IfobjRs.AbsolutePosition>0Then
strSql="select*from图书信息wherebook_id="&objRs.Fields!
book_id
Set.ActiveConnection=objCn
.CursorLocation=adUseClient'指定使用客户端游标
.CursorType=adOpenStatic'指定使用静态游标
.OpenstrSql
EndIf
If.RecordCount>0Then
'显示图书信息
frmBookInfo.txtID=.Fields!
book_id
frmBookInfo.txtName=.Fields!
book_name
frmBookInfo.txtWriter=.Fields!
book_writer
frmBookInfo.txtPublish=.Fields!
book_press
frmBookInfo.txtDate=.Fields!
book_pdate
frmBookInfo.txtPage=.Fields!
book_page
frmBookInfo.txtPrice=.Fields!
book_price
frmBookInfo.txtBrief=.Fields!
book_brief
frmBookInfo.ShowvbModal
Else
MsgBox"图书信息记录已删除,请删除该订购记录!
"
EndIf
EndWith
SetobjTem=Nothing
SetobjStm=Nothing
EndSub
PrivateSubDataGrid1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=vbRightButtonThenfrmSubscribe.PopupMenumnuOperate
EndSub
PrivateSubmnuDelete_Click()
'执行“删除当前”按钮单击事件,删除当前记录
cmdDelete.Value=True
EndSub
PrivateSubmnuDeleteAll_Click()
'执行“删除全部”按钮单击事件,删除全部记录
cmdDeleteAll.Value=True
EndSub
PrivateSubmnuFilter_Click()
'执行“数据筛选”按钮单击事件,设置筛选条件
cmdFilter.Value=True
EndSub
PrivateSubmnuBook_Click()
'执行“图书信息”按钮单击事件,显示当前订单记录图书信息
cmdBookInfo.Value=True
EndSub
PrivateSubcmdExit_Click()
UnloadMe
EndSub
PrivateSubForm_Unload(CancelAsInteger)
SetobjRs=Nothing'释放记录集对象
objCn.Close'关闭数据联接
SetobjCn=Nothing'释放数据库联接
EndSub
“图书信息管理”、“系统用户管理”和“图书数信息”窗体的代码在此不再列举。
“图书销售”和“订单管理”窗体的执行效果如下图所示:
图书销售执行效果图
订单管理执行效果图
7课程设计体会及心得
这次为期两周的数据库课程设计,使我紧张而又忙碌。
两周来,每天忙于创建窗体、添加代码、调试程序,检查错误。
创建窗体、添加代码仅是占用时间,而调试程序,检查错误却使我十分焦虑。
经过一遍又一遍的调试,当程序终于顺利执行时,我终于可以松一口气。
调试程序占据了课程设计的大部分时间。
尽管代码添加前已经过缜密考虑,但真正执行时依然错误不断。
可见,要想做好程序开发的人不但要心思细腻,还要非常有耐心。
本次课程设计结束了,我虽然只做出了一些简单的界面,执行了一些基本的功能,但我依然感觉受益匪浅。
通过本次课程设计,不但温习了以前所学的关于VisualBasic6.0的知识,而且更深入的学习了VB和SQLServer的功能,并加以运用。
同时也让我意识到自己的不足,勉励我在今后的编程过程中努力弥补。
本次课程设计对我们而言是一次很好的锻炼。
我们于实践中发现问题,了解自己的优势和劣势,是对我们的一次小检查。
在这次课程设计中,同学们互相请教,互帮互助,既使得彼此之间的关系更加融洽,也提升了大家解决问题的能力。
通过本次课程设计,我感触颇深,也受益良多。
参考文献
[1]SQLServer数据库开发经典实例精解/夏邦贵,刘凡馨.北京:
机械工业出版社,2006.1
[2]VisualBasic程序设计教程/柴欣,李惠然主编-北京:
海洋出版社,2001.8
[3]数据库原理与应用教程第2版/何玉洁编著.-北京:
机械工业出版社,2007.2