数据库课程设计 图书管理系统.docx
《数据库课程设计 图书管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计 图书管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
![数据库课程设计 图书管理系统.docx](https://file1.bdocx.com/fileroot1/2023-6/12/70d14256-3830-4a28-b4d7-bed8cd3f98db/70d14256-3830-4a28-b4d7-bed8cd3f98db1.gif)
数据库课程设计图书管理系统
数据库系统原理课程设计
课题名称:
图书信息管理系统
姓名:
班级:
学号:
指导老师:
2014年01月02日
1.绪论3
背景介绍3
开发背景的选用及介绍3
2.需求分析4
系统分析4
系统目标4
总体需求4
3.概念设计阶段5
实体E-R图5
数据流程图8
4.逻辑结构设计阶段8
E-R图转换为关系模型8
数据字典9
5.物理结构设计阶段10
物理设计阶段的目标和任务10
数据存储方面10
6.数据库实施与维护10
创建数据库,数据表10
创建视图12
创建索引13
创建触发器13
数据表的初始化14
初始表的显示16
7.数据库界面实现19
系统总的功能模块图19
系统的实现19
8.心得体会25
1.绪论
背景介绍
随着社会的发展,人们对于知识的需求也在不断地增长。
书籍作为人们获取并增长知识的主要途径,使得图书馆在人们生活中占有了一定位置。
但是近几年来,随着书量的不断增长,造成了书库空间极度不足,图书挤压,管理不善。
这些都直接影响了读者对图书馆藏书的充分利用。
这时图书馆就特别需要开发一套书刊租借管理系统,通过该系统来提高图书馆的管理效率,从而减少管理方面的工作流和成本。
?
一个现代化的图书馆在正常运营中总是面对大量的读者信息,书籍信息以及两者相互作用产生的借书信息,还书信息。
面对图书馆数以万计的图书,纷繁复杂的读者信息,频繁更替的借还书信息,传统的直接方法不但管理出现漏洞,造成损失。
因此有一个智能化、系统化、信息化的图书管理系统十分重要的。
充分利用计算机的功能实现对读者管理、书籍管理,借阅管理等自动化控制,将会使图书馆的工作大大减弱。
方便友好的图形界面、简便的操作、完善的数据库管理。
将会使得图书馆系统极大限度的应用于现代化图书管理中。
开发背景的选用及介绍
SQLServer2005的简介
SQL是英文(Structured?
QueryLanguage)的缩写,意思为结构化查询语言。
SQL语言的主要功能就是同各种数据库建立联系,进行沟通。
SQL被作为关系型数据库管理系统的标准语言。
SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。
目前,绝大多数流行的关系型数据库管理系统,如Oracle,Sybase,MicrosoftSQLServer,Access等都采用了SQL语言标准。
SQL语言有以下几个优点:
1.非过程化语言SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。
SQL允
许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集,所有SQL语
句接受集合作为输入,返回集合作为输出。
SQL的集合特性允许一条SQL语句的结果作为另
一条SQL语句的输入。
SQL不要求用户指定对数据的存放方法,这种特性使用户更易集中精力于要得到的结果;
所有SQL语句使用查询优化器,它是RDBMS的一部分,由它决定对指定数据存取的最快速
度的手段,查询优化器知道存在什么索引,在哪儿使用索引合适,而用户则从不需要知道表
是否有索引、有什么类型的索引。
2.统一的语言
SQL可用于所有用户的DB活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及许多其它类型的终端用户。
基本的SQL命令只需很少时间就能学会,最高级的命令在几天内便可掌握。
3.所有关系数据库的公共语言
由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS(关系数据库管理系统)转到另一个,所有用SQL编写的程序都是可以移植的。
java简介
java是一种可以撰写跨平台应用的面向对象的程序设计语言,是由公司于1995年5月推出的Java程序设计语言和(即JavaSE,JavaEE,JavaME)的总称。
Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应3用于个人PC、、游戏控制台、、移动电话和,同时拥有全球最大的开发者专业社群。
在全球云计算和的产业环境下,Java更具备了显着优势和广阔前景。
2.需求分析
系统分析
书刊租借系统(以高校的图书管理系统为例)是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。
而对于后者则要求应用程序功能完备,易使用等特点。
在数据库应用系统开发之前,对开发数据库的基本概念,数据库的结构、开发数据库应用程序的步骤、开发体系及方法都应当有相当清晰的了解和认识。
数据库应用系统开发的目标是建立一个满足用户长期需求的产品。
开发的主要过程为:
理解用户的需求,然后,把它们转变为有效的数据库设计。
把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。
系统目标
1.用户方便进行图书查询,图书浏览和图书分类浏览,进行图书借阅并了解自己的借书情况和个人情况。
2.用户在借书超期的情况下得到来自管理员的提醒。
3.管理员可以方便进行图书管理,用户管理,管理员管理。
图书管理包括图书信息以及图书分类的添加,修改,删除。
用户管理包括用户信息的添加,删除,修改和锁定(限制用户的正常使用功能,使其无法登陆)。
管理员管理包括管理员信息的添加,删除,修改等。
4.用户和管理员可以修改自己的密码,修改前需先核实自己的原始密码。
5.未注册用户读者也可以浏览所有的图书信息和分类信息,但是无法借阅。
6.考虑程序执行操作时可能出现的情况,比如删除图书分类时该分类下存在图书,程序自动跳转该分类图书查看。
删除某个用户,如果存在借书记录则不允许删除,跳转到该用户的借书记录。
等待管理员确认该用户所借图书已经全部归还之后才允许删除该用户信息。
总体需求
书刊租借系统(以高校图书馆为例)是一项复杂系统工程,要从实际出发,对实际情况进行客观的分析,深入了解需求。
系统利用java与数据库结合的技术建立数据库管理系统,采用交互式的图形用户界面(GUI)来实现。
需求调查是为了研究系统设计的开发途径和方法。
同时它也是进行概要设计和详细设计的基础,是进行内部维护和测试的依据。
具体分析如下:
添加操作:
在执行操作时首先都要先检查是否已经输入以及数据库中是否已经存在输入的数据,如果存在会报错,程序返回上个页面,不执行添加操作。
删除操作:
考虑到了字段在不同表中可能会同时存在的情况,比如:
删除图书分类时候该分类下有书或者删除用户时该用户有借书记录,这样的情况下程序会给出提醒并跳转到该分类下的所有图书查看或者是该用户的全部借书查看。
直到这种关联取消掉之后才允许进行删除这样的危险操作。
查询操作:
考虑到了模糊查询的实现,SQL语句中用“like”,还有组合查询,通过对用户输入情况的判断来确定SQL语句的最终形式,比如用户查询时并未输入图书名字,就是名字匹配任意字符,那么程序给数据库的SQL语句就会是namelike‘%’。
组合查询的实现也是程序判断用户所做的选择或者输入,在SQL语句中实现的。
超期统计:
假定借书超期的限制是三十天,借书记录中的所有数据的借书时间如果不在当前服务器时间减去三十天和当前服务器时间之间,那么这条借书记录就属于超期记录了。
由用户借书记录中的用户编号到用户表中查找该用户。
发送消息:
往消息表中添加数据,该数据包含用户名,用户超期的图书,超期时间,罚金等相关警告信息。
当用户正常登陆主页后,程序自动检查消息表中是否存在该用户的记录,如果有要给出提示,但是没有强制用户必须查看。
数据库备份和还原操作:
程序只要告诉SQL服务器执行备份和还原SQL语句就可以实现,在还原时程序还在使用系统数据库,此时执行还原操作会因为没有排它使用权出现错误,所以应告诉SQL服务器使用另外的一个数据库,程序中用的是:
usemaster。
还原操作时用FSO组件首先检查备份数据库文件是否存在,如果不存在则给出提示回到上个页面。
所有条件都允许后则执行还原操作,如果数据库数据比较多,备份和还原的时间都可能会比较长。
3.概念设计阶段
实体E-R图
书刊租借系统有书籍类别实体,书籍实体,读者实体,还书记录实体,借书记录实体,罚款金额实体等。
3.书籍种类实体E-R图
种类名称
种类编号
书籍种类
书籍实体E-R图
书籍名称
书籍编号
书籍种类
借阅情况
作者
书籍
单价
出版社
出版日期
读者实体E-R图
性别
姓名
借书证号
读者
读者类别
注册日期
借书记录实体E-R图
书籍编号
书籍名称
姓名
借书记录
借书证号
应还时间
借阅时间
还书记录实体E-R图
借书证号
书籍编号
姓名
还书记录
归还时间
借阅时间
书籍名称
还书记录实体E-R图
借书证号
书籍编号
姓名
罚款信息
罚款金额
超期时间
书籍名称
总的E-R图(略去实体属性)
书籍种类
还书记录
信息登记
归还
书籍
借阅
借书记录
读者
罚款
罚款信息
数据流程图
图书馆管理员
还书记录
借书记录
图书归还处理
检查读者身份
检查图书是否可借
填写借阅库,修改图书库
借阅库
图书库
借阅库
图书库
填写归还记录
修改图书记录
有效
可借
填写借阅记录
借阅信息修改
4.逻辑结构设计阶段
E-R图转换为关系模型
书籍种类(种类编号,种类名称)
书籍(书籍编号,书籍名称,书籍种类,作者,出版社,出版时间,单价,是否可借)
读者(借书证号,姓名,性别,读者类别,注册日期)
借书记录(姓名,书籍编号,书籍名称,借书证号,借阅时间,应还时间)
还书记录(姓名,书籍编号,书籍名称,借书证号,借阅时间,归还时间)
罚款信息(书籍编号,书籍名称,借书证号,姓名,超期时间,罚款金额)
数据字典
表4-2-1书籍种类信息表
表中列名
数据类型及长度
可否为空
种类编号
int
Notnull
种类名称
Varchar(30)
Notnull
表4-2-2书籍信息表
表中列名
数据种类及长度
可否为空
书籍编号
Varchar(20)
Notnull
书籍名称
Varchar(30)
Notnull
书籍种类
Varchar(30)
Notnull
作者
Char(30)
Notnull
出版社
Varchar(30)
Null
出版日期
Datetime
Null
单价
Money
Notnull
是否可借
Varchar(20)
Notnull
表4-2-3读者种类信息表
表中列名
数据种类及长度
可否为空
借书证号
Int
Notnull
姓名
Varchar(10)
Nounull
性别
Char
(2)
null
读者类别
Varchar(20)
Null
注册日期
Datetime
Notnull
表4-2-4借书记录信息表
表中列名
数据种类及长度
可否为空
姓名
Varchar(10)
Notnull
书籍编号
Varchar(20)
Notnull
书籍名称
Varchar(30)
Notnull
借书证号
Int
Notnull
借阅时间
Datetime
Notnull
应还时间
datetime
Notnull
表4-2-5还书记录信息表
表中列名
数据种类及长度
可否为空
姓名
Varchar(10)
Notnull
书籍编号
Varchar(20)
Notnull
书籍名称
Varchar(30)
Notnull
借书证号
Int
Notnull
借阅时间
Datetime
Notnull
归还时间
datetime
Notnull
表4-2-6罚款信息表
表中列名
数据种类及长度
可否为空
书籍编号
Varchar(20)
Notnull
借书证号
Int
Notnull
姓名
Varchar(10)
Notnull
书籍名称
Varchar(30)
Notnull
超期时间
Int
Notnull
罚款金额
Money
Notnull
5.物理结构设计阶段
物理设计阶段的目标和任务
数据库的物理设计就是为逻辑数据模型选取一个最合适应用要求的物理结构的过程,在
这个阶段中要完成两大任务:
1)确定数据库的物理结构,在关系数据库中主要是存取方法和存储结构;
2)对物理结构进行评价,评价的重点是时间和空间效率。
数据存储方面
为数据库中各基本表建立的索引如下:
1)由于基本表readers_table,books_table的主码借书证号,书籍编号经常在查询条件和连接操作的连接条件中出现,且它们的值唯一,在两个属性上建立唯一性索引;
2)借阅信息基本表borrow_record_table的一属性借书证号,书籍编号,经常在查询条件中出现,考虑在其之上建立聚簇索引;
3)还书信息基本表return_record_table的一属性借书证号,书籍编号,经常在查询条件中出现,考虑在其之上建立聚簇索引;
6.数据库实施与维护
创建数据库,数据表
创建libarysystem数据库
createdatabaselibarysystem
onprimary
(
name=libarysystem_data,
size=10,
maxsize=50,
filename="D:
\book\libarysystem_mdf",
filegrowth=10%
)
logon
(
name=libarysystem_log,
size=10MB,
maxsize=50MB,
filename="D:
\book\libarysystem_ldf",
filegrowth=10MB
)
创建books_stytle_table表
createtablebooks_stytle_table
(
种类编号intprimarykey,
种类名称varchar(30)notnull
)
创建readers_table表
Createtablereaders_table
(
借书证号intprimarykey,
姓名varchar(10)notnull,
性别char
(2)default'男',
读者类别varchar(20)null,
注册日期Datetimenotnull
)
创建books_table表
Createtablebooks_table
(
书籍编号varchar(20)primarykey,
书籍名称varchar(30)notnull,
作者char(30)notnull,
出版社varchar(30)null,
出版日期Datetimenull,
单价Moneynotnull,
借阅情况varchar(20)notnull
)
创建borrow_record_table表
createtableborrow_record_table
(
姓名varchar(10)notnull,
书籍编号varchar(20)notnull,
书籍名称varchar(30)notnull,
借书证号intnotnull,
借阅时间Datetimenotnull,
应还时间Datetimenotnull,
foreignkey(书籍编号)referencesbooks_table(书籍编号),
foreignkey(借书证号)referencesreaders_table(借书证号)
)
创建return_record_table表
Createtablereturn_record_table
(
姓名varchar(10)notnull
书籍编号varchar(20)notnull,
书籍名称varchar(30)notnull
借书证号intnotnull,
借阅时间Datetimenotnull,
foreignkey(书籍编号)referencesbooks_table(书籍编号),
foreignkey(借书证号)referencesreaders_table(借书证号)
)
创建reader_fee_table表
Createtablereader_fee_table
(
书籍编号varchar(20)notnull,
借书证号intnotnull,
姓名varchar(10)notnull,
书籍名称varchar(30)notnull,
超期时间intnotnull,
罚款金额Moneynotnull,
foreignkey(书籍编号)referencesbooks_table(书籍编号),
foreignkey(借书证号)referencesreaders_table(借书证号)
)
创建视图
用于查询图书基本信息的视图定义如下:
createviewBookview(借阅证号,书籍编号,作者,出版社,借阅情况)
as
Select借阅证号,书籍编号,作者,出版社,借阅情况
frombooks_table
用于读者基本信息查询的视图定义如下:
createviewReaderview(姓名,j借书证号,注册日期)
as
select姓名,借书证号,注册日期
fromreaders_table
用于显示当前借阅基本信息的视图定义如下:
createviewBorrowview(借书证号,书籍名称,作者,借阅日期,应还日期)
as
selectborrow_record_table.借书证号,borrow_record_table.书籍名称,作者,借阅日期,应还日期
fromborrow_record_table,books_table
where.书籍编号=books_table.书籍编号
createviewHistoryview(借书证号,书籍名称,借阅日期,归还日期)
as
select借书证号,书籍名称,借阅日期,归还日期
fromreturn_record_table
createviewFineview(姓名,书籍名称,超期时间,罚款金额)
as
select姓名,书籍名称,超期时间,罚款金额
fromreader_fee_table
创建索引
createuniqueindexreadersindexonreaders_table(借书证号)
createuniqueindexbooksindexonbooks_table(书籍编号)
createuniqueindexindex1onborrow_record_table(借书证号,书籍编号)
createuniqueindexindex2onreturn_record_table(借书证号,书籍编号)
创建触发器
当删除readers_table表中某一读者基本信息时,触发borrow_record_table表,删除相应的记录
createtriggerReader_delete
onreaders_table
fordelete
as
declare@zhaoint;
select@zhao=借书证号
fromdeleted
deleteborrow_record_table
where借书证号=@zhao
borrow_record_table表中增加一条借阅记录时,使该图书的状态由“可借”变为“不可借”
createtriggerBorrow_insert1
onborrow_record_table
forinsert
as
declare@BookIDchar(20);
select@BookID=书籍编号
frominserted
updatebooks_table
set借阅情况='不可借'
where书籍编号=@BookID
数据表的初始化
books_stytle_table表的初始化
Insertintobooks_stytle_tablevalues(1,'人文艺术类')
Insertintobooks_stytle_tablevalues(2,'自然科学类')
Insertintobooks_stytle_tablevalues(3,'工程技术类')
insertintobooks_stytle_tablevalues(4,'文学类')
insertintobooks_stytle_tablevalues(5,'政治经济类')
insertintobooks_stytle_tablevalues(6,'社会科学类')
insertintobooks_stytle_tablevalues(7,'语言技能类')
books_table表的初始化
Insertintobooks_table(书籍编号,书籍名称,书籍种类,作者,出版社,出版日期,单价,借阅情况)
values('A1001','中国大历史','人文艺术类','黄仁宇','人民文学出版社','2007-02-01','32','可借')
insertintobooks_table(书籍编号,书籍名称,书籍种类,作者,出版社,出版日期,单价,借阅情况)
values('A1002','中国近现代史纲要','人文艺术类','','高等教育出版社','2006-04-01','32','可借'
insertintobooks_table(书籍编号,书籍名称,书籍种类,作者,出版社,出版日期,单价,借阅情况)
values('B1001','计算机操作系统','自然科学类','汤小丹,梁红兵等','西安电子大学出版社','2001-04-12','32','不可借')
insertintobooks_table(书籍编号,书籍名称,书籍种类,作者,出版社,出版日期,单价,借阅情况)
values('B1002','计算机网络','自然科学类','谢希仁','电子工业出版社','2003-04-01','32','可借')
insertintobooks_table(书籍编号,书籍名称,书籍种类,作者,出版社,出版日期,单价,借阅情况)
values('