1、如该读者是否有过期未还的图书,是否借阅图书已经超过五本,有上述情况之一则借阅不成功。否则借阅成功。读者只可在该本书尚未超期的情况下才可以进行续借,否则借阅不成功。 (4) 还书操作 读者把借阅证及要还的图书交给图书管理员,由他进行审核,如该图书有逾期则通知该读者交罚款。否则,图书交由图书管理员放回书库,并修改图书,读者借书信息表。第二章 系统功能设计通过通过对上述各项功能的分析、分类、综合,按照模块化程序设计的要求,得到如下图所示的功能模块图。图 2-1系统功能模块图第三章 数据库设计数据库在一个管理信息系统中占有非常重要的地位,数据库结构的好坏将直接影响到应用系统操作效率已经能否保证数据的一
2、致性、完成性和安全性。3.1 数据库设计 根据图书管理系统的功能要求,通过分析系统要设计的相关实体一集要收集、存储和操纵数据信息,得到如下图1234所示的系统E-R图。根据系统E-R图得到以下关系模式。读者基本信息(读者号,姓名,性别,借书数量)图书基本信息(图书号,书名,类型,作者,译者,出版社,内容,馆藏数,已借数)还书基本信息(读者号,书号,还书数量,还书日期)借书基本信息(读者号,书号,书名,借书数量,借书时间,应还时间) 图1 3-1 读者E-R图图2 3-1图书 E-R图图3 3-1 还书E-R图图4 3-1 借书E-R图3.2数据表设计根据关系模式,确定要建立的数据库和表。给表中
3、添加说明,并建立主键和外键如下图5678所示:“读者”表图5 “读者”表 “图书”表:图 6“图书”表 “还书”表图 7“还书”表“借书”表:图 8“借书”表然后给图书表中添加数据:/*向图书表中插入数据*/USE bookmgGOINSERT 图书VALUES (540541903,子不语壹漫画夏达NULL新世纪出版社18.006,0)540541904子不语贰540541905子不语叁540541906子不语肆540541907子不语伍540541908子不语陆3.3 数据库编程 以下是各个表的创建代码:/*创建各个表*/CREATE TABLE 读者(readerid varchar(9
4、) NOT NULL PRIMARY KEY,readername varchar(20) NOT NULL,readersex varchar(10) NOT NULL,booknum SMALLINT CHECK(borrownum=0 AND borrownum=0),haveborrow SMALLINT CHECK(haveborrow=0)CREATE TABLE 还书readerid varchar(9) NOT NULL,bookid varchar(9) NOT NULL,booknum SMALLINT CHECK(booknum=0 AND booknum=5),inpu
5、tdate datetime ,FOREIGN KEY (readerid) REFERENCES 读者(readerid),FOREIGN KEY (bookid) REFERENCES 图书(bookid)CREATE TABLE 借书bookname varchar(40) NOT NULL,outputdate datetime NULL,shoulddate datetime NULL,FOREIGN KEY(readerid) REFERENCES 读者(readerid),FOREIGN KEY(bookid) REFERENCES 图书(bookid)第四章 功能模块的创建4.
6、1 创建向读者表插入数据的存储过程/*创建存储过程向读者表中插入数据*/GO CREATE PROCEDURE reader_insertelem1 varchar(9),elem2 varchar(20),elem3 varchar(10),elem4 smallintASBEGIN insert into 读者(readerid,readername,readersex,borrownum)values elem1,elem2,elem3,elem4END/*读者表中插入实例*/EXEC reader_insert 111007131吴书敏男0图9读者表中插入实例4.2 创建向图书表中插入
7、数据的存储过程/*通过存储过程向图书表中插入数据*/CREATE PROCEDURE book_insertelem2 varchar(40),elem3 varchar(20),elem4 varchar(20),elem5 varchar(20),elem6 varchar(20),elem7 varchar(50),elem8 varchar(10),elem9 smallint,elem10 smallint insert into 图书(bookid,bookname,booktype,bookauther,booktrslator,bookpress,bookcontent,boo
8、kprice,noborrow,haveborrow)elem1,elem2,elem3,elem4,elem5,elem6,elem7,elem8,elem9,elem104.3 创建实现还书的存储过程/*创建还书存储*/CREATE PROCEDURE return_insertelem2 varchar(9),elem3 smallintINSERT INTO 还书(readerid,bookid,booknum)elem1,elem2,elem3BEGINUPDATE 还书SET inputdate=GETDATE()WHERE readerid=elem1;UPDATE 图书SET
9、noborrow=noborrow+elem3WHERE bookid=elem2;SET haveborrow=haveborrow-elem3UPDATE 读者SET borrownum=borrownum-elem3SELECT 还书成功/*还书实例*/EXEC return_insert ,1图 10还书实例4.4 创建实现借书的存储过程/*创建借书存储*/CREATE PROCEDURE borrow_insertinsert into 借书readerid,bookid,booknumvalues/*这里用了判定是否超期函数judgedate,将返回值赋予判断变量judgement
10、*/DECLARE judgement intSET judgement=(SELECT max(overdays)FROM judgedate(elem1) /*判定该读者是否有图书超期*/IF (judgement借书成功UPDATE 借书SET outputdate=GETDATE()WHERE readerid=elem1 AND bookid=elem2;SET shoulddate=DATEADD(day,30,getdate()/*声明一个变量bookname从图书表里读取图书名到借书表里*/DECLARE bookname varchar(40)SET bookname=(SE
11、LECT bookname FROM 图书WHERE bookid=elem2SET bookname=booknameSET noborrow=noborrow-elem3SET haveborrow=haveborrow+elem3SET borrownum=borrownum+elem3ELSE SELECT 借书失败,有超期未还图书/*借书实例*/EXEC borrow_insert ,2图11借书实例4.5 建立是否超期表值函数CREATE FUNCTION judgedate(elem1 as varchar(9)RETURNS overdate TABLEoverdays int
12、INSERT overdateSELECT day(GETDATE()-ISNULL(shoulddate,0)FROM 借书WHERE readerid=elem1RETURN4.6查询模块/*图书分类查询和分类统计*/CREATE PROCEDURE type_selectbooktype varchar(20)SELECT booktypeFROM 图书WHERE booktype=booktype;DECLARE booknum intSET booknum=(select sum(noborrow+haveborrow)WHERE booktype=booktypeSELECT bo
13、oktype AS 类型 ,booknum AS 本/*图书分类查询实例*/EXEC type_select 图12图书分类查询实例/*图书按书名查询和统计*/CREATE PROCEDURE bookname_selectbookname varchar(40)SELECT *WHERE bookname=bookname;WHERE bookname=booknameSELECT bookname AS 书名/*图书书名查询实例*/EXEC bookname_select 图13图书书名查询实例/*按作者查询和统计*/CREATE PROCEDURE bookauthor_selectbo
14、okauthor varchar(20)WHERE bookauthor=bookauthor;WHERE bookauthor=bookauthorSELECT bookauthor AS 作者/*图书作者查询实例*/EXEC bookauthor_select 图 14图书作者查询实例 结束语 当初选课的时候选图书管理,目的就是更好的理解、学习和使用好SQL 语言,所以我决定只做后台,这样能更好得理解和应用。通过一个月的努力,我自主完成了课题要求的所有功能。觉得收获很大。很多知识,老师并没有讲过,甚至使用的教材里也没有提到。但是在实践操作中,必须要用到的时候,自己就会去查去学,这就是所谓的实战吧。通过,本次课程设计我收获很大,认识到当遇到困难的时候要多和人沟通,并且要冷静得去思考去分析问题出在哪了,怎样才能解决。总之,我会吸取此次的经验并且在以后不满足所学的局限知识还要推陈创新,一步一步获得更大的收获。参考文献1 数据库原理和技术(SQL Server 2005)申事凯 戴祖诚 余玉梅 主编2 王珊,萨师煊 数据库系统概论第四版 高等教育出版社附录:(附上关键的源程序,5-10页)/*通过存储过程向读者表中插入数据*/*通过存储过程向图书表中插入数据*/CREATE PRO
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1