图书馆信息管理系统实验报告
数据库课程设计报告 任课教师:图书管理信息系统 软件学院软件专业10级2班 姓名:王冰莹 学号:[1**********]9 李晖 实验教师: 助教:崔兴灿
-------
目 录
一、系统开发平台 ......................................................... 2
二、数据库规划 ........................................................... 3
2.1 任务陈述 .......................................................... 3
2.2 任务目标 .......................................................... 3
三、系统定义 ............................................................. 4
3.2 用户视图 .......................................................... 4
四、需求分析 ............................................................. 6
4.1 用户需求说明 ...................................................... 6
4.1.1 数据需求 .................................................... 6
4.1.2 事务需求 .................................................... 7
4.2 系统需求说明 ...................................................... 8
五、数据库逻辑设计 ....................................................... 9
5.1 ER图 ............................................................. 9
5.2 数据字典 ......................................................... 10
5.3 关系表 ........................................................... 13
六、数据库物理设计 ...................................................... 14
6.1 索引 ............................................................. 14
6.2 安全机制 ......................................................... 14
七、应用程序设计 ........................................................ 14
7.1 功能模块 ......................................................... 14
7.2 界面设计 ......................................................... 17
7.3 事务设计 ......................................................... 32
八、测试和运行 .......................................................... 32
九、总结 ................................................................ 38
附. 参考文献 ............................................................ 39
一、系统开发平台
1. 题目
题目2-图书馆管理信息系统
2. 开发工具
Eclipse
3. 开发语言
JAVA
4. 数据库
Microsoft SQL Server 2005
5.操作系统
Windows XP
二、数据库规划
2.1 任务陈述
随着图书的普及,读者日益增多,图书种类也越来越繁多,为了更高效的管理图书和读者,并且完成对信息的统计,一个专门的管理系统已经成为了图书馆管理者的迫切需求。本系统实现借阅管理,预约管理,图书管理,读者管理,信息查询和信息统计等功能,采用结构化生命周期法和原型法相结合进行图书管理系统的开发。
本系统就是为了管理好图书馆信息而设计的。图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、
以及借阅天数等用人工计算、手抄进行。
数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。数据处理手工操作,工作量大,出错率高,出错后不易更改。
图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。
如要对很长时间以前的图书进行更改就更加困难了。基于这此问题,我认为有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
2.2 任务目标
通过编程、构造数据库实现以下功能:
三、系统定义
3.1 用户视图
四、需求分析
4.1 用户需求说明
4.1.1 数据需求
针对图书馆管理系统的需求,通过对图书馆管理工作过程的内容和数据流程分析,设计出如下的数据项:
图书:对应书籍实体的图书信息包括图书的编号,ISBN ,名称, 第一、第二、第三作者, 书名的汉语拼音缩写, 内容简介, 入库时间, 书籍单价, 图书馆购进图书总数,书籍当前在库数目,书籍所在馆号, 书籍外借数目等。
管理员:维护图书馆管理员信息、读者信息、分馆信息、权限信息、不良记录信息。图书馆管理员信息和读者信息由用户编号、用户密码、用户密码、提示问题、用户名字、用户权限、用户年龄、用户性别、用户不良记录、用户请求记录组成。
读者:可以自行维护除编号、权限、不良记录以外的其它信息。读者在借书之前必须先注册,注册后便可进行借书、还书、留言等一系列操作。借书信息包括借书记录号、用户号书籍编号、借阅日期、是否续借、是否归还等信息。
可注册新用户,根据新用户心情借书卡类型,注册ABC 不同等级的读者用户,不同等级拥有不同的借书权限。
对于读者的不良记录,系统将予以存储。存储的信息有不良记录编号、借阅编号、不良记录描述。对应于用户请求记录实体的请求信息包括请求信息编号、用户编号、请求描述、请求发出时间、该请求是否实现等内容。
● 书库图书信息,包括数据项有:图书序号、索书号、图书名、作者、出版社、类别、关键字、备注、状态
● 用户信息,包括数据项有:读者号、姓名、性别、年龄、类型、备注、违章记录、当前借书、状态
● 借阅历史信息,包括数据项有:读者号、图书号、借书日期、应还时间、还书时间、状态、超期欠费、丢失罚款
● 借书信息,包括数据项有:读者号、图书号、借书时间、应还时间、状态 ● 还书信息,包括数据项有:读者号、图书号、借书时间、应还时间、状态 ● 等等
4.1.2事务需求
(1)数据录入
● 录入新图书的详细情况。
● 录入新读者的详细情况
● 录入读者用户图书的借阅情况详细情况
● 读者自己管理自己一部分的个人信息(可修改增删)
● 管理员管理系统内所以数据、信息
(2)数据更新、删除
● 更新、删除给定图书的信息。
● 更新、删除给定用户的信息。
● 更新、删除某用户借阅某本图书的租借协议的信息。
(3)数据查询
数据库必须支持下列查询:
● 分类列出图书馆的图书号、索书号、图书名、作者、出版社、类别、关键字、备注、状态。
● 按照图书号顺序列出图书馆指定作者的图书的图书号、索书号、图书名、作者、出版社、类别、关键字、备注、状态。
● 按照图书号顺序列出图书馆指定出版社的图书的图书号、索书号、图书名、作者、出版社、类别、关键字、备注、状态。
● 按照图书号顺序列出图书馆指定类别的图书序号、索书号、图书名、作者、出版社、类别、关键字、备注、状态。
● 列出某个读者读者租借的全部图书的详细情况。
● 列出指定种类的所有图书名称。
● 按照读者学号顺序列出图书馆指定学号的读者的读者号、姓名、性别、年龄、类型、备注、违章记录、当前借书、状态。
● 按照读者学号顺序列出图书馆指定姓名的读者的读者号、姓名、性别、年龄、类型、备注、违章记录、当前借书、状态。
● 按照读者学号顺序列出图书馆指定违章记录的读者的读者号、姓名、性别、年龄、类型、备注、违章记录、当前借书、状态。
● 按照读者学号顺序列出图书馆指定当前状态的读者的读者号、姓名、性别、年龄、
类型、备注、违章记录、当前借书、状态。
(4)系统内数据导出
● 支持系统内报表的输出(所有图书、借出图书、库存图书、所有读者信息报表等)
4.2 系统需求说明
实际生活中图书管理信息系统内在存图书数据、读者数据和彼此之间的借阅关系数据是很庞大的,数据库增长速度也是和剧烈。。
①安全性。不同的用户具有不同的使用权限,只有具有最高权限的系统管理员才能修改、注销数据库中的信息,具有一般权限的人员只能读取与自己相关的内容。
②一致性。系统的数据要保证一致性、准确性,当某一数据库中记录改变时,与之相关联的数据库也会随之变化。
③易操作性。界面设计要符合大多数用户的操作习惯,系统还要提供操作指南,便于用户操作使用。
(1)网络和数据共享需求
● 图书馆必须安全的和该馆数据库网络互连。
● 必须能够支持至少2名图书管理员同时访问. 需要考虑这么大数量并发访问
的许可需求。
(2) 性能
● 单个记录查询时间少于1秒,高峰期少于5秒。
● 多个记录查询时间少于5秒,高峰期少于10秒 。
● 更新/保存记录时间少于5秒,高峰期少于15秒 。
(3)安全性
● 数据库必须有密码口令保护
● 每个图书管理员分配特定的用户视图所应有的访问权限 。
● 图书管理员只能在适合他们完成工作的需要的窗口中看到需要的数据 。 ● 普通用户读者只能在满足需求条件的窗口看到并修改自己的数据。
(4) 备份和恢复
● 每天定点备份
(5) 合法问题
● 对图书管理员和读者信息合理管理
● 遵守法律
(6) 运行需求
● 用户界面
● 用户友好;对鼠标和键盘单独支持。
(7)故障处理
● 正常使用时不应出错,若运行时遇到不可恢复的系统错误,也必须保证数
据库完好无损。
(8)其它需求
● 系统的功能实现情况: 用户可在本系统下实现各种用户要求的功能 ● 安全性: 对于系统的重要数据都有密码保护,具有一定的安全性 ● 系统的容错性: 用户输错数据都有提示信息,具有较好的容错性能。 ● 系统的封闭性: 用户的封闭性较好,用户基本上在提示信息下输数据。
五、数据库逻辑设计
5.1 ER图
5.2 数据字典
用户实体
图书实体
图书类型
图书管理员实体
借阅联系
借阅历史记录
用户级别
5.3 关系表
● 读者信息(读者号、姓名、性别、年龄、类型、备注、状态、密码) 主码:读者学号
外码:类型参照读者类型(类型)
● 读者类型(类型、名称、最大借书量,最大借阅时间) 主码:类型
● 图书(图书号,图书类型,状态,借阅者号,应还日期) 主码:图书号
● 图书类型(图书类型、书名、作者、出版社、类别、关键字、状态) 主码:图书类型
外码:图书类型参照图书(图书类型)
● 图书馆管理员信息(图书管理员序号、姓名、密码、性别、年龄) 主码:图书馆管理员序号
● 借阅信息(读者号、图书号、状态、超期罚款、破损罚款) 主码:读者号、图书号
外码:读者号参照读者信息(读者号) 图书号参照图书信息(图书号)
● 借阅历史记录(读者号、图书号、归还状态、借书时间、应还时间) 主码:读者号、图书号
外码:读者号参照读者信息(读者号)
图书号参照图书信息(图书号)
六、数据库物理设计
6.1 索引
因为添加索引会改善系统性能,所以,根据不同的情况,本程序引入了不同类型的索引。
在列出馆中所有书时,选择排序的列为book_id,非主键,此索引为聚簇索引。 但在一些表中,如admit_id 表,没有建索引,因为在课程学习过程中学习到,不必为小表建立索引。
列出馆中所有图书,此操作进行较为频繁,因而为其建立二级索引。先按book_id分类,再按字典序依book_isbn进行排序。
在表book_info 中,因book_id 、book_name、writer 、publisher 为搜索条件,建立索引。
6.2 安全机制
系统的稳定与安全还是非常重要的,因为这些直接关系到数据库系统中信息的存储管理和修改等操作。Sqlserver2005的稳定性和安全性还是很不错的,所以就选用了这个数据库来做此设计。
在本图书馆信息管理系统中,建立了两种类型的安全机制,系统安全和数据安全。在系统安全的建设方面,不允许以游客身份访问本系统,所有用户都必须注册并登陆,登录时会验证用户名和密码。只有两者匹配时,才可访问本系统。在数据安全方面, 数据库对象的访问和使用有严格的控制,其中的某些表只有具有特定权限才可以访问。
七、应用程序设计
7.1 功能模块
登录模块:
设计实现读者、图书管理员进入该系统必须登录,身份验证正确了才可以进入该系统,以不同身份进入该系统所对应的系统使用权限是不同的。
登入 管理员 普通用户
1、EXCLE 报表导出
导出所有用户的书籍借阅历史数据 导出所有用户的信息 导出所有图书的被借阅历史 导出系统内图书信息数据
2、图书借阅管理 借阅书籍
支持读者在规定限额内借阅书籍(欠费,满额用户不可借阅)
归还书籍 处理用户的归还书籍
处理用户丢失的图书赔偿 处理用户超期的图书赔偿
3、读者用户管理 读者信息查询检索
精确检索 (通过读者ID 精确检索特定用户) 模糊检索 (通过读者姓名 用户类型 当前状态等一项或者几项信息模糊检索某一或某类用户)
读者管理 ( 查询、修改、删除读者读者的基本信息)
4、图书管理
图书的查询检索
精确查询 模糊查询
图书管理 (添加、修改、删除图书信息)
普通用户模块
1.个人信息查看、修改
查询本人图书借阅罚款信息 修改自己的登录密码
2. 书刊检索
精确检索(图书号)
模糊检索 (图书名、图书所属类别、作者、出版社中的
一个或者多个信息进行检索)
3.图书预约
通过自己ID 与图书号对当前在借状态的图书进行预约,预 约图书到馆后提醒用户图书到馆。
4. 图书续借
所借图书默认可借一个月,用户可在自己页面操作续借一个 月。
5.查看借阅历史
对自己的借阅历史进行查看,可导出excel 表格。
5.系统说明 帮助。 系统帮助与说明
前期设计图
7.2 界面设计 一、登入界面设计
分为普通用户登入和管理员登入
注:当输入用户名或者密码错误时弹出提示。
二、管理员登入界面
设计拥有功能:
1、报表导出
支持读者报表、图书报表、借阅历史报表
2. 借阅管理
(1)图书归还 超期赔偿 丢失赔偿
(2)图书借阅
\
3、读者管理
(1) 读者查询
I.精确查询:通过读者ID 精确查询某一读者
II.模糊查询:通过一个或多个关键字进行查询(可以通过用户姓名、
用户类别、用户状态等)
例如:查询所有持A
卡的用户
20
(2)读者管理
支持录录新读者信息,修改、删除已有读者信息
I:例如修改ID 为0的用户姓名为 “山大”
21
II: 删除某一读者
鼠标点击想要删除的数据条,点击删除,即可完成删除。
22
注:若执行删除操作时候改读者还有借书,则无法删除。
4、图书管理
(1) 馆藏图书信息管理
可对馆藏图书进行 增添新书,修改、删除馆藏书籍,删除馆藏图书。
23
I. 添加新书
将需要添加的新书信息填写完毕后点增加按钮皆可添加新书
24
II :删除图书
鼠标单击想要删除的数据条,点击删除按钮即可完成图书删除。
III: 图书信息修改
将需要修改的图书的新信息填写完毕后点修改按钮即可修改图书信息。
(2)图书信息查询
精确查询 (根据图书书号精确查询某一本图书)
关键字模糊查询 (根据图书一个或多个关键字进行查询 如:图书名称,
图书分类,作者,出版社)
25
例如: 查询所有计算机 类别的图书
5. 借阅历史
26
可查看系统内所有的借阅历史情况,并可导出EXCEL 报表
12
27
四:普通用户登入界面
设计拥有功能:
普通用户模块
1. 个人信息查看、修改
读者可以查看并修改个人信息,但作为读者信息主码的读者号不能由读者 自己修改,同时读者类型及违章记录也不能由读者随意修改。
28
注:用户类别,用户状态,违章记录用户界面用户无权限修改,在管理员界面时管理员可对用户这些状态进行修改
2. 书刊检索
精确检索(根据图书号检索特定图书)
模糊检索 (根据图书关键字 图书名、图书所属类别、作者、出版社中
的一个或者多个信息进行检索)
操作同管理员界面时操作:
3. 图书预约
通过自己ID 与图书号对当前在借状态的图书进行预约,预约图书到馆后 提醒用户图书到馆。
29
4. 图书续借
所借图书默认可借一个月,用户可在自己页面操作续借一个月。
5. 查看借阅历史
对自己的借阅历史进行查看,可导出excel 表格。
5. 系统说明与帮助
7.3 事务设计
本图书馆信息管理系统中涉及到的事务,均以现实中图书馆的日常事务为原型。简单介绍如下。
书刊归还时,管理员可根据现实情况决定是否填写不良记录,若填写,该不良记录会出现在该读者读者的违章记录。
若读者在查询目前尚未有自己想借的图书时,系统提醒该书在借重,读者读者可填写预约,该预约信息会显示在管理员界面的图书查看中,管理员了解读者预约后,可进行相应处理,若该书归还,可将预约进行标记,标记后,读者可在“图书预约”模块中查看到,这时就可去图书馆借阅该书。
除此之外,读者还可续借未还的图书。
特色增加导出报表功能功能SQL 语句:
导出报表:
导出读者报表:执行的SQL 为 :select * from reader
导出书籍报表:执行的SQL 为 :
Selectbook_id,book.book_number,book_name,writer,publisher,type, keyword,remark,state from book,bookInfo where
book.book_number=bookInfo.book_number
导出借阅历史报表:执行的SQL 为 :
select reader_id,book_id,borrow_date,due_date,return_date,state, limit_fine,lost_fine from borrowHistory
八、测试和运行
1. 用户登录窗口测试
(1)测试要点:
①管理员、普通用户在密码正确的情况下能进入系统,其他用户名或密码错误都不能进入系统。
2. 增加读者资料
(1)测试要点:读者信息能否正确录入。
3. 修改读者资料
(1)测试要点:能否正确修改读者记录,并显示在读者信息管理窗体的表格中。
4 查询读者资料
(1)测试要点:
①是否能进行一个或多个条件查询。
②能否进行模糊查询。
5. 读者类别管理
(1)测试要点:
①能否在“读者类别表”和当前表格中正确显示所输入的信息,且“读者类别”是唯一的。
②当“借书信息表”中存在该类别的读者时,不能删除该类别的记录。
(2)“读者类别管理”功能测试
6.系统测试
除此之外,还对本图书馆信息管理系统进行了多种异常处理测试,发现错误或不符合用户要求的情况,回到出错的地方进行修改。并进行相关处理方法提示。测试结果较为理想,程序健壮性较好。
7.测试结论
经过以上测试,验证了该系统拥有的各项功能,在性能、功能和界面等方面满足用户需求,达到预定目标。
部分代码:
连接数据库:
package function;
import java.sql.*;
import java.util.Vector;
public class ConnectDB {
protected static Connection connection = null ;
private ResultSet rs = null ;//接口
private ResultSetMetaData rsmd = null ;//接口
public ConnectDB() {
try {
Class. forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver " );//加载数据库驱动
connection = connection = DriverManager.getConnection ( "jdbc:sqlserver://localhost:1433;DatabaseName=libl", "sa","123" );
connection.setAutoCommit(false );
} public Connection getCon() { } // 每次将所有查询结果存入向量返回 public Vector selectSql(String sql) { Vector vdata = new Vector(); try { rs = connection .prepareStatement(sql).executeQuery(); rsmd = rs .getMetaData(); while (rs .next()) for (int i = 1; i
vdata.addElement(rs .getObject(i));//指定列中的值 } catch (SQLException e) { } e.printStackTrace(); } return vdata; // 每次只返回一条String 型的查询结果 public String selectOne(String sql) { ResultSet rs = null ; ResultSetMetaData rsmd = null ; try { rs = connection .prepareStatement(sql).executeQuery(); rsmd = rs.getMetaData(); if (rs.next()) return (String) rs.getObject(1); } catch (SQLException e) { } e.printStackTrace(); } return null ; // 每次只返回一条int 型的查询结果 public int selectOneInt(String sql) { ResultSet rs = null ; ResultSetMetaData rsmd = null ;
try { rs = connection .prepareStatement(sql).executeQuery(); rsmd = rs.getMetaData();
if (rs.next())
return rs.getInt(1);
} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}
// 判断用户名和密码是否在用户列表中
public boolean inTable(String user, String pa) throws SQLException {
ResultSet rs = null ;
String sql = "select reader_id from reader " + "where reader_id='"
+ user + "' and password='" + pa + "'" ;
rs = connection .prepareStatement(sql).executeQuery(); if (rs.next())
return true ;
else
return false ;
}
public boolean inTable2(String user, String pa) throws SQLException {
ResultSet rs = null ;
String sql = "select admin_id from admin " + "where
admin_id='"
}
} + user + "' and password='" + pa + "'" ; rs = connection .prepareStatement(sql).executeQuery(); if (rs.next()) return true ; else return false ;
九、总结
通过这次的数据库课程设计使进一步加深了对数据库系统的认识,如何建设一个优秀的数据库体系,如何合理的操作数据库系统已达到需求目的。同时我还学会如何针对一个题目进行一步步的分析,一步步的设计,如需求分析,ER 图,数据字典等。了解了数据库设计和软件开发的一般流程。
经过进两个周中老师详尽地介绍数据库应用程序的开发过程,数据库需求获取,逻辑设计,软件开发、测试,SQL 的查询、优化等知识,使我对数据库设计开发有了更深一步的体会,通过调试程序对测试、优化系统方面有了更加深入的领会。
数据连接实现方面,通过上网查询和实践调试,解决了连接问题。
数据源问题,数据源名称与程序代码中数据源名称未匹配 解决方法:检查并匹配数据源名称。
在设计系统过程中,遇到问题通过与同学们讨论、图书馆查阅资料、上网搜索等途径,增强了发现问题、解决问题的能力。
通过本次数据库课程设计,对于代码的规范性对于程序员的重要性更有切身体会,优秀的程序员不仅要做出满足功能需求的程序,而且要用优美的代码来实现,其中规范且模块化的代码对于后期系统的调试有很大的帮助。
程序设计中的不足:
未能实现批量导入数据功能。
界面设计中某些细节问题未能考虑。
软件设计前应把握整体的设计思想,然后分模块付诸实现。再有很多实现的方法都有待优化等。
在以后的课程实验和课程设计中,我会汲取这次的经验与不足,使项目更加完善,开发更加敏捷。
附. 参考文献
由于查阅资料较多,很多网址、书名已经记不清了,
主要的参考资料、网址:
[1] 王珊,萨师煊·数据库系统概论
[2] 康诺利等著·何玉洁等译·数据库设计教程
[3]《数据库设计教程》Thomas M.Connolly Carolyn E.Begg著 机械工业出版社
[4]谷歌搜索 http://www.google.com.hk/
[5]百度搜索 http://www.baidu.com/
[6]JavaEye论坛 http://www.javaeye.com/