博主在github上找的这个项目链接,大家想参考的可以看看!
1、摘要:
一个简单的图书管理系统包括图书馆内书籍的信息、学校在校学生的信息以及学生的借阅信息。此系统功能分为面向学生和面向管理员两部分,其中学生可以进行借阅、续借、归还和查询书籍等操作,管理员可以完成书籍和学生的增加,删除和修改以及对学生,借阅、续借、归还的确认。
2、需求分析
针对一般图书管理信息系统的需求,通过对图书管理工作过程的内容和数据流程分析,设计如下面所示的数据项:
Ø 读者信息
属性:读者学号,读者姓名,读者性别,联系电话,所在系,生效日期,失效日期,违章状况,累计借书,备注
主键:读者学号
Ø 书籍信息
属性:ISBN,书名,作者,出版社,出版日期,简介,备注
主键:ISBN
Ø 管理员信息
属性:工作号,姓名,性别,电话,家庭住址,备注
主键:工作号
2.1 数据流程
通过对系统的调查和可行性分析,画出系统的数据流程图:
2.1.1 读者
学生对图书管理系统的要求有:
Ø 能按各种方式(比如书名、编号、作者)查询图书馆的藏书情况。
Ø 能够方便地借阅图书、续借图书、归还图书
Ø 能够查询自己的基本资料、图书情况
Ø 能够熟悉图书管理系统的使用。
读者进入系统工作的流程图为:
|
注册 |
查询 |
修改信息 |
借阅续借 图书 |
归还 |
注销 |
2.1.2 图书管理员
他们对图书管理系统的要求有:
1. 能方便的对图书进行录入登记,注销陈旧的书籍。
2. 能够方便地对新生进行登记,或注销已经毕业的学生信息(基本信息,借阅信息)。
3. 能够随时发布一些诸如各学院学生借阅图书超期情况、馆内藏书情况、借情况等信息,以便各学院能够随时获知本院学生的一些借书信息。
图书管理员工作的流程图为:
|
注册 |
录入图书 |
录入新生 |
注销图书 |
注销学生 |
注销 |
修改个人信息 |
超期处理 |
3、概念模型设计
数据库需要表述的信息有以下几种:
(1)读者信息
(2)书籍信息
(3)管理员信息
(4)读者与书籍之间的关系(借阅关系E-R图)
(5)管理员与书籍之间的关系(管理员_书籍E-R图)
(6)管理员与学生之间的关系(管理员_学生 E-R图)
3.1管理员与读者之间的关系
3.3管理员与书刊之间的关系
3.3读者与书籍之间的关系(借阅三元关系)
4、逻辑设计
从理论‘E/R模型’到理论‘关系模型’的整理转换,通过E/R模型到关系模型的转化,可以得到如下关系模式:
借阅关系
属性:工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注。
主键:工作号,读者学号,ISBN
管理员_书籍关系
属性:工作号,ISBN,添加时间,是否在馆
主键:工作号,ISBN
管理员_学生关系
属性:工作号,读者学号,确认借还
主键:工作号,读者学号
5、数据库逻辑结构
5.1图书信息表
字段名称 |
数据类型 |
是否可为空 |
ISBN(key) |
varchar(20) |
否 |
书名 |
varchar(50) |
否 |
作者 |
varchar(12) |
否 |
出版社 |
varchar(50) |
是 |
出版日期 |
datetime |
是 |
简介 |
varchar(200) |
是 |
备注 |
varchar(200) |
是 |
5.2 读者信息表
字段名称 |
数据类型 |
是否可为空 |
读者学号(key) |
varchar(12) |
否 |
读者姓名 |
varchar(10) |
否 |
读者性别 |
varchar(2) |
否 |
联系电话 |
varchar(10) |
是 |
所在系 |
varchar(12) |
否 |
生效时间 |
datatime |
是 |
失效时间 |
datatime |
是 |
违章状况 |
varchar(2) |
是 |
累计借书 |
int |
是 |
备注 |
varchar(100) |
是 |
5.3 管理员信息表
字段名称 |
数据类型 |
是否可为空 |
工作号(key) |
varchar(12) |
否 |
姓名 |
varchar(12) |
否 |
性别 |
varchar(2) |
否 |
电话 |
varchar(12) |
是 |
住址 |
varchar(12) |
是 |
备注 |
varchar(100) |
是 |
5.4 借阅表
字段名称 |
数据类型 |
是否可为空 |
工作号 |
char(10) |
否 |
ISBN |
char(10) |
否 |
读者学号 |
char(10) |
否 |
借书日期 |
datetime |
否 |
还书日期 |
datetime |
否 |
是否续借 |
char(4) |
否 |
备注 |
varchar(100) |
是 |
5.5 管理员_书籍
字段名称 |
数据类型 |
是否可为空 |
工作号 |
char(10) |
否 |
ISBN |
char(10) |
否 |
添加时间 |
data time |
是 |
是否在馆 |
char(14) |
是 |
5.6 管理员_学生
字段名称 |
数据类型 |
是否可为空 |
工作号 |
char(10) |
否 |
读者学号 |
char(10) |
否 |
借还确认 |
char(4) |
否 |
6、物理设计
从理论‘关系模型’到实现/实施‘数据库建立’,物理文件的安排和建立索引
6.1 建立索引
为了提高在表中搜索元组的速度,在实际实现的时候应该基于键码建立索引是各表中建立索引的表项:
(1) 读者信息(读者学号)
(2) 书籍信息(ISBN)
(3)管理员信息(工作号)
(4)借阅(工作号,读者学号,ISBN)
(5)管理员_书籍(工作号,ISBN)
(6)管理员_学生(工作号,读者学号)
6.2 用SQL实现设计
实现该设计的环境为Windows 2000 Perfessinal+MSSQLServer 2000.0
6.2.1建立图书信息表
create table 图书
(ISBN varchar(20) not null primary key,
书名 varchar(50) not null,
作者 varchar(12) not null,
出版社 varchar(50),
出版日期 datetime,
简介 varchar(200),
备注 varchar(200),)
6.2.2建立读者信息表
create table 读者
(读者学号 varchar(12) not null primary key,
读者姓名 varchar(10) not null,
读者性别 varchar(2) not null,
联系电话 varchar(12),
所在系 varchar(20) not null,
生效日期 datetime,
失效日期 datetime,
违章状态 char(2),
累计借书 int,
备注 varchar(100),)
6.2.3建立管理员信息表
create table 管理员
(工作号 varchar(12) not null primary key,
姓名 varchar(12) not null,
性别 varchar(2) not null,
电话 varchar(12),
家庭住址 varchar(50),
备注 varchar(100))
6.2.4建立借阅表
create table 借阅
(工作号 char(10) not null,
ISBN char(10) not null,
读者学号 char(10) not null,
借书日期 datetime not null,
还书日期 datetime not null,
是否续借 char(4) not null,
备注 varchar(100) )
6.2.5建立管理员_书籍表
create table 管理员_书籍
(工作号 char(10) not null,
ISBN char(10) not null,
添加时间 datetime,
是否在馆 char(4))
6.2.6建立管理员_学生表
create table 管理员_学生
(工作号 char(10) not null,
读者学号 char(10) not null,
ISBN char(10) not null,
借还确认 char(4) not null)
6.2.7建立索引
CREATE UNIQUE INDEX 图书索引 ON 图书(ISBN)
CREATE UNIQUE INDEX 读者索引 ON 读者(读者学号)
CREATE UNIQUE INDEX 管理员索引 ON 读者(工作号)
CREATE UNIQUE INDEX借阅索引 ON 借阅(工作号,读者学号,ISBN)
CREATE UNIQUE INDEX管理员_书籍索引 ON 管理员_书籍 (工作号,ISBN读者学号)
CREATE UNIQUE INDEX管理员_学生ON管理员_学生 (工作号,读者学号)
6.2.8定义视图
(1)读者表视图
CREATE VIEW 读者视图
AS
SELECT *
FROM 读者
(2)图书表视图
CREATE VIEW 图书视图
AS
SELECT *
FROM 图书
(3)管理员表视图
CREATE VIEW 管理员视图
AS
SELECT *
FROM 管理员者
6.2.9管理员操作
(1)注册(register)
INSERT INTO 管理员 (工作号,姓名,性别,电话,家庭住址,备注)
VALUES(#工作号,#姓名,#性别,#电话,#家庭住址,#备注)
说明:在登记操作后,管理员得到一个唯一的工作号,可以根据这个工作号采查询和修改数据。
(2)注销(unregister)
DELETE
FROM Provider
WHERE(工作号=#工作号);
(3)修改个人信息(update)
UPdate 管理员
Set (工作号=#工作号,姓名=#姓名,性别=#性别,电话=#电话,家庭住址=#家庭住址,备注=#备注)
WHERE(工作号=#工作号)
(4)增加书籍(addbooks)
INSERT INTO 图书 (ISBN,书名,作者,出版社,出版日期,简介,备注)
VALUES(#ISBN,#书名,#作者,#出版社,#出版日期,#简介,#备注) INSERT INTO 管理员_书籍表(工作号,ISBN,添加时间,是否在馆)
VALUES(#工作号,#ISBN,#添加时间,#是否在馆)
(5)删除书籍(deletebooks)
DELETE 图书
WHERE(ISBN =# ISBN)
(6)修改书籍(updatebooks)
UPDATE 图书(书名=#书名, 作者=#作者, 出版社=#出版社, 出版日期=
#出版日期, 简介=#简介, 备注=#备注)
WHERE(ISBN =# ISBN)
6.2.10读者操作
(1)注册(register)
INSERT INTO 读者(读者学号,读者姓名,读者性别,联系电话,所在系,
生效日期,失效日期,违章状况,累计借书,备注)
VALUES(#读者学号,#读者姓名,#读者性别,#联系电话,#所在系,
#生效日期,#失效日期,#违章状况,#累计借书,#备注)
说明:在登记操作后,读者得到一个唯一的ID,可以根据这个ID来查询和修改自己的信息。
(2)注销(unregister)
DELETE 读者
WHERE(读者学号=#读者学号)
(3)修改个人信息(update)
UPDATE 读者 Set(读者姓名=#读者姓名,联系电话=#联系电话,
所在系=#所在系,生效日期=#生效日期,失效日期=#失效日期,
违章状况=#违章状况,累计借书=#累计借书,备注=#备注)
WHERE(读者学号=#读者学号)
(4)查询(select)
SELECT ISBN,书名,作者,出版社
FROM图书
WHERE ISBN=#ISBN OR书名=#书名
6.2.11管理员对借阅关系的操作
(1) 插入读者的信息(insert)
INSERT INTO 借阅(工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注)
VALUES(#工作号,#读者学号,#ISBN,#是否续借,#借书日期,
#还书日期,#备注)
(2) 更新信息(update)
①更新借出信息
UPDATE借阅
SET(借书日期=#借书日期,还书日期=借书日期+30,是否续借=0)
WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN =#ISBN)
UPDATE管理员_图书
SET(是否在馆=0)
WHERE(ISBN=#ISBN)
UPDATA 学生
SET (累积借书=累积借书+1)
WHERE(读者学号=#读者学号)
INSERT INTO管理员_学生(工作号,读者学号,确认借还,ISBN)
VALUES(#工作号,#读者学号,”0”, #ISBN))
②更新续借信息
UPDATE 借阅
SET(是否续借=#是否续借)
WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN =#ISBN)
③更新还书信息
UPDATE管理员_图书
SET(是否在馆=1)
WHERE(ISBN=#ISBN)
UPDATE管理员_学生
SET(确认借还=”1”)
WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN=#ISBN)
6.2.12触发器的建立
(1)时间触发器:
Create Trigger 时间
On 借阅
For update,insert,delete
As
while (select datename(weekday,getdate()))='星期天'
begin
print '时间错误'
end
(2)update触发器:
Create Trigger 续借
On 借阅
for Update
As
If Update(是否续借)
begin
Update 借阅
Set 还书日期=还书日期+30
Where 工作号=#工作号
end
7、实验数据示例:测试阶段(代码调试)
7.1 输入数据设计
(1)插入管理员
INSERT INTO 管理员(工作号,姓名,性别,电话,家庭住址,备注)
VALUES(1001,'张三','男',02885965555,'成都市','呵呵')
(2)插入读者
INSERT INTO 读者(读者学号,读者姓名,读者性别,联系电话,所在系,
生效日期,失效日期,违章状态,累计借书,备注)
VALUES(20050222,'李瑞','男',02888994456,'环境','2007-05-06','2010-05-06','1',10,'哈')
(3)插入图书
INSERT INTO 图书 (ISBN,书名,作者,出版社,出版日期,简介,备注)
VALUES('730203009x','数据库原理教程','王珊','清华大学出版社','2006-05-05','数据库教程','哈')
INSERT INTO 图书 (ISBN,书名,作者,出版社,出版日期,简介,备注)
VALUES('7302030091','数据库教程','王书','清华大学出版社','2006-05-05','数据库教程','哈')
(4)插入管理员_书籍表
INSERT INTO 管理员_书籍 (工作号,ISBN,添加时间,是否在馆)
VALUES(1001,'730203009x','2007-7-7','0')
INSERT INTO 管理员_书籍 (工作号,ISBN,添加时间,是否在馆)
VALUES(1001,'7302030091','2007-7-8','1')
(5) 插入借阅信息
INSERT INTO 借阅(工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注)
VALUES(1001,20050222,'730203009x','0','2007-7-6','2007-8-6','哈')
INSERT INTO 管理员_学生(工作号,读者学号,借还确认,ISBN)
VALUES(1001,'20050222','0', '730203009x')
7.2 完成借阅、续借、归还的操作设计
假设读者想借书籍名为《数据库教程》且不知道ISBN
(1)借阅操作如下:
if((select 书名 from 图书 where ISBN='7302030091')= '数据库教程')
begin
INSERT INTO 借阅(工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注)
VALUES(1001,20050222,'7302030091','0','2007-7-7','2007-8-7','哈')
UPDATE 管理员_书籍
SET 是否在馆='0'
WHERE ISBN='7302030091'
UPDATE 读者
SET 累计借书=累计借书+1
WHERE 读者学号=20050222
INSERT INTO 管理员_学生(工作号,读者学号,借还确认,ISBN)
VALUES(1001,20050222,'0','7302030091')
print '借阅成功!'
end
else
print '借阅失败!'
(2)续借操作如下:
if((SELECT 是否续借
FROM 借阅
WHERE 工作号=1001 AND 读者学号=20050222 AND ISBN ='7302030091')='0')
begin
UPDATE 借阅
SET 是否续借='1'
WHERE 工作号=1001 AND 读者学号=20050222 AND ISBN ='7302030091'
print '续借成功!'
end
else
print '续借失败!'
(3)还书操作如下:
If((SELECT 借还确认
FROM 管理员_学生
WHERE 工作号=1001 AND 读者学号=20050222 AND ISBN='7302030091')='0')
BEGIN
UPDATE 管理员_书籍
SET 是否在馆='1'
WHERE ISBN='7302030091'
print '还书成功!'
end
else
print '还书失败!'
8、安全性设计
后台数据库应安装在指定服务器上,用户只能通过登录软件访问数据库表中的数据。
除上述方法外,不应提供用户其他访问数据库数据的直接或间接途径。
9、数据库管理与维护说明
对于本数据的管理与维护,例如数据库的备份与恢复,可以使用T-SQL的BACKUP DATABASE命令和RESTORE DATABASE命令[具体实用说明请参照SQL Server 2000联机丛书]或使用企业管理器中的“所有任务”→“备份数据库(B)”菜单项和或“还原数据库(R)”菜单项操作。