《数据库系统原理课程报告.doc》由会员分享,可在线阅读,更多相关《数据库系统原理课程报告.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库系统原理课程报告课题名称:小型图书管理系统的设计实现课题负责人名(学号):赵磊() 指导教师: 陈鹏评阅成绩: 评阅意见: 提交报告时间:2007 年12 月 9 日小型图书管理系统的设计实现计算机科学与技术 专业学生 赵磊 指导老师 陈鹏摘要 人工的图书管理都显得十分的落后而且效率低下,尤其在查询方面效率低。为了适应现代化的环境,许多的管理事务都由电脑来管理,从而提高了管理的速率,效率。而现在的图书管理系统已经完全可以用电脑来管理,但是由于原来的设计时的各种局限,使得许多系统功能不很完备。本次设计就是针对现存以上的各种缺点,将在现有的管理软件的基础上作很大程度的改善,使图书管理系统能够
2、快捷的实施一些管理功能。本人结合开入式图书馆的要求,对MS SQL Server2000数据库管理系统、SQL语言原理、PowerBuilder应用程序设计进行了较深入的学习和应用,主要完成对图书管理系统的需求分析、功能模块划分、数据库模式分析,并由此设计了数据库结构和应用程序。该软件针服务范围及工作特点,设计功能模块包括了图书管理的主要服务工作,可以全面实现对图书馆的编目、检索、统计等服务的计算机信息管理。它能使其从繁重的工作中解脱出来,大大减轻了工作量,减少人为的工作失误,全面提高图书的管理效率及服务质量,从而使图书管理水平和服务水平跃上一个新的台阶。关键词:图书馆 管理 信息 数据库试验
3、目的采用C/S模式完成一个小型的图书管理系统;完成从需求分析、数据模式设计到编码实现、系统调试的所有流程;通过此一图书管理系统的实现,在实践中掌握数据库系统设计的特点、方法和步骤。试验环境SQL Server 2000 桌面版Power BuilderER图表结构定义book: 图书表Primary key (图书编号)属性数据类型是否可为空是否主码外码说明图书编号decimal(10)NY图书编号isbnVarchar(20)NNBook_info.isbnISBN图书状态IntNNState.编号图书状态存放位置IntNNPlace.编号存放位置图书名称Varchar(40)NN图书名称B
4、ook_info 图书信息表 Primary key (图书编号)属性数据类型是否可为空是否主码外码说明Isbnvarchar(20)NYISBN图书名称Varchar(40)NN图书名称图书作者Varchar(20)YN图书作者关键字Varchar(20)YN关键字简介Varchar(50)YN简介出版社名称Varchar(20)YN出版社名称总本数IntNN总本数在馆数量IntNN在馆数量出版时间DatetimeNN出版时间Book_borrow 借书表 Primary key (图书编号,读者,操作员)属性数据类型是否可为空是否主码外码说明图书编号decimalNYbook. 图书编号图
5、书编号读者DecimalNYReader.读者编号读者编号操作员VarcharNYLibrarian.登录号操作员编号借书时间DatetimeNN结束时间还书时间DatetimeNN还书时间图书名称Varchar(40)NN图书名称Depart 系信息表 Primary key (编号)属性数据类型是否可为空是否主码外码说明编号IntNY系号值Varchar(10)NN系名grade 年级信息表 Primary key (编号)属性数据类型是否可为空是否主码外码说明编号IntNY年级编号值Varchar(10)NN年级名Place 地点信息表 Primary key (编号)属性数据类型是否可
6、为空是否主码外码说明编号IntNY放置地点号值Varchar(10)NN放置地点名state 书状态信息表 Primary key (编号)属性数据类型是否可为空是否主码外码说明编号IntNY书状态号值Varchar(10)NN书状态名Librarian 图书管理员信息表 Primary key (登录名)属性数据类型是否可为空是否主码外码说明登录名varchar(10)NY登录名密码Varchar(10)NN密码权限IntNN权限姓名Varchar(10)NN姓名性别IntNN性别职务Varchar(10)YN职务出生时间DatetimeYN出生时间reader 读者信息表 Primary
7、key (编号)属性数据类型是否可为空是否主码外码说明编名varchar(10)NY读者登录名密码Varchar(10)NN密码类别IntNNReaderkind.编号读者类别姓名Varchar(10)NN姓名允许借书量IntNN允许借书量已借书量IntNN已借书量性别IntNN性别年级IntYNGrade.编号年级编号系IntYNDepart.编号系编号电话Varchar(15)YN电话号码登记时间DatetimeYN登记时间readerkind: 读者类型表Primary key (编号)属性数据类型是否可为空是否主码外码说明编号IntNY图书编号值Varchar(10)NN读者类型名称允
8、许借书量IntNN图书状态借阅天数IntNN借阅天数图书管理系统程序功能模块图图书维护读者维护查询借书还书管理员维护图书位置维护图书状态维护书目信息维护图书信息维护年级信息维护系信息维护读者类型维护读者信息维护还书借书读者信息查询图书查询程序框架流程图开始开始读者提供图书编号读者提供图书编号和读者编号图书管理员查找该书借阅信息图书管理员检查该读者证读者是否有书未还N拒绝借书,读者取回借书证图书是否过期Y显示欠费天数,读者交罚款YYN读者借阅额是否满额图书管理员修改借书信息,读者信息,图书信息NN用户是否为本人读者取回借书证Y结束图书管理员查找该书基本信息2还书流程图N图书是否能借出Y图书管理员
9、登记借书信息,读者取走图书、借书证结束1借书流程图核心代码1.借书clicked()代码integer li_amount, li_i, li_id,li_bookdatetime ldt_return,ldt_now string ls_name,ls_books=,ls_bookname,ls_isbnselect getdate() into :ldt_now from book; li_amount=dw_3.rowcount()li_id=dw_2.getitemnumber(1,编号)li_book=dw_1.getitemnumber(1,图书编号)ls_bookname=dw_
10、1.getitemstring(1,图书名称)ls_isbn=dw_1.getitemstring(1,isbn)ls_name=dw_2.getitemstring(1,姓名)for li_i=1 to li_amountldt_return=dw_3.getitemdatetime(li_i,归还时间)if date(ldt_return)today() thenls_bookname=dw_3.getitemstring(1,图书名称)ls_books=ls_books+ls_bookname+nend ifnextif ls_books then messagebox(错误,读者: +
11、 ls_name+有逾期的书,不能借书!n,Stopsign!)returnend ifinteger li_readerkind,li_maxli_readerkind=dw_2.getitemnumber(1,类别)select 允许借书量 into: li_max from readerkind where 编号=:li_readerkind;if li_amount+1li_max thenmessagebox(错误!,读者:+ls_name+已达到最大借书量,请先归还再借!)return end ifstring ls_password,ls_reboolean lb_pwok=fa
12、lsels_password=dw_2.getitemstring (1,密码)do while ii_errtimes=3openwithparm(w_password,ls_name)ls_re=Message.stringparmif ls_re= thenreturnend ifif ls_repw+ls_password thenii_errtimes+;messagebox(错误!,读者输入密码不正确!+n已错误输入+string(ii_errtimes)+次,exclamation!)if ii_errtimes=3 thenem_1.text=em_2.text=this.en
13、abled=falsemessagebox(错误!,读者输入不正确密码三次,借书取消,exclamation!)returnend ifelseexitend iflooplong ll_bookidinteger li_state,li_lenddaysselect 编号 into : li_state from statewhere 值=已借出;dw_1.setitem(1,图书状态,li_state)select 借阅天数 into: li_lenddays from readerkind where 编号=:li_readerkind;ldt_return=datetime(Relat
14、iveDate(today(),li_lenddays)insert into book_borrow(book_borrow.图书编号,book_borrow.读者,book_borrow.操作员,book_borrow.借出时间,book_borrow.归还时间,book_borrow.图书名称)values(:li_book,:li_id,:gs_user,:ldt_now,:ldt_return,:ls_bookname);update book_infoset 在馆数量=在馆数量-1where book_info.isbn=:ls_isbn;if dw_1.update()1 the
15、nmessagebox(错误!,更改图书出库表出现错误!借书终止!,stopsign!)rollback;returnelse li_amount=li_amount+1dw_2.setitem(1,已借书量,li_amount)if dw_2.update()1 thenmessagebox(错误!,更改用户信息出现错误!借书终止!,stopsign!)rollback;returnelsecommit;dw_2.retrieve(li_id)ls_bookname=dw_1.getitemstring(1,图书名称)messagebox(成功,读者:+ls_name+借阅图书成功!)end
16、 if end ifdw_3.retrieve(li_id)this.enabled=falseem_1.setfocus()return2.还书clicked()代码long ll_readerid,ll_bookidinteger li_state,li_placestring ls_bookname,ls_isbndatetime ldt_time,ldt_nowselect 编号 into : li_state from statewhere 值=在架上;dw_1.setitem(1,图书状态,li_state)ll_bookid=dw_1.getitemnumber(1,图书编号)s
17、elect book_borrow.归还时间 into: ldt_time from book_borrow where book_borrow.图书编号=:ll_bookid;select getdate() into : ldt_now from book;if ldt_timeldt_now thenmessagebox(此书以过期,此书以过期+string(daysafter(date(ldt_now),date(ldt_time)+天)end ifls_isbn=dw_1.getitemstring(1,isbn)setnull(li_state)li_place=dw_1.geti
18、temnumber(1,存放位置)openwithparm(w_return_place,string(li_place)li_place=integer(message.stringparm)dw_1.setitem(1,存放位置,li_place)select book_borrow.读者 into :ll_readerid from book_borrow where book_borrow.图书编号=:ll_bookid;delete from book_borrow where book_borrow.图书编号=:ll_bookid;update book_infoset 在馆数量=
19、在馆数量+1where book_info.isbn=:ls_isbn;if dw_1.update()1 thenmessagebox(错误!,更改图书出现错误!还书终止!,stopsign!)rollback;returnelse update reader set 已借书量=已借书量-1where 编号=:ll_readerid;if sqlca.sqlcode0 thenmessagebox(错误!,更改用户信息错误!还书终止!,stopsign!)rollback;returnelsecommit;ls_bookname=dw_1.getitemstring(1,图书名称)messa
20、gebox(成功,图书:归还成功!)end if end ifthis.enabled=falseem_1.setfocus()em_1.selecttext(1,10)核心Data Window Object 的SQL语句1.查询相关书籍信息SQLls_sqlstring ls_isbndatetime ldt_timeint ls_booknum; ls_sql= SELECT book_info.图书名称,book_info.图书作者,+ book_info.出版社名称, book_info.isbn, book_info.在馆数量, book_info.总本数, book_info.出
21、版时间 +FROM book_info where 1=1 if em_1.textnone and em_1.textthenls_booknum=integer(em_1.text)select isbn into : ls_isbn from book where 图书编号=:ls_booknum;if ls_isbn = none or ls_isbn= then ls_sql=ls_sql+and 1=0 messagebox(提示,未找到相关书号) dw_1.setsqlselect(ls_sql) dw_1.retrieve() dw_2.insertrow(0) return
22、end if ls_sql=ls_sql+and (book_info.isbn=+ls_isbn+)end if if cbx_1.checked=true thenif sle_1.textthenls_sql=ls_sql+and (book_info.isbn = +sle_1.text +)end ifif sle_2.textthenls_sql=ls_sql+and (book_info.图书名称 like +sle_2.text +%)end ifif sle_3.textthenls_sql=ls_sql+and (book_info.图书作者 like +sle_3.tex
23、t +%)end ifif sle_4.textthenls_sql=ls_sql+and (book_info.关键字 like +sle_4.text +%)end ifif sle_5.textthenls_sql=ls_sql+and (book_info.出版社名称 like +sle_5.text +%)end ifelse if sle_1.textthenls_sql=ls_sql+and (book_info.isbn = +sle_1.text +)end ifif sle_2.textthenls_sql=ls_sql+and (book_info.图书名称 like +
24、sle_2.text +)end ifif sle_3.textthenls_sql=ls_sql+and (book_info.图书作者 like +sle_3.text +)end ifif sle_4.textthenls_sql=ls_sql+and (book_info.关键字 like +sle_4.text +)end ifif sle_5.textthenls_sql=ls_sql+and (book_info.出版社名称 like +sle_5.text +)end ifend ifif em_2.textnone and em_2.textthenif em_2.GetDa
25、ta(ldt_time)=1 then /正确获取了数据 ls_sql=ls_sql+and (book_info.出版时间 =+string(ldt_time) +)else Beep(2)end ifend ifdw_1.setsqlselect(ls_sql)dw_1.retrieve()dw_2.insertrow(0)2.所有超期用户查询SQLstring ls_sqlls_sql=dw_1.GetSQLSelect ( )dw_1.ModIfy(DataWindow.table.select=select reader.编号, reader.姓名, reader.密码, reade
26、r.类别, reader.允许借书量, reader.已借书量, reader.性别, reader.电话, reader.登记时间, reader.年级, reader.系 from reader where reader.编号 in (select book_borrow.读者 from book_borrow where 归还时间getdate() )messagebox(,dw_1.retrieve()实验总结经过一个多月的制作,设计系统实现对图书信息的管理的维护,主要实现了数据的输入、查询、修改、删除等一系列功能,功能方面,包括添加或删除用户,保存信息,更新信息等系统数据采用MS S
27、QL Server2000数据库系统作为底层结构,基于C/S体系结构设计完成,具备了很强的稳定性、移植性、扩充性和安全性。并且数据库中所有的库表结构都是符合3nf的要求,数据冗余较少。使得底层对数据库的操作也因此而显得更为合理和快捷。系统的运行效率大为提高。因此系统的运行可靠性的。系统完全采用图形户用户操作界面,能让用户很容易了解和掌握系统的使用方法。这使得系统具备了很好的交互性和可操作性。在功能的界面实现方面,系统采用菜单式操作和命令按钮操作相结合的方式,使操作非常的简单、方便。系统在安全性方面的控制管理员登陆窗口,使非权限不同的人员进入不同的系统。从而保证了系统的安全性。在这次设计中,涉及
28、到了一个软件设计开发过程中的每一个环节,完成从需求分析、数据模式设计到编码实现、系统调试的所有流程;通过图书管理系统的实现,在实践中掌握数据库系统设计的特点、方法和步骤,也正是这种全方位的接触,让我对一个软件的设计开发过程有了更深的了解。与此同时,本人也意识到在如下方面,系统可以进行完善和扩充:1.本系统实现条形码处理功能2.增加读者对图书的预约和续借功能3.增加读者的历史借书记录功能4.增加对书籍的批量入库和批量出库功能在以后学习和工作中,本人将吸取此次系统设计实现过程中的经验和教训,提高自己的专业水平。参考文献1 数据库系统概论 王珊高等教育出版社2 数据库系统导论 J.Date 机械工业出版社3 PowerBuilder管理信息系统项目开发实践 王龙 科学出版社4 PowerBuilder完全解析郭宝利电子工业出版社