图书管理系统触发器和存储过程文档格式.docx

上传人:b****6 文档编号:18021894 上传时间:2022-12-12 格式:DOCX 页数:15 大小:19.72KB
下载 相关 举报
图书管理系统触发器和存储过程文档格式.docx_第1页
第1页 / 共15页
图书管理系统触发器和存储过程文档格式.docx_第2页
第2页 / 共15页
图书管理系统触发器和存储过程文档格式.docx_第3页
第3页 / 共15页
图书管理系统触发器和存储过程文档格式.docx_第4页
第4页 / 共15页
图书管理系统触发器和存储过程文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

图书管理系统触发器和存储过程文档格式.docx

《图书管理系统触发器和存储过程文档格式.docx》由会员分享,可在线阅读,更多相关《图书管理系统触发器和存储过程文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

图书管理系统触发器和存储过程文档格式.docx

Bwriternvarchar(20)NOTNULL,----作者

BpubAdrvarchar(30)NOTNULL,----出版社

BpubDatesmalldatetime,----出版日期

Btypevarchar(20),----类别

BtotalNumintNOTNULL,----总量

BborrowedNumintdefault0,----借出量默认值为零

constraintBook_PKprimarykey(Bid)----创建“分类号”为主键

----------读者信息表

CREATETABLEReader

Rnonvarchar(10)NOTNULL,----读者编号

Rnamenvarchar(20)NOTNULL,----姓名

Rsexchar

(2)check(Rsexin('

男'

'

女'

)),----性别只能在“男”和“女”之间选择

Rageintnotnull,---读者年龄

Rphonenvarchar(15),----电话/手机

Readertypenvarchar(20)check(Readertypein('

本科生'

研究生'

教师'

)),----读者类型只能在“本科生”,“研究生”,“教师”之间选择

constraintReader_PKprimarykey(Rno)----创建“读者编号”为主键

----------读者借阅信息表

createtableReaderBook

RBorrowDatesmalldatetimeNOTNULL,----借阅日期

RBackDatesmalldatetimenotnull,----应还书日期

RReborrowTimestinyintdefault0,----续借次数默认为次

RoverdueDaysint,----图书超期天数

constraintReaderBook_PKprimarykey(Rno,Bid),----创建“读者编号,分类号”为主键

foreignkey(Rno)referencesReader(Rno),----创建“读者编号”为外部键

foreignkey(Bid)referencesBook(Bid)----创建“分类号”为外部键

------用户表

createtableAdmin

AdminIdvarchar(10)notnull,----用户ID

AdminPswvarchar(10)notnull,----用户密码

AdminNamevarchar(20)notnull,----用户名

constraintAdmin_PKprimarykey(AdminId)----创建用户ID为主键

CreatetableRReturnBook

Rnonvarchar(10)NOTNULL,

Bwriternvarchar(20),---作者

Btypevarchar(20),---图书类别

BpubAdrvarchar(30),---出版社

RborrowTimestinyintdefault1,---记录读者借借阅同一本书的次数

ReturnDatesmalldatetime,---还书时间

constraintRReturnBook_PKprimarykey(Rno,Bid,RborrowTimes),---创建主键

constraintRno_Fkforeignkey(Rno)referencesReader(Rno),

constraintRBid_FKforeignkey(Bid)referencesBook(Bid)---创建外码

Go

图书馆管理系统数据库--------------触发器的创建

------------借书要求(书本没有库存,则无法进行借书操作)-----------

createtriggertri_Book

onBook

forupdate

as

declare@btotalint,@bborrowedint

select@btotal=BTotalNum,@bborrowed=BborrowedNumfrominserted

if(@btotal<

@bborrowed)

begin

rollbacktransaction

print'

借阅失败!

'

print'

对不起,此书已经没有库存,无法进行本次借书操作!

end

------------借书要求(读者最多借阅量)-----------

----假定教师最多只能借十本,本科生最多只能借五本书,研究生最多可以借八本书----

createtriggertri_RBorrowNum

onReaderBook

forinsert

declare@nochar(10),@numint

--------获得教师编号

select@no=inserted.Rnofrominserted,ReaderwhereReader.Readertype='

--------统计教师借书总量并做相应处理

select@num=count(*)

fromReaderBook

whereRno=@no

if(@num>

10)--------假定教师最多只能借十本书

begin

rollbacktransaction

print'

print'

对不起,你的借阅总量已经达到本,无法进行本次借书操作!

请归还部分书籍后,再进行下次借书操作!

end

5)---------假定本科生最多只能借五本书

Print'

借阅失败!

8)---------假定研究生最多只能借八本书

end

-------------续借次数要求---------

--------假定教师最多允许续借四次,本科生最多允许续借两次,研究生最多可以续借三次------------

Createtriggertri_RRenewBook

declare@ttinyint

select@t=inserted.RReborrowTimesfrominserted,ReaderwhereReader.Readertype='

if(@t>

4)--------教师最多允许续借四次

续借失败!

对不起,你的续借次数已经达到了四次,已经无法再续借!

2)--------本科生最多允许续借两次

对不起,你的续借次数已经达到了两次,已经无法再续借!

3)--------研究生最多允许续借三次

对不起,你的续借次数已经达到了三次,已经无法再续借!

-----------读者还书信息入ReturnBook表-----------

Createtriggertri_RReturnBook

fordelete

declare@tint,@tnovarchar(10),@Bidvarchar(30)

selecttop1@tno=Rnofromdeleted

selecttop1@Bid=Bidfromdeleted

-----------图书信息更改过程

updateBook

setBborrowedNum=BborrowedNum-1

whereBid=@Bid

--------判断RrturnBook表中该读者是否已借过同样一本书籍

select@t=RborrowTimesfromReturnBookwhereRno=@tnoandBid=@Bid

if(@t>

0)----@t>

0说明该读者过去借过同一本书

set@t=@t+1

else

set@t=1

---------向ReturnBook表中插入信息

-----第一部分(主码先入)

insert

intoReturnBook(Rno,Bid,RborrowTimes,ReturnDate)

values(@tno,@Bid,@t,getdate())

-----第二部分(读者、书本信息)

updateReturnBook

set

Rname=(selectRnamefromReaderwhereRno=@tno)

Rsex=(selectRsexfromReaderwhereRno=@tno)

Rage=(selectRagefromReaderwhereRno=@tno)

Bname=(selectBnamefromBookwhereBid=@Bid)

Bwriter=(selectBwriterfromBookwhereBid=@Bid)

Btype=(selectBtypefromBookwhereBid=@Bid)

BpubAdr=(selectBpubAdrfromBookwhereBid=@Bid)

whereRno=@tnoandBid=@Bid

图书馆管理系统数据库-------------存储过程的创建

--------------------------------------读者借阅图书存储过程-------------------------------

createprocedureRBorrowBook

@novarchar(10),@Bidvarchar(30)

declare@bnamevarchar(50)

-----------判断读者是否已经借阅同一本书,如果已有借阅记录,则不能进行借书操作

ifexists(select*fromReaderBookwhereRno=@noandBid=@Bid)

对不起,你已经借阅了同一本图书,故而无法进行此次借书操作,请核实!

-----------图书信息更改

updateBook

setBborrowedNum=BborrowedNum+1

whereBid=@Bid

-----------读者借阅过程

insert

intoReaderBook(Rno,Bid,RBorrowDate)

values(@no,@Bid,getdate())

-----------输出借书成功信息

declare@rnamevarchar(8)

select@rname=RnamefromReaderwhereRno=@no

select@bname=BnamefromBookwhereBid=@Bid

select'

编号为'

+@no+'

,姓名为'

+@rname+'

的读者,于'

+datename(year,GETDATE())+'

年'

+datename(month,GETDATE())+'

月'

+datename(day,GETDATE())+'

日'

+datename(hour,GETDATE())+'

时'

+datename(minute,GETDATE())+'

分'

+datename(second,GETDATE())+'

秒,成功地从图书馆借出《'

+@bname+'

》一书!

as读者借书成功信息

--------------------------------------读者还书存储过程-------------------------------

createprocedureReturnBook

-----------判断读者是否借阅此书,如果没有借阅此书,则不能进行还书操作

ifnotexists(select*fromReaderBookwhereRno=@noandBid=@Bid)

对不起,你没有借阅此书,故而无法进行此次还书操作,请核实!

-----------读者还书过程

delete

whereRno=@noandBid=@Bid

--############"

图书信息更改过程在触发器tri_RReturnBook中"

###########

-----------输出还书成功信息

秒,成功地向图书馆归还《'

as读者还书成功信息

--------------------------------------读者续借图书存储过程-------------------------------

createprocedureRRenewBook

declare@bnamevarchar(50),@renewNumchar

(1),@timesmalldatetime

-----------判断读者是否借阅此书,如果没有借阅此书,则不能进行续借操作

对不起,你没有借阅此书,故而无法进行此次续借操作,请核实!

-----------读者续借图书过程

updateReaderBook

setRReborrowTimes=RReborrowTimes+1,@renewNum=RReborrowTimes+1,@time=RBorrowDate=getdate()----续借一次后,重新计入时间

-----------输出续借成功信息

+datename(year,@time)+'

+datename(month,@time)+'

+datename(day,@time)+'

+datename(hour,@time)+'

+datename(minute,@time)+'

秒,成功地续借《'

》一书,续借次数共为'

+@renewNum+'

次!

as读者续借成功信息

--------------------------------------读者查询借阅图书情况存储过程-------------------------------

createprocedureRQueryBook

@novarchar(10)

declare@bnamevarchar(50),@iint,@totalint,@timesmalldatetime,@dayint

---if(charindex('

T'

@no)>

0)

---begin

-----------以读者编号为表名创建临时性数据表

declare@RtempTabletable

读者编号nvarchar(10),

姓名nvarchar(8),

书名varchar(50)primarykey,

图书类别Varchar(20),

借书日期smalldatetimenotnull,

---最后续借日期smalldatetimenotnull,

本次借阅还剩天数int,

续借次数tinyintnotnull,

是否超期nvarchar

(2)

-------------向临时表中插入数据

-------第一部分(插入子查询)

into@RtempTable(书名,图书类别,借书日期,/*最后续借日期,*/续借次数)

selectBname,Btype,RBorrowDate/*,RRecentlyRenew*/,RReborrowTimes

fromBook,ReaderBook

whereReaderBook.Rno=@noandBook.Bid=ReaderBook.Bid

-------第二部分

declare@rnamechar(8)

select@rname=RnamefromReaderwhereRno=@no

update@RtempTableset读者编号=@no,姓名=@rname

-------第三部分(计算最后续借到超期还剩天数,并插入对应列)

select@total=count(*),@i=1from@RtempTable---获得@RtempTable表中的记录总数

while(@i<

=@total)

selecttop1@time=最后续借日期,@bname=书名

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1