关于书籍管理系统数据库课程设计

本文阅读 12 分钟
首页 Linux,系统 正文

系统概述

该系统用以收集、存储书籍信息、人员(读者、图书管理员)信息、图书借阅信息以及意外处理信息,并及时记录存储各个环节信息的变更,以便管理、查询、显示、输出,以节约大量的人力物力,有力保障图书馆日常事务的高效运作。

需求分析与概念结构设计

系统要求提出:图书馆是一家所有工作手工操作的图书管理,随着计算机的发展,更多的图书馆采用计算机图书管理系统来实现,这样可以得到更好的管理。设计一从采购编目一流通管理体化的图书馆系统。 主要表现:

  1. 采购,对新书的目录,要查存,判断图书馆是不是已经订过了,要人工查阅帐本完成,是很麻烦的事。
  2. 验证,要填写两个帐本和盖章,而且在帐本上面很多信息是重复的。 3.编书码,通过手工对书编码,对不同种类的书都要查找书是否已有,如果没有话对新的书进行查阅中图法宝典来要编码,并且在查询该图书时还需判断是否被借走等。 4.流通,在借书的时候通过注册填写学号和自设密码借书:在还书的时候工作人员先要花一定时间确认被借书的完好和完整性,如若损坏,需要求借书者采取相应的补偿措施。 5.统计书的阅读次数、当天的借还数目等很多统计信息。 系统总体需求: 通过调研了解到: 1)图书馆希望能够把刚购新的书籍编目并且不重复,且编码信息需反应书的一定信息,并可以快速查找书籍
  3. 图书馆希望能够用计算机进行各种快速查找。
  4. 图书馆希望使用条码枪来实现图书的借还书籍。
  5. 图书馆希望通过能统计大量的以前无法统计的数据,方便管理。 对系统的要求: 图书馆提出的要求,结合我们的技术建议再加以考虑,产生了该管理信息系统 的功能要求: 1)、收集、存储书籍信息 2)储存意外处理信息 3)、储存人员(读者、图书管理员)信息 4)、储存图书借阅信息

逻辑结构设计

E-R图及逻辑结构分析

借还书系统: img

意外处理系统: img

书籍系统: img

图书管理员系统: img

图书管理系统总体E-R图: img

ER图分析 E-R图主要有书籍、图书管理员、读者三个实体。 其中书籍有书籍编号、书名、作者、类别、书架号(即该书籍所存放的地方)、出版社、在库状态这几个属性。书籍编号具有唯一性,我们可以根据书籍编号直接找到对应的书籍,以及该书籍的在库状态。图书管理员设有账号、密码、姓名以及联系方式这四个属性。每个账号有其相应的密码。图书管理员用账号密码登录后,拥有读取和修改书籍信息的权利。显然,书籍与图书管理员之间是多对多的联系,这点可从图中看出。 对于每一个读者,他们都有自己的学号与密码。用读者的账号密码登录,可以查看存书信息但不能修改书籍信息,这确保了数据库的安全性。除账号密码外,读者还有姓名、联系方式。 读者借书、还书、意外处理等操作需要再建立相应的表去储存借/还书和意外处理的信息。借书的时候需要明确记录读者所借书籍的编号、借书读者的编号、借书日期和应该还书的日期,实际归还的日期。还书时,同样要记录下读者所还书籍编号、还书读者的编号、还书日期。若是出现超过应该还书的日期还未归还图书,或者图书损坏、丢失等情况,意外处理机制就开始发挥作用了。 意外处理的记录中,应记录好借书读者的编号、发生意外的图书编号、意外类别和所对应的处理方法。以便图书管理员更好地管理图书。 设计表: img

Book表: img Borrow表: img

Accident表: img

Manager表: img

Reader表: img

关系的码已用下划线标出。 1.书籍(书籍编号,书名,作者,类别,书架号,出版社,在库状态) 2.读者(学号,密码,姓名,联系方式) 3.图书管理员(账号,密码,姓名,联系方式) 4.借书管理(书籍编号,学号,借阅日期,应还日期,还书日期) “学号” 是外码,被参照表是 “读者” 表 “书籍编号” 是外码,被参照表是 “书籍” 表 5.意外处理(书籍编号,学号,意外类别,处理方法) “学号” 是外码,被参照表是 “读者” 表 “书籍编号” 是外码,被参照表是 “书籍” 表

物理结构设计 以下均是由MySQL数据库实现 插入数据: img img img img img Book表: (1) 为书名设计索引(升序):

create index index_name on book(b_name asc);

(2) 为书架设计索引(升序)

create index index_brn on book(b_brn asc);

reader表: (1)为读者姓名设计一个索引(降序):

alter table reader add index index_name(r_name desc);

borrow表: (1) 为outday设计索引(升序)

create index index_outday on borrow(outday asc);

(2) 为r_inday设计索引(升序)

create index index_rinday on borrow(r_inday asc);

accident表: (1) 为r_num创建索引(升序):

create index index_rnum on accident(r_num asc);

(2) 为b_no创建索引(升序):

create index index_bnum on accident(b_no asc);

索引说明:创建索引以便查找,为book表创建让书籍名字升序排列即可快速查看书籍的信息,同样的书籍编号也是如此;reader表中为读者姓名创建索引让寻找指定名字的学生更加快捷,同样的可以根据需求设计读者编号为索引;为borrow表设计索引,让outday降序排列,可以知道最近的借书情况,让r_inday降序排列可以知道最近的换书情况,以便图书管理员管理。

设计视图 (1) 在book,borrow,reader表创建全面信息视图reader_borrow

create view reader_borrow as 
select reader.r_num, reader.r_name, book.book_no, book.book_name, book.book_name,borrow.outday
    from student, book, borrow
    where reader.r_num = borrow.r_num and book.b_no = borrow.b_no;

img (2) 在book和accident表中创建视图,查询受过意外处理的书籍并显示读者

create view book_acc as
select book.b_no,book.b_name,accident.acc,accident.deal,reader.r_num,reader.r_name,reader.r_phone
from reader,book,accident
where reader.r_num = accident.r_num and book.b_no = accident.b_no;

img (3) 在book和borrow表中创建视图,查询所有借书的人和对应借书的书号和名字

create view readerbo as
select reader.r_num,reader.r_name,borrow.b_no,book.b_name
from reader, book, borrow
where reader.r_num = borrow.r_num and book.b_no = borrow.b_no;

img 设计触发器 设计一个触发器,一旦borrow表中插入一组元素(即有读者借到了相应的书)就把book表(那本借到的书)中的书籍在库状态改为no

create trigger borrowjud
after insert on borrow 
for each row
    begin
        update book set b_jud = 'no' 
        where book.b_no = new.b_no;
    end

以下为功能显示 : 未借书前书库水浒传的在库状态是yes: img 当borrow表中新建一个元素后: img 执行

insert into borrow VALUES('1103','20170205',"2020-11-19","2020-12-19",null)

borrow表变为 img 再看book表中属性改变: img 触发器功能完成

(2)设计一个触发器,当borrow表中的实际归还日期被更新为非空时,那么就将book表中的b_jud字段给为yes(在库)

create trigger setyes
after UPDATE on borrow
for each row
begin
if new.r_inday is not null then
update book set b_jud ='yes'
where book.b_no = old.b_no;
end if;
end;

以下是setyes触发器的功能显示: Borrow表中未更新前,被选择的1103书籍的实际归还日期为null(未归还) img Book表中的书籍显示不在库 img 当更新1103的数据r_inday为非空时 img 再看book表中的在库状态为yes img 触发器功能完成

存在的问题和设想建议: 解决了数据的存储问题,对表的拆分,尽量的减少了冗余的数据,表级索引的设计,让查询更加方便。但是还存在问题; (1) 统计同一作者的书或者同一出版社的书时,需要对book表进行全表检索,如果数据较多,需要耗费较长的时间,可以对表进行进一步的拆分或者新建一个表出来,统计同属性的书籍数量。 (2) 可以添加一个诚信管理表,对所有有借书记录的读者进行分类,然后划分等级,如果诚信等级太低,不提供借书服务,读者每次归还书籍时书籍发生损坏或者丢失会降低诚信等级,对逾期未还的读者也会降低诚信等级。 (3) 可以添加一个触发器,每一天完全检索borrow表,将当日的时间与应还的时间做比较,如果当日的时间在应还日期之后,则记录下这本书的编号和所借的读者编号,做逾期出处理,并提醒管理员与读者联系

对于第一个设想,个人觉得也可用视图来完成,对于第二个和第三个,个人觉得可以用触发器实现。首先在borrow中添加一个jud属性,用于判断单次借书记录是否逾期,逾期则输入yes,否则no,在reader表中添加一个hon属性,用于存储信誉值,每次新增初始值都是100,实现一个每24小时运行一次的触发器,检索borrow表中当日应还但是未还的日期,找到对应的借书者,扣除一定的信誉分,再实现一个触发器,每当accident表中新增一个值,就将对应的编号的读者信誉分扣除一定的值,具体的代码实现留给读者吧

以上是入坑数据库做的第一个设计,还有很多需要改进和完善,虽然只是一个课程设计,但是也是能力的锻炼,有什么需要改进的地方希望大家多多交流,仅供参考!

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/m0_46435741/article/details/111599597
-- 展开阅读全文 --
Redis底层数据结构--跳跃表
« 上一篇 04-28
BUUCTF Web [强网杯 2019]随便注
下一篇 » 06-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复