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功能模块简介
1.3.2功能需求描述
- 借阅功能:
图书出借时考虑三个问题:
读者是否因为超期、罚款等情况被关闭了借阅权限;
读者是否已经借满其限额。
该书是否不在库中;
如果不存在以上情况,则可以出借。
- 预约功能:
读者想借的书如果不在库中(已经被出借),读者可以预约该图书,当该图书被归还时系统给读者发送邮件,提醒他来借阅,此时其他读者也可以借阅该书。
- 续借功能:
读者还书的时候可以续借该图书,续借的过程包括先执行还书操作,再执行借阅操作。
- 发送催还邮件:
管理员可以发送邮件提醒读者到期还书。
- 读者管理功能:
对读者信息进行查看、添加、修改、删除。将读者分为不同类别,赋以不同权限。
- 系统管理功能:
对管理员的登录账号、密码进行添加、修改、删除。
- 借阅规则管理功能:
对图书借阅规则进行查看、添加、修改、删除。
- 概念结构设计
2.画E-R图
(1)图书实体E-R图
(2)图书类别实体E-R图
(3)借阅证实体E-R图
(4)读者实体E-R图
(5)规则实体E-R图
(6)记录实体E-R图
(7)学校图书借阅管理系统E-R图
3.逻辑结构设计
学校图书管理系统关系模型
通过E-R图转换得到关系模型如下:
图书(书籍编号,书籍名称,作者,出版日期,出版社,价格,储存量,剩余量)
图书类别(类别编号,类别名称)
借阅证(借阅证号,办证日期,读者编号,说明,可借数量)
读者(读者编号,读者姓名,读者性别,读者电话,借阅证号)
借还(借读证编号,读者编号,书籍编号,借书日期,还书日期,是否续借,借书数量,还书数量,说明)
规则(读者编号,读者姓名,借阅证号,超期天数,本书,超期罚款)
记录表(序号,读者编号,记录时间,说明)
4.物理结构设计
图书表
书籍类别表
借阅证表
读者表
借还表
规则表
记录表
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','');
删除数据
delete from record where read_id='rw1';
修改数据
UPDATE js_card SET state='不得超期10天' WHERE js_id='001';
查询数据
SELECT * from book_type;
存储过程
create procedure proc_borrow_book(IN a char(4),IN b int, IN m int,OUT state varchar(20))begindeclare 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 thenselect count(book_id) INTO book_count from book where book_id=b;if book_count >0 thenselect inventory INTO stock from book where book_id=b;if stock >= m thenset state='借书成功';elseset state='库存不足';end if; elseset state = '图书不存在';end if;elseset state = '非学校人员';end if;end;
触发器
创建触发器实现借阅图书时,自动更新图书剩余量CREATE TRIGGER jie_1AFTER INSERTON borrow_backFOR EACH ROWUPDATE book SET residue=residue-NEW .js_count WHERE book_id=NEW .book_id ;创建触发器实现借阅图书时,自动更新借阅证的可借量CREATE TRIGGER jie_2BEFORE INSERTON borrow_backFOR EACH ROWUPDATE js_card SET kj_number=kj_number-NEW .js_count WHERE js_id=NEW .js_id;创建触发器实现还书图书时,自动更新图书的剩余量DELIMITER @@CREATE TRIGGER huan_1BEFORE UPDATEON borrow_backFOR EACH ROWBEGINIF OLD .due IS NULL AND NEW .due IS NOT NULLTHENUPDATE book SET residue=residue+NEW .hs_count WHERE book_id=NEW .book_id;END IF;END @@
6.总结
这个图书馆系统我写了好长时间,而且也改了很多次,因为写的不是这不完整就是那不完整,总会有一些问题,第一次写的时候,一次就只能增加一条信息,第二次写的时候又出现了错误,增加信息是无限循环,总之,出现了很多错误,来来回回改了无数次,我学到很多知识,也学会如何去写一个完整的系统,写系统时应该注意什么。
我们写这个图书管理系统,就是一个很大的挑战我们都要去勇敢的迎接挑战,写代码过程中,我们也会遇到很多问题,我们应该去慢慢解决,不是后退,因为只有我们练得多了,解决的问题多了,才会有掌握写代码的技巧。我们也要相信自己,对自己有自信,还应该多花时间去学好我们的专业课。