数据库系统实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号:
题目数据库系统综合实验
学院计算机科学与技术学院
专业计算机科学与技术
班级计算机
姓名
指导教师施继珉
2019 年12 月28 日
原创性声明
所呈交的报告是我在老师指导下进行的研究工作及取得的研究成果。

除了特别加以标注和致谢的地方外,报告中不包含其他人已经发表或撰写过的研究成果。

小组成员及分工:
签名
日期
正文
1 需求分析
1.1问题背景
为了更好的服务于图书馆运转功能,现为图书馆的借还书功能设计数据库。

要求能够对图书资料进行管理,如登记新书,删除不存在的书目,对已经变更的图书信息进行修改,还可以根据多种条件从数据库中查询书目的详细信息。

能对新读者信息进行登记,对已经变更的读者信息进行修改,对不再借阅的读者信息进行删除。

还可以查询读者的详细信息,以及读者借阅过的书目和正在借阅的书目。

需要提供借阅登记表和返还登记表来管理借阅,并且提供查询借阅次数最高的前10个书目。

借此为用户提供更加健全完善的服务。

1.2现实环境
1.2.1部门组成情况
图书馆可提供PC机供图书馆管理人员以及读者使用。

考虑到现实背景,使用该系统
的人员为信息咨询部人员与流通部门人员,以及大学本科及以上的学生、老师。

主要教育背景皆为大学本科及以上,拥有一定的计算机基础,能够使用英文实行基本的交流。

1.2.2业务活动
1)查询图书详细信息。

在新书到馆时,登入书籍信息。

当书籍信息发生变化或错误时,
更新书籍信息,以及删除失效书籍。

2)查询读者详细信息。

添加图书馆新读者,并为其开通图书馆借还书系统的读者使用账号。

删除不再使用的读者。

3)读者进行借阅与归还图书的功能,并查询自己的历史借阅记录、现在借阅记录以及未
归还图书过期信息。

4)管理员能够分别查询历史借阅、归还记录、正在借阅未归还以及正在借阅并且已到期
的记录,并多条件查找借阅归还信息。

5)提供借阅榜供查阅借阅排行前十的书籍。

1.2.3用户需求
读者:
1.登陆借还书系统,查询个人信息并更改密码
2.多条件复合查询书籍信息。

3.查询自己的历史借书记录。

4.查询自己正在借阅的图书记录。

5.查询借阅数前十的书籍。

6.借阅图书与归还图书。

管理员:
1.登陆借还书系统,修改个人密码。

2.多条件复合查询书籍信息,也可以修改某一本书的信息。

3.多条件复合查询读者信息,并修改读者信息及密码。

4.分别查询历史借阅、归还记录、正在借阅未归还以及正在借阅并且已到期的记录,并
根据多个条件查找借阅归还信息。

5.协助读者借书还书。

6.查询借阅数前十的书籍。

1.2 系统分析
1.2.1 数据字典
数据项
数据结构
数据流
1.2.2 数据流图
图1.1 一级数据流图
图1.2 二级数据流图
1.3 功能需求
图1.3 系统功能结构图
图书管理模块:包括对书籍的增删改查,查询图书借阅次数最多榜单,以及借阅和归还模块。

用户管理模块:包括对用户的增删改查,以及查询用户的借阅和归还记录模块。

1.4 非功能性需求
1.4.1性能需求
在95%情况下满足下列要求:
响应时间
以下处理响应时间不超过2s:
•查询指定条件书籍详细信息
•添加一本新书的详细信息
•修改指定条件的书籍信息
•删除指定条件的书籍信息
•对读者信息的修改操作
•读者借书以及还书操作
高并发情况下不超过上述时间的2倍
系统容量
•最大书籍数存储量为5×10^6
•最大读者记录为1×10^5
•最大信息存储时间为20年
1.4.2安全需求
•数据库设计满足规范化,至少应满足BCNF
•数据库提供日志功能,可追踪数据库历史操作
•软件系统无致命漏洞,后门,符合安全标准
•合理利用SQL中用户权限以及视图对安全性的影响
1.4.3界面要求
人性化、简单、易用的用户交互界面,用户学习时长几近为零。

1.5 开发与运行环境
开发工具
•Microsoft SQL Server 2017
•Microsoft SQL Server Management 2019
•Microsoft Visual Studio 2019
•Microsoft Office Visio 2019
运行环境
Windows平台
2 数据库设计与实现
2.1 概念设计
2.1.1 实体说明
根据需求分析形成的数据字典和数据流图,抽象得到的实体有:
在库图书(索书号,图书名称,主要作者,出版社,出版年份,在馆数量,馆藏数量,图书借阅次数)
读者(编号,姓名,性别,单位,电话,当前借阅数,可行借阅数)
管理员(工号,密码)
2.1.2 联系
实体之间的关系如下:
一个读者在同一时间内可以借多本书,一本书也可以在一天中被多个人借阅。

读者除意外情况必须归还图书,归还图书之前必须已经借阅此书。

一个管理员可以查询、修改多个读者的信息,一个读者可以被多个管理员查询、修改信息。

一个管理员可以查询、修改多本书的信息,一本书也可以被多个读者查询。

一个读者可以查询多本书的信息,一本书可以被多个读者查询。

2.1.3 ER图
图1.4 系统ER图
2.2 逻辑设计
2.2.1 ER图向关系模型转换
图书(索书号,图书名称,主要作者,出版社,出版年份,在馆数量,馆藏数量,图书借阅次数)
读者(读者编号,读者密码,姓名,性别,单位,电话,当前借阅数,可行借阅数)管理员(管理员工号,姓名,密码)
借阅归还记录(索书号,读者编号,借阅时间,归还时间)
(部分联系由于无实际意义已省略)
2.2.2 设计用户子模式
定义如下视图:
●读者借阅信息(读者编号,当前借阅数,可行借阅数)
用于快速修改借书信息
●图书借阅次数视图(索书号,图书借阅次数)
用于快速查找借阅次数多的书
2.2.3 数据库实际命名
数据库名:WhutLibrary
2.2.4 范式分析
分析决定关系:
1.在表BOOK中,主码为BNum,可决定BName,MAuthor,PubHouse,PubDate,
MaxNum,InNum,BorrowNum属性,除此之外,无其他决定关系。

所有非主属
性对码都是完全函数依赖。

主属性对每一个不包含它的码也是完全函数依赖。


有任何属性完全函数依赖与非码的任何一组属性。

2.在表Reader中,主码为RNum,可决定RName,RSex,RTel,RDep,CanNum,
NowNum,RPwd属性,除此之外,无其他决定关系。

所有非主属性对码都是完全
函数依赖。

主属性对每一个不包含它的码也是完全函数依赖。

没有任何属性完全
函数依赖与非码的任何一组属性。

3.在表BoLen中,主码为BNum+RNum+Borrowdate,可决定Returndate属性,除此
之外,无其他决定关系。

所有非主属性对码都是完全函数依赖。

主属性对每一个
不包含它的码,也是完全函数依赖。

没有任何属性完全函数依赖与非码的任何一
组属性。

4.在表MAmin中,主码为ANum,可决定AName,Apwd属性,除此之外,无其他
决定关系。

所有非主属性对码都是完全函数依赖。

主属性对每一个不包含它的码,
也是完全函数依赖。

没有任何属性完全函数依赖与非码的任何一组属性。

根据规范化理论,上述关系数据模型已满足BCNF范式。

2.3 物理设计
2.3.1 存取方法选择
表2.1 存取方法表
关系模式索引属性列索引类型图书借阅次数视图图书借阅次数(降序)B+树索引
借阅归还记录借阅时间(降序)B+树索引
图书图书名称B+树索引
图书主要作者聚簇索引
图书出版社聚簇索引
2.3.2 存储结构
数据库的数据文件、日志文件存放到指定的固态硬盘上,该硬盘最好不安装操作系统、DBMS等软件。

数据库的表和索引放在不通的磁盘上,加快并行查询速度。

数据库所有备份文件存放到移动硬盘。

2.4 数据库实现
2.4.1创建数据库
定义LibDB数据库:
Create DataBase LibDB
On (name=lib_dat,filename=' C:\Program Files\Microsoft SQL
Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\ ',size=100mb)
log on (name=lib_log,filename=' C:\Program Files\Microsoft SQL
Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\ ',size=10mb)
2.4.2 定义基本表
在LibDB数据库上,根据关系模式,定义基本表。

表结构如下:
(1)图书:存储书籍的信息。

表2.2 Book(图书)
属性列名属性说明数据类型码外码备注BNum 索书号char(8) 主码identity(1,1) BName 书籍名称char(50) not null MAuthor 主要作者char(20)
PubHouse 出版社char(20)
PubDate 出版日期date
MaxNum 最大馆藏int
InNum 当前馆藏int
BorrowNum 借阅次数int
(2)读者表:存储读者的个人信息
表2.3 Reader(读者表)
属性列名属性说明数据类型码外码备注
RNum 读者编号char(8) 主码第一位代表读者级别G:本科生M:研究生D:博士T:教师
RName 读者姓名char(10) not null Rsex 性别char(2) 男、女Rtel 电话号码char(11)
Rdep 单位char(12)
CanNum 可行借阅数int T默认12 D默认12 M默认8 G默认6
NowNum 当前借阅数int
Rpwd 密码char(16) 默认为123456 使用md5加密
(3)借阅表:存储读者对书籍的操作
表2.4 BoLen(借阅表)
属性列名属性说明数据类型码外码备注BNum 图书编号char(8) 主码外码
RNum 读者编号char(8) 主码外码
Borrowdate 借阅日期datetime
Returndate 归还日期datetime 默认为null
IsRe 归还标记bool 默认为false (4)管理员:存储管理员的信息
表2.5 MAdmin(管理员表)
属性列名属性说明数据类型码外码备注
ANum 管理员编号Char(8) 主码
AName 管理员姓名Char(10)
Apwd 管理员密码Char(16) Md5加密
2.4.3 定义视图
(1)图书信息(索书号,书籍名称,主要作者,出版社,出版日期,当前馆藏)Create View BookInfo(BNum,BName,MAuthor,PubHouse,PubDate,InNum)
as Select BNum,BName,MAuthor,PubHouse,PubDate,InNum From Book
(2)读者信息(读者编号,读者姓名,性别,单位,联系电话)
Create View ReaderInfo(RNum,RName,Rsex,Rdep,Rtel)
as Select RNum,RName,Rsex,Rdep,Rtel From Reader
(3)借阅榜(索书号,书籍名称,主要作者,借阅次数)
Create View TopList(BNum,BName,MAuthor,BorrowNum)
as Select BNum,BName,MAuthor,BorrowNum From Book
where BNum in ( select BNum from Book b1
where b1.BorrowNum in (select top 10 BorrowNum From BNum
Order by BorrowNum desc))
(4)借阅记录(索书号,书籍名称,读者编号,读者姓名,借阅时间,是否归还)Create View BookLend(BNum,BName,RNum,RName,Borrowdate,IsRe)
as Select Bolen.BNum,BName,BoLen.RNum,RName,Borrowdate,IsRe From BoLen,Book,Reader;
(5)归还记录(索书号,书籍名称,读者编号,读者姓名,归还时间)
Create View BookBack(BNum,BName,RNum,RName,Returndate)
as Select Bolen.BNum,BName,BoLen.RNum,RName,Returndate From BoLen,Book,Reader;
(6)未归还书籍(索书号,书籍名称,读者编号,读者姓名,读者电话,借阅时间)Create View NotBack(BNum,BName,RNum,RName,Returndate)
as Select Bolen.BNum,BName,BoLen.RNum,RName,Rtel,Borrowdate From BoLen,Book,Reader
where IsRe==false;
(7)正在借阅(索书号,书籍名称,借阅时间)
Create View MyBook(BNum,BName,Borrowdate)
as Select Bolen.BNum,BName,Borrowdate From BoLen,Book,Reader
where BoLen.RNum=Reader.RNum;
(8)历史借阅(索书号,书籍名称,借阅时间,归还时间)
Create View BeforeBook(BNum,BName,Borrowdate,Returndate)
as Select Bolen.BNum,BName,Borrowdate,Returndate
From BoLen,Book,Reader
where BoLen.RNum=Reader.RNum;
2.4.4 定义索引
(1)Create Index BBN On Book(BNum)
(2)Create Index RRN On Reader(RNum)
3 应用程序设计
3.1界面设计
图3.1 管理员使用界面
说明:
本系统的使用者之一——管理员使用界面如图。

由于本系统为图书馆借还书管理系统,切合主题,管理员的操作重心应该围绕着图书记录。

因此,将借阅记录的实时更新展现在管理员界面,满足实验要求和实际需要。

根据需求分析,可以将管理员的这些操作分为三类:
1. 对书籍的操作。

2. 对读者的操作。

3. 对历史借阅归还记录的操作。

窗口下端,从右到左排列简单易懂的图标,依次为图书相关操作、读者的相关操作,借阅榜以及历史借阅归还记录的相关操作。

图3.2 图书操作窗口
说明:
对图书的操作主要分为四类:添加图书,删除图书,修改图书信息,查询图书具体信息。

添加图书:点击页面“添加图书”按钮,出现添加图书界面,输入图书信息,提示添加成功/添加失败。

删除图书:鼠标选中列表中图书记录,点击“删除”,提示删除成功/删除失败。

修改图书信息:鼠标双击需要修改的图书信息,重新录入即可。

查询图书具体信息:本系统支持多条件复合查询图书信息。

可以同时多条件选择作者,出版日期,出版社,借阅次数,在馆数目进行复合条件的搜索,也可在搜索结果中再次筛选。

当读者使用该系统时,双击书籍信息,当书籍在馆数目大于0并且读者当前能够借阅的数目大于0,借阅该书成功。

右键表项弹出筛选功能,可筛选几乎所有属性的值,并且支持多次筛选表中数据。

图3.3 借阅榜
说明:
借阅榜是系统的重要功能之一,通过借阅榜,我们能够清晰地观察到图书馆借阅次数前十的书籍,并标明书籍在馆数目。

图3.4 借阅归还记录
说明:
借阅归还记录是本系统的重要功能之一。

本系统支持多条件查询功能,能够自由选择条件,查询特定索书号、书名的借阅记录,以及通过读者姓名、读者编号查询其对应的借阅记录,并且可以分别查询读者借阅图书记录和归还图书记录。

十分实用。

右键表项弹出筛选功能,可筛选几乎所有属性的值,并且支持多次筛选表中数据。

图3.5 读者主界面
说明:
结合图书馆借还书管理系统的核心功能与实际情况,本系统在读者主界面展示读者的借阅情况,其中包括展示读者的借阅情况,以及自动判断本次借阅是否到期。

3.2 程序详细设计与实现
3.2.1 算法框图
图3.7 多条件符合搜索流程图 & 图书借阅流程图
3.2.2典型程序代码
1. 借阅功能:ADO :
开始
输入搜索条件
格式检查通过 ?
N 提示格式错误
Y 提交数据库查询
显示符合条件
图书
结束
结果数>0 ?
N 提示未搜索到结果
Y
开始
选择图书
在馆数>0 ?N 提示错误信息
Y 图书在馆数减1借阅次数加1
显示图书信息
结束
CONTROL:
2. 多条件查找举例:
以读者编号为条件查找借阅记录ADO:
CONRTOL:
3.3 测试及结果
3.3.1 添加书籍/用户测试
表3.1 添加功能测试结果
编号测试用例测试点描述测试结果
1 编号,名字为空任意几项输入空值通过
2 编号输入超过8位字段长度通过
3 日期输入文字非法字符通过
结果:添加功能满足程序鲁棒性
3.3.2 数据库借阅表测试
表3.2 添加功能测试结果
编号测试用例测试点描述测试结果
1 添加book中不存在的索书号参照完整性通过
2 添加重复索书号和借阅时间实体完整性通过
3 索书号长度输入50位用户定义完整性通过
结果:借阅表满足数据库完整性约束
4 个人总结
本次数据库系统综合实验结合了本学期前8周所学的数据库系统理论知识进行开发。

每次项目开发都是一次迭代式的升级,提升自己的综合实力。

在开发中也遇到很多的问题,例如C#中多个类似控件的用法,它们之间的关系,让人琢磨不透,还有要将所学的数据库规范化理论运用到实际的数据库模式开发中看似简单,实则不易,这些都是需要自己不断经历学习才能领悟到的。

另外,每一次的项目开发也让我自己深感自学能力的重要性。

人们所批判的应试教育当然有一部分便是只授人以鱼而不是授人以渔,“老师没教过”成为许多人甘愿沦为咸鱼
的借口,此时决定论还真是能给他们找到一个好的归宿,错的也许还真不是自己,自学能力与坚持的决心二者必不可少才能做好一个及格的武理学子。

尽管自己的成果比起那些最优的差的不是一点半点,但如果算进步的范围的话绝对不差最大值多少,更不用说那些最优的还可能并不是纯原创,我的成果很“真实”便是令人振奋的一点,这也是激励我不断进步的源泉。

5 参考文献
[1]张海藩.软件工程导论(第6版)[M].清华大学出版社:北京,2013
[2]崔永红.Visual C#.NET程序设计(第2版)[M].清华大学出版社:北京,2019
[3]郑宇军.C#语言程序设计[M].清华大学出版社:北京,2011
[4]王珊.数据库系统概论(第5版)[M].高等教育出版社:北京,2014
成绩评定表。

相关文档
最新文档