班级图书管理系统数据库
小组成员:****
班级:18安管1班
日期:2019-6-27
设计目的 3
本组课题及分工 3
数据库功能简介 3
功能需求分析 4
概念模型设计(E-R图) 5
逻辑结构设计,转换成关系模型 6
数据库的实现,创建表空间及表数据(代码及截屏) 7
创建视图、存储过程、触发器等的主要代码及功能说明 11
设计目的
现在图书馆馆藏书籍成千上万,每天读者也数不胜数,为了方便图书馆管理员管理图书
的入库,借阅,归还等情况,也为了方便广大学者快速查找到自己想看的图书,所以建立一个班级图书馆管理系统。
本组课题及分工
课题:班级图书管理系统数据库设计
分工:概念结构设计,逻辑结构设计(共同)
创建表,数据添加删除修改调用测试()
创建储存函数,视图,触发器,索引()
写报告 (共同)
数据库功能简介
功能需求分析
(1)读者管理
a.读者添加
此模块主要的实现功能是添加新的读者信息,其中信息分别包括图书证号、学生姓名、性别、系别、班级
b.读者修改
此模块主要的实现功能对有信息更新的读者进行即时修改,以随时更新读者在数据库中的信息。本模块通过图书证号确定读者,可对读者信息的借书证号、学生姓名、性别、系别、班级。
c.读者查询
此模块主要可对所要了解的读者信息,即把读者的信息从数据库调出来,查询方式分别有按借书证号查询、按姓名查询、按班级查询、按年级查询。
d.读者删除
此模块可以删除一些不再使用本系统的读者资料,从而达到对数据库中的清理,即清除一些不必要资料,此处有四种删除途径,分别为按借书证号删除、按姓名删除、按班级删除、按年级删除。
(2)书籍管理
a. 新书入库
此模块主要的实现功能是将新来的图书输入到图书馆管理系统的书库当中,其中主要按如下信息往书库中输入
书号|书名|作者|出版社|入库时间|是否借出|价格
b. 书籍查询
在图书馆管理系统中书籍查询是最基本的功能,读者可以根据自己的需求来查询想要借阅的书籍。可以按书号查询、按书名查询、按作者名查询、按出版社查询、按入库时间查询等基础查询。
(3)书籍借阅与归还管理
a. 借阅书籍
此模块主要实现读者可凭有效的借书证号,借阅图书馆内未借出的图书。输入借书证号后,可显示了该借书证持有者的全部信息(包括借书证号、姓名、性别、所在班级、所属系部),供读者确认信息。通过输入有效的书号,查询该图书的全部信息(包括书号、书名、作者、出版社、是否借出、价格)。借阅成功后,将该借书证号、书号、借阅日期插入到数据库的表中进行记录。
b. 归还书籍
此模块主要实现读者凭所要归还图书的图书证号归还图书。输入所要归还的书号后,可显示了该图书证持有者的全部信息(包括借书证号、姓名、性别、所在班级、所属系部),供读者确认信息。还书成功后,从数据库中删除该书的借出记录,并插入归还日期。
c.评信誉分
此模块主要实现每个月计算一下信誉分。统计规则是借阅日期超过30分的扣一分。提醒读者按时还书。
概念模型设计(E-R图)
班级图书管理系统数据库E-R图
逻辑结构设计,转换成关系模型
图书管理表 (书号、书名、作者、出版社、入库时间、是否借出、价格)
读者管理表 (借书证号、姓名、性别、系别、班级)
图书借阅管理表 (借书证号、书号、借阅日期、归还日期、信誉分)
- 物理结构设计,数据表
books表:
字段 类型 长度 null 键 默认值
书号 char 20 no 主键 null
书名 char 40 no null
作者 char 30 no null
出版社 char 30 no null
入库时间 date no 2018-03-21
是否借出 char 2 no 否
价格 char 6 no null
borrow表:
字段 类型 长度 null 键 默认值
借书证号 char 20 no 外键 null
书号 char 20 no 外键 null
借阅日期 date no null
归还日期 date no null
信誉分 int 10 no 100
reader表:
字段 类型 长度 null 键 默认值
借书证号 char 20 no 主键 null
姓名 char 10 no null
性别 char 2 no 1
系别 char 20 no null
班级 int 10 no null
数据库的实现,创建表空间及表数据(代码及截屏)
创建视图、存储过程、触发器等的主要代码及功能说明
a.视图:
mysql> create or replace view 信誉分情况
-> as
-> select 借书证号,信誉分 from borrow
-> with check option;
Query OK, 0 rows affected (0.33 sec)
功能说明:通过借书证号直接查看信誉分
b.储存函数
mysql> delimiter
m
y
s
q
l
>
c
r
e
a
t
e
f
u
n
c
t
i
o
n
r
i
z
h
i
(
n
u
m
b
e
r
c
h
a
r
(
20
)
)
−
>
r
e
t
u
r
n
s
c
h
a
r
(
6
)
−
>
b
e
g
i
n
−
>
d
e
c
l
a
r
e
j
i
l
u
c
h
a
r
(
2
)
;
−
>
s
e
l
e
c
t
是
否
借
出
i
n
t
o
j
i
l
u
f
r
o
m
b
o
o
k
s
−
>
w
h
e
r
e
书
号
=
n
u
m
b
e
r
;
−
>
i
f
j
i
l
u
=
′
是
′
t
h
e
n
−
>
r
e
t
u
r
n
(
s
e
l
e
c
t
′
已
归
还
′
)
;
−
>
e
l
s
e
i
f
j
i
l
u
=
′
否
′
t
h
e
n
−
>
r
e
t
u
r
n
(
s
e
l
e
c
t
′
已
借
出
′
)
;
−
>
e
l
s
e
r
e
t
u
r
n
(
s
e
l
e
c
t
′
无
效
操
作
′
)
;
−
>
e
n
d
i
f
;
−
>
e
n
d
i
f
;
−
>
e
n
d
mysql> create function rizhi (number char(20)) -> returns char(6) -> begin -> declare jilu char(2); -> select 是否借出 into jilu from books -> where 书号=number; -> if jilu = '是' then -> return (select '已归还'); -> else if jilu = '否' then -> return(select '已借出'); -> else return (select '无效操作'); -> end if; -> end if; -> end
mysql>createfunctionrizhi(numberchar(20))−>returnschar(6)−>begin−>declarejiluchar(2);−>select是否借出intojilufrombooks−>where书号=number;−>ifjilu=′是′then−>return(select′已归还′);−>elseifjilu=′否′then−>return(select′已借出′);−>elsereturn(select′无效操作′);−>endif;−>endif;−>end
Query OK, 0 rows affected (0.11 sec)
功能说明:查询书籍的状态(已归还或者已借出)
c. 事件
mysql> create event startmonth
-> on schedule every 1 month
-> starts now()
-> ends '2020-12-31'
-> do update borrow set 信誉分=信誉分-1 where day(归还日期)-day(借阅日期)>=30;
Query OK, 0 rows affected (0.09 sec)
功能说明:每月查询评定信誉分
d.触发器
mysql> create trigger chufaqi after insert
-> on borrow
-> for each row
-> set @status=‘操作成功’;
-> delimiter $$
Query OK, 0 rows affected (0.13 sec)
功能说明:每记录一条借阅信息显示操作成功
e.索引
mysql> create index 借书证号索引
-> on reader(借书证号(5) asc);
Query OK, 0 rows affected (0.16 sec)
Records: 0 Duplicates: 0 Warnings: 0
功能说明: 根据reader表的借书证号列上的前5个字符建立一个升序索引借书证号索引
- 用建立的数据库对数据进行查询/添加/删除/修改等操作,运行存储过程/触发器并检查结果。
单条件查询:
运行存储过程:
多表查询:
分组查询:
添加
删除
触发器并检查
修改:
设计体会
从数据库的E-R图到最后的数据库实现,会遇到很多问题,一个人解决不了,通过两个人交流讨论,最后总能找到解决办法。这就是团队的力量吧=_=。虽然设计实现的过程有点枯燥,但最后看到成果还是觉得有成就感的。