求图书馆管理信息系统的毕业设计和论文图书馆

随着科学技术的发展,计算机技术在图书馆领域得到广泛应用,逐步实现了自动化管理..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
毕业设计(论文)-图书馆管理信息系统设计与开发
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口毕业论文--管理信息系统5_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
毕业论文--管理信息系统5
毕​业​论​文​-​-​管​理​信​息​系​统​(​完​整​版​)
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢知识不仅是指课本的内容,还包括社会经验、文明文化、时代精神等整体要素,才有竞争力, 知识是新时代的资本,五六十年代人靠勤劳可以成事;今天的香港要抢知识,要以知识取胜 图书管理系统毕业论文 目 录 摘 要 III Abstract IV 1. 绪 论 1 1.1 毕业设计主要任务 1 1.2 目前图书管理系统存在的问题 1 1.3 课题意义 1 1.4 论文的工作和安排 2 2.图
书借阅管理需求分析 3 2.1 可行性分析 3 2.1.1.技术可行性 3 2.1.2.经济可行性 3 2.2 图书借阅管理系统需求概述 3 2.2.1 系统目标 3 2.2.2 用户类和用户特性 4 2.3 图书借阅管理系统需求模型 4 2.3.1 功能描述 4 2.3.2 图书管理员详细功能描述 5 2.3.3 读者详细功能描述 5 2.3.4 主要用例的用例描述 6 3.总体设计 9 3.1 数据库设计 9 3.1.1 数据库设计概述 9 3.1.2 图书信息表结构设计 10 3.1.3 图书类型信息表结构设计 11 3.1.4 读者信息表结构设计 11 3.1.5 读者类型信息表结构设计 12 3.1.6 图书借阅信息表结构设计 12 3.1.7 图书归还信息表结构设计 13 3.1.8 用户信息表结构设计 13 3.1.9 图书馆信息表结构设计 14 3.1.10 办证参数信息表结构设计 14 3.2 系统总体结构设计 15 3.2.1 图书管理系统总体结构图 15 3.2.2 系统管理员模块功能 15 3.2.3 读者管理模块功能 16 3.2.4 图书管理模块功能 16 3.2.5 图书借还模块功能 17 3.2.6 系统查询模块功能 18 4.程序设计与编码 20 4.1 开发平台与工具 20 4.1.1 J2EE 平台 20 4.1.2 WEB 服务器和数据库 20 4.2 程序设计 21 4.2.1 程序设计概述 21 4.2.2 数据库与 Web 服务器的连接 21 4.2.3 登录模块程序设计 23 4.2.4 系统管理员功能模块的实现 25 4.2.5 读者管理功能模块的实现 26 4.2.6 查询功能模块的实现 27 4.2.7 图书管理功能模块的实现 29 4.2.8 图书借还功能模块的实现 30 5.软件测试 33 5.1 软件测试的方法与步骤 33 5.2 测试用例设计与测试用例的运行过程及测试结果分析 34 5.2.1 模块测试 34 5.2.2 集成测试 35 5.2.3 验收测试 36 5.3 评价 36 6.结束语 37 6.1 工作成果 37 6.2 改进意见 37 6.3 收获体会 37 参考文献 39 致 谢 40 摘 要随着科学技术的进步 计算机行业的迅速发展 大大提高人们的工作效率 计算机信息处理系统的引进已彻底改变了许多系统的经营管理 图书管理系统是学校管理机制中的重要组成部分 通过对图书管理系统的运行管理机制进行调查研究 开发了此图书系统 本系统中解决了学校图书管理事务中的常用基本问题以及相关统计工作 本系统中包含 6 个功能模块:系统设置 读者管理 图书管理 图书借还 系统查询和更改口令 本系统使有 jsp 进行网页界面的设计 使用 MVC 设计模式 采用了开源框架 Struts 它采用了当今软件设计的最新技术 具有开发效率高、设计灵活、生成的软件界面友好美观等特点 本系统中通过 JDBC 驱动和数据库进行无缝连接 后端的数据库是 mysql 也是一个开源的数据库系统 该数据库具有较高的完整性 一致性和安全性 关键词:图书管理;信息管理;jsp;strutsAbstract With the progress of science and technology the astonishing rapid development of the computer industry has been improving people's working efficiency greatly.The introduction of computerized information system has sharply changed the management in many systems in many fields. The management system of the library takes an important role in the administration of school organization. I desigen the system after the thorough investigations about the library management system's mechanism. This system contains with reader informantion management model book information management model books borrowing and returning including system information query and password setting. The system is contrived with Java Server Pages Techonolege as well as Struts the software design mode of MVC with open source framework techonolege which makes this system have the advantages of efficiently designed with beauteous and friendly interface . This system use jdbc driver to connect the mysql database server which is also an open source database system for its users. The batabase was desigend with highly integrity security and consistency. Key words: book management management of information jsp struts1. 绪 论 1.1 毕业设计主要任务 1.实现图书馆对所藏图书的按类别、书名等多方面的查询 最大的方便读者和图书馆工作人员对所需图书的查询; 2.建立图书馆外借读者数据库 方便工作人员对读者进行有效管理; 3.建立图书馆工作人员数据库 限定每个工作人员对软件操作的权限 最大限度的保护数据库; 4.实现图书馆对新书入库 旧书注销的简单处理 并且建立书籍档案 方便进货; 5.实现图书馆 1.2 目前图书管理系统存在的问题 1)检索速度慢、效率低 因为图书馆的藏书种类多、数量多 将藏书准确地分门别类 快速检索 手工进行非常困难往往是终于查到了二伟的信息 馆中没有此书或已被别人借走 图书馆的规模越大 这个问题越突出 2)借书、还书工作量大 借书、还书频率越大 说明图书馆的作用越大 然而随之而来的大量的借书、还书登记、实存图书的更新以及借出图书超期、遗失等的处理 其工作量之大 往往是人工操作所难以胜任的 而且经常会出现这样那样的差错 3)图书统计工作难、藏书更新不能及时完成 图书馆的图书应根据科学技术的发展和教学工作的需要及时添加和更新 然而由于藏书数量及图书种类越来越多 加上自然损耗 人为破坏 使图书的统计工作难以及时完成 藏书的更新也就很难有针对性地进行 藏书的知识结构得不到良好地控制 我校也是一所发展中的高校 近儿年的发展速度很快 图书馆的规模和藏书数量也不断的扩大 为了解决海量图书的管理问题 改变传统的管理方式也是迫在眉睫了 1.3 课题意义 随着计算机的广泛应用 其逐步成为现代化的标志 图书馆或者一些企业内部 甚至是书店 在正常运行过程中总是面对大量的读者信息 书籍信息以及两者相互作用产生的借书信息、还书信息 因此需要对读者资源、书籍资源、借书信息、还书信息进行管理 及时了解各个环节中信息的变更 要对因此而产生的单据进行及时的处理 为了提高图书馆或者企业内部对图书存销的自动化的管理 能够更快速的满足读者的要求 提高各种工作的效率 现对其设计相应的系统 以达到上述的目的[1] 图书管理系统的主要功能是实现图书馆图书借阅和归还的管理的自动化 围绕这一主要功能 本系统涉及到以下核心功能:借阅管理 归还管理 除了这些核心功能外 还包括一些基本和辅助功能 它们是:用户管理、图书馆参数管理、图书管理、统计查询 1.4 论文的工作和安排 本次设计的目标是 开发一个图书馆借阅管理系统 借助该系统 管理员通过快捷可靠的数据库管理 方便的管理图书馆的信息资料 规范化的管理读者用户 设定不同用户权限 并能通过互联网向读者提供更为方便的在线查询服务 方便读者的使用 最终达到提高图书馆资源利用效率的目的 论文设计和实现了图书借阅管理系统系统 可以根据用户的不同权限 对图书馆的的各种信息进行添加、删除、修改或查询操作 论文分为五个部分: 第一章即本章绪论 简述图书馆借阅管理系统这个课题的背景情况以及开发本系统的意义 第二章为需求分析 本章中明确了系统需要实现的功能 分析了系统的用例 并介绍根据系统的需求选择的开发工具和技术的概况 第三章是总体设计 详细描述了本系统中数据库的设计情况 并给出了系统总体界面的设计方案 第四章为程序设计与编码各主要功能模块的实现方法和部分关键代码 同时提供了个主要界面运行的参考图片 以更直观了解系统的实现情况 第五章是软件测试 测试系统功能实现并对测试结果进行记录分析 第六章为结束语 为此次毕业设计做一个总结 总结所获得的经验和体会2.图书借阅管理需求分析 2.1 可行性分析 采用现代化统一的计算机信息网站系统 能够有效优化图书馆管理系统 使其高效的发挥最大作用 能够迅捷的为读者提供相应的服务 开发本系统的可行性研究如下: 2.1.1 技术可行性 技术上的可行性分析主要分析技术条件能否顺利完成开发工作 软、硬件能否满足需要 本系统采用 JSP 开发出友好美观的人机界面 便于用户理解、操作 数据库管理系统采用 MySQL 它能够处理大量数据 同时保持数据的完整性、安全性 因此本系统的开发平台已成熟可行 硬件方面 在科技飞速发展的今天 硬件更新速度越来越快 容量越来越大 可靠性越来越高 价格越来越便宜 因此硬件平台也能够满足本系统所需[2] 2.1.2.经济可行性 鉴于计算机技术发展异常迅猛 在硬件软件配置以及开发技术均以可行的情况下开发这样一个管理系统成本不会很高 但其可以大大提高图书馆的工作效率 也是图书馆管理发展的必然趋势 其必将有比较宽阔的市场 因此改性统在经济可行性上时可行的[2] 2.2 图书借阅管理系统需求概述 2.2.1 系统目标 该系统主要建立一个基于 B/S 模式的图书馆借阅管理系统 面对当起很多小型图书管理仍是人工管理带来的检索速度慢 效率低 借阅归还图书量大 图书统计工作量大 藏书不能完成及时更新的问题 该系统可以对跟系统的三个用户类型的使用实现: 1.对于读者在本系统的应用下可实现按照各种方式(如:书名 编号 作者)查询图书馆的藏书请客 方便的借阅图书 续借图书 归还图书 能够查询自己的借阅图书情况 2.对于图书馆工作人员能够实现方便的对图书进行查询 方便的进行读者借阅情况查询 方便的进行借书还书处理等 便捷的对图书信息进行添加、修改、删除 分类管理等操作 对读者信息进行相关添加 修改 分类管理等操作 3.对于系统管理员可以对图书馆信息进行修改更新操作 对系统用户进行添加、修改、删除、权限设置等操作 对图书馆的办证参数进行修改维护等操作功能 2.2.2 用户类和用户特性 图书借阅管理系统是一个基于 B/S 模式的对图书馆进行高效率管理的应用系统 它的用户主要是读者和图书管理员 学生通过该系统进行图书查询进而对自己需要的图书进行借阅及自己的借阅情况进行查询 图书管理员则通过本系统实现对图书及读者的高效管理 除此之外 还需要一个系统管理员对不同的用户进行权限的设置等操作[2] 三类用户的具体描述如下表所示: 表 2.1 用户具体描述 用户类 描述 读者 读者是该系统的重要的使用角色 他们通过该系统查询自己需要的图书信息 并像图书管理员提出借阅图书的申请进而借阅自己所需的图书 还可以通过对自己借阅情况进行查询 图书管理员 图书管理员是该系统的另一个重要使用者 图书管理员通过该系统进行图书的增加 修改 删除 分类管理等操作 实现对读者借阅归还续接图书的方便操作 实现对系统中图书 读者 读者借阅情况的查询 信息更改维护等操作 管理读者类型 对不同类型读者可借阅的图书数量进行设置等图书馆的基本操作 系统员 系统管理员主要是图书管理系统中用户的管理 实现用户添加修改删除以及用户权限设置等操作 实现对图书馆基本信息的修改维护等操作 还包括对图书馆书架的设置操作 以及校外读者办证所需费用、证件有效期等参数的设置2.3 图书借阅管理系统需求模型 2.3.1 功能描述 图书借阅管理系统的主要任务是实现读者迅速检索查询 方便借阅归还图书 图书管理员高效的完成系统的各项基本操作 系统管理员是管理用户设置权限等操作[3] 从图 2.1 可以看出图书借阅管理系统要完成一下功能: 1. 登录 读者、图书管理员 系统管理员进入该系统必须登录 身份验证正确了才可以进入该系统 以不同身份进入该系统所对应的系统使用权限是不同的 2. 系统设置功能: 系统管理员可以设置图书馆相关的参数信息 3.用户管理功能: 对系统用户进行添加 修改 删除 权限设置等操作 4.查询功能: 对图书馆的馆藏图书 借阅历史 读者用户等信息进行查询 5.其他功能 系统管理员可以修改自己的密码 并且拥有其他用户所拥有的所有功能 2.3.2 图书管理员详细功能描述 1. 读者管理功能: 对读者的类型和读者档案进行管理 包括添加 修改 删除读者类型和读者用户的相关信息 管理不同类型读者借阅图书的数量 2. 图书管理功能: 包括对图书类型和具体图书信息的管理 可以增加 修改 删除图书 丰富具体图书的信息 对不同图书进行分类操作 3. 图书借阅功能: 可以完成对读者借阅 续接和还书的操作 4. 系统查询功能: 查询图书相关资料 借阅历史和借阅到期题型. 5. 修改密码功能: 可以修改自己的登录密码 2.3.3 读者详细功能描述 1) 修改登陆密码: 修改自己的登录密码 2) 查询功能: 对图书馆图书信息进行查询 对自己当前借阅书籍进行查询 对图书规划到期题型进行查看 2.3.4 主要用例的用例描述 图书借阅借阅管理系统涉及到的用例包括:图书借阅 图书归还 读书查询 读者信息管理 图书信息管理 用户管理等 现就系统的主要用例图书借阅 图书归还 图书查询进行详细分析 1)用例&图书借阅& 用例名称 图书借阅 标识符 UC-1 参与者 读者 图书管理员 描述 读书可以通过查询等方式获得自己想借阅的图书的名称 编号 等其他可唯一识别的信息 向图书管理员提出借阅请求 管理员在系统中记录相应信息 将图书交给读者 借阅成功 前置条件 1. 登录;2. 进入图书借阅的页面 后置条件 1. 更新图书借阅列表; 主干过程 1.0 借阅图书 1. 读者请求借阅新地图书 并提供自己的编号 2. 系统显示读者借阅情况的表单 3. 读者提供想借阅的图书的标号 4. 系统存储读者和借阅的图书 并将之存储到数据库中 5. 系统更新借阅列表 分支过程 1.1 选择重置(第 3 步后分支出来) 1. 读者选择重置 2. 系统刷新该页面 异常 1.0.E.1 读者借阅已满(第 2 步) 1.读者借阅的数目已经到达自己借阅的上线 2. 系统将错误信息显示在借阅页面 3. 系统重新启动该用例 被包含用例 无 被扩展用例 无 优先级 高 2)用例&图书归还& 用例名称 图书归还 标识符 UC-1 参与者 读者 图书管理员 描述 读者将自己借阅的图书归还图书馆 前置条件 1. 登录;2. 进入图书归还页面 后置条件 1. 更新图书归还列表; 主干过程 2.0 图书归还 6. 读者请求归还借阅的图书并提供自己的编号 7. 系统显示该读者的借阅信息表 8. 使用者填将要归还的图书交给管理员 9. 管理员输入图书编号 系统存储归还信息 并将之存储到数据库中 10. 系统更图书归还列表 分支过程 1.1 选择重置(第 3 步后分支出来) 1. 读者选择重置 2. 系统刷新该页面 异常 1.0.E.1 读者借阅超时(第 4 步) 1.该书超出了应该归还的时间范围 2. 系统将罚款信息显示在归还页面 3. 需要缴纳罚金 被包含用例 无 被扩展用例 无 优先级 高 3)用例&图书查询& 用例名称 图书查询 标识符 UC-3 参与者 读者 图书管理员 描述 读者通过图书的标号 名称等信息对相应的图书进行查询 前置条件 1. 登录; 2. 转到图书查询页面 后置条件 1. 查询页面显示相应的图书的信息 主干过程 图书查询 1. 读者输入想要查询的图书信息 2. 系统显示相应的图书信息 3. 读者点击读书名称 跳转到图书详细信息链接页面 分支过程 输入信息时(第 2 步后) 1. 系统显示:请选择查询依据 2. 用户进行相应选择 重新查询(第 2 步后) 1. 系统已经显示了相应图书信息 2. 读者想查询其他图书 异常 5.0.E.1 查询的图书不存在(第 2 步后) 1. 读者输入的图书信息不能在数据库中查询到 2. 系统显示暂时无该图书信息 3. 重新启动该用例 被包含用例 无 被扩展用例 无 优先级 高 3.总体设计 3.1 数据库设计 3.1.1 数据库设计概述 数据库是整个系统的基石 数据库的设计优劣直接影响到整个系统的设计成败 本节对数据库的设计进行专门阐述[5] 数据库是数据管理的最新技术 十多年来数据库管理系统已从专用的应用程序发展成为通用的系统软件 由于数据库具有数据结构化 最低冗余度 较高的程序与数据独立性 易于扩充 易于编制应用程序等优点 较大的信息系统都是建立在数据库设计之上的 因此不仅大型计算机及中小型计算机 甚至微型机都配有数据库管理系统[6] 数据库系统的出现使信息系统从以加工数据的程序为中心转向围绕共享的数据库为中心 的新阶段 这样既便于数据的集中管理 又有利于应用程序的研制和维护 提高了数据的利用性和相容性 提高了决策的可靠性 目前 数据库已经成为现代信息系统不可分割的重要组成部分 数据库技术也是计算机领域中发展最快的技术之一 数据库设计是把现实世界的实体模型与需求转换成数据库的模型的过程 它是建立数据库应用系统的核心问题 数据库及其应用的性能都建立在良好的数据库设计的基础之上 数据库的数据是一切操作的基础 如果数据库设计不好 那么其它一切用于提高数据库性能的方法收效都是有限的 数据库设计的关键是如何使设计的数据库能合理地存储用户的数据 方便用户进行数据处理[6] 设计数据库必须遵循一定的规则 在关系型数据库中 这种规则就是范式 范式是符合某一种级别的关系模式的集合 一般人们设计数据库遵循第三范式 即:数据库表中不包含已在其他表中包含的非主关键字信息 采用范式减少了数据冗余 节约了存储空间 同时加快了增、删、改的速度[6] 整个系统所包括的信息有图书信息、读者信息、留言信息、图书借阅信息、图书归还信 息、系统用户信息、读者类型信息 可将这些信息抽象为下列系统所需要的数据项和数据结构: 1)图书信息(编号 图书名称 图书类型 作者 译者 ISBN 号 价格 出版社 所在书架 入库时间 操作员) 2)图书类型(编号 名称 可借阅天数) 3)读者信息(编号 姓名 性别 条形码 读者类型 出生年月 有效证件 证件号码 登记日期 电话 邮箱 操作员) 4)读者类型(名称 可借阅图书本数) 5)图书借阅信息(图书编号 读者 ID 借出时间 应还时间 是否归还 操作员) 6)图书归还信息(图书编号 读者 ID 归还时间 操作员) 7)用户(编号 用户名称 密码) 8)图书馆信息(编号 名称 馆长 电话 地址 邮箱 创建日期 简介) 图书馆参数信息(编号 办证费用 有效期限) 注:带下划线表示主键 在这里使用 E-R 图描述了图书借阅管理系统的数据模型 图 3.1 图书借阅管理系统 E-R 图描述了该系统所涉及到的实体以及他们之间的关系 具体结构如下图所示:. 3.1.2 数据库设计: 图书信息表: 字段名 说明 类型 长度及备注 ISBN 国际标准书号 Varchar(13) 主键 typeId 图书类型 id Int Bookname 书名 Varchar(40) Writer 作者 Varchar(21) Translater 译者 Varchar(30) 可以为空 Publisher 出版社 Varchar(50) Date 出版日期 Smalldatetime Price 价格 money图书类别表: 字段名 说明 类型 长度及备注 TypeName 图书类型 Varchar(20) Id 自动编号 Int 主键 用户信息表: 字段名 说明 类型 长度及备注 Id 自动编号 Int 主键 Name 姓名 Varchar(2) Sex 性别 Varchar(2) Age 年龄 int Identitycard 证件号码 Varchar(2) Workdate 办证日期 datetime Tel 电话号码 Varchar(2) Yajin 押金 Int Password 密码 Nvarchar(10) admin 管理员 Nchar(10)读者信息表: 字段名 说明 类型 长度及备注 Name 姓名 Varchar(10) Sex 性别 Varchar(2) Age 年龄 int identityCard 证件号码 Varchar(30) Date 日期 Smalldatetime manNum 最大书量 Int Tel 电话号码 Varchar(15) keepMoney 押金 Miney Zj 证件类型 Int Zy 职业 Varchar(50) ISBN 国际标准书号 Varchar(13) bztime 办证时间 datetime3.2 系统总体结构设计 该系统在 Windows98/2000/XP 环境下 主要采用 JSP 开发工具 MySQL 数据库来设计 开发过程与成果应符合 GB/T
软件工程术语 GB/T
计算机软件产品开发文件编制指南等[7] 3.2.1 图书管理系统总体结构图 绘制系统结构图的过程 实际上就是对系统功能模块进行分解设计的过程 即合理地将数据流程图转变为所需要的系统结构图[8] 系统结构图将会使读者和用户能直观的了解系统的结构模式 理解系统的各个功能的结构 能很好地方便用户使用和理解整个系统 本系统的结构图如下: 图 3.3 系统总体结构图 根据需求分析的结果 按照&低耦合、高内聚&的原则 本系统将划分为以下主要功能模块:系统管理员功能模块 读者管理功能模块 图书管理功能模块 图书借还功能模块;系统查询功能模块[8] 3.2.2 系统管理员模块功能 该模块主要包括图书馆信息设置 用户管理 参数设置 书架设置 1.图书馆信息设置 该功能选项用于系统管理员对图书馆名称 地址 联系方式 简介等信息的管理更新 以便于读者和外界人士对图书馆的了解 该功能是对 td_library 表进行维护修改等操作 修改后的信息将被保存在该表中 2.用户设置 该功能子模块主要是系统管理员对系统用户的管理 通过此子模块的功能实现可以对用户进行添加、修改、删除、权限设置等操作 该子模块能将图书馆的不同工作细化到不同的相关人员 极大地提高了图书馆的工作效率 该操作是对 tb_users 表进行操作 在对用户进行了相关的操作后把操作后的最新信息存放在该表中 3.图书馆参数设置 通过该子模块设置在图书馆办理临时读者证的费用及证件有效期限 该操作是对于 tb_parameter 表进行 并把操作后的最新数据存放在该表中 3.2.3 读者管理模块功能 该模块主要包含读者类型管理和读者信息管理两个子模块: 1. 读者类型管理 该子模块是对图书馆系统用户读者的类型进行维护 修改等操作 在此模块中主要设置不同类型读者一次性可借阅的图书的数量 该操作是对于 tb_resderType 表进行 并将操作结果保存在该表中 2. 读者信息管理 该子模块是对读者的基本信息进行管理 可以对读者的基本信息进行添加 修改 删除操作 这下操作均是对 tb_resder 表进行的 并将操作后的结果保存在该表中 3.2.4 图书管理模块功能 图书管理功能模块可分为图书类型管理和图书信息管理两个子模块 其各自的实现分别如下面表中所示: 表 3.11 图书类型管理描述 图书类型管理 功能描述 对图书进行类型设置分类 并对不同类型图书可被借阅的天数进行设置 访问的数据库表 图书类型表:tb_bookType 进行的操作 添加、修改、删除图书类型 对不同类型图书可被借阅的天数进行设置 产生的结果 对图书类型进行管理 对不同类型图书参数进行设置 结果存储位置或输出 结果存储在图书类型表(tb_bookType)中 结果在图书类型查询页面输出 表 3.12 图书信息管理描述 图书信息管理 功能描述 对图书进行基本操作和信息管理 访问的数据库表 图书类型表:tb_bookType 进行的操作 添加、修改、删除图书 对图书的编号、所在书架、价格、出版社等基本信息进行管理 产生的结果 对图书基本操作管理 对不同图书参数进行各自信息的设置管理 结果存储位置或输出 结果存储在图书类型表(tb_book)中 结果在图书查询页面输出 3.2.5 图书借还模块功能 该功能模块主要实现对读者借阅、续接、归还图书的操作 其中子模块各自的描述如下各表所列: 表 3.13 图书借阅描述 图书借阅管理 功能描述 对读者借阅图书进行基本操作和信息管理 访问的数据库表 图书信息表: tb_bookinfo 读者信息表:tb_reader 读者类型信息表:tb_resderType 进行的操作 对读者借阅图书进行管理 产生的结果 读者借阅成功 系统对借阅信息进行记录 结果存储位置或输出 结果存储在图书借阅表(tb_borrow)中 结果在图书借阅查询页面输出 表 3.14 图书续借描述 图书续接管理 功能描述 对读者借阅图书进行提续接操作 访问的数据库表 图书借阅表: tb_borrow 进行的操作 对借阅的图书进行续接 产生的结果 读者归还日期延后一个月 结果存储位置或输出 结果存储在图书借阅表(tb_borrow)中 表 3.15 图书归还描述 图书归还管理 功能描述 对读者归还图书进行基本操作和信息管理 访问的数据库表 图书借阅信息表: tb_borrow 读者类型信息表:tb_resderType 进行的操作 对读者借阅图书进行管理 产生的结果 读者借阅成功 系统对借阅信息进行记录 结果存储位置或输出 结果存储在图书归还表(tb_giveback)中 3.2.6 系统查询模块功能 该模块包括对图书馆藏书进行查询 对读者借阅情况进行查询 以及对借阅到期和超期的读者进行提醒的信息 其中三个子模块的各自实习如下所示: 表 3.16 图书查询描述 图书查询 功能描述 系统用户对馆藏图书信息进行查询操作 访问的数据库表 图书信息表: tb_book 进行的操作 用户通过图书的编号 作者 出版社等信息对图书进行相关查询 产生的结果 读者查询到相应的图书或系统提醒查询的图书不存在 结果存储位置或输出 结果在图书查询页面输出 表 3.17 图书借阅查询描述 图书借阅查询 功能描述 系统用户对读者借阅图书信息进行查询操作 访问的数据库表 图书借阅表: tb_borrow 进行的操作 用户通过图书的编号 读者编号等信息对摸个读者或某本图书的借阅情况进行相关查询 产生的结果 查询到相应的读者或图书得借阅情况 结果存储位置或输出 结果在图书查询页面输出 表 3.18 图书借阅到期提醒描述 图书借阅到期提醒管理 功能描述 对读者借阅的到期图书进行提醒 访问的数据库表 图书借阅表: tb_borrow 图书归还表:tb_giveback 读者信息表:tb_reader 读者类型信息表:tb_resderType 进行的操作 对借阅到期和超期的读者进行提醒 产生的结果 向借阅到期和借阅超期的读者发送邮件等提醒信息 结果存储位置或输出 结果存储在图书借阅到期提醒表 4.程序设计与编码 4.1 开发平台与工具 4.1.1 J2EE 平台 J2EE 即是 Java2 平台企业版(Java 2 Platform Enterprise Edition) 是原 Sun 公司(现已被甲骨文公司收购)为企业级应用推出的标准平台 它简化了企业解决方案的开发、部署和管理相关复杂问题的体系结构 J2EE 技术的基础就是核心 Java 平台或 Java 2 平台的标准版 J2EE 不仅巩固了标准版中的许多优点 例如&编写一次、随处运行&的特性、方便存取数据库的 JDBC API、CORBA 技术以及能够在 Internet 应用中保护数据的安全模式等等 同时还提供了对 EJB (Enterprise JavaBeans) 、 Java Servlets API、 JSP (Java Server Pages) 以及 XML 技术的全面支持 其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构 J2EE 体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、 高可靠性以及 可扩展性的应用的需求 通过提供统一的开发平台 J2EE 降低了开发多层应用的费用和复杂性 同时提供对现有应用程序集成强有力支持 完全支持 Enterprise JavaBeans 有良好的向导支持打包和部署应用 添加目录支持 增强了安全机制 提高了性能[9] 在开发图书馆借阅管理系统的过程中 应用 Myeclipse6.0.1 它可以在数据库和 J2EE 的开发、发布 以及应用程序服务器的整合方面极大的提高工作效率 Myeclipse 是功能丰富的 J2EE 集成开发环境 包括了完备的编码、调试、测试和发布功能 完整支持 HTML Struts JSF CSS Javascript SQL[10] 4.1.2 WEB 服务器和数据库 在系统的开发过程中使用的 Web 应用服务器是 Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目 由 Apache、SUN 和其他一些公司及个人共同开发而成 由于有了 Sun 的参与和支持 最新的 Servlet 和 JSP 规范总是能在 Tomcat 中得到体现 Tomcat 是一个小型的轻量级应用服务器 它运行时占用的系统资源小、扩展性好、支持负载平衡和邮件服务等开发应用系统常用的功 能 因此在中小型系统和并发访问用户不是很多的时候 经常被使用[11] 使用 MySQL 作为数据库开发工具 MySQL 是一个小型关系型数据库管理系统 开发者为瑞典 MySQL AB 公司 在 2008 年 1 月 16 号被 Sun 公司收购 目前 MySQL 被广泛地应用在 Internet 上的中小型网站中 由于其体积小、速度快、总体拥有成本低 尤其是开放源码这一特点 许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库[11] 为了开发的便捷快速 使用 struts 第三方插件 Struts 是一个全新的 MVC 框架 实在 WebWork 基础上发展起来的[12] 开发系统用的系统工具如表 4.1 所示: 表 4.1 系统开发平台和工具 工具名称 用途 JDK 1.6.0_11 MyEclipse MySQL 5.0 SQLYog 6.1 Tomcat 6.0 Struts 1.0 Java 开发工具包 J2EE 集成开发环境 小型关系数据库管理系统 MySQL 图形化数据库管理工具 Web 应用服务器 第三方插件 可扩展的 Java EE Web 框架 4.2 程序设计 4.2.1 程序设计概述 在设计的 Web 层应用了著名的 MVC 模式 V 有 JSP 来实现 为了业务逻辑和表示的分离.它是基于 Web 应用系统 它的客户端使用 Broswer 然后是 Web 层的应用 业务逻辑层(有 EJB 实现) 资源管理层 客户请求浏览页面 一般 Web 层的 View 有 JSP 组成 并且使用了大量 Taglib 把每个请求映射到某个 HTMLAction 类来响应它 HTML Action 类是一个标准的类 执行选择的 HTML Action 使用 MVC 模式减少了代码的复制 即减少了代码的维护 由于模型返回的格式不带任何显示格式 因而模型可以直接应用于接口的使用 还因为 MVC 模型把不同的模型和不同的视图组合在一起完成不同的请求 因此 控制层可以说包含了用户请求权限的概念[13] 在设计中还因应用了 Struts 框架 Struts 跟 Tomcat、Turbine 等诸多 Apache 项目一样 是开源软件 这是它的一大优点 使开发者能更深入的了解其内部实现机制[11] 除此之外 Struts 的优点主要集中体现在 Taglib 和页面导航 Taglib 是 Struts 的标记库 灵活动用 能大大提高开发效率 页面导航使系统的脉络更加清晰 通过一个配置文件 即可把握整个系统各部分之间的联系 这对于后期的维护有着莫大的好处[11] 4.2.2 数据库与 Web 服务器的连接 数据库连接时采用连接池技术链接 SQL 具体代码实现如下: package com.ljj. import java.sql.C import java.sql.D import java.sql.DriverM import java.sql.ResultS import java.sql.SQLE import java.util.ArrayL import java.util.L import import import import import com.ljj.model.BookI com.ljj.model.BookT com.ljj.model.O com.ljj.model.R com.ljj.model.Upublic class Dao { protected static String dbClassName &com.microsoft.sqlserver.jdbc.SQLServerDriver&; protected static String dbUrl = &jdbc:sqlserver://localhost:1433;& + &DatabaseName=db_SelectMethod=Cursor&; protected static String dbUser = &sa&; protected static String dbPwd = &zhangyong&; protected static String second = private static Connection conn = //创建数据库连接 private Dao() { try { if (conn == null) { Class.forName(dbClassName).newInstance(); conn = DriverManager.getConnection(dbUrl dbUser dbPwd); System.out.println(&数据库连接成功!&); } } catch (Exception ee) { ee.printStackTrace(); } } //执行查询 private static ResultSet executeQuery(String sql) { try { if(conn==null) new Dao(); return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE ResultSet.CONCUR_UPDATABLE).executeQuery(sql); } catch (SQLException e) {= e.printStackTrace(); } finally { } } //执行更新 private static int executeUpdate(String sql) { try { if(conn==null) new Dao(); return conn.createStatement().executeUpdate(sql); } catch (SQLException e) { System.out.println(e.getMessage()); //if(e.getMessage().equals(&[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]DELETE 语 句 与 COLUMN REFERENCE 约 束 'FK_TB_BORRO_REFERENCE_TB_BOOKI' 冲突 该冲突发生于数据库 'db_library' 表 'tb_borrow' column 'bookISBN' &)) return -1; } finally { } } //关闭数据库 public static void close() { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ conn = } } /* * 管理员登录方法 */ public static Operator check(String name String password) { int i = 0; Operator operater=new Operator(); String sql = &select * from tb_operator where name='& + name + &' and password='& + password + &'and admin=1&; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { String names = rs.getString(1); operater.setId(rs.getString(&id&)); operater.setName(rs.getString(&name&)); operater.setGrade(rs.getString(&admin&)); operater.setPassword(rs.getString(&password&)); if (names != null) { i = 1; } } } catch (Exception e) { e.printStackTrace(); } Dao.close(); } /* * 查询类别方法 */ //查询图书目录 public static List selectBookCategory() { List list=new ArrayList(); String sql = &select * from tb_bookType&; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { BookType bookType=new BookType(); bookType.setId(rs.getString(&id&)); bookType.setTypeName(rs.getString(&typeName&)); list.add(bookType); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); } public static List selectBookCategory(String bookType) { List list=new ArrayList(); String sql = &select days from tb_bookType where typeName='&+bookType+&'&; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { BookType type=new BookType(); type.setDays(rs.getString(&days&)); list.add(type); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); } /* * 图书类别表相关操作 * */ //插入图书类型 public static int InsertBookType(String bookTypeName){ int i=0; try{ String sql=&insert into tb_bookType(typeName) values('&+bookTypeName+&')&; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } } //更新图书类别 public static int UpdatebookType(String id String typeName){ int i=0; try{ String sql=&update tb_bookType set typeName='&+typeName+&' where id='&+id+&'&; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); } //删除图书类别 public static int DelbookType(String id){ int i=0; try{ String sql=&delete from tb_bookType where id='&+id+&'&; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); } /* * 图书信息表相关操作 */ /* * 插入图书信息方法 */ //插入图书信息 public static int Insertbook(String ISBN String typeId String bookname String writer String translator String publisher Date date Double price){ int i=0; try{ String sql=&insert into tb_bookInfo(ISBN typeId bookname writer translator publisher date price) values('&+ISBN+&' '&+typeId+&' '&+bookname+&' '&+writer+&' '&+translator+&' '&+publisher+&' '&+date+&' &+price+&)&; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ System.out.println(e.getMessage()); } Dao.close(); } /* * 查询图书相关信息 * */ public static List selectBookInfo() { List list=new ArrayList(); String sql = &select * from tb_bookInfo&; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { BookInfo bookinfo=new BookInfo(); bookinfo.setISBN(rs.getString(&ISBN&)); bookinfo.setTypeid(rs.getString(&typeid&)); bookinfo.setBookname(rs.getString(&bookname&)); bookinfo.setWriter(rs.getString(&writer&)); bookinfo.setTranslator(rs.getString(&translator&)); bookinfo.setPublisher(rs.getString(&publisher&)); bookinfo.setDate(rs.getDate(&date&)); bookinfo.setPrice(rs.getDouble(&price&)); list.add(bookinfo); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); } public static List selectBookInfo(String ISBN) { List list=new ArrayList(); String sql = &select * from tb_bookInfo where ISBN='&+ISBN+&'&; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { BookInfo bookinfo=new BookInfo(); bookinfo.setISBN(rs.getString(&ISBN&)); bookinfo.setTypeid(rs.getString(&typeid&)); bookinfo.setBookname(rs.getString(&bookname&)); bookinfo.setWriter(rs.getString(&writer&)); bookinfo.setTranslator(rs.getString(&translator&)); bookinfo.setPublisher(rs.getString(&publisher&)); bookinfo.setDate(rs.getDate(&date&)); bookinfo.setPrice(rs.getDouble(&price&)); list.add(bookinfo); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); } /* * 修改图书信息方法 */ //更新图书信息 public static int Updatebook(String ISBN String typeId String bookname String writer String translator String publisher Date date Double price){ int i=0; try{ String sql=&update tb_bookInfo set ISBN='&+ISBN+&' typeId='&+typeId+&' bookname='&+bookname+&' writer='&+writer+&' translator='&+translator+&' publisher='&+publisher+&' date='&+date+&' price=&+price+& where ISBN='&+ISBN+&'&; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); } // /* // * 删除图书信息方法 // */ public static int Delbook(String ISBN){ int i=0; try{ String sql=&delete from tb_bookInfo where ISBN='&+ISBN+&'&; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); } /* * 对读者信息表执行的相关操作 */ //增加读者信息 public static int InsertReader(String name String sex String age String identityCard Date date String maxNum String tel Double keepMoney String zj String zy Date bztime String ISBN){ int i=0; try{ String sql=&insert into tb_reader(name sex age identityCard date maxNum tel keepMoney zj zy bztime ISBN) values('&+name+&' '&+sex+&' '&+age+&' '&+identityCard+&' '&+date+&' '&+maxNum+&' '&+tel+&' &+keepMoney+& '&+zj+&' '&+zy+&' '&+bztime+&' '&+ISBN+&')&; System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); } public static List selectReader() { List list=new ArrayList(); String sql = &select * from tb_reader&; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { Reader reader=new Reader(); //reader.setId(rs.getString(&id&)); reader.setName(rs.getString(&name&)); reader.setSex(rs.getString(&sex&)); reader.setAge(rs.getString(&age&)); reader.setIdentityCard(rs.getString(&identityCard&)); reader.setDate(rs.getDate(&date&)); reader.setMaxNum(rs.getString(&maxNum&)); reader.setTel(rs.getString(&tel&)); reader.setKeepMoney(rs.getDouble(&keepMoney&)); reader.setZj(rs.getInt(&zj&)); reader.setZy(rs.getString(&zy&)); reader.setISBN(rs.getString(&ISBN&)); reader.setBztime(rs.getDate(&bztime&)); list.add(reader); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); } public static List selectReader(String readerISBN) { List list=new ArrayList(); String sql = &select * from tb_reader where ISBN='&+readerISBN+&'&; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { Reader reader=new Reader(); reader.setName(rs.getString(&name&)); reader.setSex(rs.getString(&sex&)); reader.setAge(rs.getString(&age&)); reader.setIdentityCard(rs.getString(&identityCard&)); reader.setDate(rs.getDate(&date&)); reader.setMaxNum(rs.getString(&maxNum&)); reader.setTel(rs.getString(&tel&)); reader.setKeepMoney(rs.getDouble(&keepMoney&)); reader.setZj(rs.getInt(&zj&)); reader.setZy(rs.getString(&zy&)); reader.setISBN(rs.getString(&ISBN&)); reader.setBztime(rs.getDate(&bztime&)); list.add(reader); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); } //更新读者信息 public static int UpdateReader(String id String name String sex String age String identityCard Date date String maxNum String tel Double keepMoney String zj String zy Date bztime String ISBN){ int i=0; try{ String sql=&update tb_reader set name='&+name+&' sex='&+sex+&' age='&+age+&' identityCard='&+identityCard+&' date='&+date+&' maxNum='&+maxNum+&' tel='&+tel+&' keepMoney=&+keepMoney+& zj='&+zj+&' zy='&+zy+&' bztime='&+bztime+&'where ISBN='&+ISBN+&'&; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); } //删除读者信息 public static int DelReader(String ISBN){ int i=0; try{ String sql=&delete from tb_reader where ISBN='&+ISBN+&'&; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); } //new public static List selectbookserch() { List list=new ArrayList(); String sql = &select * from tb_bookInfo&; ResultSet s = Dao.executeQuery(sql); try { while (s.next()) { BookInfo bookinfo=new BookInfo(); bookinfo.setISBN(s.getString(1)); bookinfo.setTypeid(s.getString(2)); bookinfo.setBookname(s.getString(3)); bookinfo.setWriter(s.getString(4)); bookinfo.setTranslator(s.getString(5)); bookinfo.setPublisher(s.getString(6)); bookinfo.setDate(s.getDate(7)); bookinfo.setPrice(s.getDouble(8)); list.add(bookinfo); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); } //插入管理员 public static int Insertoperator(String name String sex int age String identityCard Date workdate String tel String password int yajin){ int i=0; try{ String sql=&insert into tb_operator(name sex age identityCard workdate tel password yajin) values('&+name+&' '&+sex+&' &+age+& '&+identityCard+&' '&+workdate+&' '&+tel+&' '&+password+&' '&+yajin+&')&; System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); } public static List selectuser() { List list=new ArrayList(); String sql = &select id name sex age yajin workdate tel password from tb_operator where admin=0&; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { User user=new User(); user.setId(rs.getInt(1)); user.setName(rs.getString(2)); user.setSex(rs.getString(3)); user.setAge(rs.getInt(4)); //user.setIdentityCard(rs.getString(5)); user.setYajin(rs.getInt(5)); user.setWorkdate(rs.getDate(6)); user.setTel(rs.getString(7)); user.setPassword(rs.getString(8)); list.add(user); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); } //删除用户 public static int Deluser(int id){ int i=0; try{ String sql=&delete from tb_operator where id='&+id+&'&; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); } public static int Updateuser(int id String name String sex int age String identityCard Date workdate String tel String password){ int i=0; try{ String sql=&update tb_operator set name='&+name+&' sex='&+sex+&' age=&+age+& identityCard='&+identityCard+&' workdate='&+workdate+&' tel='&+tel+&' password='&+password+&' where id='&+id+&'&; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); } public static int Updatepass(String password String name){ int i=0; try{ String sql=&update tb_operator set password='&+password+&' where name='&+name+&'&; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close();
} } 4.2.3 登录模块程序设计 本模块主要是用户通过图书管理系统的首页登录进入该系统 用户输入正确的用户名和密码 系统会根据用户的身份进行相应权限划分;如果登录信息有错误 则系统提示登入错误的信息 并且禁止系统用户进行任何操作 图书借阅管理系统的登录主页面如图 4.1 所示图 4.1 图书管理系统登录首页 用户在登录页面写好用户名和密码 选择登录 登录成功则跳转到系统的首页 否则提示错误信息[14] 在服务器端进行用户身份验证的程序流程图如图 4.2 程序流程图所示 图 4.2 用户登录流程图 其中对系统用户权限的设置是该操作的重要部分也是系统提高效率的关键所在 起具体实现代码为: class BookLoginAction implements ActionListener { public void actionPerformed(final ActionEvent e) { user = Dao.check(username.getText() password.getText()); if (user.getName() != null) { try { MainFrame frame = new MainFrame(); frame.setVisible(true); LoginIFrame.this.setVisible(false); } catch (Exception ex) { ex.printStackTrace(); } } else { JOptionPane.showMessageDialog(null &只有管理员才可以登录!&); username.setText(&&); password.setText(&&); } } } 4.2.5 读者管理功能模块的实现 读者管理主要实现对读者的类型管理和信息管理两个功能子模块 其中读者类型管理中需要设置不同类型读者一次性可借阅的图书数量 读者信息管理则主要管理维护读者的基本信息:该管理功能在设置读者信息时需要输入读者 姓名 性别 条形码 选择读者类别 有效证件 证件号码 电话 e-mail 等信息 其中的姓名 性别 条形码 证件号码是必填选项4.2.6 查询功能模块的实现 查询功能模块包括图书查询 读者借阅查询和借阅到期提醒三个子功能模块 1) 图书查询可根据图书的条形码 书名 作者 出版社等不同信息进行查询& 实现该功能中根据读者不同需求的按条件查询实现语句如下: public Collection query(String strif){ BookForm bookForm= Collection bookColl=new ArrayList(); String sql=&&; if(strif!=&all& && strif!=null && strif!=&&){ sql=&select * from (select b.* c.name as bookcaseName p.pubname as publishing t.typename from tb_bookinfo b left join tb_bookcase c on b.bookcase=c.id join tb_publishing p on b.ISBN=p.ISBN join tb_booktype t on b.typeid=t.id where b.del=0) as book where book.&+strif+&'&; }else{ sql=&select b.* c.name as bookcaseName p.pubname as publishing t.typename from tb_bookinfo b left join tb_bookcase c on b.bookcase=c.id join tb_publishing p on b.ISBN=p.ISBN join tb_booktype t on b.typeid=t.id where b.del=0&; } System.out.println(&图书查询时的 SQL:&+sql); ResultSet rs=conn.executeQuery(sql); try { while (rs.next()) { bookForm=new BookForm(); bookForm.setBarcode(rs.getString(1)); bookForm.setBookName(rs.getString(2)); bookForm.setTypeId(rs.getInt(3)); bookForm.setAuthor(rs.getString(4)); bookForm.setTranslator(rs.getString(5)); bookForm.setIsbn(rs.getString(6)); bookForm.setPrice(Float.valueOf(rs.getString(7))); //此处必须进行类型转 换 bookForm.setPage(rs.getInt(8)); bookForm.setBookcaseid(rs.getInt(9)); bookForm.setInTime(rs.getString(10)); bookForm.setOperator(rs.getString(11)); bookForm.setDel(rs.getInt(12)); bookForm.setId(Integer.valueOf(rs.getString(13))); bookForm.setBookcaseName(rs.getString(14)); bookForm.setPublishing(rs.getString(15)); bookForm.setTypeName(rs.getString(16)); bookColl.add(bookForm); } } catch (SQLException ex) { ex.printStackTrace(); } conn.close(); return bookC } 2)借阅查询子模块是对图书当前状态和读者当前的借阅情况进行查询 具有此权限的用户登录并进入该操作界面后选中相应的查询条件 并输入相应的查询信息 系统即可在页面显示被查询的图书的状态 或相应读者的当起借阅情况 此外 还可以输入相应时间段内的所有借阅清单 :系统中同时选中日期和限制条件进行查询时 程序是在条件查询的基础上选中符合时间条件限制的内容 其实现代码为: if (flag.length == 2) { if (request.getParameter(&f&) != null) { str = request.getParameter(&f&) + & like '%& + request.getParameter(&key&) + &%'&; } System.out.println(&日期和条件&); String sdate = request.getParameter(&sdate&); String edate = request.getParameter(&edate&); String str1 = if (sdate != null && edate != null) { str1 = &borrowTime between '& + sdate + &' and '& + edate + &'&; } str = str + & and borr.& + str1; System.out.println(&条件和日期:& + str); } 4.2.7 图书管理功能模块的实现 与读者管理模块类似 图书管理模块也分为图书类型管理和图书档案管理两个子模块 其中图书类型管理功能处理将图书分类提高管理效率外还设置了不同类型图书可借阅的天数 对不同类型图书进行区别管理 图书档案中包含图书的条形码 图书名称 图书类型 作者 译者 价格 出版社 所在书架等图书基本信息 其中作者 译者 页码是备选信息 可以不填 4.2.8 图书借还功能模块的实现 该功能模块可分为图书借阅 图书归还 图书续借三个子模块. 1)图书借阅 该子模块实现系统的借阅功能 读者向图书管理员提供自己的编号会显示出读者当起的借阅情况 再提供要借阅的图书标号 图书管理员将信息记录在系统中 借阅成功: 如果在借阅时所要借阅的图书不存在或者读者借阅已达借阅图书的上线 则读者不能接续借阅图书 系统将给出相应提示 此功能的实现代码为: private ActionForward bookborrow(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response){ //查询读者信息 //此处一定不能使用该语句进行转换 readerForm.setBarcode(request.getParameter(&barcode&)); ReaderForm reader = (ReaderForm) readerDAO.queryM(readerForm); request.setAttribute(&readerinfo& reader); //查询读者的借阅信息 request.setAttribute(&borrowinfo& borrowDAO.borrowinfo(request.getParameter(&barcode&))); //完成借阅 String f = request.getParameter(&f&); String key = request.getParameter(&inputkey&); if (key != null && !key.equals(&&)) { String operator = request.getParameter(&operator&); BookForm bookForm=bookDAO.queryB(f key); if (bookForm!=null){ int ret = borrowDAO.insertBorrow(reader bookDAO.queryB(f key) operator); if (ret == 1) { request.setAttribute(&bar& request.getParameter(&barcode&)); return mapping.findForward(&bookborrowok&); } else { request.setAttribute(&error& &添加借阅信息失败!&); return mapping.findForward(&error&); } }else{ request.setAttribute(&error& &没有该图书!&); return mapping.findForward(&error&); } } return mapping.findForward(&bookborrow&); } 2)图书归还 该子模块实现系统的图书归还功能 读者向图书管理员提供自己的编号会显示出读者当起的借阅情况 再提供要归还的图书标号 图书管理员将信息记录在系统中 归还成功 5.软件测试 5.1 软件测试的方法与步骤 该系统在本地服务器上进行运行和调试 鉴于对系统的内部结构和处理算法的完全了解以及对系统功能的全面掌握对系统进行白盒测 试和黑盒测试 在开发软件系统的过程中 需要面对错综复杂的问题 因此 在软件生存周期的每个阶段都不可避免地会产生错误 测试目的在于:发现错误而执行一个程序的过程 测试重要发现一个发现其中尚未发现的错误 本系统的测试阶段信息流程下图所示[15]图 5.1 测试阶段信息流程图 为了设计出有效地测试方案按照下面准则进行测试:所有测试都应追溯到用户需求; 在完 成了需求模型就要着手制定测试计划 在编码之前最所有测试工作进行计划和设计; 运用 Pareto 原理着重对占出现错误 80%的容易 出错的 20%的模块进行测试 从小规模开始逐步进行大规模测试 通常先重点测试单个程序模块再转向集成的模块簇;精心设计测试方案 尽可能充分覆盖程序逻辑使之达到要求的可靠性[15] 按照软件工程的观点 软件测试(主要是指多模块程序的测试)共包括 4 个层次 1)单元测试 单元测试的用例从单元详细设计中导出 在单元测试中可以采用功能性测试和结构性测试两种 2)集成测试和确认测试 这一阶段的任务 是通过了单元测试的模块逐步组装起来 通过测试与纠错 最终得到一个满足需求的目标软件 3)验证测试 在这个测试步骤中所发现的往往是需求规格说明的错误 一般来说 系统测试是功能性测试 不是结构性测试[15] 在整个测试中 采用了白盒测试和黑盒测试相结合的方法5.2 测试用例设计与测试用例的运行过程及测试结果分析 5.2.1 模块测试 1)登录模块测试 表 5.1 登录模块用例测试 用例 测试数据 预期结果 UC1:输入正确的用户名和密码 用户名:admin 密码:admin 系统跳转到登陆成功页面 UC2:输入空用户名 用户名: 请输入用户名 UC3:输入用户名和空密码 用户名:admin 密码: 请输入密码 UC4:输入用户名和错误的密码 用户名:admin 密码:321ff 您输入的用户名或密码错误 当用户输入的用户名或密码错误是系统会跳转到出错页面并提示 &您输入的用户名或密 码错误& 用户点击确定 系统会重新返回登陆页面 其中错误信息提示页面如图 5.1 所示: 图 5.2 系统出错提示页面 2)更改密码模块测试 用户登录系统后可对自己的登录密码进行更改 更改过程要求用户提供原始密码 输入新密码 重新输入新密码进行确认 如果用户输入的原始密码错误 或两次输入的新密码不一致将无法执行密码更新操作 系统会给出相应的提示 起显示页面为:图 5.3 两次密码不一致提示页面 5.2.2 集成测试 把经过单元测试的模块放在一起形成一个子系统并对它进行测试用于检验模块相互间的 协调和通信 这里主要对图书管理员功能系统进行了测试 经过检验其功能均得以顺利实现 下图为管理员操作的读者借阅模块成功运行界面: 把经过测试的子系统装配成一个完整的系统进行测试 经过黑盒测试于白盒测试相结合的方式 对整个系统的各个功能模块进行了测试 并调试改正其中的设计和编码错误 经过这个环节的操作整个系统的功能基本实现成功运行5.2.3 验收测试 在进行了以上的测试工作后 将整个软件系统作为单一的实体进行测试 测试内容与系统测试基本类似 但它是在用户积极参与下进行的 此测试过程主要使用实际数据 进行测试 验证测试的目的是验证系统确实能够满足用户的需求 经过这个环节的实际数据测试 系统的各个功能实现都达到了系统需求设计的要求 5.3 评价 测试过程严格按照测试的流程 经过单元测试、子系统测试和系统测试 通过单元测试 查找出了系统各模块内部的错误;通过子系统测试 发现了模块间相互协调和通信上的错误;通过系统的集成测试 发现了软件设计过程中存在的错误 通过改正错误的设计和实现部分 保证了图书借阅管理系统可以完成需求分析中制定的需求[16] 从上面的测试中可以看出 此系统可以完成用户登录、系统设置、图书管理、读者管理管理、借阅管理和系统查询等功 能 读者在本系统的应用下可实现按照各种方式(如:书名 编号 作者)查询图书馆的藏书请客 方便的借阅图书 续借图书 归还图书 能够查询自己的借阅图书情况 图书馆工作人员能够实现方便的对图书进行查询 方便的进行读者借阅情况查询 方便的进行借书还书处理等 便捷的对图书信息进行添加、修改、删除 分类管理等操作 对读者信息进行相关添加 修改 分类管理等操作 系统管理员可以对图书馆信息进行修改更新操作 对系统用户进行添加、修改、删除、权限设置等操作 对图书馆的办证参数进行修改维护等操作功能 测试阶段的工作一方面发现了系统的各种错误 另外一方面也验证了修改后的系统能够实现提高图书馆工作效率的预期目的 6.结束语 6.1 工作成果 在 MyEclipse 开发环境下 以 J2EE 为平台 运用 JSP 网络编程语言和 Struts 框架和 MySQL 数据库完成了 B/S 模式的图书馆借阅管理系统 系统基本上实现了预期的各项功能 达到了任务书中的主要设计内容的各项任务 整个系统也在经过测试和不断地改正之后能够顺利运行 基本上实现了开题报告中的需求设计在程序编写 该系统能够实现: 1.读者在本系统的应用下可实现按照各种方式(如:书名 编号 作者)查询图书馆的藏书请客 方便的借阅图书 续借图书 归还图书 能够查询自己的借阅图书情况 2.图书馆工作人员能够实现方便的对图书进行查询 方便的进行读者借阅情况查询 方便的进行借书还书处理等 便捷的对图书信息进行添加、修改、删除 分类管理等操作 对读者信息进行相关添加 修改 分类管理等操作 3.系统管理员可以对图书馆信息进行修改更新操作 对系统用户进行添加、修改、删除、权限设置等操作 对图书馆的办证参数进行修改维护等操作功能 6.2 改进意见 该系统在使用第三方插件 Strusts 时采用的是 1.0 版本的 若使用更新的 2.0 版本会更大的改进系统的开发便捷性和可维护性 系统在数据库与 Web 服务器的连接时采用的是连接池技术 若在数据库连接时使用现在流行的第三方插件 Hibernate3.0 会使系统有更强的数据库映射关系 进而极大简化开发过程 还有就是系统在一些信息设置的细节上还存在不足 可以对系统的相关字段进行格式设置和异常处理 使数据更加规范化[11] 其次 本系统只对传统书籍进行了最基本的管理 随着计算机技术的飞速发展 应将各个图书馆的图书进行联网交流 使读者可以远程查询图书馆的藏书等信息 还应开发对电子书的管理 形成网上图书资源共享平台 使读者可以在线阅读电子书资料 并设置用户权限 使管理员可以上传图书资料信息 高级用户可以下载网上电子书资源 从而实现信息资源最大化被共享 6.3 收获体会 经过三个月的不断学习和设计开发加上老师同学的帮助 终于完成了我的毕业设计题目&图书馆借阅管理系统&的开发 在开题报告阶段我参阅了大量的中外文献 对所开发系统的现状 国际发展情况以及未来发展趋势有了深入的了解; 在整个系统的需求分析过程中对开发前期 工作地流程步骤有了深入的掌握;在开发过程我进一步学习了 Java 的基础语法 和一些网页设计美工方面的知识 以便使系统有更好的美观性 在编写过程中也规范了许多编码习惯 数据库设计阶段我尝试了几个不同版本的数据库 它们在配置操作上各有不同 又各有优缺点 在它们的一些基本操作上也有了进一步提高 在配置开发工具过程中对 Tomcat 和 MyEclipse 的连接部署有了清晰地认识 在使用第三方插件是进行了其配置文件 Struts-config.xml 的作用也有了相当的了解 对开发 Web 程序的步骤框架页有了总体性认识 在整个系统开发的过程中 我学到了很大新的知识 前学过的许多知识点在运用过程中也有了更为深入的分析 这是我大学期间做过的规模最大的项目 在这个过程中也体会到了如何将书本知识转化到实际的应用中 参考文献 [1] 王立福. 软件工程(第二版)[M]. 北京:北京大学出版社.2002. [2] 张秋余 杨h. 基于用例的需求建模方法[J]. 计算机工程与设计 39-3541. [3] MattheMacDonal.管理信息系统[J].电子工业出版社.2003.Vol.3(8):102-108. [4] 张秋余 杨h. 基于用例的需求建模方法[J]. 计算机工程与设计 39-3541. [5] John W. Satzinger Robert B. Jackson Stephen D. Burd. [Z]. 北京:人民邮电出版社 2008. [6] 王珊 萨师炫.数据库系统概论(第三版)[M]. 北京:高等教育出版社.2002 [7] 张海潘.软件工程[J].清华大学出版社.2003 年 11 月 [8] 张波. 网络答疑系统的设计与实现[D]. 长春:吉林大学软件学院 2005. [9] 陆荣幸 郁洲. J2EE 平台上 MVC 设计模式的研究与实现[J]. 计算机应用研究 4-146. [10] 孙卫琴 李洪称. Tomcat 与 Java Web 开发技术详解[M]. 北京:电子工业出版社 2003. [11] 何成万 余秋惠. MVC 模型 2 及软件框架 Struts 的研究[J]. 计算机工程 4-276. [12] Marty Hall Larry Brown 著 赵学良译. Servlet 与 JSP 核心编程(第 2 版)[M]. 北京:清华大学出版社 2004. [13] 戴继周. 基于 Web 的网络教学平台的设计与实现[D]. 长春:吉林大学计算机应用技术 专业 2004 [14] 尹朝庆. 计算机系统结构教程[M]. 北京:清华大学出版社.2005. [15] 张海藩. 软件工程导论(第四版)[M]. 北京:清华大学出版社 2003. [16] 张维明. 信息系统原理与工程. 电子工业出版社. 2002 年 1 月致谢 很认真的做完了毕业设计 因为它是我大学的最后一次作业了 完成了它我大学生活接近尾声了 回想我的四年大学生活真的很多的收获和感触 在这里的四年时间我从一个懵懂少年成长为一个懂事懂礼懂得做人的人 在这里我不但学到了文化知识 实践动手能力 更形成了我的许多价值观 学会了许多做人做事的道理 除了自己的成长和收获不说 我真的很像感谢很多人 首先 我要感谢我的父母 是您们的支持与鼓励是我顺利的读完了我的大学;使您们的教导和点播是我在迷茫的时候不 迷失自己;是您们的言传身教使我懂得了如何与人为善 真爱身边的朋友们;是您们的实时适度的纠正 是我顺利成长不断进步;使您们宽和仁和的处事为人 塑造了我豁达开朗的性格 是您们一直以来对我的关怀和爱使我健康的成长 不断地进步 谢谢您们 我亲爱的爸爸妈妈 还有 我要感谢我的毕业设计指导老师熊有伦老师 是您严谨的治学 适时的督促 不断地知道使我顺利完成了我的毕业设计 在整个毕业设计期间您不断地给与我帮助和指导使我不止完成了我的设计任务还学的了很多 相关的专业知识 老师不但经验丰富知识领域宽广而且和善可亲 在完成毕设的过程您不但教授了我很多专业知识 还为我的未来发展学业工作提出了很多宝贵的意见 我们不但是亲切的师生 也是彼此的朋友 在我整个毕业设计的指导过程中您给我的印象就是认真负责 在这里我想对我可敬可亲的黄老师说一声:&谢谢!& 非常感谢我的同学们我的老师们当我在毕业设计过程中遇到问题和困难时 是你们给我提出许多关键性的意见和建议 使我对整个毕业设计的思路有了总体的把握 并耐心的帮我解决了许多实际问题 使我获益良多 是你们教授了我丰富的知识 教会了我学习知识的能力 谢谢我的母校对我的教育 我将以更加饱满的热情投入到研究生阶段的学习中去 充实自己 完善自己 向着自己的目标不断地前进 用我的所学去实现我心中的梦想! ! !刘纪纪 2011 年 11 月 13 日 09 计应班 学号:6 ?? ?? ?? ?? I Java 图书管理系统毕业设计(论文) 14
优秀毕业设计论文 源码基于Java的图书馆管理系统毕业设―汇集和整理大量word文档,专业文献,应用文书,考试资料,教学教材,办公文档,教程攻略,文档搜索下载下载,拥有海量中文文档库,关注高价值的实用信息,我们一直在努力,争取提供更多下载资源。

我要回帖

更多关于 求会计毕业论文 的文章

 

随机推荐