1、图书馆管理系统设计与实现目 录一、需求分析11.1 需求概述11.2 功能分析11.3开发平台21.4数据库需求分析2二、数据库逻辑设计32.1 ER图32.2 将E-R模型转换为关系模型42.2 将关系模型转化为表结构42.2.1用户信息表42.2.1图书信息表52.2.1借阅登记表6三、数据库物理设计73.1 索引73.2 视图73.3 安全机制8四、应用程序设计94.1 管理员功能模块94.1.1 系统管理模块94.1.2 借阅管理模块。94.1.3 图书管理模块104.2.读者模块104.2.1 读者信息管理模块104.2.2 图书检索模块104.3 界面设计11五、测试和运行13六、
2、总结14一、需求分析1.1 需求概述图书馆在正常运营中面对大量书籍、读者信息以及两者间相互联系产生的借书信息、还书信息。现有的人工记录方法既效率低又错误过多,大大影响了图书馆的正常管理工作。因此需要对书籍资源、读者资源、借书信息、还书信息、挂失信息进行管理,及时了解各个环节中信息的变更,有利于管理效率的提高。一个图书馆有若干个图书管理员,每个管理员用唯一的编号标识,并作为其身份验证的用户名,管理员的其他信息主要包括密码、姓名等。一个图书馆有若干书籍由国标书号(ISBN)惟一标识。书籍需要记录的其他主要信息有书名、作者、出版社、出版年限、价格、图书类型、索书号、馆藏位置等。在从图书馆借阅图书之前
3、,读者必须进行有效的注册,包括读者编号、类型、姓名、性别、登陆密码等。读者编号惟一标识读者身份。可以将读者加入黑名单,加入黑名单的读者不能再次借书。读者归还图书后需保留借阅历史记录,其中包括的信息有图书编号、读者编号、借阅日期、归还日期等。图书丢失须进行挂失登记, 将原有借阅记录状态改为已挂失并且添加丢失日期等信息。1.2 功能分析 用户信息管理(用户信息包括管理员及读者信息)添加用户信息删除用户信息修改用户信息查询用户信息修改用户密码 图书信息管理添加图书信息删除图书信息修改图书信息查询图书信息 图书借阅管理添加借阅信息修改借阅信息查询借阅信息图书挂失登记1.3开发平台开发工具:eclips
4、e + JDK1.6 + Struts2.3 + Spring3.2 + MyBatis3.2开发语言:Java、Python数 据 库:MySQL 5.0系统环境:Windows 7 + Tomcat 71.4数据库需求分析 用户信息:用户编号、账号、密码、姓名、性别、员工号/学号、年级、用户类型、用户状态 图书信息:图书编号、书名、副标题、原书名、封面、作者、译者、出版社、页数、价格、装帧、馆藏位置、出版日期、目录、作者简介、图书简介、入库日期、豆瓣评分、图书状态 借阅信息:操作员编号、读者编号、图书编号、借阅日期、借阅天数、归还日期、挂失日期、备注、借阅状态二、数据库逻辑设计2.1 ER
5、图图1 图书馆管理系统ER模型图上图是图书馆管理系统的概念模型的ER图,涉及到的实体集有:管理员实体集:具有属性管理员编号、账号、密码、员工号、姓名、性别、状态。读者实体集:具有属性读者编号、账号、密码、学号、姓名、性别、状态。图书实体集:具有属性图书编号、名称、副标题、原名、作者、译者、ISBN、价格、页数、装帧、馆藏位置、出版社、出版日期、作者简介、目录、图书简介、封面、入库日期、状态。借阅记录实体集:具有属性借阅编号、操作者(管理员)、借阅者(读者)、所借图书、借阅日期、借阅天数、归还日期、丢失日期、备注、状态。一个读者可以借阅多本图书,一个操作员可以登记多个图书借阅记录,管理员、读者及
6、图书是M:N:P多对多的关系。为简化数据库设计,不在重复设置丢失表,读者丢失图书时,借阅记录转化为丢失记录,借阅记录中状态设为2的为丢失记录。同理将管理员表和读者表合二为一,增加用户类型字段,用户类型为0表示读者信息,用户类型为1表示管理员信息。2.2 将E-R模型转换为关系模型(1) 管理员实体集可以转换为关系管理员(编号,账号,密码,员工号,姓名,性别,状态)(2) 读者实体集可以转换为关系读者(编号、账号、密码、学号、姓名、性别、状态)(3) 图书实体集可以转换为关系图书(编号、名称、副标题、原名、作者、译者、ISBN、价格、页数、装帧、馆藏位置、出版社、出版日期、作者简介、目录、图书简
7、介、封面、入库日期、状态)(4) 借阅实体集可以转换为关系借阅记录(编号、操作者、借阅者、所借图书、借阅日期、借阅天数、归还日期、丢失日期、备注、状态)2.2 将关系模型转化为表结构2.2.1用户信息表n 表 名:usern 功能描述:记录管理员、读者信息n 字段说明:字段名称类型PFM说明useridint(11)用户编号,自增usernamevarchar(30)账号passwordvarchar(30)密码realnamevarchar(30)姓名sexvarchar(4)性别employeeidvarchar(30)员工号/学号maxnumint(11)最大可借数目(预留)borrow
8、ednumint(11)已借数目(预留)gradevarchar(50)年级usertypeint(11)类型,0读者;1管理员statusint(11)状态,0正常;1失效2.2.1图书信息表n 表 名:bookn 功能描述:记录图书信息n 字段说明:字段名称类型PFM说明bookidint(11)图书编号,自增booknamevarchar(255)书名subheadingvarchar(512)副标题oldnamevarchar(512)原名thumbvarchar(255)封面bookconcernvarchar(255)出版社pagesvarchar(40)页数pricevarcha
9、r(40)价格boundvarchar(40)装帧authorvarchar(255)作者translatorvarchar(255)译者isbnvarchar(40)ISBN号pubdatevarchar(20)发布年份scoredecimal(4)评分catalogtext(0)目录authorintrotext(0)作者简介descriptiontext(0)简介locationvarchar(100)馆藏位置adddatedate(0)入库日期statusint(11)状态: 0 正常可借 1 已借出 2已挂失2.2.1借阅登记表n 表 名:borrown 功能描述:记录图书借阅、图书
10、归还、图书挂失等信息n 字段说明:字段名称类型PFM说明borrowidint(11)借阅流水号,自增borroweridint(11)借阅者编号(外键user表)bookidint(11)图书编号(外键book表)operatoridint(11)操作员编号(外键user表)borrowdatedate借阅日期borrowdaysint(11)借阅天数returndatedate归还日期losedatedate丢失日期remarktext备注statusint(11)状态,0未归还 1已归还 2已挂失三、数据库物理设计3.1 索引表建立索引的列原因useruserid主键,搜索条件usern
11、ame搜索条件employeeid搜索条件bookbookid主键,搜索条件isbn搜索条件status搜索条件borrowborrowid主键,搜索条件operatorid外键,搜索条件borrowerid外键,搜索条件bookid外键,搜索条件status搜索条件3.2 视图1) 该系统需经常查询某个读者当前借阅书刊的详细信息,为简化多表查询,故建立视图view_borrow,该视图定义如下:CREATE view view_borrowasselect borrow.borrowid AS borrowid,borrow.borrowerid AS borrowerid,borrow.b
12、ookid AS bookid,borrow.operatorid AS operatorid,borrow.borrowdate AS borrowdate,borrow.borrowdays AS borrowdays,borrow.returndate AS returndate,borrow.remark AS remark,borrow.status AS status,book.bookname AS bookname,book.isbn AS isbn,borrower.realname AS borrowername,borrower.employeeid AS employe
13、eid,operator.realname AS operatorname from (borrow join book) join user borrower) join user operator) where (borrow.bookid = book.bookid) and (borrow.borrowerid = borrower.userid) and (borrow.operatorid = operator.userid)3.3 安全机制1) 系统安全并没有给每个数据库用户分配一个认证标识,均使用超级用户root连接数据库,数据库用户所能做的操作在应用程序中加以控制,来保证系统
14、安全。2) 数据安全基本上没有用户对基本表和视图操作的权限控制,这些均在应用程序中加以控制,来保证数据安全。四、应用程序设计4.1 管理员功能模块图2 图书馆管理系统功能模块4.1.1 系统管理模块用户查询,根据用户编号、账号、姓名、工号、学号、类型、状态检索用户详细信息; 添加新用户时,系统自动生成用户编号,输入用户的其他相关信息,提交即可添加新用户。删除读者时,若该读者存在借阅图书未还的情况,则系统提示暂无法删除。4.1.2 借阅管理模块。功能包括检索借书登记,还书登记和书刊挂失登记。1)借书登记读者借阅图书时,管理员输入读者编号,可查询读者的详细信息;输入要借阅书刊的编号或者ISBN号,
15、可核实该书的详细信息;点击提交借书请求。结束成功后,该读者当前借阅信息将添加新借阅书刊,令管理员方便的核实提交是否成功。以下几种情况任意一种情况发生,读者都暂时无法借书:该读者当前借阅量已达最大借阅量;该读者有借阅图书已超期未归还;该读者被加入黑名单的。2)还书登记读者归还书刊时,只需输入书刊号,可查询该书的借阅信息,点击还书提交还书请求填写相关的信息后提交,书刊成功归还,其他读者可以借阅。3)书刊挂失借阅书刊遗失,读者可进行挂失。挂失操作时,只需输入读者编号,即可查询读者当前借阅书刊的详细信息,每条记录后附有挂失一栏,读者确认挂失某本书刊,管理员只需点击挂失一栏,填写相关信息后提交,挂失成功
16、,借阅记录状态改为已挂失,图书状态改为已挂失,其他读者不可借阅此书。4.1.3 图书管理模块功能包括检索图书详细信息,添加图书信息,修改图书信息,删除图书信息。图书检索,根据图书编号,ISBN,图书名称、图书作者、馆藏位置、发行日期进行模糊查询,输入检索条件后单击检索即可检索得到相应图书详细信息。该信息还包括图书馆藏位置、是否可借的情况。添加新书时,输入书刊的相关信息,为了减少图书编目输入的复杂度,系统提供根据ISBN号从互联网豆瓣读书获取图书信息功能,大大减少管理员输入图书详细信息时的效率。删除指定书刊时,输入书号可查询书刊详细信息,若当前书刊有外借副本,则系统提示暂无法删除;点击提交删除请
17、求,则删除该书刊的相关信息。4.2.读者功能模块4.2.1 读者信息管理模块读者可查看个人信息,并修改个人密码。4.2.2 图书检索模块读者可以根据图书编号,ISBN,图书名称、图书作者、馆藏位置、发行日期进行模糊查询,输入检索条件后单击检索即可检索得到相应图书详细信息。该信息还包括图书馆藏位置、是否可借的情况。读者检索到想要借阅的图书信息后记录图书编号、ISBN等信息,到图书馆前台提供以上信息进行图书借阅。4.3 界面设计界面设计风格简单明了,朴实自然,便于操作。尽可能列表直接显示查询结果,避免数据的输入,方便用户使用。图3 图书入库界面图4 图书管理界面图5 图书借阅管理界面图6 图书借阅
18、登记界面图7 用户管理界面五、测试和运行分别用管理员用户root,密码admin和读者用户sunshine,密码123456登录图书馆管理信息系统。登录成功后,分别进入管理员业务界面和读者我的图书馆界面。通过python写的爬虫工具从豆瓣读书抓取了近5000条图书信息作为初始化测试数据。在图书检索界面通过输入ISBN等检索条件进行检索,系统响应时间在200ms, 响应时间非常快。如下图:通过root、sunshine账号对图书借阅、归还、挂失进行了测试,流程均可以跑通,对于黑名单用户、已挂失图书均做了相应的逻辑处理。六、总结在这次数据库系统原理大作业的事件过程中,确实有很多收获。通过这次课程设
19、计把上学期的java课程学到的东西也应用到了实践过程之中。还学习使用了java流行的框架结构struts、spring、mybatis等。虽然只是一个简单的DEMO系统,有些系统逻辑尚有欠缺,并不能实际应用,但是从数据库的设计到编码实现,这个过程中还是学到了不少东西。另外从豆瓣读书获取图书详细信息是此图书馆管理系统的一大创新,目前市场上流行的图书馆管理系统在成千上万图书集中入库时需要N多编辑人员对图书信息进行人工录入,费时费力而且录入信息不一定准确。随着豆瓣读书、当当网、卓越网的流行,互联网上存在着大量的图书详细信息,图书入库时从这些互联网上根据ISBN直接获取图书详细信息供录入人员参考将会大
20、大减少图书信息录入的工作量,大大提高录入人员的工作效率,大大增强图书信息录入的准确度。但是由于本学期课程较多,时间较紧,此图书馆管理系统的某些逻辑设计的非常简单,比如每种图书都需要有副本管理,每个副本都有唯一条码确定,读者借书时只需要提供条码号即可;图书挂失后应该会有相应的赔偿,如果没有赔偿则读者的信誉度降低不能再次借阅图书;每个读者都应该有相应的借阅图书数目的限制,超过此数目后将不能借书;读者没有图书归还超限以后将不能借书等等。我们认为此次数据库原理大作业的实践是对我们下学期毕业设计及毕业论文的编写的一个热身,对我们高质量的顺利的完成毕业设计产生了非常积极的作用,借此机会感谢杨老师的悉心教导!14