




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科创新实验报告实验题目: 图书管理系统设计学生姓名: 杨正平学 号: 20071060218专 业: 计算机科学与技术指导教师: 胡茂评分(百分制):图书管理系统设计实验报告实验目的:通过完成从用户需求分析、数据库设计到上机编程、调试和应用等全过程,进一步理解和掌握教材中的相关内容。实验原理:一个简单的图书管理系统包括图书馆内书籍信息、学校在校学生的信息以及学生的借阅信息。此系统功能分为面向学生和面向管理员两部分,其中面向学生部分可以进行查询和续借书籍等操作,面向管理员部分可以完成书籍和学生的增加、删除和修改以及对学生借阅、归还的确认。实验内容:利用SQL知识设计一个简单图书管理系统。实验步骤:需求分析:1. 学生操作流程如图:登录续借书籍预定书籍查询书籍注销2. 管理员注销归还图书确认借阅图书确认学生信息维护书籍信息维护登录 管理员可以完成书籍和学生的增加、删除和修改以及对学生借阅、续借、归还的确认,其操作流程如图:概念模型设计:数据库需要表达的信息有以下几种:1. 图书信息2. 学生信息3. 管理员信息4. 学生借阅归还图书信息模型的E-R图如图示书名书号作者管理员出版社出版年语种图书姓名姓名编号归还借阅续借预订学生性别学号逻辑设计:通过ER模型到关系模型的转化,可以得到如下关系模式:(9) Book(BookID,Title,Author,Publisher,Pyear,Language)(10) Student(ID,Name,Dept)(11) Assistent(ID,Name)(12) Bbook(BookID,StdID,BDate)(13) Rbook(BookID,StdID,RDate)(14) Lend(StdID,AstID,BookID,LDate)(15) Return(SdID,AstID,BookID,RDate)说明(1) 书号是图书的键码,每本书有唯一的书号,一个学生可同时借阅多本书,一个管理员可处理多个同学的借阅等事宜。 (2)一般情况下,学生、管理员和图书之间的联系为1:1:n,借书关系Lend作为连接关系,其键码为n端实体集的键码,即书号作为借书关系的键码。这反映了如果还书时也把当出的借书记录删除,则书号就能唯一识别一个元组。 如果还书时不同时删除借书记录,则意味着同一本书前后可借给不同的学生 ,于是学生、管理员和图书之间的联系变为m:1:n,这时借书关系的键码为书号和学生的组合。如果在不删除借书记录的情况下,同一学生再次借同一本书,这时,学生、管理员和图书之间的联系变为m:p:n,于是,借书关系键码为书号、学号和管理员号的组合。但其中包含隐含信息,即同一学生前后两次借同一本书所遇到的管理员不同,而这种不同可能仅仅是“日期”不同。因此,借书日期成了必不可少的成分,也就是说,在这种情况下,属性全集才是借书关系的键码。(3) 要知道图书当前的状态,是在图书馆存放还是被借阅等,需要在Book的模式中增加对应项用以表示图书当前状态。比如我们增加state,并约定取值和状态的对应关系如下: 0:在图书馆中并且没有被预订 1:在图书馆中并且已被预订 2:被借出并且没有被预订 3:被借出并且已被预订物理设计为了提高在表中搜索远元祖的速度,在实际实现的时候应该基于键码建立索引。下面是各表中建立索引的表项:Book(bookID)Student(ID)1、建立book表CREATE TABLE Book(BookIDvarchar(20)PRIMARY KEY,Tille varchar(50)NOT NULL,Author varchar(50),Publishervarchar(50),Pyearchar(4),Languagechar(1),DEFAULTc,Statechar(1)DEFAULT0);2、建立student表CREATE TABLE Student(IDchar(6)PRIMARY KEY,Name varchar(20)NOT NULL,Deptvarchar(20)NOT NULL);3、建立assistent表CREATE TABLE assistent(IDchar(6)PRIMARY KEY,Namevarchar(20)NOT NULL,);4、建立BBook表CREATE TABLE BBook(BIDvarchar(20)NOT NULL,StdIDchar(6)NOT NULL,BdatedatetimeNOT NULL,CONSTRAINT FK_BBOOK_BIDFOREIGN KEY(BID)REFERENCES Book(BookID),CONSTRAINT FK_BBOOK_StdBIDFOREIGN KEY(StdBID)REFERENCES Student(ID),);5、建立RBook表CREATE TABLE RBook(BookIDvarchar(20)NOT NULL,StdIDchar(6)NOT NULL,RDatedatetimeNOT NULL,CONSTRAINT FK_RBOOK_BookIDFOREIGN KEY(BookID)REFERENCES Book(BookID),CONSTRAINT FK_RBOOK_StdBIDFOREIGN KEY(StdID)REFERENCES Student(ID);6、建立lend表CREATE TABLE Lend(StdIDchar(6)NOT NULL,AstIDchar(6)NOT NULL,BookIDvarchar(20)NOT NULL,LDatedatetimeNOT NULL,CONSTRAINT FK_LEND_StdIDFOREIGN KEY(StdID)REFERENCES Student(ID),CONSTRAINT FK_LEND_AstIDFOREIGN KEY(AstID)REFERENCES Assistent(ID)CONSTRAINT FK_LEND_BookIDFOREIGN KEY(BookID)REFERENCES Book(BookID);7、建立Return表CREATE TABLE return(StdIDchar(6)NOT NULL,AstIDchar(6)NOT NULL,BookIDvarchar(20)NOT NULL,LDatedatetimeNOT NULL,CONSTRAINT FK_RETURN_StdIDFOREIGN KEY(StdID)REFERENCES Student(ID),CONSTRAINT FK_RETURN_AstIDFOREIGN KEY(AstID)REFERENCES Assistent(ID)CONSTRAINT FK_RETURN_BookIDFOREIGN KEY(BookID)REFERENCES Book(BookID);8、管理员操作1增加学生:INSERT INTO Student(ID,Name,Dept) VALUES(#StdNo,#Name,#Dept); 2.删除学生; DELETE FROM StudentWhere(ID=#ID); 3.修改学生信息; UPDATE Student SET Name=#Name,Dept=#DeptWHERE(ID=#ID); 4.增加书籍:INSERT INTO Book(bookID,title,author,publisher,pyear,language)VALUES(#bookID,#title,#author,#publisher,#pyear,#language) 5.删除书籍:DELETE PROM BookWHERE(Book=#IDbook)6.修改书籍信息UPDATE BOOKWHERE(Book=#BookID);7.学生借阅图书; BEGIN TRANSACTION INSRET INTO Lend(StdID,AstID,BookID,LDate) VALUES(#StdID,#AstID,#BookID,#LDate);UPDARE BOOKSET STATE=2 WHERE BOOKID=#BOOKIDCOMMIT;7.学生归还图书; BEGIN TRANSACTION INSRET INTO Return (StdID,AstID,BookID,LDate) VALUES(#StdID,#AstID,#BookID,#LDate);UPDARE BOOKSET STATE=0 WHERE BOOKID=#BOOKIDCOMMIT;(16) 学生操作预定图书:Create proc book_bookbookID varchar(20),stdID char(6),BDate datetimeASDECLARE transname varchar(20)Select transname=book_bookBegin transactiontransnameDECLAREbook int,book_state_beforechar (1),book,book_state_after char(1)Select booked =count(*)from bbook where BID=bookIDIF booked0ROOLBACK TRANSACTION TRANSNAMOELSE BEGINSelect book_state_before =state from book where bookID=bookIDIf book_state_before=0Select book_state_after =1ELSE IF book_state_betore =2Select book_state_after =3Update book set state =book_state_after where bookIDInsert into BBook (bid,stdid ,bdate)Values(bookID,stdid,bdate)Commit transaction transnameENDGO学生预定图书,假设图书已经憋预定了,则不允许继续预定。否则的话应根据图书是在馆内还是被借出去两种情况,修改图书当前的状态。最后在预定表中插入一条记录。修改记录和插入新纪录应该都发生或都不发生,所以将这个动作封装成一个事务,保证这个操作的原子性。续借图书:Create proc renew_book bookID varchar(20),stdID char(6),BDate datetimeASDECLARE transname varchar(20)Select transname=renew_bookBegin transactiontransnameDECLAREbook intSelect booked =count(*)from bbook where BID=bookIDIF booked=0Insert into RBook (bookid,stdid ,bdate)Commit transaction transnameValues(bookID,stdid,bdate)Commit transaction tra
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论