1、 Bwriter nvarchar(20) NOT NULL,-作者 BpubAdr varchar(30) NOT NULL,-出版社 BpubDate smalldatetime,-出版日期 Btype varchar(20),-类别 BtotalNum int NOT NULL,-总量 BborrowedNum int default 0,-借出量默认值为零 constraint Book_PK primary key (Bid)-创建“分类号”为主键) -读者信息表CREATE TABLE Reader Rno nvarchar(10) NOT NULL,-读者编号 Rname nva
2、rchar(20) NOT NULL,-姓名 Rsex char(2) check(Rsex in (男,女),-性别只能在“男”和“女”之间选择 Rage int not null,-读者年龄 Rphone nvarchar(15),-电话/手机 Readertype nvarchar(20) check (Readertype in (本科生研究生教师),-读者类型只能在“本科生”,“研究生”,“教师”之间选择 constraint Reader_PK primary key (Rno)-创建“读者编号”为主键-读者借阅信息表create table ReaderBook RBorrowD
3、ate smalldatetime NOT NULL,-借阅日期 RBackDate smalldatetime not null,-应还书日期 RReborrowTimes tinyint default 0,-续借次数默认为次 RoverdueDays int,-图书超期天数 constraint ReaderBook_PK primary key (Rno,Bid),-创建“读者编号,分类号”为主键 foreign key (Rno) references Reader(Rno),-创建“读者编号”为外部键 foreign key (Bid) references Book(Bid)-创
4、建“分类号”为外部键-用户表create table Admin AdminId varchar(10)not null,-用户ID AdminPsw varchar(10)not null,-用户密码 AdminName varchar(20)not null,-用户名 constraint Admin_PK primary key(AdminId)-创建用户ID为主键Create table RReturnBook Rno nvarchar(10) NOT NULL, Bwriter nvarchar(20),-作者 Btype varchar(20),-图书类别 BpubAdr varc
5、har(30),-出版社 RborrowTimes tinyint default 1,-记录读者借借阅同一本书的次数 ReturnDate smalldatetime,-还书时间 constraint RReturnBook_PK primary key (Rno,Bid,RborrowTimes),-创建主键 constraint Rno_Fk foreign key (Rno) references Reader(Rno), constraint RBid_FK foreign key (Bid) references Book(Bid)-创建外码Go图书馆管理系统数据库-触发器的创建-
6、借书要求(书本没有库存,则无法进行借书操作)-create trigger tri_Bookon Bookfor updateasdeclare btotal int,bborrowed intselect btotal=BTotalNum,bborrowed=BborrowedNum from insertedif(btotal10)-假定教师最多只能借十本书 begin rollback transaction print print对不起,你的借阅总量已经达到本,无法进行本次借书操作!请归还部分书籍后,再进行下次借书操作! end5)-假定本科生最多只能借五本书 Print借阅失败!8)
7、-假定研究生最多只能借八本书end -续借次数要求-假定教师最多允许续借四次,本科生最多允许续借两次,研究生最多可以续借三次-Create trigger tri_RRenewBookdeclare t tinyintselect t=inserted.RReborrowTimes from inserted,Reader where Reader.Readertype= if(t4)-教师最多允许续借四次续借失败!对不起,你的续借次数已经达到了四次,已经无法再续借!2)-本科生最多允许续借两次对不起,你的续借次数已经达到了两次,已经无法再续借!3)-研究生最多允许续借三次对不起,你的续借次数
8、已经达到了三次,已经无法再续借!-读者还书信息入ReturnBook表-Create trigger tri_RReturnBookfor deletedeclare t int,tno varchar(10),Bid varchar(30)select top 1 tno=Rno from deletedselect top 1 Bid=Bid from deleted-图书信息更改过程update Bookset BborrowedNum=BborrowedNum-1where Bid=Bid-判断RrturnBook表中该读者是否已借过同样一本书籍select t=RborrowTime
9、s from ReturnBook where Rno=tno and Bid=Bidif(t0)-t0说明该读者过去借过同一本书 set t=t+1else set t=1-向ReturnBook表中插入信息-第一部分(主码先入)insertinto ReturnBook(Rno,Bid,RborrowTimes,ReturnDate)values (tno,Bid,t,getdate()-第二部分(读者、书本信息)update ReturnBookset Rname=(select Rname from Reader where Rno=tno) ,Rsex=(select Rsex fr
10、om Reader where Rno=tno) ,Rage=(select Rage from Reader where Rno=tno) ,Bname=(select Bname from Book where Bid=Bid) ,Bwriter=(select Bwriter from Book where Bid=Bid) ,Btype=(select Btype from Book where Bid=Bid) ,BpubAdr=(select BpubAdr from Book where Bid=Bid)where Rno=tno and Bid=Bid图书馆管理系统数据库-存储
11、过程的创建-读者借阅图书存储过程-create procedure RBorrowBookno varchar(10),Bid varchar(30)declare bname varchar(50)-判断读者是否已经借阅同一本书,如果已有借阅记录,则不能进行借书操作if exists(select * from ReaderBook where Rno=no and Bid=Bid)对不起,你已经借阅了同一本图书,故而无法进行此次借书操作,请核实!-图书信息更改 update Book set BborrowedNum=BborrowedNum+1 where Bid=Bid-读者借阅过程
12、insert into ReaderBook (Rno,Bid,RBorrowDate) values (no,Bid,getdate()-输出借书成功信息 declare rname varchar(8) select rname=Rname from Reader where Rno=no select bname=Bname from Book where Bid=Bid select 编号为+no+,姓名为+rname+的读者,于+datename(year,GETDATE()+ 年+datename(month,GETDATE()+ 月+datename(day,GETDATE()+
13、 日+datename(hour,GETDATE()+ 时+datename(minute,GETDATE()+ 分+datename(second,GETDATE()+ 秒,成功地从图书馆借出+bname+一书! as 读者借书成功信息-读者还书存储过程-create procedure ReturnBook-判断读者是否借阅此书,如果没有借阅此书,则不能进行还书操作if not exists(select * from ReaderBook where Rno=no and Bid=Bid)对不起,你没有借阅此书,故而无法进行此次还书操作,请核实!-读者还书过程delete where R
14、no=no and Bid=Bid-#图书信息更改过程在触发器tri_RReturnBook中#-输出还书成功信息 秒,成功地向图书馆归还 as 读者还书成功信息-读者续借图书存储过程-create procedure RRenewBookdeclare bname varchar(50),renewNum char(1),time smalldatetime-判断读者是否借阅此书,如果没有借阅此书,则不能进行续借操作对不起,你没有借阅此书,故而无法进行此次续借操作,请核实!-读者续借图书过程 update ReaderBook set RReborrowTimes=RReborrowTime
15、s+1,renewNum=RReborrowTimes+1,time=RBorrowDate=getdate()-续借一次后,重新计入时间-输出续借成功信息+datename(year,time)+datename(month,time)+datename(day,time)+datename(hour,time)+datename(minute,time)+ 秒,成功地续借一书,续借次数共为+renewNum+ 次! as 读者续借成功信息-读者查询借阅图书情况存储过程-create procedure RQueryBookno varchar(10)declare bname varcha
16、r(50), i int,total int,time smalldatetime,day int-if (charindex(T,no)0)-begin -以读者编号为表名创建临时性数据表declare RtempTable table 读者编号nvarchar(10), 姓名nvarchar(8), 书名varchar(50) primary key, 图书类别Varchar(20), 借书日期smalldatetime not null, -最后续借日期smalldatetime not null, 本次借阅还剩天数int, 续借次数tinyint not null, 是否超期nvarc
17、har(2) -向临时表中插入数据 -第一部分(插入子查询)into RtempTable(书名,图书类别,借书日期,/*最后续借日期,*/续借次数) select Bname,Btype,RBorrowDate/*,RRecentlyRenew*/,RReborrowTimes from Book,ReaderBook where ReaderBook.Rno=no and Book.Bid=ReaderBook.Bid -第二部分declare rname char(8)select rname=Rname from Reader where Rno=noupdate RtempTable set 读者编号=no,姓名=rname -第三部分(计算最后续借到超期还剩天数,并插入对应列)select total=count(*),i=1 from RtempTable-获得RtempTable表中的记录总数while (i=total) select top 1 time=最后续借日期,bname=书名
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1