西安郵電大学数据库课程设计报告题目:图书管理系统院系名称:计算机学院专业名称:计算机科学与技术班级:计科1006学生姓名:郑波学号(8位):04101198指导教师:乔平安设计起止时间:2012年10月8日~2012年10月19日一问题的提出一、开发背景很多高校都拥有图书馆,图书馆可以为全校师生提供一个阅读,学习的空间。近年来,随着生源不断增大,图书馆的规模也随之扩大,图书数量也相应地大量增加,有关图书馆各种信息成倍增加。面对如此庞大的信息量,校领导决定使用一套合理,有效,规范,实用的图书馆管理系统,对校内图书资料进行统一,集中的管理。本系统将会涉及到图书馆日常管理工作的基本常见细节,诸如新图书的入库登记,图书馆所有书籍的分类管理,图书的查询,图书的借阅、退还手续的登记,费旧图书的清理撤除等,本系统所要实现的这些功能基本上涵盖了图书馆的日常管理工作,基本能够满足校园图书馆的工作人员的管理需要。在对本系统的具体开发过程当中,将采用Java语言进行开发,以SqlServer实现后台数据库,本系统是完全基于图形化用户界面(GUI)的单机版本。本系统的设计是在Windows7简体中文版操作系统环境下,使用Java中文版开发成功的。数据库是MIS中的重要支持技术,在MIS开发过程中,如何选择数据库管理是一个重要的问题,目前,数据库产品较多,每种产品都具有各自的特点和适用范围,因此,在选择数据库时,应考虑数据库应用的特点及适用范围,本系统所使用的后台数据库是MSSQL2005数据库。本系统选用的开发语言介绍如下:选择了美国SUN公司推出的Java开发工具。Java是第一个全面支持面向对象程序设计的数据库语言工具。Java的主要特点有:1、语言是简单的、小型的、结构中性的2、强大的数据库开发功能3、扩大了对SQL语言的支持4、是面向对象的、高性能的、多线程的5、是分布式的、面向网络6、具有平台无关性7、语言具有可移植性、是动态的二、需求分析图书馆管理系统是图书馆管理工作中补课缺少的部分,对于图书馆的管理者和使用者来说都非常重要,但长期以来,人们使用传统的手工方式或性能较低的图书馆管理系统管理图书馆的日常事务,操作流程比较繁琐,效率相当低。而一个成功的图书馆管理系统应提供快速的图书馆信息检索功能,快捷的图书借阅,归还流程,为管理者提供充足的信息和快捷的数据处理手段。从读者与图书馆管理员的角度出发,本着以读者借书,还书快捷,方便的原则,本系统有一下特点:①:具有良好的系统性能,友好的用户界面。②:较高的处理效率,便于使用和维护。③:采用成熟的技术开发,使系统具有较高的技术水平和较长的生命周期。④:系统尽可能简化图书馆管理员的重复工作,提高工作效率。⑤:简化数据查询,统计难度。二:系统设计一:系统目标根据以上的需求分析及用户的沟通,该系统应达到以下目标:①:界面设计友好,美观。②:数据存储安全,可靠。③:信息分类清晰,准确。④:强大的查询功能,保证数据查询的灵活性。⑤:操作简单易用,界面清晰大方。⑥:系统安全稳定。⑦:开发技术先进,功能完备,扩展性强。⑧:占用资源少,对硬件要求低。⑨:提供灵活,方便的权限设置功能,使整个系统的管理分工明确。二:系统功能结构图书馆管理系统分为四大功能模块,分为基础数据维护,图书借阅管理,新书订购功能,系统维护。本系统各个部分及其包括的功能模块如图:图书馆管理基础数据维护图书借阅管理新书订购管理系统维护读者信息管理图书信息管理图书类别管理图书借书管理图书还书管理图书查询新书订购验收新书用户管理密码管理三:系统预览图书馆管理系统有多多个程序界面组成,以下是几个典型界面该界面用于将读者相关信息添加至数据库表中。该界面用于展示读者相关信息,并且提供了参与删除读者信息。该界面主要实现新书订购功能。该界面主要实现新书验收功能。四:文件组织结构图书馆管理系统系统文件夹组织结构图书馆管理系统管理员登陆管理员基础数据维护读者信息管理图书信息管理读者添加读者修改与删除读书类别添加类别修改图书添加图书修改图书查询读者相关信息图书类别相关信息图书相关信息图书借阅图书归还读者新书订购管理系统维护管理新书订购验收新书更改密码用户管理订购相关信息用户添加用户修改与删除操作员相关信息图书类别管理四:数据库设计一:数据库概要说明SQLServer2005具有很强的完整性与课伸缩性,具有较低的价格与较高的性能。数据库的树形结构图如图所示:二:数据库概念设计根据以上对系统的需求分析,系统设计,本系统使用的数据库实体分别为图书信息实体,图书分类实体,图书订购实体,读者信息实体,操作员信息实体,图书借阅信息实体,库存信息实体1:图书信息实体图书信息实体包括图书编号,类别编号,书名,译者,出版社,价格,出版时间等属性。图书信息实体的E-R图如图所示。图书图书编号类别编号书名作者价格出版时间出版社译者2:读者信息实体读者信息实体包括条形码,姓名,性别,年龄,电话,押金,生日,职业,证件类型,办证日期,最大借书量,证件号码等属性,E-R图如图所示。3:图书借阅信息实体图书借阅信息实体包括编号,图书编号,读者编号,操作员编号,是否归还,借阅日期,归还日期等属性。E-R图如图所示。读者姓名性别年龄电话押金生日条形码职业证件号码最大借书量办证日期证件类型图书借阅编号读者编号操作员编号图书编号是否归还归还日期借阅日期4:图书分类实体图书分类实体包括编号,类别名称等属性,E-R图如图所示。5:图书订购实体图书订购实体主要包括图书编号,订购日期,订购数量,操作员,是否验收和折扣等属性。E-R图如图所示。6:操作员信息实体操作员信息实体主要包括编号,姓名,性别,年龄,身份证号,工作日期,电话,是否为管理员和密码等属性。E-R图如图所示。图书分类编号类别名称可借天数罚款金额图书订购订购日期图书编号订购数量操作员是否验收折扣7:库存信息实体库存信息实体主要包括编号,库存数量等属性。E-R图如图所示。五:数据库逻辑设计1:tb_bookInfo(图书信息表)图书信息表包括图书编号,图书类别编号,书名,作者,译者,出版社,出版时间和价格等信息。操作员姓名性别年龄电话编号身份证号是否为管理员工作日期密码库存编号库存数量2.tb_bookType(图书分类表)图书分类表包括编号,类别名称,可借天数和罚款金额等信息。3.tb_borrow(图书借阅表)图书借阅表包括,图书编号,读者编号,操作员编号,是否归还,借阅日期,归还日期等信息。4.tb_operator(操作员信息表)操作员信息表主要包括编号,姓名,性别,年龄,身份证号,工作日期,电话,是否为管理员和密码等信息。5.tb_order(图书订购表)图书订购表主要包括图书编号,订购日期,订购数量,操作员,是否验收和折扣等信息。图书订购表以图书编号与图书信息表建立了关系。6.tb_reader(读者信息表)读者信息表包括条形码,姓名,性别,年龄,电话,押金,生日,职业,证件类型,办证日期,最大借书数量,证件号码等信息。7.tb_stockpile(库存信息表)库存信息表主要包括编号,库存数量等信息。库存信息表以库存编号与图书信息表建立了关系。六:数据库建模本系统数据库采用PowerDesigner软件建立数据库中各个表的关系,进行数据库的建模,以连接各个数据库,使数据库中各个实体间建立联系。数据库中各个表间关系如图所示。七:详细设计一:公共模块设计1:数据库连接及操作类的编写数据库连接及操作类通常包括连接数据库的方法getConnection,执行查询语句的方法executeQuery(),执行更新操作的方法executeUpdate(),关闭数据库连接的方法close()1:指定类Dao.java保存的包,并导入所需的类包。关键代码如下:packagecom.wsy.dao;//指定类的包名称//导入进行数据库连接时所使用的java.sql.Connection类importjava.sql.Connection;//导入进行数据库连接时所使用的java.sql.DriverManager类importjava.sql.DriverManager;//导入进行数据库表查询时所使用的java.sql.Resultset类importjava.sql.ResultSet;//导入进行数据库操作时捕捉异常使用的java.sql.SQLException类importjava.sql.SQLException;2:在Dao.java类的构造方法中创建数据库连接操作。在此类中首先定义数据库连接驱动包名,数据库连接路径,数据库连接用户名,密码等静态变量,然后在构造函数中实现数据库连接操作。在数据库连接代码中需要添加try...catch关键字,捕捉数据库连接时可能抛出的异常。关键代买如下://定义驱动报名称protectedstaticStringdbClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver;protectedstaticStringdbUrl=jdbc:sqlserver://localhost:1433;+DatabaseName=db_library;SelectMethod=Cursor;//定义数据库连接路径protectedstaticStringdbUser=shining;//数据库连接用户名protectedstaticStringdbPwd=1;//数据库连接密码protectedstaticStringsecond=null;privatestaticConnectionconn=null;//定义一个数据库连接privateDao(){try{//捕捉数据库连接异常if(conn==null){//如果连接为空Class.forName(dbClassName).newInstance();//装载SQlServer驱动//获取数据库连接conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd);}Else//如果连接不为空return;}catch(Exceptionee){//返回ee.printStackTrace();//捕捉数据库连接异常}3.创建执行查询语句的方法executeQuery,其返回值为ResultSet结果集。首先需要初始化Dao对象,调用构造函数,从而获取数据库连接。executeQuery方法代码如下:privatestaticResultSetexecuteQuery(Stringsql){try{if(conn==null)newDao();returnconn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE).executeQuery(sql);}catch(SQLExceptione){e.printStackTrace();returnnull;}finally{}}4.创建执行更新操作的方法executeUpdate,它的返回值为int类型的整数,此返回值代表数据更新的操作是否成功,返回1代表称,不成功则返回-1,其关键代码如下:privatestaticintexecuteUpdate(Stringsql){try{if(conn==null)newDao();returnconn.createStatement().executeUpdate(sql);}catch(SQLExceptione){System.out.println(e.getMessage());//if(e.getMessage().equals([Microsoft][SQLServer2000DriverforJDBC][SQLServer]DELETE语句与COLUMNREFERENCE约束'FK_TB_BORRO_REFERENCE_TB_BOOKI'冲突。该冲突发生于数