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

系统概述

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

需求分析与概念结构设计

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

  1. 采购,对新书的目录,要查存,判断图书馆是不是已经订过了,要人工查阅帐本完成,是很麻烦的事。

  2. 验证,要填写两个帐本和盖章,而且在帐本上面很多信息是重复的。

    3.编书码,通过手工对书编码,对不同种类的书都要查找书是否已有,如果没有话对新的书进行查阅中图法宝典来要编码,并且在查询该图书时还需判断是否被借走等。

    4.流通,在借书的时候通过注册填写学号和自设密码借书:在还书的时候工作人员先要花一定时间确认被借书的完好和完整性,如若损坏,需要求借书者采取相应的补偿措施。
    5.统计书的阅读次数、当天的借还数目等很多统计信息。
    系统总体需求:
    通过调研了解到:
    1)图书馆希望能够把刚购新的书籍编目并且不重复,且编码信息需反应书的一定信息,并可以快速查找书籍

  1. 图书馆希望能够用计算机进行各种快速查找。
  2. 图书馆希望使用条码枪来实现图书的借还书籍。
  3. 图书馆希望通过能统计大量的以前无法统计的数据,方便管理。
    对系统的要求:
    图书馆提出的要求,结合我们的技术建议再加以考虑,产生了该管理信息系统
    的功能要求:
    1)、收集、存储书籍信息
    2)储存意外处理信息
    3)、储存人员(读者、图书管理员)信息
    4)、储存图书借阅信息

逻辑结构设计

E-R图及逻辑结构分析

借还书系统:

意外处理系统:

书籍系统:

图书管理员系统:

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

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

Book表:

Borrow表:

Accident表:

Manager表:

Reader表:

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

物理结构设计
以下均是由MySQL数据库实现
插入数据:





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.outdayfrom student, book, borrowwhere reader.r_num = borrow.r_num and book.b_no = borrow.b_no;


(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;


(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;


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

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

以下为功能显示
未借书前书库水浒传的在库状态是yes:

当borrow表中新建一个元素后:

执行

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

borrow表变为

再看book表中属性改变:

触发器功能完成

(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(未归还)

Book表中的书籍显示不在库

当更新1103的数据r_inday为非空时

再看book表中的在库状态为yes

触发器功能完成

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

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

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

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

  1. 计算机机房管理系统 数据库课设,学校机房管理系统数据库课程设计.doc

    学校机房管理系统数据库课程设计.doc 数据库原理及应用课程设计设计报告题目机房管理系统后台数据库学号131007220学生姓名指导教师提交时间2015/1/4目录第1章需求分析111课程设计概述11 ...

  2. 数据库课程设计:建材物资管理系统数据库课程设计

    数据库课程设计:建材物资管理系统数据库课程设计 ** 一.课设简述 ** 本次设计基于大二学习的数据库原理这门课程,选择了建材物资管理系统这个课设题目,在查阅了相关资料后,设计了集进货商家信息,进货报 ...

  3. 医院疫情管理系统-数据库课程设计(源码+数据库+报告全套)

    自己结合网上相关的知识做的数据库课程设计-医院管理系统(疫情),时间非常非常短暂做的比较粗糙,该版本为学院课设答辩之前,答辩时老师给了一些完善意见,但是没有时间去修改.... eclipse + SQ ...

  4. 职工考勤管理MySQL课程设计_考勤管理系统数据库课程设计.doc

    课 程 设 计 课程名称 数据库系统概论_____ 题目名称 考勤管理系统 学生学院 计算机学院 专业班级 学 号 学生姓名 ________ 指导教师 左亚尧 2012年 1月 16日 一.需求分析 ...

  5. 学生成绩管理系统mysql课程设计_学生成绩管理系统数据库课程设计报告.doc

    目 录 TOC \o "1-2" \h \z \u HYPERLINK \l "_Toc303696065" 1.开发背景 PAGEREF _Toc303696 ...

  6. 中学学籍管理系统数据库课程设计,限于篇幅只能采取截图方式上传,原文件在我资源中有所展示。

    第五章 数据库物理设计 5.1 RDBMS的选择 中学生管理系统课程设计小组选择的是Microsoft的SQL Server的Windows.NT版本,主要是考虑到:Microsoft SQL Ser ...

  7. 酒店管理系统+数据库课程设计+资料齐全+高分

    题目: 酒店管理和宾客端服务系统 96分 这里写目录标题 一.绪论 二.任务的描述 三.任务设计 四.编写代码 五.感想认识 六.截图 七.使用步骤 分享原因 一.绪论 酒店管理和宾客端服务系统的意义 ...

  8. 住院管理系统数据库课程设计

    对这次课程设计做个总结: 首先,数据库优化做的不太好,其次,需求分析这里,分析不正确,医生开药应该是先对数据库查询,看是否存在此类药品,如果存在,对应药品的数量减一,将该药品加入药单中,我是直接开成了 ...

  9. 学生选课管理系统 数据库课程设计

    资源链接 ***主要能实现以下几个功能,不同的用户需要不同的登陆端来实现不同的功能,学生端要实现选课,退课,能看自己的课程表,能看自己的成绩表等功能,教师端要实现对自己学生的基本信息的增加,修改,删除 ...

最新文章

  1. unity 平移图片_Unity 两张背景的切换平移
  2. 北京 | 一场产品经理必听的实战交流会!
  3. [UE4]给Widget增加参数,Pre Construct和Construct的区别
  4. MySQL分组查询—添加分组后筛选
  5. 模糊逻辑系统_在模糊逻辑系统中工作 人工智能
  6. sql中exits和in的区别
  7. [11] ADB 实用功能
  8. iOS开发多线程-RunLoop
  9. Net中的AOP系列之《方法执行前后——边界切面》
  10. 生产环境服务器部署kvm虚拟化6,KVM虚拟化平台环境部署
  11. gurobi和java,在Java中使用Gurobi与在Ampl中使用Gurobi
  12. 浪潮服务器显示一个红色闪电图标,华为手机开不了机,只显示一个红色圆圈里面一个红色闪电符号...
  13. 离散求边缘密度_求一把能退烧的机械键盘?——机械键盘购买“指北”
  14. java版我的世界MITE怎么下_我的世界mite振金版
  15. 英语3500词(一)university life主题(2022.1.13)
  16. to_date() 整理
  17. C语言核桃的数量问题
  18. C#多线程顺序依赖执行控制
  19. fastjson 序列化问题:Comparison method violates its general contract
  20. WASC Distributed Open Proxy Honeypots

热门文章

  1. 10 OPENVINO 中级课程2 如何识别更多的人脸
  2. 【Android Framework】开机执行自定义脚本之Init.rc文件的妙用与如何编写开机脚本?
  3. typora编辑器运行变慢?
  4. JAVA计算应缴住房基金,以支取住房基金方式怎样汇缴公积金
  5. A1220、A1221、A1222 和 A1223:斩波稳定、精确霍尔效应锁存器
  6. 通过 adb 命令获取手机应用 流量
  7. 令狐冲的SDL(安全开发周期)引进手记
  8. mysql连接数据库失败1130_mysql数据库连接1130问题解决
  9. 虚拟机此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态
  10. 中国移动WLAN无线上网清单查询