数据库图书馆管理
课程设计报告
课程设计题目: 图书借阅管理系统数据库
的设计与实现
专 业: 软件工程 班 级: 10211123 姓 名: ** 学 号: ******* 指导教师: 游胜玉
2011年 11 月25 日
目 录
一、 实验题目 ·········································(3)
二、 实验时间、地点········································(3)
三、 实验目的 ········································(3)
四、 设计要求 ··········································(3)
五、 实验思路 ··········································(3)
六、 实验过程(源代码)·····································(7)
七、 实验总结 ··········································(14)
八、 心得体会 ··········································(14)
一、实验题目:图书借阅管理系统数据库的设计与实现
描述:设计一个图书借阅管理系统,实现下列功能: ⒈图书信息的维护(包括录入,修改和删除);
⒉读者信息的维护(包括录入,修改和删除);
⒊借阅(借,还)信息的维护(包括借,还信息录入,修改和删除);
二、实验时间、地点
实验时间 :2011.11.21 – 2011.11.25 实验地点 :305
三、实验目的
通过本次课程设计让学生能够综合运用所学的关系数据库原理知识解决并能设计一个实际问题,进一步掌握数据库原理的相关理论和数据库的设计实现过程,进一步提高学生的分析问题和解决问题的能力以及学生的动手能力。
四、实验要求
1.对各个系统进行系统功能需求分析
2.数据库设计分析阶段,进行详细的数据库需求分析,进行概念数据库的设计,画出数据库的E-R图(局部和整体E-R图)
3.设计出详细的逻辑数据库结构,将各个实体和联系转化为相应的二维表即关系模式,指定各个关系的主关键字和外部关键字,并对各个关系的约束加以限定
4.通过企业管理器或是查询分析器实现各个二维关系(建议最好用SQL代码实现),要求建立相关的索引
5.根据系统功能需求设计相应的查询视图 6.要求根据系统功能需求建立存储过程
7.根据功能需求建立相应的触发器以保证数据的一致性
五、实现思路 ①需求分析
⒈对书籍的管理:新书的输入,书籍的删除,书籍的修改,书籍的查询。
⒉借书记录管理:查询某书是否被借,查询在规定时间未还的书籍及读者信息。
⒊对读者信息的管理:注册、修改、注销某读者信息,对超过借书量的读者无法借书。 ⒋借书还书操作,还书款计算。
②E-R图:
书名 作者 书号 图书信息 库存 出版社 类型 书号 借书日期 借书 金额 借书号 还书日期 姓名 身份证号 借书号 读者信息 累计借书 性别 联系电话
③数据表 读者信息表 字段名称 身份证号 读者姓名 读者性别 数据类型 (key)var char var char var char 数据长度 12 10 2 是否可为空 n n n 联系电话 累计借书 借书号 var char Inter var char 10 12 10 y Y Y
借书记录表 字段名称 书号 借书号 还书日期 借书日期 金额 数据类型 (key) varchar varchar datatime datatime Int 数据长度 12 12 12 12 12 是否为空 N N N N Y
图书信息表 字段名称 书号 书名 作者 出版社 类型 库存 数据类型 (key)varchar varchar varchar varchar varchar varchar 数据长度 20 50 12 50 10 200 是否为空 N N N Y Y Y ④SQL语句创建表
---------读者信息表创建----------- use model
create table 读者信息表
(
身份证号 varchar(20) NOT NULL primary key, 读者姓名 varchar(10) NOT NULL , 读者性别 varchar(2) NOT NULL, 联系电话 varchar(12),
借书号 varchar(20) not null, 累计借书 int
)
insert into 读者信息表 values(26242150012,'胡醒','男',18770,12345,2) insert into 读者信息表 values(62421520012,'刘燕','女',17780,23123,1) insert into 读者信息表 values(21562420012,'大二','男',87710,43423,3) insert into 读者信息表 values(21526240012,'啊三','男',80187,22452,4)
---------借书记录表创建----------- use model
create table 借书记录表 (
书号 varchar(12) not null , 借书号 varchar(12) not null, 借书日期 datetime not null, 还书日期 datetime , 金额 Int ,
)
insert into 借书记录表 values(2,12345,getdate(),getdate(),12) insert into 借书记录表 values(3,23123,getdate(),getdate(),12) insert into 借书记录表 values(4,43423,getdate(),getdate(),12) insert into 借书记录表 values(5,22452,getdate(),getdate(),12) --drop table 借书记录表 ---------图书信息表创建----------- use model
create table 图书信息表
(
书号 varchar(12) not null primary key, 书名 varchar(50) not null , 作者 varchar(12) not null , 出版社 varchar(50), 类型 varchar(10), 库存 int,
)
insert into 图书信息表 values(00002,'仙剑奇侠传一','姚壮宪','人民出版社','小说',120) insert into 图书信息表 values(00003,'仙剑奇侠传二','姚壮宪','人民出版社','小说',100) insert into 图书信息表 values(00004,'仙剑奇侠传三','姚壮宪','人民出版社','武侠',120) insert into 图书信息表 values(00005,'仙剑奇侠传四','姚壮宪','人民出版社','小说',121)
数据表如下:
六、实现过程
---------------新书输入功能------------
create procedure insertrecord (
@书号 varchar(12), @书名 varchar(50), @作者 varchar(12), @出版社 varchar(50), @类型 varchar(10), @库存 int )
as
insert into 图书信息表 values(@书号,@书名,@作者,@出版社,@类型,@库存)
exec insertrecord @书号=11,@书名='仙剑奇侠传345',@作者='姚壮宪',@出版社='人民出版社',@类型='小说',@库存=120 /*调用存储过程insertrecord */
实现结果如下:
---------------书籍的删除功能------------ create procedure deletebook (
@书号 varchar(12) )
as delete
from 图书信息表
where 书号=@书号
exec deletebook @书号=11 /*调用存储过程deletebook */
实现结果如下:
--------------书籍修改----------- create procedure setdate (
@书号 varchar(12), @书名 varchar(50), @作者 varchar(12), @出版社 varchar(50), @类型 varchar(10), @库存 int
) as
update 图书信息表 set
书名=@书名, 作者=@作者,
出版社=@出版社, 类型=@类型, 库存=@库存
where 书号=@书号
exec setdate @书号=1,@书名='数据库原理及应用',@作者='陈志泊',@出版社='人民邮电出版社',@类型='教材',@库存=200 /*调用存储过程setdate */ 实现结果如下:
---------------书籍查询---------------- create procedure selectbook (
@书号 varchar(12) ) as
select *
from 图书信息表 where 书号=@书号
exec selectbook @书号=1 /*调用存储过程selectbook */ 实现结果如下:
---------------读者信息注册------------ create procedure reader1 (@身份证号 varchar(20), @读者姓名 varchar(10) , @读者性别 varchar(2), @联系电话 varchar(12), @借书号 varchar(20), @累计借书 varchar(12)
) as
insert into 读者信息表 values(@身份证号,@读者姓名,@读者性别,@联系电话,@借书号, @累计借书)
exec reader1 @身份证号=36242150012,@读者姓名='胡某',@读者性别='男',@联系电话=18770,@借书号=1026 ,@累计借书=0 /*调用存储过程reader1 */ 实现结果如下:
---------------读者信息修改---------------- create procedure updatereader (@身份证号 varchar(20), @读者姓名 varchar(10) , @读者性别 varchar(2), @联系电话 varchar(12), @借书号 varchar(20), @累计借书 varchar(12) )
as
update 读者信息表 set
读者姓名=@读者姓名 , 读者性别=@读者性别, 联系电话=@联系电话 , 借书号=@借书号,
累计借书=@累计借书
where 身份证号=@身份证号
exec updatereader @身份证号=36242150012,@读者姓名='张三' ,@读者性别='男',@联系电话=18770056827 ,@借书号=1021112312, @累计借书=3 /*调用存储过程reader1 */ 实现结果如下:
----------------读者信息注销----------------- create procedure deletereader (
@身份证号 varchar(20) ) as
delete
from 读者信息表
where 身份证号=@身份证号
exec deletereader @身份证号=36242150012 /*调用存储过程deletereader */ 实现结果如下:
--------------------借书操作---------------- create procedure borrowbook (
@书号 varchar(12), @借书号 varchar(20) )
as
update 图书信息表 /*修改相关信息表*/ set 库存=库存-1
where 图书信息表.书号=@书号
insert into 借书记录表 values (@书号,@借书号,getdate(),null,null) update 读者信息表
set 累计借书=累计借书+1
where 读者信息表.借书号=@借书号
exec borrowbook @书号=2,@借书号=12345 /*调用存储过程deletereader */ 实现结果如下:
---------------------借书状况查询-------- create procedure selectbook1 (
@a varchar(20)
) as
select 读者姓名,读者信息表.借书号,读者性别,联系电话,书名,类型,借书日期,还书日期 from 读者信息表,借书记录表,图书信息表
where 读者信息表.借书号=借书记录表.借书号 and 借书记录表.书号=图书信息表.书号 and 读者信息表.身份证号=@a
exec selectbook1 @a=21526240012 /*调用存储过程deletereader */ 实现结果如下:
--------------------借书限制------------ create procedure limitborrow (
@借书号 varchar(12) ) as
declare @temp int
set @temp=(select 累计借书 from 读者信息表 where 读者信息表.借书号=@借书号) if (@temp>3) /*判断借书是否超过3本*/ print '借书限制'
else
print '借阅成功'
exec limitborrow @借书号=22452 /*调用存储过程deletereader ,借书超过3本情况*/ 实现结果如下:
exec limitborrow @借书号=23123 /*没有超过3本*/
-------------------还书操作---------- create procedure returnbook2 (
@借书号 varchar(12), @书号 varchar(12) ) as
update 借书记录表 set 还书日期=getdate()
where 借书记录表.借书号=@借书号 and 借书记录表.书号=@书号 update 借书记录表 /*计算借书款*/
set 金额=0.2*datediff(second,(select 借书日期 from 借书记录表 where 借书记录表.书号=@书号 ),(select 还书日期 from 借书记录表 where 借书记录表.书号=@书号 )) where 借书记录表.借书号=@借书号 and 借书记录表.书号=@书号 update 读者信息表
set 读者信息表.累计借书=累计借书-1 where 读者信息表.借书号=@借书号 update 图书信息表
set 库存=库存+1
where 图书信息表.书号=@书号
exec returnbook2 @借书号=12345,@书号=2 /*调用存储过程returnbook2 */ 实现结果如下:
--------------显示触发器------- create trigger display on 读者信息表 for insert
as
select * from 读者信息表 create trigger display1 on 读者信息表 for delete
as
select * from 读者信息表 create trigger display2
on 读者信息表
for update as
select * from 读者信息表 create trigger display3 on 借书记录表 for update
as
select * from 借书记录表 create trigger display4 on 借书记录表 for insert
as
select * from 借书记录表 create trigger display5 on 借书记录表
for delete as
select * from 借书记录表 create trigger display9 on 图书信息表
for delete as
select * from 图书信息表 create trigger display0 on 图书信息表 for update
as
select * from 图书信息表 create trigger display77 on 图书信息表 for insert
as
select * from 图书信息表
------------视图-------
create view view1 /*借书状况试图*/
as select 图书信息表.书号,图书信息表.书名,读者姓名,读者信息表.借书号,读者信息表.身份证号,累计借书,
借书日期,还书日期,金额
from 图书信息表 ,借书记录表 ,读者信息表
where 图书信息表.书号=借书记录表.书号 AND 读者信息表.借书号=借书记录表.借书号 drop view view1
实现结果
七、实验总结
为期一个星期的数据库图书管理系统实习终于结束了,总算松了一口气,在这短短的两周时间内承受了很大的压力现在终于能够得到“释放”了,感觉到很轻松。回顾这两周所做过的工作和努力,感觉到收获不少,这里面除了实习本省的内容外,还包括许许多多超乎实习本身意义之外的东西。代码实现了大部分要求功能,但还有不足之处,今后将继续努力,将其完善。
九、 心得体会
如果没有这次的实习,我们可能都无法发现这些问题的所在,所以仅仅学习理论的东西只会将我们“束之高阁”,通过这次实习,最主要的是让我们学会去发现问题,在编译发现问题的过程中学会自己去解决问题,最后解决问题所得到的收获包括成功后的喜悦感都将是属于真正我们自己的东西,成为我们的一笔宝贵的财富和经验,是一笔潜在的能源,受益无穷。
还要感谢老师的细心指导。
因篇幅问题不能全部显示,请点此查看更多更全内容