山东科技大学图书管理系统数据库设计Word文件下载.docx
《山东科技大学图书管理系统数据库设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《山东科技大学图书管理系统数据库设计Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
![山东科技大学图书管理系统数据库设计Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/28/84b06b84-17d9-4906-9454-d579b79fc3d8/84b06b84-17d9-4906-9454-d579b79fc3d81.gif)
年月日
3.1新的业务流程7
4.1.2学生基本信息表10
1.题目概述
1.1系统开发背景和意义
图书管理是高校内每一个系部或院部都必须切实面对的工作,但一直以来人们使用传统的人工方式管理图书资料。
这种方式存在着许多缺点,如效率低、保密性差且较为繁琐。
另外,随着图书资料数量的增加,其工作量也将大大增加,这必将增加图书资料管理者的工作量和劳动强度,这将给图书资料信息的查找、更新和维护都带来了很多困难。
经过详细的调查,目前我国各类高等学校中有相当一部分单位图书资料管理还停留在人工管理的基础上。
这样的管理机制已经不能适应时代的发展,其管理方法将浪费许多人力和物力。
随着科学技术的不断提高,这种传统的手工管理方法必然被以计算机为基础的信息管理方法所取代。
图书管理作为计算机应用的一个分支,有着手工管理无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高图书管理的效率。
因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书管理系统,将是非常必要的,也是十分及时的。
1.2开发环境
开发环境的选择会影响到数据库的设计,所以在这里给出图书管理系统开发与运行环境的选择如下:
开发环境:
Windows7
数据库管理系统:
mysql
2.1功能需求
1.学生可以直接通过借阅图书客户端来查阅书籍信息,同时也可以查阅自己的借阅信息。
2.当学生需要借阅书籍时,通过账号密码登陆借阅系统,借阅系统处理学生的借阅,同时修改图书馆保存的图书信息,修改被借阅的书籍是否还有剩余,同时更新学生个人的借阅信息。
3.学生借阅图书之前需要将自己的个人信息注册,登陆时对照学生信息。
4.学生直接归还图书,根据图书编码修改借阅信息
5.管理员登陆管理系统后,可以修改图书信息,增加或者删除图书信息
6.管理员可以注销学生信息。
7.新的图书购进后,分门别类地进行归并并汇总,加以编号。
8.新书编号后,上到书架以备学生借阅。
根据以上调查分析,可以给出其现行业务流程图如图2.1所示。
图2.1现行图书管理业务流程图
2.2数据描述(数据流图+数据字典)
经过详细的调查,我们已经清楚了解了现行的业务流程,接下来给出系统的逻辑模型。
构造系统逻辑模型的工具是数据流图和数据字典。
根据现行图书管理的业务流程,首先把数据流图中的源点和终点都选定为学生,因此可以得到图书管理系统的基本系统模型,如图2.2所示。
图2.2图书管理系统的基本系统模型
根据基本系统模型,对其逐步细化,得到描述逻辑系统细化后的数据流图,如图2.3所示。
图2.3图书管理系统数据流图(顶层DFD图)
图2.4细化后数据流图
对顶层DFD图中的一个加工“图书管理”进行展开,如图2.5。
图2.5“图书管理”展开
有了系统的数据流图后,还有相当多的数据信息如图书、借阅、归还等信息需要进一步描述,这就是需要定义数据字典,才能把现有的系统描述清楚。
图2.7列出了系统的主要数据字典
2.2.1图书基本信息的关系模式
图书基本信息(book_id,book_name,book_author,book_pub,book_num,book_sort,book_record)
其中book_id号是主键
2.2.2图书信息的关系模式
图书信息(唯一书籍序号,名称,作者,出版社,是否在架,书籍分类,书籍登记日期)
其中编号是主码
2.2.3图书借阅的关系模式
图书借阅(学生编号,借阅编号,图书编号,借书时间,预计归还时间,)
其中借阅编号是主码,图书编号和读者编号是外码
2.2.4图书归还的关系模式
图书归还(归还编号,学生编号,书籍编号,借书时间,实际还书时间)
其中归还编号是本表的主码,图书编号和读者编号是外码
2.2.5图书罚款的关系模式
图书罚款(罚款编号、学生编号,书籍编号,超期天数,处罚金额)
其中罚款编号是主码,书籍编号和学生编号是外码
2.2.6图书注销的关系模式
图书注销(注销编号、图书编号、注销时间)
其中注销编号是主码,图书编号是外码
2..2.7管理员的关系模式
管理员(管理员编号、姓名、年龄,电话)
其中管理员是主码
2.3数据安全与约束
系统安全性要求体现在数据库安全性、信息安全性和系统平台的安全性等方面。
安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过分配权限、设置权限级别来区别对待不同操作者对数据库的操作来提高数据库的安全性;
系统平台的安全性体现在操作系统的安全性、计算机系统的安全性和网络体系的安全性等方面。
数据是在外部互联网络以及图书馆内部局域网中进行流动和存储的,要保证其在这一过程中的安全稳定。
对于图书馆数据安全来说,就是要防止数据在传输和使用的过程中被非法复制、更改、删除和使用等。
为了达到这一目的,就需要开发相应的信息管理技术和建立相应的图书馆数据信息管理系统。
通过保障图书馆软件系统和硬件系统的安全稳定运行,使得图书馆数据服务系统可以持续工作,不因内部数据错误和外界人为或环境的干扰而出现中断,达到保护数据安全的最终目标。
2.4功能需求
经过以上详细的用户调查,在现行业务流程和数据分析的基础上,基本可以确定系统设计必须达到的目标。
以下是图书管理系统必须具备的功能:
1.新进图书的登记功能:
对于购进的新书,系统必须具备图书信息资料的录入功能。
2.图书的查询修改功能:
当图书资料发生变化,如图书丢失或有错误信息输入时,则应能够及时对数据进行修改和补充。
3.借阅的登记,归还的登记功能:
系统的主要功能之一,供本校学生借阅图书、归还图书,并进行登记。
4.学生信息的增加、删除和修改功能:
系统主要功能之一,建立学生信息,并对其进行维护。
3.系统总体设计
3.1新的业务流程
根据需求分析的得到的现行业务处理流程,在用户反复研究后,首先确定目标系统的业务流程,其处理流程如图3.1。
3.2系统功能模块图
依据需求分析阶段得到的数据流图,采用软件工程中软件设计的概念和原理,与用户成分协商后,在保证系统基本功能要求的前提下,结合系统新的业务流程确定系统必须具备的所有功能,由此给出图书管理系统的系统功能模块图如图3.2所示
3.3系统的流程图
3.3.1学生流程图
图书管理员流程图:
4详细设计
4.1数据库的设计
在需求分析阶段已完成该系统所有的数据分析。
根据该阶段所建立的概念模型,已经得出满足系统设计要求的几个关系描述,该阶段的主要工作就是把前一阶段的成果转化为具体的数据库。
下面给出概念结构设计得E-R图
E-R图:
表4.1.1图书信息表的结构
4.1.2学生基本信息表
列名
数据类型
是否为空/性质
说明
stu_id
int
not
null
/PK
标明学生唯一学号
stu_name
varchar
null
学生姓名
stu_sex
学生性别
stu_age
学生年龄
stu_pro
学生专业
stu_grade
学生年级
stu_integrity
nonull/default=1
学生信用等级
4.1.3书籍信息表
4.1.4book_sort:
信息表
4.1.5borrow:
信息管理表
4.1.6存储学生的归还信息
4.1.7存储学生的罚单:
4.1.8manager:
5.数据库代码
5.1数据库表设计
5.1.1设置索引
student:
.为stu_id创建索引,升序排序
sql:
createindexindex_idonstudent(stu_idasc);
为stu_name创建索引,并且降序排序
altertablestudentaddindexindex_name(stu_name,desc);
book:
为book_id创建索引,升序排列
createindexindex_bidonbook(book_id);
.为book_record创建索引,以便方便查询图书的登记日期信息,升序:
createindexindex_brecordonbook(book_record);
borrow:
.为stu_id和book_id创建多列索引:
createindexindex_sid_bidonborrow(stu_idasc,book_idasc);
插入索引的操作和结果如下所示:
mysql>
createindexindex_sid_bidonborrow(stu_idasc,book_idasc);
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
return_table:
createindexindex_sid_bidonreturn_table(stu_idasc,book_idasc);
ticket:
.为stu_id和book_id创建多列索引:
createindexindex_sid_bidonticket(stu_idasc,book_idasc);
createindexindex_sid_bidonticket(stu_idasc,book_idasc);
manager:
.为manager_id创建索引:
createindexindex_midonmanager(manager_id);
5.1.2设计视图
给出在各表上建立的视图以及使用的语句。
5.1.2.1.在表student上创建计算机专业(cs)学生的视图stu_cs:
createviewstu_csas
select*
fromstudent
wherepro=‘cs’;
操作和结果:
5.1.2.2.在表student,borrow和book上创建借书者的全面信息视图stu_borrow:
createviewstu_borrowas
selectstudent.stu_id,book.book_id,student.stu_name,book.book_name,borrow_date,adddate(borrow_date,30)expect_return_date
fromstudent,book,borrow
wherestudent.stu_id=borrow.stu_idandbook.book_id=borrow.book_id;
5.1.2.3.创建类别1的所有图书的视图cs_book:
createviewcs_bookas
frombook
wherebook.book_sortin
(selectbook_sort.sort.name
frombook_sort
wheresort_id=1);
5.1.2.4.创建个人所有借书归还纪录视图stu_borrow_return:
createviewstu_borrow_returnas
selectstudent.stu_id,student.stu_name,book.book_id,book.book_name,return_table.borrow_date,return_table.return_date
fromstudent,book,return_table
wherestudent.stu_id=return_table.stu_idandbook.book_id=return_table.book_id;
5.1.3、设计触发器
给出在各表上建立的触发器以及使用的语句。
5.1.3.1设计触发器borrow,当某学生借书成功后,图书表相应的图书不在架上,变为0:
createtriggerborrow
afterinsertonborrow
foreachrow
begin
updatebooksetbook_num=book_num–1
wherebook_id=new.book_id;
end
在插入表borrow之前,book_id=1的图书还在架上,为1:
学生1借了这本书后,在borrow中插入了一条记录:
在borrow中插入这条记录后,book_id=1的图书,不在架上,为0:
5.1.3.2.设计触发器trigger_return,还书成功后,对应的书籍book_num变为1:
createtriggertrigger_return
afterinsertonreturn_table
updatebooksetbook_num=book_num+1
还书时在return_table插入表项:
此时图书归还架上:
5.1.3.3.定义定时器(事件)eventJob,每天自动触发一次,扫描视图stu_borrow,若发现当前有预期归还时间小于当前时间,则判断为超期,生成处罚记录,这个定时器将每天定时触发存储过程proc_gen_ticket:
createeventifnotexistseventJob
onscheduleevery1DAY/*每天触发*/
oncompletionPRESERVE
docallproc_gen_ticket(getdate());
/*调用存储过程*/
setglobalevent_scheduler=1;
altereventeventJoboncompletionpreserveenable;
/*开启定时器*/
操作和结果显示:
1).学生1借了图书1,生成借书记录stu_borrow视图,如下:
2).当他在6月15日前还书时,没有生成罚单:
3).当他在6月27日后还书时,生成罚单:
5.1.3.4.设计触发器trigger_credit,若处罚记录超过30条,则将这个学生的诚信级设置为0,下次不允许借书:
createtriggertrigger_credit
afterinsertonticket
foreachrow
if(selectcount(*)fromticketwherestu_id=new.stu_id)>
30then
updatestudentsetstu_integrity=0wherestu_id=new.stu_id;
endif;
End
学生201701012超过2次超期归还图书后,
此时触动触发器trigger_credit,将学生的诚信级设置为0:
5.2应用程序设计与编码实现
5.2.1、系统实现中存储函数和存储过程的设计
要求给出功能描述和代码。
5.2.1.1.设计存储过程,产生罚单proc_gen_ticket:
当日期超过预定归还日期时,产生罚单,并将记录写入表ticket中,这个存储过程在定时器eventJob中调用:
sql:
createprocedureproc_gen_ticket(incurrentdatedatetime)
BEGIN
declarecur_datedatetime;
setcur_date=currentdate;
replaceintoticket(stu_id,book_id,over_date,ticket_fee)
selectstu_id,book_id,datediff(cur_date,stu_borrow.expect_return_date),0.1*datediff(cur_date,stu_borrow.expect_return_date)
fromstu_borrow
wherecur_date>
stu_borrow.expect_return_date;
End
1).学生王文龙借了图书数据结构,生成借书记录stu_borrow视图,如下:
2)
2).当他在7月1日前还书时,没有生成罚单:
3).当他在7月1日后还书时,生成罚单:
5.2.1.2.设计学生注册信息存储过程:
学生注册信息stu_register
createprocedurestu_register(instu_idint,instu_namevarchar(20),instu_sexvarchar(20),instu_ageint,instu_provarchar(20),instu_gradevarchar(20))
insertintostudent(stu_id,stu_name,stu_sex,stu_age,stu_pro,stu_grade)
values(stu_id,stu_name,stu_sex,stu_age,stu_pro,stu_grade);
5.2.1.3.设计管理员注册信息存储过程:
ma_register
createprocedurema_register(inma_idint,inma_namevarchar(20),inma_ageint,inma_phoneint)
BEGIN
insertintomanager
values(ma_id,ma_name,ma_age,ma_phone);
END
5.2.1.4.借书过程的实现:
1)设计存储函数,func_get_credit,返回学生的诚信级:
createfunctionfunc_get_credit(stu_idint)returnsint
begin
return(selectstu_integrityfromstudentwherestudent.stu_id=stu_id);
end
2)设计存储函数,func_get_booknum,返回书籍是否在架上:
createfunctionfunc_get_booknum(book_idint)returnsint
return(selectbook_numfrombookwherebook.book_id=book_id);
3)设计存储过程proc_borrow,调用func_get_credit和func_get_booknum,判断这个学生诚信度和书籍是否在架上,若为真,则借书成功,在borrrow表中插入纪录;
否则提示失败:
createprocedureproc_borrow(instu_idint,inbook_idint,inborrow_datedatetime)
iffunc_get_credit(stu_id)=1andfunc_get_booknum(book_id)=1then
insertintoborrow
values(stu_id,book_id,borrow_date);
else
select'
failedtoborrow'
;
endif;
Borrow记录为空
执行函数,学生王文龙借图书数据结构:
callproc_borrow(1,2,now());
学生王文龙的诚信级为0:
借书失败
修改学生201701011诚信级为1:
借书成功
5.2.1.5.还书存储过程proc_return:
当还书时,查看是否书是否超期,即查询ticket表项,当发现超期,提示交罚单后再次还书,如没有超期,则纪录归还项目到return_table中,并且删除借书纪录(以免还书后定时器仍然扫描这个纪录):
createprocedureproc_return(instu_idint,inbook_idint,inreturn_datedatetime)
DECLAREborrowdatedatetime;
if(selectpayofffromticketwhereticket.stu_id=stu_idandticket.book_id=book_id)=1then/*判断是否交了罚单,1表示没有交*/
select'
pleasepayofftheticket'
else/*纪录归还项目到return_table中,并且删除借书纪录*/
setborrowdate=(selectborrow_datefromborrowwhere