学校图书借阅管理系统(MySQL)

一.需求分析

1.1项目需求分析简介

本数据库的用户主要是学校人员通过对用户需求的收集和分析获得用户对数据库的如下要求。

  1. 信息需求分析
    (1) 图书信息包括书籍编号书籍名称出版社作者库存量出版日期价格库存剩余量类别等
    (2) 借阅证信息包括借阅证编号办证日期可借数量等
    (3) 读者信息读者编号读者姓名读者性别读者电话
    (4) 图书借还信息包括图书编号借阅证编号读者编号借阅日期借阅数量归还日期归还数量超期天数罚款金额等
  1. 功能需求
    学校图书借阅系统主要由图书信息管理读者信息管理借阅证信息管理借还信息管理规则信息等模块组成。进入改系统后用户可以对系统中的信息进行添加、修改、删除、查询等操作包括以下功能
    (1) 图书信息管理模块对图书信息进行增、删、改、查等操作
    (2) 读者信息管理模块对读者信息进行增、删、改、查等操作
    (3) 借阅证信息管理模块增加办卡注销借阅卡等操作
    (4) 借还信息管理模块进行借书、续借、还书等操作查找出逾期的人及其逾期的天数
    (5) 操作记录管理模块对读者的借还续借进行实时记录便于管理员查找出指定读者的所有借阅记录。
    (6) 规则信息管理模块记录借书逾期的人及其逾期的天数罚款。

1.2数据字典

1.2.1数据项

  1. 数据项书籍类别编号
    含义说明书籍类别的编号
    类型varchar
    长度5
  2. 数据项书籍类别名称
    含义说明书籍类别的名称
    类型varchar
    长度100
  3. 数据项书籍编号
    含义说明书籍的编号
    类型int
    长度30
  4. 数据项书籍名称
    含义说明书籍的名称
    类型varchar
    长度30
  5. 数据项作者
    含义说明书籍的作者
    类型varchar
    长度30
  6. 数据项出版日期
    含义说明书籍的出版日期
    类型date
  7. 数据项出版社
    含义说明书籍的出版社
    类型varchar
    长度50
  8. 数据项价格
    含义说明书籍的价格
    类型int
    长度10
  9. 数据项库存
    含义说明相同书籍的库存
    类型int
    长度100
    取值范围自然数
  10. 数据项剩余量
    含义说明相同书籍的剩余量
    类型int
    长度100
    取值范围自然数且小于库存量
  11. 数据项借阅证编号
    含义说明读者所办理的借阅证编号
    类型char
    长度5
  12. 数据项办证日期
    含义说明读者所办理的借阅证日期
    类型date
  13. 数据项可借数量
    含义说明该借阅证的可借数量
    类型int
    长度4
  14. 数据项读者编号
    含义说明读者的编号
    类型varchar
    长度10
  15. 数据项读者姓名
    含义说明读者的姓名
    类型varchar
    长度20
  16. 数据项性别
    含义说明读者的性别
    类型char
    长度10
  17. 数据项电话
    含义说明读者的电话
    类型int
    长度20
  18. 数据项借书日期
    含义说明图书被借出的日期
    类型date
  19. 数据项归还日期
    含义说明借出的图书归还的日期
    类型date
  20. 数据项是否续借
    含义说明0为否1为续借
    类型int
    长度2
  21. 数据项借书数量
    含义说明 借书的数量
    类型int
    长度100
  22. 数据项还书数量
    含义说明 还书的数量
    类型int
    长度100
  23. 数据项超期天数
    含义说明借书期限超出了10天
    类型int
    长度30
  24. 数据项本书
    含义说明超期的本书
    类型int
    长度100
  25. 数据项罚款金额
    含义说明超期罚款元/本/天
    类型varchar
    长度100
  26. 数据项说明
    含义说明对操作进行备注
    类型varchar
    长度100

1.2.2数据结构

  1. 数据结构图书
    含义说明是学校图书借阅管理系统的主要数据结构定义了图书的信息
    组成图书编号书名作者出版日期出版社库存剩余量类别
  2. 数据结构读者
    含义说明是学校图书借阅管理系统的主要数据结构定义了借阅者的基本信息
    组成读者编号姓名性别电话号码
    3.数据结构借阅证
    含义说明是学校图书借阅管理系统的主要数据结构定义了借阅证的信息
    组成借阅证号办证日期可借数量
    4.数据结构借还续借
    含义说明是学校图书借阅管理系统的主要数据结构定义了图书借还的详细情况
    组成图书编号借阅证编号读者编号借还日期借还数量是否续借
    5.数据结构规则
    含义说明是学校图书借阅管理系统的主要数据结构定义了规则的详细情况
    组成读者编号图书编号借阅证编号超期天数超期本书超期处罚

二.数据库概念结构设计

2.1数据流图

1.数据流程图
学校图书管理系统数据流程图设计如图2-1所示
在这里插入图片描述

2.系统E-R图
1图书实体E-R图如图2-2所示
在这里插入图片描述

2图书类别实体E-R图如图2-3所示

在这里插入图片描述

3借阅证实体E-R图如图2-4所示

在这里插入图片描述
图2-4 借阅证实体E-R图

4读者实体E-R图如图2-5所示
在这里插入图片描述

图2-5 读者实体E-R图

5规则实体E-R图如图2-6所示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2数据库逻辑结构设计

  1. 学校图书管理系统关系模型
    通过E-R图转换得到关系模型如下
    1 book(book_idbook_nameauthorpubdatepublishpriceinventoryresiduetypeid)
    2 book_type(typeidtypename)
    3 js_crad(js_idperiodread_idstatekj_number)
    4 reader(read_id,read_name,read_sex,read_tel,js_id
    5 borrow_back(js_idread_idbook_idborrowdatedueshf_xvjiejs_counths_counttext_jh)
    6 sf_rule(read_id,book_id,js_id,days,num,mony)
    7 record(jishu, read_id, time, text)
    说明
    1 book关系模型中有9个属性其中book_id书籍编号为主键typeid为外键
    2 book_type表有2个属性其中typeid为主键图书分类
    3 js_crad表有5个属性其中js_id为主键read_id为外键
    4 reader表中有5个属性其中read_id为主键js_id为外键
    5 borrow_back有9个属性其中js_id,read_id,book_id为外键没有主键
    6 sf_rule表有6个属性其中js_id,read_id,book_id为外键没有主键
    7 record表有4个属性其中jishu,为主键。

  2. 关系模型对应的二维表
    1 book表信息如下表所示(书籍信息)
    在这里插入图片描述
    在这里插入图片描述
    3 js_card表信息如下表所示(借阅证信息)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

三.数据库物理结构设计

3.1创建数据库

CREATE DATEBASE library;

3.2创建表同时创建参照完整性约束

3.2.1 book表(图书)

CREATE TABLE book (
book_id INT(10) NOT NULL,
book_name VARCHAR(30) NOT NULL,
author VARCHAR(30) NOT NULL,
pubdate DATE NOT NULL COMMENT ‘出版日期’,
publish VARCHAR(50) NOT NULL COMMENT ‘出版社’,
Price INT(20) NOT NULL,
inventory INT(100) NOT NULL COMMENT ‘总数量’,
residue INT(100) NOT NULL COMMENT ‘剩余量’,
typeid VARCHAR(20) NOT NULL COMMENT ‘书籍类别’,
PRIMARY KEY (book_id),
KEY bo1 (typeid),
CONSTRAINT book_ibfk_1 FOREIGN KEY (typeid) REFERENCES book_type (typeid)
)

3.2.2 book_type表(图书类别)

CREATE TABLE book_type (
typeid VARCHAR(5) NOT NULL,
typename VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (typeid)
)

3.2.3 js_card表(借阅证)

CREATE TABLE js_card (
js_id CHAR(5) NOT NULL,
period DATE DEFAULT NULL COMMENT ‘签证日期’,
read_id VARCHAR(10) DEFAULT NULL,
state VARCHAR(50) DEFAULT NULL COMMENT ‘说明’,
kj_number INT(4) DEFAULT NULL COMMENT ‘可借数量’,
is-kejie VARCHAR(10) DEFAULT NULL COMMENT ‘是否可借’,
PRIMARY KEY (js_id),
KEY read_id (read_id),
CONSTRAINT js_card_ibfk_1 FOREIGN KEY (read_id) REFERENCES reader (read_id)
)

3.2.4 reader表

CREATE TABLE reader (
read_id VARCHAR(10) NOT NULL,
read_name VARCHAR(20) NOT NULL,
read_sex CHAR(2) NOT NULL,
read_tel INT(20) NOT NULL,
js_id CHAR(5) NOT NULL,
PRIMARY KEY (read_id),
KEY 1 (js_id),
CONSTRAINT reader_ibfk_1 FOREIGN KEY (js_id) REFERENCES js_card (js_id)
)

3.2.5 corrow_back表(借还续借)

CREATE TABLE borrow_back (
js_id VARCHAR(10) DEFAULT NULL COMMENT ‘借书证号’,
read_id VARCHAR(10) DEFAULT NULL COMMENT ‘读者编号’,
book_id INT(10) DEFAULT NULL COMMENT ‘书籍编号’,
borrowdate DATE DEFAULT NULL COMMENT ‘出借日期’,
due DATE DEFAULT NULL COMMENT ‘归还日期’,
shf_xvjie TINYINT(4) DEFAULT NULL COMMENT ‘是否续借’,
js_count INT(100) DEFAULT NULL COMMENT ‘借书个数本’,
hs_count INT(100) DEFAULT NULL COMMENT ‘还书个数本’,
text_jh VARCHAR(100) DEFAULT NULL COMMENT ‘借还说明’,
KEY bb1 (js_id),
KEY bb2 (read_id),
KEY bb3 (book_id),
CONSTRAINT bb1 FOREIGN KEY (js_id) REFERENCES js_card (js_id),
CONSTRAINT bb2 FOREIGN KEY (read_id) REFERENCES reader (read_id),
CONSTRAINT bb3 FOREIGN KEY (book_id) REFERENCES book (book_id)
)

3.2.6 sf_rele规则表

CREATE TABLE sf_rule ( read_id varchar(10) DEFAULT NULL,
book_id int(10) DEFAULT NULL COMMENT ‘书籍编号’,
js_id varchar(10) DEFAULT NULL COMMENT ‘借书证号’,
days int(30) DEFAULT NULL COMMENT ‘期限’,
num int(100) DEFAULT NULL COMMENT ‘本书’,
mony varchar(100) DEFAULT NULL COMMENT ‘超期处罚’,
KEY js-id (js_id),
KEY read_id (read_id),
KEY book_id (book_id),
CONSTRAINT sf_rule_ibfk_3 FOREIGN KEY (js_id) REFERENCES js_card (js_id),
CONSTRAINT sf_rule_ibfk_1 FOREIGN KEY (read_id) REFERENCES reader (read_id),
CONSTRAINT sf_rule_ibfk_2 FOREIGN KEY (book_id) REFERENCES book (book_id)

3.2.7 recorf (操作记录表)

CREATE TABLE record (
jishu int(100) NOT NULL AUTO_INCREMENT,
read_id varchar(10) NOT NULL,
time datetime DEFAULT NULL,
text varchar(200) DEFAULT NULL,
PRIMARY KEY (jishu)
)

四.数据库的实现与维护

4.1数据的载入与功能的实现

4.1.1数据的载入

1.book表信息
SQL语句INSERT INTO library.book
VALUES(4, 《底层逻辑》,刘一,2021-12-20, 人民出版社, 34, 100, 100, B1);
结果如下图4-1
在这里插入图片描述

2.js_card表信息

SQL语句INSERT INTO library.js_card
VALUES(a11,2021-12-2,re1,最多借5本不得超期,5);

结果如图4-2所示在这里插入图片描述
3.reader表信息
SQL语句INSERT INTO library.reader
VALUES(re1,刘三,男,199999991a11);
结果如图4-3所示
在这里插入图片描述

4.1.2数据库的功能实现

1.实现信息的添加
结果如图4-4所示
在这里插入图片描述
2. 实现信息的删除
删除操作记录表中读者编号为re3的借还记录
结果如图4-5所示
在这里插入图片描述
3.信息修改操作
UPDATE js_card SET state=‘不得超期10天’ WHERE js_id=‘b11’;
结果如图4-6所示
在这里插入图片描述
4.信息查询操作
SELECT * FROM book_type;
结果如图4-7所示
在这里插入图片描述
5. 创建触发器实现借阅图书时自动更新图书剩余量

CREATE TRIGGER jie_1 – 借书减少剩余量
AFTER INSERT
ON borrow_back
FOR EACH ROW
UPDATE book SET residue=residue-NEW .js_count WHERE book_id=NEW .book_id ;

结果如图4-8所示
在这里插入图片描述
6. 创建触发器实现借阅图书时自动更新借阅证的可借量

CREATE TRIGGER jie_2 – 借书减少借阅证的可借量
BEFORE INSERT
ON borrow_back
FOR EACH ROW
UPDATE js_card SET kj_number=kj_number-NEW .js_count WHERE js_id=NEW .js_id;

结果如图4-9所示
在这里插入图片描述
7. 创建触发器实现还书图书时自动更新图书的剩余量

DELIMITER @@
CREATE TRIGGER huan_1 – 还书增加剩余量
BEFORE UPDATE
ON borrow_back
FOR EACH ROW
BEGIN
IF OLD .due IS NULL AND NEW .due IS NOT NULL
THEN
UPDATE book SET residue=residue+NEW .hs_count WHERE book_id=NEW .book_id;
END IF;
END @@

在这里插入图片描述

8.创建触发器实现归还图书时自动更新借阅卡的可借量

CREATE TRIGGER huan_2 – 还书增加借阅卡的可借量
BEFORE UPDATE
ON borrow_back
FOR EACH ROW
UPDATE js_card SET kj_number=kj_number+NEW .hs_count WHERE js_id=NEW .js_id;

结果如图4-11所示
在这里插入图片描述
9. 创建触发器实现借还图书时记录的自动更新

DELIMITER@@-- 创建触发器实现借还续借时记录的自动更新
CREATE TRIGGER record222
AFTER UPDATE ON borrow_back
FOR EACH ROW
BEGIN
INSERT INTO record
VALUES(NULL,NEW .read_id,NOW(),NEW .text_jh);
END@@

结果如图4-12所示
在这里插入图片描述
11.创建存储过程查询指定读者的借书情况

DELIMITER @@
CREATE PROCEDURE reader_xx(IN a VARCHAR(10))
BEGIN
SELECT * FROM record WHERE read_id=a ;
END@@

结果如图4-14所示
在这里插入图片描述
12.创建视图查询图书的书籍编号书籍名称库存量剩余量

CREATE VIEW v_book
AS
SELECT book_id AS 书籍编号 ,book_name 书籍名称,
inventory库存量,residue 剩余量
FROM book;
结果如图4-15所示
在这里插入图片描述

13.查找超期10天的人

SELECT *,TIMESTAMPDIFF(DAY,borrowdate,due)-10 超期天数
FROM borrow_back
WHERE TIMESTAMPDIFF(DAY,borrowdate,due)>=10;

结果如图4-16所示
在这里插入图片描述
14.创建存储过程计算罚款金额

DELIMITER @@
CREATE PROCEDURE mony(IN c VARCHAR(10))
BEGIN
SELECT , 0.2days*num AS 罚款金额 FROM sf_rule WHERE js_id=c;
END@@

DELIMITER ;
CALL mony(‘a11’);

结果如图4-17所示
在这里插入图片描述

五.数据库的转储与恢复

1.在数据库中备份数据文件名为myemployees.sql
如图5-1所示
在这里插入图片描述
2.转储与备份的导入
如图5-2所示
在这里插入图片描述

六.总结

对于这次的学校图书借阅管理系统的设计上还存在一些细化的问题该系统只能满足一般的功能需求存在一定的缺陷。比如先在借还表中查找借书逾期人员然后需要手动将信息导入规则表中。
在读者进行借书时缺少权限的设置。应该创建一个存储过程传入借阅证号和书籍编号没有图书时输出“该书籍不存在”借阅证的可借量为0时输出“该卡不能借阅”。但对于数据库语法不够熟练出错太多该功能未能实现
最后感谢老师和同学的指导和帮助以后我会更加用心学习知识并运用到实际中。

参考文献
[1]数据库原理及应用MySQL版微课视频版/李月军付良延编著.—北京清华大学出版社20192021.2重印.
[2] 钱雪忠、陈国俊等数据库原理及应用实验指导[M].北京:北京邮电大学出版社2015.

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql