数据库图书管理系统课程设计.docx
《数据库图书管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《数据库图书管理系统课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
数据库图书管理系统课程设计
课程设计报告
课程设计题目:
图书借阅管理系统的设计与实现
专业:
信息工程
班级:
姓名:
胡慧斌
学号:
5
指导教师:
罗亚宾
2013年1月4日
一.实验题目
图书借阅管理系统数据库的设计与实现
二.实验时间.地点
软件楼601,2013年1月5—6号
三.实验目的
通过本次课程设计让学生能够综合运用所学的关系数据库原理知识解决并能设计一个实际问题,进一步掌握数据库原理的相关理论和数据库的设计实现过程,进一步提高学生的分析问题和解决问题的能力以及学生的动手能力。
四.实验要求
1.对各个系统进行系统功能需求分析
2.数据库设计分析阶段,进行详细的数据库需求分析,进行概念数据库的设计,画出数据库的E-R图(局部和整体E-R图)
3.设计出详细的逻辑数据库结构,将各个实体和联系转化为相应的二维表即关系模式,指定各个关系的主关键字和外部关键字,并对各个关系的约束加以限定
4.通过企业管理器或是查询分析器实现各个二维关系(建议最好用SQL代码实现),要求建立相关的索引
5.根据系统功能需求设计相应的查询视图
6.要求根据系统功能需求建立存储过程
7.根据功能需求建立相应的触发器以保证数据的一致性
8.通过建立用户和权限分配实现数据库一定的安全性,考虑数据库的备份与恢复(此内容选作)
五.实验思路
1.系统需求分析:
A.系统目标:
本系统将实现用计算机管理图书借阅的功能。
具体完成图书信息管理、读者信息管理、及图书借阅管理等功能。
B.系统的功能需求:
本系统用户分为读者用户和管理员用户两类,包括对图书信息、读者信息、借阅信息的录入、修改、查询、删除等。
读者用户只具有查询书籍和自己信息的权限。
C.系统功能描述:
系统开发的主要目的是实现图书馆信息管理的系统化、规范化和自动化。
图书馆信息管理系统主要提供对图书信息的管理及读者信息的管理。
需要完成的主要功能有:
1、有关读者信息的输入、修改和查询;
2、图书信息的输入、修改和查询;
3、借阅信息的维护(包括借,还信息录入,修改和删除);
2.实体图及E—R图
1.读者信息实体表
可借书数
已借书数
逾期未还书数
读者
读者姓名
读者性别
读者种类e
登记时间
读者借书证编号
②.书籍实体图
书籍
收录时间
书籍作者
是否被借
书籍编号
书籍名称
出版时间
出版社
③.借阅记录实体图
读者借书证编号
书籍类别编号
借阅时间隔
借阅记录信息
④.归还记录实体图
归还信息记录
读者借书证号
书籍类别编号
归还时间
⑤.罚款信息实体图
书籍类别编号
罚款信息实体实体
罚款金额
读者姓名
读者借书证编号
书籍名称
借阅时间隔
⑥.信息实体E-R图
还书信息
读者
归还
书籍
罚款
借阅
罚款信息
借阅信息
m
n
m
n
m
n
3.二维关系表
表3-1 system_readers读者信息表格
表中列名
数据类型
可否为空
说明
readerid
varchar
notnull(主键)
读者借书证号
readername
varchar
notnull
读者姓名
readersex
varchar
notnull
读者性别
readertype
varchar
notnull
读者种类
regdate
datetime
null
登记日期
booktotal
int
null
可借书数
borrowednum
int
null
已借书数
overduenoreturnnum
int
null
逾期未还书数
表中列名
数据类型
可否为空
说明
bookid
Varchar
Notnull(主键)
书籍编号
bookname
Varchar
Notnull
书籍名称
表3-2 system_book书籍信息表
bookstyle
Varchar
Notnull
书籍类别
bookauthor
Varchar
Notnull
书籍作者
bookpub
Varchar
Null
出版社名称
bookpubdate
Datetime
Null
出版日期
bookindate
Datetime
Null
登记日期
isborrowed
Bit
NotNull
是否被借出
表3-3 borrow_record借阅记录信息表
表中列名
数据类型
可否为空
说明
readerid
Varchar
Notnull(外主键)
读者借阅证编号
bookid
Varchar
Notnull(外主键)
书籍编号
borrowdate
Datetime
Notnull
读者借书时间
表3-4 return_record借阅记录信息表
表中列名
数据类型
可否为空
说明
readername
Varchar
Notnull(外主键)
读者借阅证编号
readerid
Varchar
Notnull(外主键)
书籍编号
returndate
datetime
Notnull
读者还书时间
表3-5 reader_fee罚款记录信息表
表中列名
数据类型
可否为空
说明
readerid
varchar
Notnull
读者借书证编号
readername
varchar
Notnull
读者姓名
bookid
varchar
Notnull(外主键)
书籍编号
bookname
varchar
Notnull
书籍名称
bookfee
Smallmoney
NotNull
罚款金额
borrowdate
datetime
NotNull
借阅时间
4.关系模式
(1)读者(借书证编号,读者姓名,读者性别,读者种类,登记时期,可借书数,已借书数,逾期未还书数)
(2)书籍(书籍编号,书籍名称,书籍类别,书记作者,出版社名称,出版日期,登记日期)
(3)借阅(借书证编号,书籍编号,读者借书时间)
(4)还书(借书证编号,书籍编号,读者还书时间)
(5)罚款(借书证编号,读者姓名,借书证编号,书籍编号,读者借书时间)
5.系统功能模块图
图书借阅系统
查询子系统
管理子系统
借还书子系统
查询图书
直接查询
图书管理
读者管理
罚款管理
借书
还书
六.实验过程
---创建代码
建立数据库
createdatabaselibrarysystem
on
(name=librarysystem,
filename='d:
\librarysystem.mdf',
size=10,
maxsize=50,
filegrowth=5)
logon-----指明事务日志文件
(name='library',
filename='d:
\librarysystem.ldf',-------指定存储的路径名和文件名
size=5mb,
maxsize=25mb,
filegrowth=5mb)
建立图书信息表
createtablesystem_books
(
bookidvarchar(20)primarykey,---书籍编号为主键
booknamevarchar(30)Notnull,---图书名称
bookstylevarchar(30)Notnull,---图书类型
bookauthorvarchar(30),---图书作者
bookpubvarchar(30),---出版社
bookpubdatedatetime,---出版时间
bookindatedatetime,---收录时间
isborrowedbit,---是否被借
)
建立读者信息表
createtablesystem_readers
(
readeridvarchar(9)primarykey,---借书证号为主键
readernamevarchar(10)notnull,----读者姓名
readersexchar
(2)notnull,----性别
readertypevarchar(20)notnull,----读者类型
regdatedatetime,----登记时间
booktotalint,----可借书数
borrowednumint,----已借书数
overduenoreturnnumint----过期末还书数
)
建立借书记录表
createtableborrow_record
(bookidvarchar(20)primarykey,---书籍编号
readeridvarchar(9),----借书证号
borrowdatedatetime,-----借书时间
foreignkey(bookid)referencessystem_books(bookid),-----定义书籍编号为借书表的外键
foreignkey(readerid)referencessystem_readers(readerid),----定义借书证号为借书表的外键
)
建立还书记录表
createtablereturn_record
(bookidvarchar(20)primarykey,----书籍编号为主键
readeridvarchar(9),----借书证号
returndatedatetime,-----归还时间
foreignkey(bookid)referencessystem_books(bookid),-----定义书籍编号外键
foreignkey(readerid)referencessystem_readers(readerid)----定义借书证号为外键
)
建立罚款单表
createtablereader_fee
(readeridvarchar(9)notnull,--借书证号
readernamevarchar(9)notnull,--读者姓名
bookidvarchar(20)primarykey,---借书证号
booknamevarchar(30)Notnull,---书籍名称
bookfeesmallmoney,--罚款金额
borrowdatedatetime,--借阅时间
foreignkey(bookid)referencessystem_books(bookid),---定义书籍编号外键
foreignkey(readerid)referencessystem_readers(readerid)---定义借书证号为外键
)
索引的创建
createindexborrow_record_index_readeridonborrow_record(readerid)—为借阅表在借书证号上建索引
createindexreader_fee_index_readeridonreader_fee(readerid)—为罚款表在借书证号上建索引
createindexreturn_record_index_readeridonreturn_record(readerid)--为归还表在借书证号上建索引
createindexsystem_books_index_booknameonsystem_books(bookname)—为图书信息表在书籍编号上建索引
createindexsystem_books_index_bookauthoronsystem_books(bookauthor)---为图书信息表在作者上建索引
创建视图
createviewb1_system_books
asselectbookid,bookstyle,bookpub,bookname
fromsystem_books
createviewr1_system_readers
asselectreaderid,readername,readertype
fromsystem_readers
createviewb2_borrow_record
asselectbookid,readerid
fromborrow_record
建立借书记录存贮过程
createproceduresp_borrowbook@bookidchar(20),
@readeridchar(9)
as
insertintoborrow_record(bookid,readerid,borrowdate)
values(@bookid,@readerid,getdate())
go
-------------建立还书记录存贮过程
createproceduresp_returnbook@bookidchar(20),@readeridchar(9)
as
deletefromretun_record
wherebookid=@bookidandreaderid=@readerid
go
-------------建立罚款单存贮过程
createproceduresp_readerfee@readeridchar(9),@borrowdatedatetime
as
updatereader_fee
setbookfee=0.1*(day(getdate())-day(@borrowdate))
wherereader=@readerid
andborrowdate=@borrowdate
-------------建立借书记录表增加触发器
createtrigger[tr_addlend]onborrow_record
forinsert
as
updatesystem_books
setisborrowed=1
wherebookidin(selectbookid
frominserted)
updatereader
setborrowednum=borrowednum+1
wherereaderidin(selectreaderid
frominserted)
-------------建立还书记录删除触发器
createtrigger[tr_dellend]onreturn_record
fordelete
as
updatesystem_books
setisborrowed=0
wherebookidin(selectbookid
fromdeleted)
updatesystem_readers
setborrowednum=borrowednum-1
wherereaderidin(selectreaderidfromdeleted)
-------------建立删除图书触发器
createtrigger[tr_dellendbook]onsystem_books
fordelete
as
deletereader_fee
wherebookidin(selectbookid
fromdeleted)
deletereturn_record
wherebookidin(selectbookidfromdeleted)
---信息的录入
insertinto
system_books(bookid,bookname,bookstyle,bookauthor,bookpub,bookpubdate,bookindate,isborrowed)
values('','计算机组成原理','王爱英','工科类','清华大学出版社','2001-01-03','2003-11-15','1')
insertinto
system_readers(readerid,readername,readersex,readertype,regdate,booktotal,borrowednum,overduenoreturnnum)
values('5','张三','男','学生','2013-1-6','8','2','0')
insertintoborrow_record(bookid,readerid,borrowdate)
values('','5','2012-12-18')
insertintoreturn_record(bookid,readerid,returndate)
values('','5','2012-1-18')
----信息的修改
updatesystem_books
setbookname='王英'
wherebookid=''
updatesystem_readerssetreadersex='女'
wherereaderid='5'
updateborrow_record
setbookid=’’
wherebookid=’’
updatereturn_record
setbookid=’’
wherebookid=’’
-----信息的删除
deletefromsystem_books
wherebookid=’2’
deletefromsystem_readers
wherereaderid=’5’
deletefromborrow_record
wherebookid=’2’
七.实验总结
本次实验通过对图书借阅功能的分析,我分别创建了图书信息表,读者信息表,借阅信息表,还有一张罚款表。
对借书记录用存储过程建立,建立借书记录表增加触发器和还书记录删除触发器实现表的更新。
程序也有不足的地方,那就是不能查询图书的数量以及图书可以借阅的时间限制。
该数据库也没有备份与还原功能,这也是一个很大的缺点。
我还用存储过程实现了罚款功能。
八.心得体会
这次实训最大的体会就是明白到自己之前有多么的懒惰,学过的东西没有去复习和联系。
导致这次实训到临时来学习。
零时来翻课件学习语句,还好在老师的帮助下,攻克了很多难题。
这次最大的收获就是学会了分析一个系统的需要,明白了不管学什么都要用心去练习。
这次实训虽然遇到了很多困难,但是我也发现,只要用心的去学,去钻,就一定能弄懂。