Oracle,
Oracle,
【2019.06.01第一版】功能布局:
【2019.06.15第二版】功能布局:
【2019.06.05第一版】关系表布局:
【2019.06.11第一版】E-R图:
【约束以及各表之间的联系】
一:图书的借阅与归还
1. 用户通过自己的学号和图书号完成借阅
2. 用户通过图书号(图书号唯一)即可完成书籍的归还
3. 借阅表中数据处于一直累加状态(没有删除操作),便于后期查询用户的借阅情况
4. 借阅成功->向借阅表中添加ID、BOOK_ID和借书时间(SYSDATE)
T4. 借书成功时(向借阅表中成功添加数据后),触发器启用,更改BOOK表中的图书在馆状态为“借出” + 图书借出次数加一
5. 还书时,通过BOOK_ID更新BORROW表中的还书时间(RETURN_TIME)
T5. BORROW表更新后(说明由图书归还),触发器启用,更改更改BOOK表中的图书在馆状态为“在馆”:#原版 CREATE OR REPLACE TRIGGER TRI_BORROW AFTER INSERT OR UPDATE ON BORROW FOR EACH ROW BEGIN IF INSERTING THEN UPDATE BOOK SET BOOK_STATUS='借出' WHERE BOOK_ID = :NEW.BOOK_ID; UPDATE BOOK SET BOOK_TIMES=BOOK_TIMES+1 WHERE BOOK_ID = :NEW.BOOK_ID; END IF; IF UPDATING THEN UPDATE BOOK SET BOOK_STATUS='在馆' WHERE BOOK_ID = :OLD.BOOK_ID; END IF; END; /
上述5操作由于主键为读者号以及图书号,再加之数据没有删除,会导致同一个同学在还书后无法再借阅该本书(借阅表无法插入)
5. (解决方案)新建“借阅记录表”存储用户的所有借阅操作,原有借阅表当用户还书时删除该条记录
修改版触发器(1-2-5):
当用户借书时,首先写入borrow_all表,然后触发写入borrow并同时更改reader表
当用户还书时,首先写入borrow_all表,然后触发删除borrow该条记录并同时更改reader表#修改版 create or replace TRIGGER TRI_BORROW_ALL AFTER INSERT OR UPDATE ON BORROW_ALL FOR EACH ROW BEGIN IF INSERTING THEN UPDATE BOOK SET BOOK_STATUS='借出' WHERE BOOK_ID = :NEW.BOOK_ID; UPDATE BOOK SET BOOK_TIMES=BOOK_TIMES+1 WHERE BOOK_ID = :NEW.BOOK_ID; INSERT INTO BORROW VALUES(:NEW.ID,:NEW.BOOK_ID,:NEW.BORROW_TIME,NULL); END IF; IF UPDATING THEN UPDATE BOOK SET BOOK_STATUS='在馆' WHERE BOOK_ID = :OLD.BOOK_ID; DELETE FROM BORROW WHERE BOOK_ID = :OLD.BOOK_ID; END IF; END; / --下方为测试 DROP TRIGGER TRI_BORROW_ALL; INSERT INTO BORROW_ALL VALUES(179074998,1000027,SYSDATE,NULL); UPDATE BORROW_ALL SET RETURN_TIME = SYSDATE WHERE BOOK_ID=1000027;
附加:
1. 借书前查询用户余额,余额>0时才可以借阅图书,否则提示“余额不足!”
二:用户的充值
1. 获取用户ID与待充值金额,对READER表的BALANCE进行更新
三:图书借阅情况查询
1. 根据书籍编号查询图书在馆状态
1> 确认书籍编号有效
2> 查询显示
2. 根据读者编号查看该读者账号下借阅的所有书籍
1> 确认读者编号的有效性
2> 查询BORROW表的数据并显示
四:数据库“日志”的查看
(这里的“日志”指的是:Borrow_All表,即存储所有借书还书记录的表)
1. 单击“查看日志按钮”替换主界面的表格数据显示
>>>>>>>引申<<<<<<<<
2. 单击主窗体的每一个按钮,主窗体的表格会发生替换(功能完善)
1> 单击用户管理->表格替换为用户表
2> 单击图书借阅/归还->表格替换为图书表
3> 单击图书借阅情况查询->表格替换为借阅表(实际)
评论暂时关闭