《数据库实验报告图书管理系统.docx》由会员分享,可在线阅读,更多相关《数据库实验报告图书管理系统.docx(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、图书馆管理系统的设计一、实验背景:在数据库应用系统的编程中,管理人员需要经常从数据库中查询数据。复杂组合查询,特别是多种数据类型的复杂条件动态组合查询是一个设计难度大,但很能方便用户的功能模块,在系统开发时要尽量满足用户的需要,就必须考虑多类型-多条件综合模糊查询功能,提高应用系统的智能性。消费者在选择市场产品时往往面临数据量大、删选难、数据不全面等问题,多类型-多条件综合模糊查询正式基于此设计的。二、实验内容:以SQL SERVER2008为后台数据库,以Visual Basic为前台开发工具,完成一个以人事管理系统为实例或结合相关专业方向的查询界面友好的多类型-多条件综合模糊查询应用模块的
2、设计与开发,以满足用户复杂查询的需求,具体内容包括:1)数据库概念结构和逻辑结构的设计;2)通过SQL语句创建数据库;3)设计通用模块;4)设计窗体,达到界面简洁,友好的要求;5)编写代码,使程序能正确执行;6)调试美化,提高查询效率。三、需求分析图书馆是这样的部门,馆中收藏大量图书供读者借阅,其中图书可分成不同的类别,如自然科学类、社会科学类等;借阅者可分为老师和学生。不同的借阅者最多可借书的数量和期限不同,如教师最多可借10本,期限为3个月,学生最多可借2本,期限为1个月,无论是老师还是学生,借阅超期都要进行罚款处理。以上就是图书管理系统所要完成的主要功能。四、概念结构设计经分析,本系统涉
3、及到的实体只有读者和图书,二者之间存在借阅和罚款的联系,据此可画出此系统的E-R图。罚款金额读者借出日期 p m超期天数罚款借阅 处罚日期图书归还日期 q N 图书馆管理系统的E-R图其中读者与其属性关系,图书与其属性关系如下图读者类别读者姓名性别是否有超期借书证号 读者 读者实体与其属性书名条形码号作者图书编号出版社 图书借阅次数借阅状态类别出版日期 图书实体与其属性五、数据库表格(1) 图书表的结构(2) 读者表的结构(3) 借阅表的结构(4) 罚款表的结构(5) 密码表的结构六、用VB开发应用程序1配置数据源利用ODBC数据源管理器配置一个连接到“图书馆”数据库的数据源,名为“图书管理”
4、。2设计各个窗体1) 设计MDI主窗体从主窗体中可以打开各个功能的窗口,其中图书馆管理系统的主窗体如下图2) 设计登陆窗体(1) 设计界面如下图(2) 编写程序Private Sub Command1_Click()Dim str As StringDim micount As Integerstr = select 密码 from 密码表的结构 where 用户名= & Text1.Text & Adodc1.RecordSource = strAdodc1.RefreshIf Adodc1.Recordset.EOF = True ThenMsgBox 用户名错误,请重新输入, vbExc
5、lamation, 警告Text1.Text = Text1.SetFocusElseIf Adodc1.Recordset.Fields(密码) = Text2.Text ThenMDIForm1.ShowUnload MeElseMsgBox 密码错误,请重新输入, vbExclamation, 警告Text2.Text = Text2.SetFocusEnd IfEnd Ifmicount = micount + 1If micount = 3 Then Unload MeEnd SubPrivate Sub cmdcancel_Click()Unload MeEnd Sub3) 设计读
6、者管理窗体(1) 设计界面(2) 编写程序Private Sub cmdadd_Click()Adodc1.Recordset.AddNewcmdadd.Enabled = Falsecmddel.Enabled = Falsecmdok.Enabled = Falsecmdcnacel.Enabled = TrueEnd SubPrivate Sub cmdcancel_Click()Adodc1.Refreshcmdadd.Enabled = Truecmddel.Enabled = Truecmdok.Enabled = Falsecmdcancel.Enabled = FalseEnd
7、 SubPrivate Sub cmddel_Click()X = MsgBox(确实要删除当前记录吗?, vbYesNo + vbQuestion)If X = vbYes ThenAdodc1.Recordset.DeleteAdodc1.Recordset.MoveNextIf Adodc1.Recordset.EOF = True ThenAdodc1.Recordset.MoveLastEnd IfElseAdodc1.RefreshEnd IfEnd SubPrivate Sub cmdfirst_Click()Adodc1.Recordset.MoveFirstcmdfirst.
8、Enabled = Falsecmdpre.Enabled = Falsecmdnext.Enabled = Truecmdlast.Enabled = TrueEnd SubPrivate Sub cmdlast_Click()Adodc1.Recordset.MoveLastcmdfirst.Enabled = Truecmdpre.Enabled = Truecmdnext.Enabled = Falsecmdlast.Enabled = FalseEnd SubPrivate Sub cmdnext_Click()Adodc1.Recordset.MoveNextcmdfirst.En
9、abled = Truecmdpre.Enabled = TrueIf Adodc1.Recordset.EOF = True ThenAdodc1.Recordset.MoveLastcmdlast.Enabled = Falsecmdnext.Enabled = FalseEnd IfEnd SubPrivate Sub cmdok_Click()Adodc1.Recordset.Updatecmdadd.Enabled = Truecmddel.Enabled = Truecmdok.Enabled = Falsecmdcancel.Enabled = FalseEnd SubPriva
10、te Sub cmdpre_Click()Adodc1.Recordset.MovePreviouscmdnext.Enabled = Truecmdlast.Enabled = TrueIf Adodc1.Recordset.BOF = True ThenAdodc1.Recordset.MoveFirstcmdfirst.Enabled = Falsecmdpre.Enabled = FalseEnd IfEnd SubPrivate Sub Form_Load()cmdfirst.Enabled = Falsecmdpre.Enabled = Falsecmdnext.Enabled =
11、 Truecmdlast.Enabled = Truecmdadd.Enabled = Truecmddel.Enabled = Truecmdok.Enabled = Falsecmdcancel.Enabled = FalseEnd Sub4) 设计读者查询窗体(3) 编写程序Private Sub Command1_Click()Dim str As Stringstr = select *from 读者表 where 读者表. & combol.Text & like & Text1.Text & %Adodc1.RecordSource = strAdodc1.RefreshEnd
12、SubPrivate Sub Command2_Click()Unload MeEnd SubPrivate Sub Form_Load()combo1.Text = Text1.Text = combo1.AddItem 性别combo1.AddItem 读者姓名combo1.AddItem 是否有超期End Sub5) 设计图书管理窗体、图书查询窗体6) 设计借阅管理窗体(1) 设计界面(2) 编写程序Private Sub cmdexit_Click()Unload MeEnd SubPrivate Sub cmdlend_Click()Dim st1 As StringDim st2
13、As StringDim st3 As StringDim i As Integerst2 = select 读者类别,是否有超期from 读者表的结构 where 借书证号= & Trim(Text1) & Adodc2.RecordSource = st2Adodc2.Refresh有借书证号If Adodc2.Recordset.BOF = False Then读者是教师If Adodc2.Recordset.Fields( 读者类别 ) = t And Adodc2.Recordset.Fields(是否有超期) = n Then是否超过最多的十本st1 = select *from
14、借阅表 where 借书证号= & Trim(Text) & Adodc1.RecordSource = st1Adodc1.RefreshIf Adodc1.Recordset.RecordCount = 10 Then MsgBox 教师借书数量达到最多,不能再借!ElseAdodc1.Recordset.AddNewAdodc1.Recordset.Fields(借书证号) = Text1Adodc1.Recordset.Fields(条形码号) = Text2Adodc1.Recordset.Fields(借出日期) = str(Date)Adodc1.Recordset.Fields
15、(归还日期) = NullAdodc1.Recordset.Update在图书表中写入借阅状态和借阅次数信息st3 = select * from 图书表 where 条形码号= & Trim(Text2) & Adodc3.RecordSource = st3Adodc3.RefreshAdodc3.Recordset.Fields(借阅状态) = 借出Adodc3.Recordset.Fields(借阅次数) = Adodc3.Recordset.Fields(借阅次数) + 1Adodc3.Recordset.UpdateEnd If读者是学生ElseIf Adodc2.Recordse
16、t.Fields(读者类别) = s And Adodc2.Recordset.Fields(是否有超期) = n Then是否超过最多的三本str1 = select * from 借阅表 where 借书证号= & Trim(Text1) & Adodc1.RecordSource = st1Adodc1.RefreshIf Adodc1.Recordset.RecordCount = 3 ThenMsgBox 学生借书量达到最多,不能再借!ElseAdodc1.Recordset.AddNewAdodc1.Recordset.Fields(借书证号) = Text1Adodc1.Reco
17、rdset.Fields(条形码号) = Text2Adodc1.Recordset.Fields(借出日期) = str(Date)Adodc1.Recordset.Fields(归还日期) = NullAdodc1.Recordset.Update在图书表中写入“借阅状态”和“借阅次数”信息st3 = select * from 图书表 where 条形码号= & Trim(Text2) & Adodc3.RecordSource = st3Adodc3.RefreshAdodc3.Recordset.Fields(借阅状态) = 借出Adodc3.Recordset.Fields(借阅次
18、数) = Adodc3.Recordset.Fields(借阅次数) + 1Adodc3.Recordset.UpdateEnd IfElse: If Adodc2.Recordset.Fields(是否有超期) = y Then MsgBox 该读者有超期书,不能再借书End IfEndEnd SubPrivate Sub cmdreturn_Click()Dim sst As StringDim sstt As StringDim sst3 As Stringsst = select * from 借阅表 where 条形码号= & Text2 & Adodc1.RecordSource
19、= sstAdodc1.Refreshsstt = select*from读书表where借书证号= & Adodc1.Recordset.Fields(借书证号) & Adodc2.RecordSource = ssttAdodc2.Refresh先还书,再罚款Adodc1.Recordset.Fields(归还日期) = DateAdodc1.Recordset.UpdateMsgBox 还书成功在图书表中写入该书的“在库”信息sst3 = select * from 图书馆where 条形码号= & Text2 & Adodc3.RecordSource = sst3Adodc3.Ref
20、reshAdodc3.Recordset.Fields(借阅状态) = 在库Adodc3.Recordset.UpdateIf Adodc2.Recordset.Fields(读者类别) = t ThenIf Date - Adodcl.Recordset.Fields(借出日期) 90 ThenMsgBox 有超期罚款fm_punish.ShowEnd IfElseIf Adodc2.Recordset.Fields(读者类别) = s ThenIf Date - Adodcl.Recordset.Fields(借出日期) 30 ThenMsgBox 有超期罚款fm_punish.ShowE
21、nd IfEnd IfEnd SubEnd Sub7) 设计罚款管理窗口(1)设计窗体(3) 编写程序Private Sub cmdexit_Click()Unload MeEnd SubPrivate Sub cmdpunish_Click()Dim pcount As IntegerDim i As IntegerDim sum As Singlesum = 0If Adodc3.Recordset.BOF = False Thenpcount = Adodc3.Recordset.RecordCountEnd IfFor i = 1 To pcountsum = sum + Adodc3
22、.Recordset.Fields(超期天数) * 0.1向罚款表中添加记录Adodc1.Recordset.AddNewAdodc1.Recordset.Fields(借书证号) = Adodc3.Recordset.Fields(借书证号)Adodc1.Recordset.Fields(条形码号) = Adodc3.Recordset.Fields(条形码号)Adodc1.Recordset.Fields(处罚日期) = DateAdodc1.Recordset.Fields(超期天数) = Adodc3.Recordset.Fields(超期天数)Adodc1.Recordset.Fie
23、lds(罚款金额) = Adodc3.Recordset.Fields(超期天数) * 0.1Adodc1.Recordset.UpdateAdodc3.Recordset.MoveNextNext iText2 = sum & 元End SubPrivate Sub cmdquery_Click()Dim str3 As Stringstr3 = select 读者表.借书证号,条形码号,读者姓名,借出日期,(month(getdate()-month(借出日期)-3)*30+day(getdate()-day(借出日期) as 超期天数 str3 = str3 & from 读者表 inn
24、er join 借阅表 on 读者表.借书证号=借阅表.借书证号 str3 = str3 + where 借阅表.借书证号= & Text1 & and 读者表.读者类别=tand month (归还日期) - month(借出日期)3 str3 = str3 + or 读者类别 = sand month (归还日期)-month(借出日期) 1 Adodc3.RecordSource = str3 Adodc3.Refresh Text2.Text = End Sub七、实验心得与体会 通过此次数据库的课程设计,真正达到了学与用的结合,增强了对数据库方面应用的理解,对自己今后参与开发数据库系
25、统积累了不少经验,在实验过程中,从建立数据开始,对数据库设计理念及思想上有更高的认识,从需求分析,到概念设计和逻辑设计的过度,懂得了不少有关数据库开发过程中的知识,在实验中建表,及其关系模式,关系代数的建立及理解,增强了自己在数据库中应用SQL语言的灵活性。 在学习过程中,我也上网查了不少资料,也看了一些别人设计的图书馆管理系统的设计报告,学以致用,自我创新,独立完成了这份自己的报告,从中从学到用,从用又到学,不断修改,系统更新。虽然不能达到完善系统,但也做到了尽善尽美,加强理论学习对完善系统会有很多帮助,知识是无限的,我以后还会在这个领域不断的进行探索,掌握更多的知识。参考资料:基于 VB和SQL的数据库编程技术 刘志妩、马秀丽 清华大学出版社