课程设计题目:图书借阅管理系统的设计与实现
专 业:信息工程 班 级: 姓 名:胡慧斌 学 号: 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图
①. 读者信息实体表
逾期未还书数 可借书数 读者 已借书数 读者借书证编号 登记时间 读者姓名 读者性别 读者种类e
②.书籍实体图
书籍作者 收录时间 是否被借 书籍编号 书籍 书籍名称 出版时间 出版社
③.借阅记录实体图
借阅记录信息 书籍类别 编号 读者借书证编号 借阅时间隔
④.归还记录实体图
归还信息记录 读者借书证号 书籍类别编号 归还时间
⑤.罚款信息实体图
罚款金额 书籍名称 读者姓名 罚款信息实体实体 读者借书证编号 借阅时间书籍类别编号 ⑥.信息实体E-R图
还书信息 m 归还 n m 读者 借阅 n 借阅信息 书籍 m n 罚款 罚款信息
3.二维关系表
表3-1
表中列名 readerid readername readersex readertype regdate booktotal borrowednum overduenoreturnnum 数据类型 varchar varchar varchar varchar datetime int int int system_readers读者信息表格
可否为空 not null(主键) not null not null not null null null null null 说明 读者借书证号 读者姓名 读者性别 读者种类 登记日期 可借书数 已借书数 逾期未还书数
表中列名 bookid bookname bookstyle bookauthor bookpub bookpubdate bookindate isborrowed 表3-2 system_book书籍信息表
数据类型 Varchar Varchar Varchar Varchar Varchar Datetime Datetime Bit 可否为空 Not null(主键) Not null Not null Not null Null Null Null Not Null 说明 书籍编号 书籍名称 书籍类别 书籍作者 出版社名称 出版日期 登记日期 是否被借出
表3-3 borrow_record 借阅记录信息表
表中列名 readerid bookid borrowdate 数据类型 Varchar Varchar Datetime 可否为空 Not null(外主键) Not null(外主键) Not null 说明 读者借阅证编号 书籍编号 读者借书时间 表3-4 return_record 借阅记录信息表
表中列名 readername readerid returndate 表中列名 readerid readername bookid bookname bookfee borrowdate 数据类型 Varchar Varchar datetime 数据类型 varchar varchar varchar varchar Smallmoney datetime 可否为空 Not null(外主键) Not null(外主键) Not null 可否为空 Not null Not null Not null(外主键) Not null Not Null Not Null 说明 读者借阅证编号 书籍编号 读者还书时间 说明 读者借书证编号 读者姓名 书籍编号 书籍名称 罚款金额 借阅时间 表3-5 reader_fee 罚款记录信息表
4.关系模式
(1)读者(借书证编号,读者姓名,读者性别,读者种类,登记时期,可借书数 , 已借书数,逾期未还书数)
(2)书籍(书籍编号,书籍名称,书籍类别,书记作者,出版社名称,出版日期,登记日期)
(3)借阅(借书证编号,书籍编号,读者借书时间) (4)还书(借书证编号,书籍编号,读者还书时间)
(5)罚款(借书证编号,读者姓名,借书证编号,书籍编号,读者借书时间)
5.系统功能模块图
图书借阅系统 查询子系统 管理子系统 借还书子系统 查询图书 直接查询 图书管理 读者管理 罚款管理 借书 还书
六.实验过程
---创建代码 建立数据库
create database librarysystem on
( name = librarysystem,
filename = 'd:\\librarysystem.mdf', size = 10, maxsize = 50, filegrowth = 5 )
log on-----指明事务日志文件 ( name = 'library',
filename = 'd:\\librarysystem.ldf',-------指定存储的路径名和文件名 size = 5mb,
maxsize = 25mb, filegrowth = 5mb )
建立图书信息表
create table system_books (
bookid varchar(20)primary key , ---书籍编号为主键 bookname varchar(30) Not null, ---图书名称 bookstyle varchar(30) Not null,---图书类型 bookauthor varchar(30), ---图书作者 bookpub varchar(30) , ---出版社 bookpubdate datetime, ---出版时间 bookindate datetime , ---收录时间 isborrowed bit, ---是否被借 )
建立读者信息表
create table system_readers (
readerid varchar(9)primary key,---借书证号为主键 readername varchar(10) not null,----读者姓名 readersex char(2)not null,----性别
readertype varchar(20)not null,----读者类型 regdate datetime,----登记时间 booktotal int,----可借书数 borrowednum int,----已借书数
overduenoreturnnum int----过期末还书数 )
建立借书记录表
create table borrow_record
( bookid varchar(20) primary key,---书籍编号 readerid varchar(9),----借书证号 borrowdate datetime,-----借书时间
foreign key (bookid) references system_books(bookid),-----定义书籍编号为借书表的外键
foreign key (readerid) references system_readers(readerid),----定义借书证号为借书表的外键 )
建立还书记录表
create table return_record
( bookid varchar(20) primary key,----书籍编号为主键 readerid varchar(9),----借书证号 returndate datetime,-----归还时间
foreign key (bookid) references system_books(bookid),-----定义书籍编号外键 foreign key (readerid) references system_readers(readerid)----定义借书证号为外键 )
建立罚款单表
create table reader_fee
( readerid varchar(9)not null,--借书证号
readername varchar(9)not null ,--读者姓名 bookid varchar(20) primary key,---借书证号 bookname varchar(30) Not null, ---书籍名称 bookfee smallmoney,--罚款金额 borrowdate datetime,--借阅时间
foreign key (bookid) references system_books(bookid),--- 定义书籍编号外键 foreign key (readerid) references system_readers(readerid)--- 定义借书证号为外键 )
索引的创建
create index borrow_record_index_readerid on borrow_record(readerid)—为借阅表在借书证号上建索引
create index reader_fee_index_readerid on reader_fee (readerid)—为罚款表在借书证号上建索引
create index return_record_index_readerid on return_record(readerid)-- 为归还表在借书证号上建索引
create index system_books_index_bookname on system_books(bookname)—为图书信息表在书籍编号上建索引
create index system_books_index_bookauthor on system_books(bookauthor)---为
图书信息表在作者上建索引
创建视图
create view b1_system_books
as select bookid,bookstyle,bookpub,bookname from system_books
create view r1_system_readers
as select readerid,readername,readertype from system_readers
create view b2_borrow_record as select bookid, readerid from borrow_record
建立借书记录存贮过程
create procedure sp_borrowbook @bookid char(20),
@readerid char(9) as
insert into borrow_record (bookid,readerid,borrowdate) values(@bookid,@readerid,getdate()) go
-------------建立还书记录存贮过程
create procedure sp_returnbook @bookid char(20),@readerid char(9) as
delete from retun_record
where bookid=@bookid and readerid=@readerid go
-------------建立罚款单存贮过程
create procedure sp_ readerfee @readerid char(9), @borrowdate datetime as
update reader_fee
set bookfee=0.1*(day(getdate())-day(@borrowdate)) where reader=@readerid
and borrowdate=@borrowdate
-------------建立借书记录表增加触发器 create trigger [tr_addlend] on borrow_record for insert as
update system_books set isborrowed =1
where bookid in (select bookid
from inserted) update reader
set borrowednum = borrowednum +1 where readerid in (select readerid
from inserted)
-------------建立还书记录删除触发器
create trigger [tr_dellend] on return_record for delete as
update system_books set isborrowed =0
where bookid in (select bookid
from deleted) update system_readers
set borrowednum = borrowednum -1
where readerid in (select readerid from deleted)
-------------建立删除图书触发器
create trigger [tr_dellendbook] on system_books for delete as
delete reader_fee
where bookid in (select bookid
from deleted) delete return _record
where bookid in (select bookid from deleted)
---信息的录入 insert into
system_books(bookid ,bookname,bookstyle,bookauthor,bookpub,bookpubdate, bookindate, isborrowed )
values('','计算机组成原理','王爱英', '工科类','清华大学出版社','2001-01-03','2003-11-15','1') insert into
system_readers(readerid,readername,readersex,readertype,regdate,booktotal,borrowednum,overduenoreturnnum)
values('5','张三','男','学生','2013-1-6','8','2','0')
insert into borrow_record(bookid,readerid,borrowdate) values ('','5','2012-12-18')
insert into return_record (bookid,readerid,returndate) values ('','5','2012-1-18')
----信息的修改
update system_books set bookname='王英' where bookid=''
update system_readers set readersex='女'
where readerid='5' update borrow_record set bookid=’’ where bookid=’’ update return_record set bookid=’’ where bookid=’’
-----信息的删除
delete from system_books where bookid=’2’
delete from system_readers where readerid=’5’
delete from borrow_record where bookid=’2’
七.实验总结
本次实验通过对图书借阅功能的分析,我分别创建了图书信息表,读者信息表,借阅信息表,还有一张罚款表。对借书记录用存储过程建立,建立借书记录表增加触发器和还书记录删除触发器实现表的更新。程序也有不足的地方,那就是不能查询图书的数量以及图书可以借阅的时间限制。该数据库也没有备份与还原功能,这也是一个很大的缺点。我还用存储过程实现了罚款功能。
八.心得体会
这次实训最大的体会就是明白到自己之前有多么的懒惰,学过的东西没有去复习和联系。导致这次实训到临时来学习。零时来翻课件学习语句,还好在老师的帮助下,攻克了很多难题。这次最大的收获就是学会了分析一个系统的需要,明白了不管学什么都要用心去练习。这次实训虽然遇到了很多困难,但是我也发现,只要用心的去学,去钻,就一定能弄懂。
因篇幅问题不能全部显示,请点此查看更多更全内容