《数据库系统概论》课程设计报告---图书管理系统设计.doc_第1页
《数据库系统概论》课程设计报告---图书管理系统设计.doc_第2页
《数据库系统概论》课程设计报告---图书管理系统设计.doc_第3页
《数据库系统概论》课程设计报告---图书管理系统设计.doc_第4页
《数据库系统概论》课程设计报告---图书管理系统设计.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信息技术学院数据库概论课程设计报告专 业: 班 级: 姓 名: 学 号: 设计题目: 指导教师: 2009年 12 月 28 日图书管理系统设计一、系统设计的目的和意义 对该系统开发设计的重要性和必要性进行论述。通过完成从用户需求分析、概念结构设计,逻辑结构设计等一系列的数据库设计到上机编程、调试和应用等全过程,进一步理解和掌握教材中的相关内容。二、系统需求分析1、 学生学生的操作流程如图b.1所示。2、 管理员管理员可完成书籍和学生的增加、删除和修改以及对学生借阅、续借、归还的确认,其操作流程如图b.2所示。要求:画出系统功能模块图后,并对各个模块进行解释。三、概念结构设计数据库需要表述的信息有以下几种:1、 图书信息2、 学生信息3、 管理员信息4、 学生预定图书信息5、 学生借阅归还图书信息可以用e/r模型表述该模型的设计,e/r图如图b.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) 被借出并且已被预定五、物理结构设计为了提高在表中搜索元组的速度,在实际实现的时候应该基于键码建立索引。下面是各表中建立索引的表项: book(bookid) student(id)六、系统实现(一)用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,std

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论