图书馆信息管理系统课程设计报告

likai1010

贡献于2013-09-17

字数:17201 关键词: 报告

 数据库课程设计报告 -----图书馆信息管理系统 学院:软件学院 专业:软件工程 班级:**级软件*班姓名:** 学号:*********** 任课教师:彭朝晖 实验教师:王诚梅 助教:** 目录 前言--------------------------------------------------------------3 一.系统开发平台 1.1开发平台简介--------------------------------------------------4 1.2一些细节问题 -------------------------------------------------4 二.数据库规划 2.1任务陈述------------------------------------------------------4 2.2任务目标------------------------------------------------------5 三.系统定义----------------------------------------------5 四.需求分析 4.1用户需求说明--------------------------------------------------6 4.2系统需求说明--------------------------------------------------9 五.数据库逻辑设计 5.1ER图---------------------------------------------------------10 5.2数据字典-----------------------------------------------------12 5.3用户视图中的表-----------------------------------------------14 六.数据库物理设计 6.1基本表的实现-------------------------------------------------15 6.2具有派生数据的表的示例---------------------------------------19 6.3索引---------------------------------------------------------19 6.4安全机制-----------------------------------------------------19 七.应用程序设计 7.1功能模块-----------------------------------------------------19 7.2界面设计-----------------------------------------------------31 7.3事务设计-----------------------------------------------------31 八.测试和运行-------------------------------------------31 九.部分代码分析 9.1首页跳转代码-------------------------------------------------31 9.2用户登陆信息显示---------------------------------------------31 9.3数据库操作通用类---------------------------------------------32 十.总结-------------------------------------------------33 附参考文献-----------------------------------------------35 前言 随着科学技术的高速发展,我们已步入数字化、网络化、信息化的时代。图书馆是学校的文献信息中心,是为全校教学和科学研究服务的学术性机构,是学校信息化的重要基地。图书馆的工作是学校教学和科学研究工作的重要组成部分,是全校师生学习和研究的重要场所。为了更好地适应这种网络数字化信息的环境,提高利用图书馆检索信息的效率,一种成功的跟踪最新技术、充分利用软硬件资源、扎根于准、新、全数字资源的"图书馆信息管理系统"已孕育而生。 图书馆在正常运营中面对大量书籍、读者信息以及两者间相互联系产生的借书信息、还书信息、图书预约信息等。人工记录方法既效率低又错误过多,大大影响了图书馆的正常管理工作。因此需要对书籍信息、读者信息、借书信息、还书信息、图书预约信息等进行统一管理,及时了解各个环节中信息的变更,有利于管理效率的提高,同时为了提高工作效率、服务质量和管理水平,并使图书馆管理人员从繁琐的工作中解脱出来,故开发该图书馆信息管理系统。 目前我校已经有一套功能比较完备的图书馆信息管理系统,但是在使用过程中,由于管理员以及读者不断提出新的功能需求,使现有系统的局限性逐渐体现出来,所以本系统在实现现有系统功能的基础之上,又实现了几种为用户提供便利的功能,使得本软件能够更好的满足用户的需求、更具人性化、使用起来更加方便。 正文 一系统开发平台 1.1开发平台简介 本图书馆信息管理系统采用B-S架构,使用Java EE的技术路线,遵守MVC Model2模型。 Model模型层使用数据库作为持久性储存结构,选用的后台数据库是MySQL5.0。这是业界领先的开源数据库,在开源产品中具有仅次于Apache服务器的市场占有率。本数据库开放源代码,具有免费使用,比较稳定的特点,适合于小型系统的持久性存储。Model使用Java Beans作为OO层面上的抽象。 View视图层使用JSP技术。这是Java EE平台推荐的表现层技术。图书馆信息管理系统中使用JSP2.0规范,严格控制页面代码中的业务逻辑部分,做到不在HTML代码中混杂Java业务代码,实现了很好的业务和表现的分离。在这里采用的JSTL标准标签库来达到这一目标。 Controller控制层采用Servlet技术。页面获取的数据通过Servlet的转发传递给后面的Java Beans进行数据的封装和与数据库的交互,反馈信息由Java Beans传递给Servlet,再由Servlet进行转发,从而实现业务逻辑和表现的完全分离。 本图书馆信息管理系统使用struts1.2作为MVC开发框架,整个系统有struts框架作为MVC的后台运行支持。struts1.2框架是业界最早的也是最稳定和成熟的MVC开发框架,经过时间的洗礼已经被证明是一款很优秀的MVC框架,尽管还存在一些不足之处,但struts已经是可以选择的最好的框架技术。 本图书馆信息管理系统的软件开发平台是MyEclipse6.0GA + Dreamweaver CS3。 它的软件运行平台是Apache Tomcat 6.0 + JSTL + struts1.2。 1.2一些细节问题 图书馆信息管理系统中存在大量的表单提交。这里我们采用JavaScript进行客户端的简单验证。对于一些相对简单的验证,比如表单提交项是否为空,两次密码的输入是否一致等,将这样的验证过程由服务器端转移到客户端可以减轻服务器的负担,从而为更多客户提供更好的服务。 对于页面菜单的设计,考虑到浏览器兼容的问题,采取最大兼容的代码。经过实际测试,该代码可以正常显示在当前主流浏览器内核之上。测试浏览器包括IE6,IE7,Firefox,Opare9。 二数据库规划 2.1.任务陈述 图书馆信息管理系统数据库用以收集、存储书籍信息、人员(读者、图书管理员)信息、图书借阅信息以及意外处理信息,及时记录存储各个环节信息的变更,以便管理、查询、显示、输出,节约大量人力物力把人们从繁杂的手工记录方式 中解脱出来的同时,有力保障图书馆日常事务的高效运作。 2.2.任务目标 目标类别 子目标 人员信息管理 读者信息管理,包括读者类别、性别、借书数量、借书期限、备注等的输入、修改、删除、显示以及报表呈现。 图书馆管理员信息管理,包括管理员权限、性别、备注等的输入、修改、删除、显示以及报表呈现。 书籍信息管理 书籍基本信息管理,包括书籍编号、类别、关键词、备注等的输入、修改、删除、显示以及报表呈现。 借阅信息管理 借书信息管理,包括书籍编号、读者编号、借书日期、借书期限、备注等的输入、修改、删除、显示以及报表呈现。 还书信息管理,包括书籍编号、读者编号、还书日期、还书期限、备注等的输入、修改、删除、显示以及报表呈现。 意外处理信息管理 续借、超期赔偿、丢失赔偿、损坏赔偿等信息的输入、修改、删除、显示以及报表呈现。 三.系统定义 本图书馆信息管理系统主要面向各大图书馆的图书管理以及相关人员,读者和图书管理员。旨在实现图书管理的信息化,把人们从繁杂的手工记录方式中解脱出来,实现高效准确的管理。根据我对图书馆工作和管理模式的了解,再结合上网查找到的资料和从学校图书馆工作人员那里了解到的情况,做出如下设计:本系统将用户分为读者、图书馆管理员两种身份,共同参与图书的流通管理过程。 图书馆管理员权限:具有该系统的最高权限,对系统进行管理,可对数据库进行系统所提供的所有操作,并负责图书流通过程中的借书、还书操作。权限具体陈述如下: 1、图书管理:包括图书的录入、查询、修改和删除。 2、管理员信息管理:添加、查询、修改、删除所有管理员的信息。 3、读者管理:包括读者信息的添加、查询、修改、删除等。 4、系统数据处理:数据查询,包括查看当前在馆书籍信息、当前所有违章罚款信息、所有被预约图书信息等。 5、管理员的个人功能:包括查看个人信息、修改密码、重新登陆、退出系统等。 6、图书流通中的借书操作:借书时需要输入用户号和图书ISBN。如果该图书可借,则正常借书,提示“借阅成功”;如果该书不可借,则弹出窗口提示。 7、图书流通中的还书操作:还书时需要输入用户号和图书ISBN。若正常还书,点击确定即可;若读者违章,可填写违章记录,并处以罚款。 8、察看读者的请求信息,加以处理。 读者权限:使用系统的相应查询功能。具体权限如下: 1、图书检索功能(包括简单检索和高级检索)。 2、查看个人信息、修改密码等个人信息。 3、查看个人借阅历史。 4、续借已借图书:在查看个人借阅历史模块里实现,当前已借未还未续借的每本书后面都有一个续借按钮,选中后点击可以实现该书的续借。 5、图书预约:可查看自己的预约信息及处理情况,也可通过填写预约表单预约图书。 6、查看违章欠款记录。 四.需求分析 4.1用户需求说明 4.1.1数据需求 图书馆分为若干个分馆,分馆名称唯一。每个分馆都藏有图书,系统可以浏览、操作、管理各个分馆的图书信息。对应书籍实体的图书信息包括图书的编号,ISBN ,名称,第一、第二、第三作者,书名的汉语拼音缩写,内容简介,入库时间,书籍单价,图书馆购进图书总数,书籍当前在库数目,书籍所在馆号,书籍外借数目等。除了一些从服务器自动获取的信息外,大部分图书信息都由管理员来维护。 此外管理员还可维护图书馆管理员信息、读者信息、分馆信息、权限信息、不良记录信息。图书馆管理员信息和读者信息由用户编号、用户密码、用户密码提示问题、用户名字、用户权限、用户年龄、用户性别、用户不良记录、用户请求记录组成。其中读者可以自行维护除编号、权限、不良记录以外的其它信息。 读者在借书之前必须先注册,注册后便可进行借书、还书、留言等一系列操作。借书信息包括借书记录号、用户号书籍编号、借阅日期、是否续借、是否归还等信息。 对于读者的不良记录,系统将予以存储。存储的信息有不良记录编号、借阅编号、不良记录描述。 对应于用户请求记录实体的请求信息包括请求信息编号、用户编号、请求描述、请求发出时间、该请求是否实现等内容。 4.1.2事务需求 n 数据录入 a 新用户注册时录入自己的详细情况; b 录入新进图书的各项信息; c录入分馆的基本信息; d用户登录后录入自己的请求信息; e管理员录入用户的不良记录 n 数据更新/删除 f 更新/删除用户的个人信息; g 更新/删除某些图书的基本信息; h更新/删除某些图书的借阅信息; i更新/删除某些分馆的基本信息; j更新/删除某些用户的请求信息; n 数据查询 k查询用户的个人信息; l查询图书的基本信息; m查询图书的借阅信息; n查询分馆的基本信息; o查询用户的请求信息; p查询用户的不良记录信息; 4.1.3系统用例 用例: 用例总图: 4.1.4 组件图 4.1.5部署图 4.2系统需求说明 4.2.1网络和共享需求: n 所有分馆必须安全的和总部数据库网络互连; n 必须能够支持每个分馆至少3名用户同时访问; 4.2.2性能: n 单个记录查询时间少于3秒 n 多个记录查询时间少于6秒 n 更新/保存记录时间少于2秒 4.2.3安全性: n 必须有口令保护 n 每个用户分配特定的用户视图所应有的访问权限 4.2.4法律问题: n 对管理员和读者信息管理,遵守法律 4.2.5 运行需求 4.2.5.1用户界面 n 使用浏览器界面结构,采用导航栏界面方式,尽力带给操作用户便利,对用户友好;对鼠标和键盘单独支持。 4.2.5.2硬件接口 n 本软件需要能够互联网的支撑,用户的硬件平台应该能够与互联网连接。 4.2.5.3软件接口 n 运行于Windows98及更高版本的Windows操作系统之上,或者其他系统。 4.2.5.4故障处理 n 正常使用时不应出错,若运行时遇到不可恢复的系统错误,也必须保证数据库完好无损。 4.2.6其它需求 n 系统的功能实现情况: 用户可在本系统下实现各种用户要求的功能 n 系统的安全性: 对于系统的重要数据都有密码保护,具有一定的安全性 n 系统的容错性: 用户输错数据都有提示信息,具有较好的容错性能。 n 系统的封闭性: 用户的封闭性较好,用户基本上在提示信息下输数据。 五.数据库逻辑设计 5.1E-R图 图书信息管理系统的数据库可以设计定义用户(由权限可分为管理员和普通读者)、书籍、图书馆、借书信息、请求信息和不良记录信息等实体及其之间的联系。实体使用E-R图进行描述。为清楚起见,这里将实体图和联系图分开表现。 5.1.1实体图: 5.1.1.1书籍信息的E-R图: 书籍 编号 ISBN 书名 作者 拼音缩写 内容简介 入库时间 单价 购进总数 在库总数 所在库号 外借数目 5.1.1.2用户信息的E-R图: 用户 编号 密码 密码提示问题 密码提示问题答案 名字 权限 年龄 性别 不良记录 特殊请求 5.1.1.3图书馆信息的E-R图: 图书馆 编号 名字 请求信息 编号 用户编号 请求内容 请求时间 请求是否完成 5.1.1.4 请求信息的E-R图: 5.1.1.5不良记录的E-R图: 不良记录 编号 借书编号 描述 5.1.2.联系图: 书籍 编号 读者编号 书籍编号 借阅时间 是否续借 是否归还 读者 借阅 管理员 用户 管理 管理员 书籍 管理 管理员 请求信息 管理 管理员 不良记录 管理 5.2数据字典 根据上面描述的E-R图进行数据库的逻辑结构设计。在这里以表格的形式给出数据库的设计。下面表中的字段除特殊标明的外,均不能为空。 (5.2.1)书籍实体。 字段 类型 备注 book_id int(11) 主键,书籍编号,自增类型 book_isbn varchar(30) 书籍ISBN book_title varchar(100) 书籍名称 book_author0 varchar(20) 第一作者 book_author1 varchar(20) 第二作者,可以为空 book_author2 varchar(20) 第三作者,可以为空 book_chinese_short varchar(50) 书名的汉语拼音缩写,用于支持拼音查找 book_introduction Text 书籍内容简介 book_year Date 入库时间,该时间从服务器获取 book_price Decimal(11,0) 书籍单价 book_amount int(3) 购进书籍总数 book_amount_in int(3) 书籍当前在库数目 book_which_lib int(2) 书籍所在馆号 book_how_many_borrowed int(3) 书籍外借数目,该字段由book_amount和book_amount_in字段计算得出,用于快速查找 (5.2.2)用户实体。在这里的用户具有管理员和普通读者的权限。 字段 类型 备注 user_id int(11) 主键,用户编号,由用户自主选择,只能由数字构成 user_password varchar(20) 用户密码 user_password_question varchar(50) 用户密码提示问题,用于用户忘记密码时找回密码之用 user_password_question_answer varchar(50) 用户密码提示问题答案,用于用户忘记密码时找回密码之用 user_name varchar(20) 用户名字 user_purview varchar(2) 外码,指向user_pruview,用户权限 user_age tityint(3) 用户年龄 user_sex enum('0','1') 用户性别,枚举类型,0代表“男”,1代表“女” user_durty_record int(11) 外码,指向durty_info,不良记录,可以为空 user_quest_record int(11) 外码,指向request_info,请求记录,可以为空 (5.2.3)图书馆实体。 字段 类型 备注 lib_id int(2) 主键,图书馆编号 lib_name varchar(50) 图书馆名字 (5.2.4)请求记录实体。 字段 类型 备注 request_id int(11) 主键,自增类型 request_user_id int(11) 用户编号 request_describetion varchar(100) 请求描述,由用户输入 request_date date 请求发出时间 request_finished tinyint(1) 该请求是否实现,0代表为实现,1代表已经实现 (5.2.5)不良记录信息实体。 字段 类型 备注 durty_id int(3) 主键,自增类型 durty_borrow_id int(11) 借阅编号 durty_describetion varchar(100) 不良记录描述 (5.2.6)借阅联系。 字段 类型 备注 borrow_id int(11) 主键,自增类型 borrow_user_id int(11) 外码,指向user_info,用户编号 borrow_ book_id int(11) 外码,指向book_info,书籍编号 borrow_date date 借阅日期,从服务器获得 borrow_reborrow tinyint(1) 是否续借,0代表没有续借,1代表已经续借,最大续借次数为1次,默认为0 borrow_is_return tinyint(1) 是否归还,0代表未归还,1代表已经归还,默认为0 5.3用户视图中的表 (1)Book_info(book_id,book_isbn,book_title,book_author0,book_author1,book_author2,book_chinese_short,book_introduction,book_year,book_price,book_amount,book_amount_in,lib_id,book_how_many_borrowed) 主键:book_id 外码lib_id参照Lib_info (lib_id) (2)User_info(user_id,user_password,user_password_question,user_password_question_answer,user_name,purview_id,user_age,user_sex,durty_id,request_id) 主键:user_id 外码purview_id参照User_purview(purview_id) (3)Lib_info(lib_id,lib_name) 主键:lib_id (4)Request_info(request_id,user_id,request_describetion,request_date,request_finished) 主键:request_id 外码user_id参照User_info (user_id) (5)Durty_info(durty_id,borrow_id,durty_describetion) 主键:durty_id 外码borrow_id参照Borrow_info (borrow_id) (6)Borrow_info(borrow_id,user_id,book_id,borrow_date,borrow_reborrow,borrow_is_return) 主键:borrow_id 外码user_id参照User_info (user_id) 外码book_id参照Book_info (book_id) (7)user_purview(purview_id,purview_name) 主键:purview_id 六数据库物理设计 6.1基本表的实现 创建表及数据库的SQL语句如下: # SQL Manager 2007 for MySQL 4.1.1.2 # --------------------------------------- # Host : localhost # Port : 3306 # Database : library SET FOREIGN_KEY_CHECKS=0; CREATE DATABASE `library` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; USE `library`; # # Structure for the `lib_info` table : # CREATE TABLE `lib_info` ( `lib_id` int(2) NOT NULL, `lib_name` varchar(50) NOT NULL, PRIMARY KEY (`lib_id`), UNIQUE KEY `lib_id` (`lib_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; # # Structure for the `book_info` table : # CREATE TABLE `book_info` ( `book_id` int(11) NOT NULL auto_increment, `book_isbn` varchar(30) NOT NULL, `book_title` varchar(100) NOT NULL, `book_author0` varchar(20) NOT NULL, `book_author1` varchar(20) default NULL, `book_author2` varchar(20) default NULL, `book_chinese_short` varchar(50) NOT NULL, `book_introduction` text NOT NULL, `book_year` date NOT NULL, `book_price` decimal(11,0) NOT NULL, `book_amount` int(3) NOT NULL, `book_amount_in` int(3) NOT NULL, `book_which_lib` int(2) NOT NULL, `book_how_many_borrowed` int(5) NOT NULL, PRIMARY KEY (`book_isbn`), UNIQUE KEY `book_id` (`book_id`), UNIQUE KEY `book_isbn` (`book_isbn`), UNIQUE KEY `book_isbn_2` (`book_isbn`), KEY `book_which_lib` (`book_which_lib`), CONSTRAINT `book_info_lib_fk` FOREIGN KEY (`book_which_lib`) REFERENCES `lib_info` (`lib_id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; # # Structure for the `borrow_info` table : # CREATE TABLE `borrow_info` ( `borrow_id` int(11) NOT NULL auto_increment, `borrow_user_id` int(11) NOT NULL, `borrow_book_isbn` varchar(30) NOT NULL, `borrow_date` date NOT NULL, `borrow_reborrow` tinyint(1) default '0', `borrow_is_return` tinyint(1) default '0', PRIMARY KEY (`borrow_id`), UNIQUE KEY `borrow_id` (`borrow_id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; # # Structure for the `durty_info` table : # CREATE TABLE `durty_info` ( `durty_id` int(3) NOT NULL auto_increment, `durty_borrow_id` int(11) NOT NULL, `durty_describetion` varchar(100) NOT NULL, PRIMARY KEY (`durty_id`), UNIQUE KEY `durty_id` (`durty_id`), KEY `durty_borrow_id` (`durty_borrow_id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; # # Structure for the `request_info` table : # CREATE TABLE `request_info` ( `request_id` int(11) NOT NULL auto_increment, `request_user_id` int(11) NOT NULL, `request_describetion` varchar(100) NOT NULL, `request_date` date NOT NULL, `request_finished` tinyint(1) NOT NULL default '0', PRIMARY KEY (`request_id`), UNIQUE KEY `request_id` (`request_id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; # # Structure for the `user_purview` table : # CREATE TABLE `user_purview` ( `purview_id` varchar(2) NOT NULL, `purview_name` varchar(20) NOT NULL, PRIMARY KEY (`purview_id`), UNIQUE KEY `pruview_id` (`purview_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; # # Structure for the `user_info` table : # CREATE TABLE `user_info` ( `user_id` int(11) NOT NULL, `user_password` varchar(20) NOT NULL, `user_password_question` varchar(50) NOT NULL, `user_password_question_answer` varchar(50) NOT NULL, `user_name` varchar(20) NOT NULL, `user_purview` varchar(2) NOT NULL, `user_age` tinyint(3) NOT NULL, `user_sex` enum('0','1') NOT NULL default '0', `user_durty_record` int(11) default NULL, `user_quest_record` int(11) default NULL, PRIMARY KEY (`user_id`), UNIQUE KEY `user_id` (`user_id`), KEY `user_purview` (`user_purview`), KEY `user_durty_record` (`user_durty_record`), KEY `user_quest_record` (`user_quest_record`), CONSTRAINT `user_info_durty_fk` FOREIGN KEY (`user_durty_record`) REFERENCES `durty_info` (`durty_id`), CONSTRAINT `user_info_purview_fk` FOREIGN KEY (`user_purview`) REFERENCES `user_purview` (`purview_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6.2具有派生数据的表的示例 由于每次计算派生数据都要花费一定的时间和代价,为了提高性能,在数据库的某些表中,我设计了派生列,像上表book_info中的派生列book_how_many_borrowed。 6.3索引 因为添加索引会改善系统性能,所以,根据不同的情况,我引入了不同类型的索引。举例说明如下。 在列出馆中所有书时,选择排序的列为book_which_lib,非主键,此索引为聚簇索引。 在列出馆中所有管理员时,选择排序的列为user_id,主键,此索引为主索引。 但在一些表中,如lib_info表,没有建索引,因为通过课程学习我们了解到,不必为小表建立索引。 列出馆中所有图书,此操作进行较为频繁,因而为其建立二级索引。先按所在馆进行分类,再按字典序依book_isbn进行排序。 在表book_info中,因book_title 、book_author、 book_chinese_short为搜索条件,建立索引。 6.4安全机制 在本图书馆信息管理系统中,我建立了两种类型的安全机制,系统安全和数据安全。 在系统安全的建设方面,不允许以游客身份访问本系统,所有用户都必须注册并登陆,登录时会验证用户名和密码。只有两者匹配时,才可访问本系统。 在数据安全方面, 数据库对象的访问和使用有严格的控制,其中的某些表只有具有特定权限才可以访问。 七应用程序设计 7.1功能模块 7.1.1登陆模块 说明:该登陆界面可实现管理员、读者两种身份的登录功能,如果输入的帐号和密码及用户类型均正确,则正常登陆系统,否则显示提示信息。 本系统不支持游客身份,要想登陆系统需先进行注册。若未注册,可点击“没有注册?”的超链接,注册页面如下。注册过程中可能出现的提示信息如下。 若已注册的用户忘记密码,可点击“忘记密码?”的超链接,寻回密码的界面如下。 在输入用户名之后,系统会从数据库中读出相应的密码提示问题和答案以及该用户的其他所有信息,存入系统的session值。 若用户输入正确的答案,则显示密码匹配的对话框,进入到系统中。此时可以在系统中修改该用户的密码。否则密码不匹配,将继续返回到登录页面。 7.1.2读者模块 若用户注册成功,则自动调转到读者页面,无需重新登陆。若已注册的读者用户名、密码相匹配,也会跳转到如下页面。系统会从服务器自动获取用户名登陆时间,显示在上端,并显示欢迎信息。 在书刊查询模块中,支持书名、作者、拼音、内容四项查询,支持完全匹配、模糊查询两种方式。并作了相应的错误提示。 用户可查看自己的借阅历史,并可根据需要续借图书,续借成功后会弹出JavaScript的提示符。 用户可查看自己的违章欠款纪录。 用户可查看自己的图书预约,图书预约处理情况,以及填写新的预约。 用户还可以查看修改自己的信息。在这里如果要修改个人信息需要填写表单,表单内容会从数据库中读出并默认显示在上面,以方便用户更改信息。 7.1.3管理员模块 管理员成功登陆后界面如下。 管理员可察看馆中书籍列表。书籍先按所在分馆进行分类,再依book-isbn按字典序排列。管理员可添加新书。 管理员可察看读者列表,管理员列表,添加管理员。 管理员进行书籍借阅和归还的界面如下。书籍归还时需要填写读者ID和书籍的ISBN。在这里由于可以从外界硬件中直接读取这两个值,因此这个步骤并不复杂。在归还书籍时如果需要填写不良记录,可以将复选框标记从而显示出书写框填写不良记录信息。这里使用JavaScript和CSS进行控制,在IE7和Firefox中需要点击鼠标显示,在Opera中可以立即显示。 管理员可察看所有读者的预约列表,了解情况后进行相应处理。 管理员可以查看所有读者的违章情况。 管理员可以查看个人的信息,修改个人的信息。 7.2界面设计 见功能模块中的截图。 7.3事务设计 本图书馆信息管理系统中涉及到的事务,均以现实世界图书馆的日常事务为原型。其中可圈可点的几处介绍如下。 找回密码的流程在此不再重复,见7.1.1登陆模块。 书刊归还时,管理员可根据现实情况决定是否填写不良记录,若填写,该不良记录会出现在管理员界面的违章列表中,和读者界面的违章欠款中。 若读者在查询时发现馆中目前尚未有自己想借的图书,可填写预约,该预约信息会显示在管理员界面的预约列表中,管理员了解读者预约后,可进行相应处理,若已购到该书,可将预约进行标记,标记后,读者可在“查看预约”模块中看到该处理信息,这时就可去图书馆借阅该书。 除此之外,读者还可续借未还的图书。 八测试和运行 此图书馆信息管理系统在Tomcat6.0服务器进行了功能性测试。测试结果是所有功能已经实现。 此图书馆信息管理系统在IE6、IE7、Firefox2、Opera9等四款浏览器上进行了兼容性测试。测试结果是系统界面能够基本完全一致的呈现。稍有不同之处是归还书籍页面中的不良记录的自动呈现,在Netscape内核和Opera内核处有不同的表现。 除此之外,还对此图书馆信息管理系统进行了低强度的压力测试。测试结果较为理想。 九部分代码分析 9.1首页跳转代码 这里使用JSP2.0的标准表现输出标签JSTL进行跳转。这样可以最大化的将业务层和表现层的代码分离。这是JSP2.0标准的推荐使用方法。 9.2用户登录信息的显示
  用户名:   登录时间:
在登录时从服务器端获得登录时间,存放在session中。使用JSTL标签,取出该登录时间,使用JSP内置的时间本地化操作对该时间进行本地化。 9.3数据库操作通用类 package org.galaxy.database; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import net.snapbug.util.dbtool.ConnectionManager; import net.snapbug.util.dbtool.ConnectionPool; import net.snapbug.util.dbtool.PoolFulledException; public class DBWorker { private ConnectionPool pool = null; private Statement st = null; private ResultSet result = null; private static final DBWorker INSTANCE = new DBWorker(); public static DBWorker getInstance(){ return INSTANCE; } public ResultSet getResultSet(String sql) throws PoolFulledException, SQLException{ if(pool == null){ throw new NullPointerException("Database connection pool is null."); } st = pool.createStatement(); result = st.executeQuery(sql); return result; } public int updateDatabase(String sql) throws SQLException{ if(pool == null){ throw new NullPointerException("Database connection pool is null."); } st = pool.createStatement(); return st.executeUpdate(sql); } private DBWorker(){ initialize(); } private void initialize() { try { // 获得当前class文件的路径 String filePath = this.getClass().getResource("/org/galaxy/database/DBWorker.class").getPath(); // 获得DatabasePool文件的路径 filePath = filePath.substring(1, filePath.indexOf("classes") - 1) + "/DatabasePool.conf"; filePath = filePath.replace("%20", " "); ConnectionManager.init(filePath); pool = ConnectionManager.getConnectionPool("MySql"); } catch (Exception e) { e.printStackTrace(); } } } 该类封装了关于数据库的通用操作。本系统使用snappool数据库连接池,需要在该类中对连接池进行初始化,具体来说就是在一个老、配置文件中获得有关该连接池的设置信息。该类使用单例设计模式,用一个私有的构造方法对类进行初始化操作,同时提供一个公共的实例以便外界类使用。这可以保证在一个JVM上仅有一个该类实例存在。由于数据库操作类是极耗资源的,并且其中还涉及到文件读取操作,因而这样做是有意义的。 该类封装了对数据库的通用操作。其余的具体操作在相应的类中实现,但都是调用该类的代码。因此该类同其他的数据库操作类构成组合的关系。 十总结及致谢 本程序基本实现了图书馆管理中所应用的大体功能,能非常流畅地实现整个图书的入库、借书、还书、图书续借、预约等功能,系统最后进行了大量的测试,可以说程序健壮性非常好,对各种错误和异常都有非常好的报错功能。并创新性地引入了读者密码寻回,使系统更加人性化、用户使用起来更加方便。系统采用B/S方式,这样读者直接通过浏览器就可以访问系统,而不必特意安装客户端软件,一则方便了用户的使用,二则省去了客户端软件更新、维护的不便。但是 客观地说,系统也存在着一些不足。例如:书籍信息的维护这一方面较为欠缺,还有待改进和提高。总起来说,这次课程设计还是很成功的,自己在这个过程中学到了很多知识,更重要的是获取了更多的经验,了解了数据库设计和软件开发的一般流程,为以后实际工作奠定了良好的基础! 整个系统的开发历时2个星期的时间,回顾两个星期走过的路程,还是颇有感触的。从前期选题时的犹豫不决,到选择开发平台时的踌躇、思前想后,再到实际开发时为每个细小的问题付出的点滴汗水,再到后期测试时的忐忑不安,直到最后提交系统时的内心愉悦与成就感——这点点滴滴都给我留下了不可磨灭的印象,也为我以后的发展奠定了坚实的基础。 自己能有这两个星期的收获,最后能交上一个比较完美、健壮性比较良好的系统,得感谢很多人的帮助:首先,感谢学院数据库系统课程提供的本次课程设计,让我有机会接触软件开发的过程,并且让我熟悉了数据库设计和软件开发过程中应该注意的很多问题,为以后进行开发积累了宝贵的经验;其次,感谢授课教师彭朝晖的耐心教导。2周的授课中,彭老师非常详尽地为我们介绍了数据库应用程序的开发过程、软件测试、SQL的优化等知识,还结合自身开发经验给了我们很多有益的建议,同时介绍了公司希望聘用什么样的人等工作经验,所有这一切真的是让我受益匪浅,接触到了很多课本上学不到的知识,很大了开阔了自己的视野。再次,感谢带实验的王诚梅老师和程旭学姐,是你们在我实际编程过程中遇到困难时给予了最热情的帮助,真诚地感谢你们在带实验过程中付出的巨大努力和给予我们的热情、耐心的帮助!最后,也感谢身边的很多同学,当遇到困难时,是大家一起积极的讨论、互相帮助,才使困难解决,在此过程中我真切地感受到了集体和团队的力量。在课程结束之际,真心地对帮助过我的老师、同学说声谢谢,谢谢大家了!! 附录(参考资料) 在整个开发过程中,参考了很多图书馆和因特网上的资料,在此一并列出。 1、《信息系统开发方法》 徐宝祥主编 机械工业出版社 2007 2、《Java 2实用教程》 杜江编著 电子工业出版社 2006 3、《图书馆信息技术应用指南》 刘晓清主编 海洋出版社 2007 4、《图书馆信息学》 主编储荷婷、张茵 中国人民大学出版社 2007 5、《图书馆工作基础知识》 程长源著 浙江人民出版社 1983 6、《网页时尚设计师》 王国平等著 电子工业出版社 2008 7、 CSDN论坛 8、阶梯人论坛

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档