图书管理系统

一个简易的图书借阅管理的框架,可以查询图书超期时间等信息

代码如下

CREATE TABLE 读者表(读者编号 CHAR(12) NOT NULL PRIMARY KEY, 读者姓名 VARCHAR(12) NOT NULL, 性别 ENUM('男','女') DEFAULT'男' NOT NULL, 联系方式 INT NOT NULL, 借阅次数 INT NOT NULL DEFAULT'0', 总借阅天数 INT NOT NULL DEFAULT'0' )CREATE TABLE 图书表(图书编号 CHAR(12) NOT NULL PRIMARY KEY, 图书名 VARCHAR(20) NOT NULL, 作者 VARCHAR(10), 馆藏数量 INT NOT NULL DEFAULT'100', 出版社 VARCHAR(20)  NULL)CREATE TABLE 借阅表 (读者编号 CHAR(12) NOT NULL, 图书编号 CHAR(12) NOT NULL, 借书日期 DATE, 还书日期 DATE, PRIMARY KEY(读者编号,图书编号), FOREIGN KEY(读者编号) REFERENCES 读者表(读者编号), FOREIGN KEY(图书编号) REFERENCES 图书表(图书编号))ALTER TABLE 借阅表 ADD 应还日期 DATE/*1*/SELECT 读者表.读者编号,读者姓名,图书名,借书日期FROM 借阅表 JOIN 读者表 ON  借阅表.读者编号=读者表.读者编号JOIN 图书表 ON 借阅表.图书编号=图书表.图书编号WHERE 还书日期 IS NULL/*2*/SELECT 读者表.读者编号,读者姓名,图书名,DATEDIFF(NOW(),应还日期) AS 超期天数FROM 借阅表 JOIN 读者表 ON  借阅表.读者编号=读者表.读者编号JOIN 图书表 ON 借阅表.图书编号=图书表.图书编号WHERE NOW()>应还日期 AND 还书日期 IS NULL/*3*/SELECT 图书名,馆藏数量,图书编号FROM 图书表WHERE 图书名 LIKE '%数据库%'/*(4)创建一个视图,包含每个读者编号、姓名、借阅图书次数、总借阅天数,结果按借阅图书次数降序排列,次数相同的,按总借阅天数降序排列;*/CREATE VIEW grxx(读者编号,读者姓名,借阅次数,总借阅天数)ASSELECT 读者编号,读者姓名,借阅次数,总借阅天数FROM 读者表ORDER BY 借阅次数 DESC ,总借阅天数 DESCCREATE TRIGGER jscs AFTER INSERTON 借阅表 FOR EACH ROWBEGINif(SELECT 借阅次数 FROM 读者表 WHERE 读者编号=new.读者编号)is NULLTHEN UPDATE 读者表 SET 借阅次数=1 WHERE 读者编号 =new.读者编号;ELSEUPDATE 读者表 SET 借阅次数=借阅次数+1 WHERE 读者编号=new.读者编号;END IF;endCREATE TRIGGER jytsAFTER UPDATEON 借阅表 FOR EACH ROWBEGINUPDATE 读者表 SET 总借阅天数=总借阅天数+(SELECT DATEDIFF(还书日期,借书日期) FROM 借阅表 WHERE 读者编号=new.读者编号 AND 图书编号=new.图书编号)WHERE 读者编号=new.读者编号;END/*5)创建存储过程,实现图书归还功能:输入:读者号、书号  ---表示某读者归还某图书1)如果不存在该读者借阅该图书并且未归还的记录,输出“无此借阅记录!”;2)否则,登记该读者归还该图书的归还时间,输出“成功归还”,将该图书馆藏数量加1,同时,判断是否为超期归还,如果为超期归还,输出超期罚款金额(罚款标准:每超期一天,每本书罚款0.1元),如果非超期归还,输出超期罚款金额0。*/CREATE PROCEDURE 图书归还(IN dno VARCHAR(20),IN bno VARCHAR(20),OUT S VARCHAR(20),OUT M DECIMAL(4,1))BEGINIF  EXISTS (SELECT * FROM 借阅表 WHERE 读者编号=dno AND 图书编号=bno)THEN   UPDATE 借阅表 SET 还书日期=NOW() WHERE 读者编号=dno AND 图书编号=bno; UPDATE 图书表 SET 馆藏数量=馆藏数量+1 WHERE 图书编号=bno; SET S='成功归还'; IF (SELECT DATEDIFF(还书日期,应还日期) FROM 借阅表 WHERE 读者编号=dno AND 图书编号=bno)>0THEN SET M=0.1*(SELECT DATEDIFF(还书日期,应还日期)FROM 借阅表 WHERE 读者编号=dno AND 图书编号=bno);ELSE SET M=0.0;END IF;ELSE SET S='无借阅记录';END IF;ENDDROP PROCEDURE 图书归还CALL 图书归还('01','002',@q,@d)SELECT @q,@d;ALTER TABLE 借阅表 ADD 本次罚款金额 DECIMAL(3,1);ALTER TABLE 借阅表 ADD 本次超期天数 INT;/*关于向表格中添加数据的触发器*/CREATE TRIGGER 超期BEFORE UPDATE ON 借阅表FOR EACH ROWBEGINIF (SELECT DATEDIFF(new.还书日期,new.应还日期) FROM 借阅表 WHERE 读者编号=new.读者编号AND 图书编号=new.图书编号 )<0THEN SET new.本次超期天数=0;ELSESET new.本次超期天数=DATEDIFF(new.还书日期,new.应还日期);END IF;END/*超期触发器要优于罚款触发器触发*/CREATE TRIGGER 罚款BEFORE UPDATE ON 借阅表FOR EACH ROWBEGIN SET new.本次罚款金额=0.1*new.本次超期天数;END/*触发器*/CREATE TRIGGER 借阅图书BEFORE INSERT ON 借阅表FOR EACH ROWBEGIN SET new.借书日期=NOW(); SET new.应还日期=DATE_ADD(NOW(),INTERVAL 50 DAY); UPDATE 图书表 SET 馆藏数量=馆藏数量-1 WHERE 图书编号=new.图书编号;ENDDROP TRIGGER 借阅图书

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值