北冰洋以北 发表于 2024-6-15 01:29:55

MySQL 图书管理系统

1.需求分析

1.1项目需求分析简介

1.1.1信息需求分析

(1) 图书信息:包括书籍编号,书籍名称,出版社,作者,库存量,出版日期,价格,库存,剩余量,种别等;
(2) 借阅证信息:包括借阅证编号,办证日期,可借数目等;
(3) 读者信息:读者编号,读者姓名,读者性别,读者电话
(4) 图书借还信息:包括图书编号,借阅证编号,读者编号,借阅日期,借阅数目,归还日期,归还数目,超期天数,罚款金额等;
1.1.2功能需求

学校图书借阅系统重要由:图书信息管理,读者信息管理,借阅证信息管理,借还信息管理,规则信息等模块组成。进入改系统后,用户可以对系统中的信息进行添加、修改、删除、查询等操作,包括以下功能:
(1) 图书信息管理模块:对图书信息进行增、删、改、查等操作;
(2) 读者信息管理模块:对读者信息进行增、删、改、查等操作;
(3) 借阅证信息管理模块:增加办卡,注销借阅卡等操作;
(4) 借还信息管理模块:进行借书、续借、还书等操作,查找出逾期的人及其逾期的天数;
(5) 操作记录管理模块:对读者的借,还,续借进行及时记录,便于管理员查找出指定读者的全部借阅记录。
(6) 规则信息管理模块:记录借书逾期的人及其逾期的天数,罚款。
1.2数据字典

1.2.1数据结构

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

1.3.1功能模块简介

https://img-blog.csdnimg.cn/bc33587b251c43049fde5ce7e05f10b5.jpeg
1.3.2功能需求描述


[*]借阅功能:
图书出借时思量三个问题:
读者是否由于超期、罚款等情况被关闭了借阅权限;
读者是否已经借满其限额。
该书是否不在库中;
如果不存在以上情况,则可以出借。

[*]预约功能:
读者想借的书如果不在库中(已经被出借),读者可以预约该图书,当该图书被归还时系统给读者发送邮件,提醒他来借阅,此时其他读者也可以借阅该书。

[*]续借功能:
读者还书的时间可以续借该图书,续借的过程包括先执行还书操作,再执行借阅操作。

[*]发送催还邮件:
管理员可以发送邮件提醒读者到期还书。

[*]读者管理功能:
对读者信息进行查看、添加、修改、删除。将读者分为差别种别,赋以差别权限。

[*]系统管理功能:
对管理员的登录账号、密码进行添加、修改、删除。

[*]借阅规则管理功能:
对图书借阅规则进行查看、添加、修改、删除。

[*]概念结构设计
2.画E-R图

(1)图书实体E-R图
 
https://img-blog.csdnimg.cn/bcd256905bea41f18e4f2db8cb25be2c.png
(2)图书种别实体E-R图
https://img-blog.csdnimg.cn/44dcf7b60e1a4d9ca20e665ffafa1055.png
 
(3)借阅证明体E-R图
https://img-blog.csdnimg.cn/25e4b5c7d15e4fa8bd7409b63445703e.png
(4)读者实体E-R图
https://img-blog.csdnimg.cn/a9c0e1facc684026a816def976d8d0bc.png
(5)规则实体E-R图
https://img-blog.csdnimg.cn/1deadeddfb274fafb20ceabc0973c256.png
(6)记录实体E-R图
https://img-blog.csdnimg.cn/9b0224d879a74df7a9b59b549c331cc3.png
(7)学校图书借阅管理系统E-R图
https://img-blog.csdnimg.cn/3a8fcb5b43874b40bbcfcc5892e6172d.png
 3.逻辑结构设计

学校图书管理系统关系模型
通过E-R图转换得到关系模型如下:
图书(书籍编号,书籍名称,作者,出版日期,出版社,价格,储存量,剩余量)
图书种别(种别编号,种别名称)
借阅证(借阅证号,办证日期,读者编号,说明,可借数目)
读者(读者编号,读者姓名,读者性别,读者电话,借阅证号)
借还(借读证编号,读者编号,书籍编号,借书日期,还书日期,是否续借,借书数目,还书数目,说明)
规则(读者编号,读者姓名,借阅证号,超期天数,本书,超期罚款)
记录表(序号,读者编号,记录时间,说明)
4.物理结构设计

图书表
https://img-blog.csdnimg.cn/ff6474ecceb8434a9c0aa45ca62303ce.png
书籍种别表
https://img-blog.csdnimg.cn/ad7b24cf139f475faffa44a942e70603.png
借阅证表
https://img-blog.csdnimg.cn/6d9f36c6d66f41c88c997f326b28f0b4.png
读者表
https://img-blog.csdnimg.cn/196913ebfe814a90892288b42278447f.png
借还表
https://img-blog.csdnimg.cn/24e795845ef2416e912c9c7264a7d733.png
规则表
https://img-blog.csdnimg.cn/fa9b0afc3ce14ea2acfd7c34de74a198.png
记录表
https://img-blog.csdnimg.cn/24261c14b4634db4911c963e446fc4e4.png
  5.数据库实施

  创建数据库:
CREATE database tushuguanli;
创建图书表:
use tushuguanli;

CREATE TABLE book (

book_id INT(10) NOT NULL,

book_name VARCHAR(30) NOT NULL,

author VARCHAR(30) NOT NULL,

pubdate DATE NOT NULL ,

publish VARCHAR(50) NOT NULL ,

Price INT(20) NOT NULL,

inventory INT(100) NOT NULL ,

residue INT(100) NOT NULL ,

typeid VARCHAR(20) NOT NULL ,

PRIMARY KEY (book_id),

KEY bo1 (typeid),

CONSTRAINT book_ibfk_1 FOREIGN KEY (typeid) REFERENCES book_type (typeid)

) 创建图书种别表:
CREATE TABLE book_type (

typeid VARCHAR(5) NOT NULL,

typename VARCHAR(100) DEFAULT NULL,

PRIMARY KEY (typeid)

) 创建借阅证表:
CREATE TABLE js_card (

js_id CHAR(5) NOT NULL,

period DATE DEFAULT NULL,

read_id VARCHAR(10) DEFAULT NULL,

state VARCHAR(50) DEFAULT NULL,

kj_number INT(4) DEFAULT NULL,

kejie VARCHAR(10) DEFAULT NULL,

PRIMARY KEY (js_id),

KEY read_id (read_id),

CONSTRAINT js_card_ibfk_1 FOREIGN KEY (read_id) REFERENCES reader (read_id)

) 创建读者表:
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 js_id (js_id),

CONSTRAINT reader_ibfk_1 FOREIGN KEY (js_id) REFERENCES js_card (js_id)

) 创建借还表:
CREATE TABLE borrow_back (

js_id VARCHAR(10) DEFAULT NULL,

read_id VARCHAR(10) DEFAULT NULL,

book_id INT(10) DEFAULT NULL,

borrowdate DATE DEFAULT NULL,

due DATE DEFAULT NULL,

shf_xvjie TINYINT(4) DEFAULT NULL,

js_count INT(100) DEFAULT NULL,

hs_count INT(100) DEFAULT NULL,

text_jh VARCHAR(100) DEFAULT NULL,

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)

) 创建规则表:
CREATE TABLE sf_rule (

read_id varchar(10) DEFAULT NULL,

book_id int(10) DEFAULT NULL,

js_id varchar(10) DEFAULT NULL,

days int(30) DEFAULT NULL,

num int(100) DEFAULT NULL,

mony varchar(100) DEFAULT NULL,

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)

)
创建操作记录表:
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)

) 增加数据
INSERT into js_card VALUES('003','2021-03-29','rw3','最多借五本','5',''); https://img-blog.csdnimg.cn/0fc11f26d28744e892b0eccd8f5a9db8.png
删除数据
delete from record where read_id='rw1'; https://img-blog.csdnimg.cn/903278fbf2b7461cb93cd8535ceda047.png
修改数据
UPDATE js_card SET state='不得超期10天' WHERE js_id='001'; https://img-blog.csdnimg.cn/d76e00b9e136436a9c4904a2b6942a68.png
查询数据
SELECT * from book_type; https://img-blog.csdnimg.cn/c17fb69c25e942bb8dda86b6aa2485cc.png
存储过程
create procedure proc_borrow_book(IN a char(4),IN b int, IN m int,OUT state varchar(20))

begin

    declare read_count int default 0;

    declare book_count int default 0;

    declare stock int default 0;

    select count(read_id) INTO read_count from reader where read_id=a;

    if read_count>0 then

        select count(book_id) INTO book_count from book where book_id=b;

        if book_count >0 then

              select inventory INTO stock from book where book_id=b;

              if stock >= m then

                  set state='借书成功';

              else

                  set state='库存不足';

              end if;             

        else

              set state = '图书不存在';

        end if;

    else

        set state = '非学校人员';

    end if;

    end; https://img-blog.csdnimg.cn/7039933e6f5347688ae581d11fab17fe.png
触发器
创建触发器实现借阅图书时,自动更新图书剩余量

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 ;

 创建触发器实现借阅图书时,自动更新借阅证的可借量

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;

创建触发器实现还书图书时,自动更新图书的剩余量

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 @@   6.总结

这个图书馆系统我写了好长时间,而且也改了很多次,由于写的不是这不完备就是那不完备,总会有一些问题,第一次写的时间,一次就只能增加一条信息,第二次写的时间又出现了错误,增加信息是无限循环,总之,出现了很多错误,来来回回改了无数次,我学到很多知识,也学会如何去写一个完备的系统,写系统时应该留意什么。
我们写这个图书管理系统,就是一个很大的挑战我们都要去勇敢的接待挑战,写代码过程中,我们也会遇到很多问题,我们应该去渐渐解决,不是后退,由于只有我们练得多了,解决的问题多了,才会有把握写代码的本领。我们也要相信自己,对自己有自大,还应该多花时间去学好我们的专业课。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MySQL 图书管理系统