您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 图书管理系统创新实验报告
本科创新实验报告实验题目:图书管理系统设计学生姓名:杨正平学号: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表CREATETABLEBook(BookIDvarchar(20)PRIMARYKEY,Tillevarchar(50)NOTNULL,Authorvarchar(50),Publishervarchar(50),Pyearchar(4),Languagechar(1),DEFAULT’c’,Statechar(1)DEFAULT’0’);2、建立student表CREATETABLEStudent(IDchar(6)PRIMARYKEY,Namevarchar(20)NOTNULL,Deptvarchar(20)NOTNULL);3、建立assistent表CREATETABLEassistent(IDchar(6)PRIMARYKEY,Namevarchar(20)NOTNULL,);4、建立BBook表CREATETABLEBBook(BIDvarchar(20)NOTNULL,StdIDchar(6)NOTNULL,BdatedatetimeNOTNULL,CONSTRAINTFK_BBOOK_BIDFOREIGNKEY(BID)REFERENCESBook(BookID),CONSTRAINTFK_BBOOK_StdBIDFOREIGNKEY(StdBID)REFERENCESStudent(ID),);5、建立RBook表CREATETABLERBook(BookIDvarchar(20)NOTNULL,StdIDchar(6)NOTNULL,RDatedatetimeNOTNULL,CONSTRAINTFK_RBOOK_BookIDFOREIGNKEY(BookID)REFERENCESBook(BookID),CONSTRAINTFK_RBOOK_StdBIDFOREIGNKEY(StdID)REFERENCESStudent(ID));6、建立lend表CREATETABLELend(StdIDchar(6)NOTNULL,AstIDchar(6)NOTNULL,BookIDvarchar(20)NOTNULL,LDatedatetimeNOTNULL,CONSTRAINTFK_LEND_StdIDFOREIGNKEY(StdID)REFERENCESStudent(ID),CONSTRAINTFK_LEND_AstIDFOREIGNKEY(AstID)REFERENCESAssistent(ID)CONSTRAINTFK_LEND_BookIDFOREIGNKEY(BookID)REFERENCESBook(BookID));7、建立Return表CREATETABLEreturn(StdIDchar(6)NOTNULL,AstIDchar(6)NOTNULL,BookIDvarchar(20)NOTNULL,LDatedatetimeNOTNULL,CONSTRAINTFK_RETURN_StdIDFOREIGNKEY(StdID)REFERENCESStudent(ID),CONSTRAINTFK_RETURN_AstIDFOREIGNKEY(AstID)REFERENCESAssistent(ID)CONSTRAINTFK_RETURN_BookIDFOREIGNKEY(BookID)REFERENCESBook(BookID));8、管理员操作1.增加学生:INSERTINTOStudent(ID,Name,Dept)VALUES(#StdNo,#Name,#Dept);2.删除学生;DELETEFROMStudentWhere(ID=#ID);3.修改学生信息;UPDATEStudentSETName=#Name,Dept=#DeptWHERE(ID=#ID);4.增加书籍:INSERTINTOBook(bookID,title,author,publisher,pyear,language)VALUES(#bookID,#title,#author,#publisher,#pyear,#language)5.删除书籍:DELETEPROMBookWHERE(Book=#IDbook)6.修改书籍信息UPDATEBOOKWHERE(Book=#BookID);7.学生借阅图书;BEGINTRANSACTIONINSRETINTOLend(StdID,AstID,BookID,LDate)VALUES(#StdID,#AstID,#BookID,#LDate);UPDAREBOOKSETSTATE=’2’WHEREBOOKID=#BOOKIDCOMMIT;7.学生归还图书;BEGINTRANSACTIONINSRETINTOReturn(StdID,AstID,BookID,LDate)VALUES(#StdID,#AstID,#BookID,#LDate);UPDAREBOOKSETSTATE=’0’WHEREBOOKID=#BOOKIDCOMMIT;(16)学生操作预定图书:Createprocbook_book@bookIDvarchar(20),@stdIDchar(6),@BDatedatetimeASDECLARE@transnamevarchar(20)Select@transname='book__book'Begintransaction@transnameDECLARE@bookint,@book_state_beforechar(1),@book,@book_state_afterchar(1)Select@booked=count(*)frombbookwhereBID=@bookIDIF@booked0ROOLBACKTRANSACTION@TRANSNAMOELSEBEGINSelect@book_state_before=statefrombookwherebookID=@bookIDIf@book_state_before='0'Select@book_state_after='1'ELSEIF@book_state_betore='2'Select@book_state_after='3'Updatebooksetstate=@book_state_afterwherebookIDInsertintoBBook(bid,stdid,bdate)Values(@bookID,@stdid,@bdate)Committransaction@transnameENDGO学生预定图书,假设图书已经憋预定了,则不允许继续预定。否则的话应根据图书是在馆内还是被借出去两种情况,修改图书当前的状态。最后在预定表中插入一条记录。修改记录和插入新纪录应该都发生或都不发生,所以将这个动作封装成一个事务,保证这个操作的原子性。②续借图书:Createprocrenew_book@bookIDvarchar(20),@stdIDchar(6),@BDatedatetimeASDECLARE@transnamevarchar(20)Select@transname='renew__book'Begintransaction@transnameDECLARE@bookintSelect@booked=count(*)frombbookwhereBID=@bookIDIF@booked=0InsertintoRBook(bookid,stdid,bdate)Committransaction@transnameValues(@bookID,@stdid,@bdate)Committransaction@transnameGO学生续借图书时,假定图书已经被预定了,则不允许继续续借。否则,在续借记录中插入一条记录就可以了。把这个动作封装成一个存储过程是为了使用方便明了。实验平台及语言:SQLServer2005、SQL语句、MicrosoftVisio画图工具实验总结:通过本次实验完成了从用户需求分析,数据库设计到上机编程等过程进一步理解和掌握了数据库的各方面的知识,并提高了实践的能力。因为本身知识有限,再加上对知识掌握的不太熟练,所以用了大量的时间,另外一些不足之处在所难免。请老师指正。
本文标题:图书管理系统创新实验报告
链接地址:https://www.777doc.com/doc-5812928 .html