




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验十二 数据库管理系统综合应用-图书管理系统系统一、实验目的:通过完成从用户需求分析、数据库设计到上机编程、调试和应用等全过程,进一步了解和掌握所讲解的内容。二、实验简述:一个简单的图书管理系统包括图书馆内书籍的信息、学校在校学生的信息以及学生的借阅信息。此系统功能分为面向学生和面向管理员两部分,其中学生可以进行借阅、续借、归还和查询书籍等操作,管理员可以完成书籍和学生的增加、删除和修改以及学生借阅、续借、归还的确认。三、实验要求: 完成该系统的数据库设计;用SQL实现数据库的设计,并在SQL Server上调试通过。四、参考答案:1、 需求分析(1) 学生学生的操作流程如图B.1所示。(2) 管理员管理员可完成书籍和学生的增加、删除和修改以及对学生借阅、续借、归还的确认,其操作流程如图B.2所示。2、 概念模型设计数据库需要表述的信息有以下几种:(1) 图书信息(2) 学生信息(3) 管理员信息(4) 学生预定图书信息(5) 学生借阅归还图书信息可以用E/R模型表述该模型的设计,E/R图如图B.3所示。3、 逻辑设计通过E/R模型到关系模型的转化,可以得到如下关系模式:(1) Book(BookID,Title,Author,Publisher,Pyear,Language)(2) Student(ID,Name,Dept)(3) Assistent(ID,Name)(4) BBook(BookID,StdID,BDate)(5) RBook(BookID,StdID,RDate)(6) Lend(StdID,AstID,BookID,LDate)(7) Return(StdID,AstID,BookID,RDate)说明(1) 书号是图书的键码,每本书有惟一的书号,一个学生可同时借阅多本书。一个管理员可处理多个同学的借阅等事宜。(2) 一般情况下,学生、管理员和图书之间的联系为1:1:n,借书关系Lend作为连接关系,其键码为n端实体集的键码,即书号为借书关系的键码。这反映了如果还书时也把当初的借书记录删除,则书号就能惟一识别一个元组。如果还书时不同时删除借书记录,则意味着同一本书前后可借给不同的学生,于是学生、管理员和图书之间的联系变为m:1:n,这时借书关系的键码为书号和学号的组合。如果在不删除借书记录的情况下,同一学生再次借同一本书,这时,学生、管理员和图书之间的联系变为m:p:n,于是,借书关系的键码为书号、学号和管理员号的组合。但这里有一个隐含的信息,即同一学生前后两次借同一本书所遇到的管理员不同,而这种不同可能仅仅是“日期”不同。因此,借书日期成了必不可少的成分,也就是说,在这种情况下,属性全集才是借书关系的键码。总之,借书关系的键码与图书管理模式有关,读者可按照自己的理解确定键码,并编写相应的事务处理流程。其他关系也有类似之处。(3) 要知道图书当前的状态,是在图书馆存放,还是被借阅等,需要在Book的模式中增加对应项用以表示图书当前的状态。比如我们增加State,并且约定取值和状态的对应关系如下:1) 在图书馆中并且没有被预定2) 在图书馆中并且已被除数预定3) 被借出并且没能被预定4) 被借出并且已被预定4、 物理设计为了提高在表中搜索元组的速度,在实际实现的时候应该基于键码建立索引。下面是各表中建立索引的表项: Book(BookID) Student(ID)5、 用SQL实现设计(1) 建立Book表CREATE TABLE Book(BookID varchar(20) PRIMARY KEY,Title varchar(50) NOT NULL,Author varchar(50),Publisher varchar(50),Pyear char(4),Language char(1) DEFAULT c,State char(1) DEFAULT 0);(2) 建立Student表CREATE TABLE Student(ID varchar(6) PRIMARY KEY,Name varchar(20) NOT NULL,Dept varchar(20) NOT NULL);(3) 建立Assistent表CREATE TABLE Assistent(ID varchar(6) PRIMARY KEY,Name varchar(20) NOT NULL,);(4) 建立BBook表CREATE TABLE BBook(BID varchar(20) NOT NULL,StdID varchar(6) NOT NULL,BDate datetime NOT NULL,CONSTRAINT FK_BBOOK_BID FOREIGN KEY(BID) REFERENCES Book(BookID),CONSTRAINT FK_BBOOK_StdID FOREIGN KEY(StdID) REFERENCES Student(ID));(5) 建立RBook表CREATE TABLE RBook(BookID varchar(20)NOT NULL,StdID varchar(6) NOT NULL,RDate datetime NOT NULL,CONSTRAINT FK_RBOOK_BookID FOREIGN KEY(BookID) REFERENCES Book(BookID),CONSTRAINT FK_RBOOK_StdID FOREIGN KEY(StdID) REFERENCES Student(ID));(6) 建立Lend表CREATE TABLE Lend(StdID varchar(6) NOT NULL,AstID varchar(6) NOT NULL,BookID varchar(20)NOT NULL,LDate datetime NOT NULL,CONSTRAINT FK_LEND_StdID FOREIGN KEY(StdID) REFERENCES Student(ID),CONSTRAINT FK_LEND_AstID FOREIGN KEY(AstID) REFERENCES Assistent(ID),CONSTRAINT FK_LEND_BookID FOREIGN KEY(BookID) REFERENCES Book(BookID));(7) 建立Return表CREATE TABLE Return(StdID varchar(6) NOT NULL,AstID varchar(6) NOT NULL,BookID varchar(20)NOT NULL,RDate datetime NOT NULL,CONSTRAINT FK_RETURN_StdID FOREIGN KEY(StdID) REFERENCES Student(ID),CONSTRAINT FK_ RETURN _AstID FOREIGN KEY(AstID) REFERENCES Assistent(ID),CONSTRAINT FK_ RETURN _BookID FOREIGN KEY(BookID) REFERENCES Book(BookID));(8) 管理员操作1) 增加学生:INSERT INTO Student(ID, Name, Dept) VALUES(#StdNo, #Name, #Dept);2) 删除学生:DELETE FROM Student WHERE(ID=#ID);3) 修改学生信息:UPDATE Student SET Name=#Name, Dept=#Dept WHERE(ID=#ID);4) 增加书籍:INSERT INTO Book(BookID, Title, Author, Publisher, Pyear, Language) VALUES(#BookID, #Title, #Author, #Publisher, #Pyear, #Language);5) 删除书籍:DELETE FROM Book WHERE(BookID=#BookID);6) 修改书籍信息:UPDATE Book SET Title=#Title, Author =#Author, Publisher =#Publisher, Pyear =#Pyear, Language =#Language WHERE(BookID=#BookID);7) 学生借阅图书:BEGIN TRANSACTIONINSERT INTO Lend(StdID, AstID, BookID, LDate)VALUES(#StdID, #AstID, #BookID, #LDate);UPDATE BOOK SET State=2 WHERE BookID=#BookIDCOMMIT;8) 学生归还图书:BEGIN TRANSACTIONINSERT INTO Return(StdID, AstID, BookID, RDate)VALUES(#StdID, #AstID, #BookID, #RDate);UPDATE BOOK SET State=0 WHERE BookID=#BookIDCOMMIT;(9) 学生操作1) 预定图书:CREATE PROC Book_Book BookID varchar(20),StdID char(6), BDate datetimeASDECLARE TransName VARCHAR(20)SELECT TransName=Book_BookBEGIN TRANSACTION TransNameDECLARE booked int, book_state_before char(1), book_state_after char(1)SELECT booked=count(*) FROM BBook WHERE BID=BookIDIF booked0 ROLLBACK TRANSACTION TransNameELSE BEGIN SELECT book_state_before=state FROM Book WHERE BookID=BookIDIF book_state_before=0 SELECT book_state_after=1ELSE IF book_state_before=2 SELECT book_state_after=3 UPDATE Book SET state=book_state_after WHERE BookID=BookIDINSERT INTO BBook(BID,StdID,BDate) VALUES(BookID,StdID,BDate) COMMIT TRANSACTION TransNameENDGO学生预定图书,假设图书已经被预定了,则不允许继续预定。否则的话应该根据图书是在馆内还是被借出去两种情况,修改图书当前的状态。最后在预定表中插入一条记录。修改记录和插入新记录应该发生或都不发生,所以将这个动作封闭成一个事务,保证这个操作的原子性。2) 续借图书:CREATE PROC Renew_Book BookID varchar(20),StdID char(6), RDate datetimeASDECLARE TransName VARCHAR(20)SELECT TransName=Renew_BookBEGIN TRANSACTION TransNameDECLARE booked intSELECT booked=count(*) FROM BBook WHERE BID=BookIDIF booked=0INSERT INTO RBook(BID,StdID,BDate) V
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蓝桥杯考试题库及答案
- 梭伦改革总结课件
- 安装质量员(试题+答案)
- 2025年外贸业务员招聘面试实战模拟题集
- 2025年美术教师招聘考试模拟题及复习要点解析
- 2025年篮球裁判员资格考试试题及答案
- 2025年物理学科教师招聘模拟题及备考策略
- 2026届天津市大白高中化学高一上期末检测试题含解析
- 2025年跨境电商运营专员亚马逊平台方向面试模拟题及答案
- 2025年注册验船师资格考试(C级船舶检验专业基础安全)练习题及答案二
- 小学武术校本课程教材(中学也可用)
- 自来水厂处理工艺流程图
- 食品安全基础
- ICU综合征的治疗和护理
- 2024年浪潮入职测评题和答案
- 化工有限公司3万吨水合肼及配套项目环评可研资料环境影响
- 小学英语教学经验体会分享
- 洛阳民宿的分析报告
- 临时用电设备的安装与接地要求
- 工会 个人现实表现材料
- 学校矛盾调解工作制度模版
评论
0/150
提交评论