1、 一、 需求分析: 1.1 图书管理系统的需求定义为:1.1.1使用读者编号、读者姓名、图书编号和图书姓名实现图书借阅功能;1.1.2使用读者类型和类型编号实体对教师、学生和其他三种身份进行不同的借阅条件管理;1.1.3使用限借数量、借阅日期和归还日期实现不同身份的借阅管理功能;二、 概要设计:2.1 图书馆管理系统数据表设计:2.1.1 Readers表:读者信息表,存取读者信息;2.1.2 Books表:图书信息表,存取图书信息;2.1.3 Borrowinf表:借阅信息表,管理借阅情况;2.1.4 Readtype表:读者类型表,管理读者类型;这些数据表结合图书馆数据库中的四个存储过程,
2、即实现了普通图书馆的大部分功能。如读者借阅图书功能、读者归还图书功能、读者查询图书借阅情况功能、读者检索的图书信息功能;图2.1 数据E-R图三、 逻辑设计3.1 图书馆管理系统触发器设计:3.1.1 Tri_bowbook 功能表现:只有在图书馆内相关书籍尚有库存的情况下,读者才可以进行借阅操作;3.1.2 Tri_bowbook2功能表现:还书时将还书信息更新到各表中;3.1.3 Tri_bowbook3功能表现:限制借书数目,其中教师不得借阅超过3本,学生不得借阅超过2本,其他人不得借阅超过1本;四、 物理设计:表4.1 Readers列名数据类型允许空值说明ReaderIDchar(1
3、0)否标明读者唯一编号Namechar(8)是读者姓名BorrowedQuantityint是已借数目TypeIDint是读者类型表4.2 Books列名数据类型允许空值说明BookIDchar(15)否标明图书唯一编号Namevarchar(50)是图书名称Authorchar(8)是图书作者Publishervarchar(30)是出版社Standingint是剩余数量表4.3 Borrowinf列名数据类型允许空值说明ReaderIDchar(10)否标明读者唯一编号BookIDchar(15)否标明图书唯一编号BorrowedDatedatetime否借书日期ReturnDatedat
4、etime是还书日期表4.4 Readtype列名数据类型允许空值说明TypeIDint否标明类型唯一编号Namevarchar(20)否类型名称LimitBorrowQuantityint是限借数量BorrowTermint是限借时间五、 数据库实施:5.1 建立数据库:5.1.1 使用SQL Server Management Studio新建数据库:使用SQL Server Management Studio创建一个图书管理数据库,初始大小为5MB,最大为30MB,数据库自动增长,增长方式是按1%的比例增长;日志文件初始为1MB,最大可增长到10MB,按1MB增长。数据库名称为stude
5、nt_grade,存放路径为“D:XSCJSYS”。日志文件的名称为student_log,存放路径为“D:XSCJSYS”。如下图所示:图5.1.1 新建数据库5.1.2 设计数据库表:在登录后依次打开文件资源管理器中的数据库-TSGL-表,并选择“新建”,进行数据库表的设计(在此时设计好主键);图5.1.2数据库表设计5.1.3 数据初始化:在创建好的数据表中右键选择-并击前200行,输入编辑好的数据:图5.1.3设定表数据5.2 完整性测试与检查:5.2.1 参照完整性测试:use TSGLinsert into readers values(2014010323,李老师)insert
6、into readers values(2014030335,小何)insert into readers values(2014039999,小王)go图5.2.1参照完整性测试5.2.2创建图书借出数量不超过总数的CHECK约束:goalter table bookswith nocheck add constraint books_Standingcheck(Standing=0 and Standing=5)go图5.2.2 创建CHECK约束5.3 使用SQL语句查询:5.3.1 使用like语句查询所有姓王的读者:select * from readers where name l
7、ike 王%;图5.3.1 模糊查询5.2 查询所有已经借阅的图书名称、总数:select borrowinf.bookid,books.name,count(*) as 借出数目from borrowinf inner join books on borrowinf.BookID = books.BookIDgroup by books.name,borrowinf.bookidorder by 借出数目 desc图5-7 多表查询、统计查询5.3 查询所有已借图书的读者信息:use TSGLselect readers.Name,readers.ReaderID,readers.Borro
8、wedQuantity as 已借数目from readers inner join borrowinf on borrowinf.readerID = readers.readerIDgroup by readers.Name,readers.ReaderID,readers.BorrowedQuantity图5-8 多表查询、统计查询5.4 查询被借出的图书中出版社是机械工业出版社的书名和书籍编号:use TSGLselect books.Name,books.BookIDfrom books inner join borrowinf on borrowinf.BookID = books
9、.BookID and books.Publisher = 机械工业出版社group by books.Name,books.BookID图5-9 多表查询5.5 查询借阅了数据库原理的读者的姓名和读者编号:use TSGLselect readers.Name,readers.ReaderIDfrom readers where readers.ReaderID in (select borrowinf.ReaderID from borrowinf where BookID = (select BookID from books where books.Name = 数据库原理)图5-10
10、 子查询5.6 查询王同学借阅的图书名称和编号:use TSGLselect books.Name,books.BookIDfrom books where books.bookID in (select borrowinf.bookID from borrowinf where BookID in (select BookID from borrowinf where ReaderID = (select ReaderID from readers where readers.Name = 王同学)图5-11 子查询6 触发器实现:6.1 若无库存无法借书的触发器:create trigge
11、r tri_bowbookon borrowinffor insert,updateasdeclare bid char(15),bstd intselect bid = bookid from insertedselect bstd = standing from books where bid = books.BookIDif(bstd =0)begin rollback transactionprint 借阅失败!print 此书已无库存!end图5-12 借阅限制触发器6.2 不得超过读者类型限制的借阅上限触发器:USE TSGLGO/* Object: Trigger dbo.tri
12、_bowbook2 Script Date: 2020/6/29 21:12:30 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER trigger dbo.tri_bowbook2on dbo.borrowinffor insert,updateasdeclare rdid char(10),type int,lim int,num intselect rdid = readerid from insertedselect type = typeid from readers where rdid = readers.readerids
13、elect lim = LimitBorrowQuantity from readtype where type = readtype.typeidselect num = BorrowedQuantity from readers where rdid = readers.readeridif(num=lim)begin rollback transactionprint 借阅失败!print 已达到借阅上限,请先归还图书再进行借书操作!end图5-13 限制触发器6.3 添加借阅记录时自动更新信息以实现借阅功能的触发器:create trigger tri_bowbook3on borro
14、winffor insertasdeclare bid char(15),reid char(10),std int,nstd int,bor int,nbor intselect bid = bookid from insertedselect reid = readerid from insertedselect std = standing from books where bid = books.BookIDselect nstd = std+1select bor = BorrowedQuantity from readers where reid = readers.ReaderI
15、Dselect nbor = bor+1UPDATE books set Standing = nstd where bid = books.BookIDUPDATE readers set BorrowedQuantity = nbor where reid = readers.ReaderID图5-14 借阅触发器一、 数据库安全与备份:1. 改变身份验证模式:使用“对象资源管理器”中的“服务器属性”对话框改变服务器身份验证模式:图6-1 设置身份验证模式2. 分离数据库:使用sp_detach_db存储过程分离JXGL数据库:图6-2 分离数据库二、 总结:通过本次课程设计,我掌握了设计数据库的基本流程,掌握了E-R图的制作方法,熟悉了使用SQL语句进行统计查询、多表查询、子查询等多种查询数据的方式,掌握了使用触发器对数据库进行增删改查的各种操作,但有的部分仍有不熟悉的情况,需要在今后的学习工作中继续深入学习关于数据库的各种知识。感谢老师一个学期的辛勤教导!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1