数据库实验报告图书管理系统.docx
- 文档编号:29881960
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:23
- 大小:2.50MB
数据库实验报告图书管理系统.docx
《数据库实验报告图书管理系统.docx》由会员分享,可在线阅读,更多相关《数据库实验报告图书管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
数据库实验报告图书管理系统
图书馆管理系统的设计
一、实验背景:
在数据库应用系统的编程中,管理人员需要经常从数据库中查询数据。
复杂组合查询,特别是多种数据类型的复杂条件动态组合查询是一个设计难度大,但很能方便用户的功能模块,在系统开发时要尽量满足用户的需要,就必须考虑多类型-多条件综合模糊查询功能,提高应用系统的智能性。
消费者在选择市场产品时往往面临数据量大、删选难、数据不全面等问题,多类型-多条件综合模糊查询正式基于此设计的。
二、实验内容:
以SQLSERVER2008为后台数据库,以VisualBasic为前台开发工具,完成一个以人事管理系统为实例或结合相关专业方向的查询界面友好的多类型-多条件综合模糊查询应用模块的设计与开发,以满足用户复杂查询的需求,具体内容包括:
1)数据库概念结构和逻辑结构的设计;
2)通过SQL语句创建数据库;
3)设计通用模块;
4)设计窗体,达到界面简洁,友好的要求;
5)编写代码,使程序能正确执行;
6)调试美化,提高查询效率。
三、需求分析
图书馆是这样的部门,馆中收藏大量图书供读者借阅,其中图书可分成不同的类别,如自然科学类、社会科学类等;借阅者可分为老师和学生。
不同的借阅者最多可借书的数量和期限不同,如教师最多可借10本,期限为3个月,学生最多可借2本,期限为1个月,无论是老师还是学生,借阅超期都要进行罚款处理。
以上就是图书管理系统所要完成的主要功能。
四、概念结构设计
经分析,本系统涉及到的实体只有读者和图书,二者之间存在借阅和罚款的联系,据此可画出此系统的E-R图。
p
m
q
N
图书馆管理系统的E-R图
其中读者与其属性关系,图书与其属性关系如下图
读者实体与其属性
图书实体与其属性
五、数据库表格
(1)图书表的结构
(2)读者表的结构
(3)借阅表的结构
(4)罚款表的结构
(5)密码表的结构
六、用VB开发应用程序
1配置数据源
利用ODBC数据源管理器配置一个连接到“图书馆”数据库的数据源,名为“图书管理”。
2设计各个窗体
1)设计MDI主窗体
从主窗体中可以打开各个功能的窗口,其中图书馆管理系统的主窗体如下图
2)设计登陆窗体
(1)设计界面如下图
(2)编写程序
PrivateSubCommand1_Click()
DimstrAsString
DimmicountAsInteger
str="select密码from密码表的结构where用户名='"&Text1.Text&"'"
Adodc1.RecordSource=str
Adodc1.Refresh
IfAdodc1.Recordset.EOF=TrueThen
MsgBox"用户名错误,请重新输入",vbExclamation,"警告"
Text1.Text=""
Text1.SetFocus
Else
IfAdodc1.Recordset.Fields("密码")=Text2.TextThen
MDIForm1.Show
UnloadMe
Else
MsgBox"密码错误,请重新输入",vbExclamation,"警告"
Text2.Text=""
Text2.SetFocus
EndIf
EndIf
micount=micount+1
Ifmicount>=3ThenUnloadMe
EndSub
PrivateSubcmdcancel_Click()
UnloadMe
EndSub
3)设计读者管理窗体
(1)设计界面
(2)编写程序
PrivateSubcmdadd_Click()
Adodc1.Recordset.AddNew
cmdadd.Enabled=False
cmddel.Enabled=False
cmdok.Enabled=False
cmdcnacel.Enabled=True
EndSub
PrivateSubcmdcancel_Click()
Adodc1.Refresh
cmdadd.Enabled=True
cmddel.Enabled=True
cmdok.Enabled=False
cmdcancel.Enabled=False
EndSub
PrivateSubcmddel_Click()
X=MsgBox("确实要删除当前记录吗?
",vbYesNo+vbQuestion)
IfX=vbYesThen
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
IfAdodc1.Recordset.EOF=TrueThen
Adodc1.Recordset.MoveLast
EndIf
Else
Adodc1.Refresh
EndIf
EndSub
PrivateSubcmdfirst_Click()
Adodc1.Recordset.MoveFirst
cmdfirst.Enabled=False
cmdpre.Enabled=False
cmdnext.Enabled=True
cmdlast.Enabled=True
EndSub
PrivateSubcmdlast_Click()
Adodc1.Recordset.MoveLast
cmdfirst.Enabled=True
cmdpre.Enabled=True
cmdnext.Enabled=False
cmdlast.Enabled=False
EndSub
PrivateSubcmdnext_Click()
Adodc1.Recordset.MoveNext
cmdfirst.Enabled=True
cmdpre.Enabled=True
IfAdodc1.Recordset.EOF=TrueThen
Adodc1.Recordset.MoveLast
cmdlast.Enabled=False
cmdnext.Enabled=False
EndIf
EndSub
PrivateSubcmdok_Click()
Adodc1.Recordset.Update
cmdadd.Enabled=True
cmddel.Enabled=True
cmdok.Enabled=False
cmdcancel.Enabled=False
EndSub
PrivateSubcmdpre_Click()
Adodc1.Recordset.MovePrevious
cmdnext.Enabled=True
cmdlast.Enabled=True
IfAdodc1.Recordset.BOF=TrueThen
Adodc1.Recordset.MoveFirst
cmdfirst.Enabled=False
cmdpre.Enabled=False
EndIf
EndSub
PrivateSubForm_Load()
cmdfirst.Enabled=False
cmdpre.Enabled=False
cmdnext.Enabled=True
cmdlast.Enabled=True
cmdadd.Enabled=True
cmddel.Enabled=True
cmdok.Enabled=False
cmdcancel.Enabled=False
EndSub
4)设计读者查询窗体
(3)编写程序
PrivateSubCommand1_Click()
DimstrAsString
str="select*from读者表where读者表."&combol.Text&"like'"&Text1.Text&"%'"
Adodc1.RecordSource=str
Adodc1.Refresh
EndSub
PrivateSubCommand2_Click()
UnloadMe
EndSub
PrivateSubForm_Load()
combo1.Text=""
Text1.Text=""
combo1.AddItem"性别"
combo1.AddItem"读者姓名"
combo1.AddItem"是否有超期"
EndSub
5)设计图书管理窗体、图书查询窗体
6)设计借阅管理窗体
(1)设计界面
(2)编写程序
PrivateSubcmdexit_Click()
UnloadMe
EndSub
PrivateSubcmdlend_Click()
Dimst1AsString
Dimst2AsString
Dimst3AsString
DimiAsInteger
st2="select读者类别,是否有超期from读者表的结构where借书证号='"&Trim(Text1)&"'"
Adodc2.RecordSource=st2
Adodc2.Refresh
'有借书证号
IfAdodc2.Recordset.BOF=FalseThen
'读者是教师
IfAdodc2.Recordset.Fields("读者类别")="t"AndAdodc2.Recordset.Fields("是否有超期")="n"Then
'是否超过最多的十本
st1="select*from借阅表where借书证号='"&Trim(Text)&"'"
Adodc1.RecordSource=st1
Adodc1.Refresh
IfAdodc1.Recordset.RecordCount>=10ThenMsgBox"教师借书数量达到最多,不能再借!
"
Else
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("借书证号")=Text1
Adodc1.Recordset.Fields("条形码号")=Text2
Adodc1.Recordset.Fields("借出日期")=str(Date)
Adodc1.Recordset.Fields("归还日期")=Null
Adodc1.Recordset.Update
'在图书表中写入"借阅状态"和"借阅次数"信息
st3="select*from图书表where条形码号='"&Trim(Text2)&"'"
Adodc3.RecordSource=st3
Adodc3.Refresh
Adodc3.Recordset.Fields("借阅状态")="借出"
Adodc3.Recordset.Fields("借阅次数")=Adodc3.Recordset.Fields("借阅次数")+1
Adodc3.Recordset.Update
EndIf
'读者是学生
ElseIfAdodc2.Recordset.Fields("读者类别")="s"AndAdodc2.Recordset.Fields("是否有超期")="n"Then
'是否超过最多的三本
str1="select*from借阅表where借书证号='"&Trim(Text1)&"'"
Adodc1.RecordSource=st1
Adodc1.Refresh
IfAdodc1.Recordset.RecordCount>=3Then
MsgBox"学生借书量达到最多,不能再借!
"
Else
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("借书证号")=Text1
Adodc1.Recordset.Fields("条形码号")=Text2
Adodc1.Recordset.Fields("借出日期")=str(Date)
Adodc1.Recordset.Fields("归还日期")=Null
Adodc1.Recordset.Update
'在图书表中写入“借阅状态”和“借阅次数”信息
st3="select*from图书表where条形码号='"&Trim(Text2)&"'"
Adodc3.RecordSource=st3
Adodc3.Refresh
Adodc3.Recordset.Fields("借阅状态")="借出"
Adodc3.Recordset.Fields("借阅次数")=Adodc3.Recordset.Fields("借阅次数")+1
Adodc3.Recordset.Update
EndIf
Else:
IfAdodc2.Recordset.Fields("是否有超期")="y"ThenMsgBox"该读者有超期书,不能再借书"
EndIf
End
EndSub
PrivateSubcmdreturn_Click()
DimsstAsString
DimssttAsString
Dimsst3AsString
sst="select*from借阅表where条形码号='"&Text2&"'"
Adodc1.RecordSource=sst
Adodc1.Refresh
sstt="select*from读书表where借书证号='"&Adodc1.Recordset.Fields("借书证号")&"'"
Adodc2.RecordSource=sstt
Adodc2.Refresh
'先还书,再罚款
Adodc1.Recordset.Fields("归还日期")=Date
Adodc1.Recordset.Update
MsgBox"还书成功"
'在图书表中写入该书的“在库”信息
sst3="select*from图书馆where条形码号='"&Text2&"'"
Adodc3.RecordSource=sst3
Adodc3.Refresh
Adodc3.Recordset.Fields("借阅状态")="在库"
Adodc3.Recordset.Update
IfAdodc2.Recordset.Fields("读者类别")="t"Then
IfDate-Adodcl.Recordset.Fields("借出日期")>90Then
MsgBox"有超期罚款"
fm_punish.Show
EndIf
ElseIfAdodc2.Recordset.Fields("读者类别")="s"Then
IfDate-Adodcl.Recordset.Fields("借出日期")>30Then
MsgBox"有超期罚款"
fm_punish.Show
EndIf
EndIf
EndSub
EndSub
7)设计罚款管理窗口
(1)设计窗体
(3)编写程序
PrivateSubcmdexit_Click()
UnloadMe
EndSub
PrivateSubcmdpunish_Click()
DimpcountAsInteger
DimiAsInteger
DimsumAsSingle
sum=0
IfAdodc3.Recordset.BOF=FalseThen
pcount=Adodc3.Recordset.RecordCount
EndIf
Fori=1Topcount
sum=sum+Adodc3.Recordset.Fields("超期天数")*0.1
'向罚款表中添加记录
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("借书证号")=Adodc3.Recordset.Fields("借书证号")
Adodc1.Recordset.Fields("条形码号")=Adodc3.Recordset.Fields("条形码号")
Adodc1.Recordset.Fields("处罚日期")=Date
Adodc1.Recordset.Fields("超期天数")=Adodc3.Recordset.Fields("超期天数")
Adodc1.Recordset.Fields("罚款金额")=Adodc3.Recordset.Fields("超期天数")*0.1
Adodc1.Recordset.Update
Adodc3.Recordset.MoveNext
Nexti
Text2=sum&"元"
EndSub
PrivateSubcmdquery_Click()
Dimstr3AsString
str3="select读者表.借书证号,条形码号,读者姓名,借出日期,(month(getdate())-month(借出日期)-3)*30+day(getdate()-day(借出日期))as超期天数"
str3=str3&"from读者表innerjoin借阅表on读者表.借书证号=借阅表.借书证号"
str3=str3+"where借阅表.借书证号='"&Text1&"'and读者表.读者类别='t'andmonth(归还日期)-month(借出日期)>3"
str3=str3+"or读者类别='s'andmonth(归还日期)-month(借出日期)>1"
Adodc3.RecordSource=str3
Adodc3.Refresh
Text2.Text=""
EndSub
七、实验心得与体会
通过此次数据库的课程设计,真正达到了学与用的结合,增强了对数据库方面应用的理解,对自己今后参与开发数据库系统积累了不少经验,在实验过程中,从建立数据开始,对数据库设计理念及思想上有更高的认识,从需求分析,到概念设计和逻辑设计的过度,懂得了不少有关数据库开发过程中的知识,在实验中建表,及其关系模式,关系代数的建立及理解,增强了自己在数据库中应用SQL语言的灵活性。
在学习过程中,我也上网查了不少资料,也看了一些别人设计的图书馆管理系统的设计报告,学以致用,自我创新,独立完成了这份自己的报告,从中从学到用,从用又到学,不断修改,系统更新。
虽然不能达到完善系统,但也做到了尽善尽美,加强理论学习对完善系统会有很多帮助,知识是无限的,我以后还会在这个领域不断的进行探索,掌握更多的知识。
参考资料:
基于VB和SQL的数据库编程技术刘志妩、马秀丽清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告 图书 管理 系统