搜索
您的当前位置:首页正文

学校图书借阅管理系统数据库设计

来源:筏尚旅游网
数据库课程设计报告 学校图书借阅管理系统

学生姓名: * * * 学 号: ********** 专业年级: 计算机科学与技术10级 指导教师: * * *

目录

一、结构设计 ................................................................................................................................... 3

1、逻辑结构设计 ..................................................................................................................... 3 2、 关系图 ............................................................................................................................... 5 3、物理结构设计 ..................................................................................................................... 6 4、 关系模式 ........................................................................................................................... 7 二、存储过程 ................................................................................................................................... 8 三、触发器....................................................................................................................................... 9 四、视图脚本 ................................................................................................................................. 12 五、数据库恢复与备份 ................................................................................................................. 12

数据库设计说明书

一、结构设计

1、逻辑结构设计

(1)总体E-R图如图1

图1

读者E-R图如图2

图2

图书E-R图如图3

图3

权限设置E-R图如图4

图4

权限设置E-R图如图5

图5

权限设置E-R图如图6

图6

2、关系图

关系图如图7

图7

3、物理结构设计

Tb_reader读者表:

属性名 readerid rname sex grade Profession ifeffective email 类型 Varchar(10) Varchar(20) Varchar(2) Varchar(1) Varchar(20) tinyint Varchar(20) 备注 主键 不允许空 不允许空(‘男’ or’ 女’) 不允许空 不允许空 不允许空(1 of 0) 允许空 说明 读者id 姓名 性别 年级 专业 是否有效 邮箱 Tb_manager管理员表:

属性名 managerid loginnane password Tb_borrow借阅表:

属性名 borrowid bookid readerid managerid borrowTime backTime 类型 int Varchar(10) Varchar(10) Varchar(10) Smalldatetime Smalldatetime 备注 主键(自增) 不允许空 不允许空 不允许空 不允许空 允许空(backTime>=borrowtime) 类型 Varchar(10) Varchar(20) Varchar(20) 备注 主键 不允许空 不允许空 说明 管理员id 登录名 密码 说明 id 书号 读者号 管理员号 借书时间 还书时间 ifreborrow Tb_book图书表:

属性名 tinyint 不允许空(1 or 0) 是否续借 类型 备注 说明 bookid bname type author price publish quantity remain Varchar(10) Varchar(20) Varchar(20) Varchar(20) float Varchar(20) Tinyint Tinyint 主键 不允许空 允许空 允许空 允许空 允许空 不允许空 不允许空(remain<=quantity) 书号 书名 类型 作者 价格 出版社 总数 剩余 Tb_punishment超期处罚表:

属性名 punishmentid readerid bookid days bmoney 类型 int Varchar(10) Varchar(10) smallint float 备注 主键(自增) 不允许空 不允许空 不允许空 不允许空 说明 id 读者号 书号 超期天数 罚款金额 Tb_purview管理员权限设置表:

属性名 managerid systemset readerset bookset borrowback systemquery 类型 Varchar(10) tinyint tinyint tinyint tinyint tinyint 备注 主键 不允许空(1 or 0) 不允许空(1 or 0) 不允许空(1 or 0) 不允许空(1 or 0) 不允许空(1 or 0) 说明 管理员号 系统设置权限 读者权限 图书管理权限 图书借还权限 系统查询权限 4、关系模式

Tb_reader(readerid,rname,sex,grade,profession,email,ifeffective) Tb_borrow(borrowid,readerid,bookid,managerid,borrowTime,backTime,ifreborrow)

Tb_manager(managerid,loginname,password)

Tb_book(bookid,bname,type,author,publish,price,quantity,remain) Tb_punishment(punishmentid,readerid,bookid,days,bmoney)

Tb_purview(managerid,systemset,readerset,bookset,borrowback,systemquery)

二、存储过程

创建存储过程,输入读者id查询出书名、借阅时间、归还时间、管理员id、是否续借情况

create procedure p

@readerid_in varchar(10), @bookid_in varchar(10),

@bname_out varchar(20) output, @borrowTime_out datetime output, @backTime_out datetime output, @managerid_out varchar(10) output, @ifreborrow_out tinyint output as select

@bname_out=bname,@borrowTime_out=borrowTime,@backTime_out=backTime,@managerid_out=managerid,@ifreborrow_out=ifreborrow

from tb_book,tb_borrow

where tb_borrow.readerid=@readerid_in and tb_borrow.bookid=@bookid_in and tb_book.bookid=tb_borrow.bookid 存储过程使用

declare @readerid_in varchar(10),

@bookid_in varchar(10), @bname_out varchar(20), @borrowTime_out datetime,

@backTime_out datetime, @managerid_out varchar(10), @ifreborrow_out tinyint

select @readerid_in='2010508033' select @bookid_in='005'

exec p @readerid_in,@bookid_in,@bname_out output,@borrowTime_out output,@backTime_out

output,@managerid_out output,@ifreborrow_out output print '书名:'+@bname_out

print '借书时间:'+rtrim(@borrowTime_out) print '还书时间:'+rtrim(@backTime_out) print '管理员编号:'+@managerid_out print '是否续借:'+rtrim(@ifreborrow_out)

三、触发器

1、借书触发器,当借书时,图书表中的remain(剩余图书)自动减一。 create trigger t_borrow on tb_borrow for insert as

declare @bookid_read varchar(10)

select @bookid_read=bookid from inserted

begin

update tb_book set remain=remain-1 where bookid=@bookid_read End

2、还书触发器,当还书时,图书表中的remain自动加一。 create trigger t_back on tb_borrow for update as if update(backTime)

declare @bookid_read varchar(10)

select @bookid_read=bookid from inserted

begin

update tb_book set remain=remain+1 where bookid=@bookid_read End

3、罚款触发器,当借阅图书超期时,自动在punishment表中添加罚款记录,记录罚款读者、书名、天数、金额,并且自动将reader表中的ifeffective置为0,是该读者不能再借书。 create trigger t_punish on tb_borrow for update as

if update(backTime) begin

declare @backTime datetime,

@borrowTime datetime, @ifreborrow tinyint, @days int, @days1 int, @bmoney int,

@readerid varchar(10), @bookid varchar(10)

select @backTime=backTime from inserted select @borrowTime=borrowTime from inserted select @ifreborrow=ifreborrow from inserted select

@days=convert(int,@backTime)-convert(int,@borrowTime)

select @readerid=readerid from inserted select @bookid=bookid from inserted if @days>30 begin

if @ifreborrow=1

begin

if @days>60 begin

select @days1=@days-60 select @bmoney=@days1*0.1 insert into

tb_punishment(readerid,bookid,days,bmoney) values(@readerid,@bookid,@days1,@bmoney)

update tb_reader set ifeffective=0 where

readerid=@readerid

end

end

if @ifreborrow=0 begin

select @days1=@days-30 select @bmoney=@days1*0.1 insert into

tb_punishment(readerid,bookid,days,bmoney) values(@readerid,@bookid,@days1,@bmoney)

update tb_reader set ifeffective=0 where

readerid=@readerid

end

end

end

4、读者是否有效触发器,当读者借书时,检查reader表中的ifeffective属性,若为0则说明有超期罚款,不能借书。 create trigger t_ifcanborrow on tb_borrow for insert as

declare @readerid varchar(10),

@ifeffective tinyint

select @readerid=readerid from inserted

select @ifeffective=ifeffective from tb_reader where readerid=@readerid if @ifeffective=0 begin

print '您有超期罚款!' rollback transaction end

四、视图脚本

1、创建视图查询各种图书的书号、书名、总数和在册数。 create view view_query

as select bookid,bname,quantity,remain from tb_book 2、创建视图查询读者的超期罚款情况,其中包括读者号,读者姓名,罚款书名,罚款金额。

create view view_reader

as select tb_punishment.readerid,rname,bname,bmoney from tb_punishment,tb_book,tb_reader where tb_punishment.bookid=tb_book.bookid and tb_punishment.readerid=tb_reader.readerid

五、数据库恢复与备份

数据库的完全备份 use db_library go

backup database db_library

to disk='H:\\LibarySystem\\backup\\f_db_library' with init Go

数据库的恢复 use db_library go

backup database db_library

to disk='H:\\LibarySystem\\backup\\f_db_library' with init Go

数据库差异备份 use db_library go

backup database db_library

to disk='H:\\LibarySystem\\backup\\d_db_library' with differential Go

数据库的恢复 use master go

restore database db_library

from disk='H:\\LibarySystem\\backup\\f_db_library' with norecovery go

restore database db_library

from disk='H:\\LibarySystem\\backup\\d_db_library' with replace go

因篇幅问题不能全部显示,请点此查看更多更全内容

Top