内容提要 本图书馆系统基于MVC设计模式,采用四层结构,主要包括:表现层、控制层、业务层、持久层。系统设计使用SSH(Struts2、Hibernate和Spring)三种框架,共分为图书检索、学生信息、通知公告、图书借阅、数据管理五个功能模块。在现今图书馆管理系统已有功能的基础上,本设计添加了记录图书借阅次数功能,为学生检索图书和图书馆采购新书提供参考。
论文详细介绍图书馆管理网站的系统功能、业务逻辑和框架、进行数据分析和设计过程,并完成网站的开发与实现。
关键词 图书管理,Java,MVC模式,SSH框架
一、概述
当今是一个信息化时代,随着计算机网络技术的发展、数字信息技术的广泛应用,图书馆正在向数字化、电子化和虚拟化的方向发展。大多数院校已经采用电子化的图书管理方式,通过软件和网站进行高效的图书管理活动。使用网站提供服务和管理图书有很多优点,比如:检索方便、安全可靠、信息存储量大、成本低等。这些优点可以提高图书馆的管理效率,方便学生借阅图书和查看个人信息,也利于图书馆和其他部门之间信息的传递和沟通,对于学校的科学化、正规化管理有着重要作用。
一个图书馆的正常运转需要处理大量的信息,有所有的学生信息、图书信息,在借阅过程中需要记录的借阅信息、预约信息,以及网站提供的其他服务的相关信息。如此多的数据处理仅靠人工显然效率太低,而且极容易出错,因此智能化、系统化、信息化的图书管理系统十分重要。为了满足图书馆需要的各项服务,网站必须有方便友好的视图界面、简单易学的操作过程、清晰条例的数据条目和稳定安全的数据库管理。
目前的网络开发中越来越多的应用了框架和一些成熟的开发模式,这种方法简化了开发过程,提高了开发效率。在使用相应的框架和开发模式后,开发人员可以根据框架要求直接去创建相应的组件,把主要的精力放在具体项目业务逻辑的实现,而非花费时间设计系统结构,进行大量的重复操作。
安全性是设计网站最基本的原则,开发者要做好关键数据的加密、防止恶意的请求等工作,保证网站的正常运转。同时网站页面的表单部分必须恰当的使用验证,防止用户的错误操作导致系统抛出异常。评价网站好坏的另一个重要标准是能不能方便的满足用户的需求,即用户使用最简单的操作方式获取最准确的信息,享受最快捷的服务。因此在设计网站时一定要以满足用户的需求为第一原则,时刻考虑用户能够利用开发者所设计的操作步骤使用网站的功能,避免太过华丽、繁杂的页面使用户无法在短时间内找到获取自己想要的信息。
二、相关技术简介
2.1 面向对象编程思想
面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构,同时也是程序开发的方法。对象指类的集合,它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。面向对象程序设计可看做一种在程序中包含各种独立而又互相调用的对象的思想,每一个对象都能够接受数据、处理数据并将数据传达给其他对象。其中,数据抽象封装,继承,动态绑定是三个最基本的概念。 2.2 MVC模式简介
MVC模式分为3个部分。M是Model,表示数据模型,主要完成系统的逻辑处理,通常可使用可重用的JavaBean来完成业务逻辑。V是View,表示用户界面试图,主要完成与用户的交互,
0
可以使用Jsp、HTML文件。C是Controller,表示控制器,主要建立模型与视图之间的关联,可以使用Servlet来接受用户的请求并对用户进行响应。
MVC有如下特点:
(1)多个视图可以对应一个模型; (2)模型返回的数据和显示逻辑分离;
(3)应用被分隔为3层,降低了各层之间的耦合,提供了应用的可控制性; (4)MVC更符合软件工程化管理的思想。 2.3 SSH框架说明
SSH是Java的Web开发中常用的3个框架,分别代表Struts2、Spring、Hibernate。 Struts2是Java企业级Web应用的可扩展性的框架,是WebWork和Struts社区合并后的产物。它提供了对MVC的一个清晰的实现,包含了很多参与对所有请求进行处理的关键组件,如拦截器、OGNL表达式语言、堆栈等。
Spring是轻量级的控制反转和面向切面的容器框架,是为解决企业应用开发的复杂性而创建的。使用控制反转技术,一个对象依赖的其他对象会通过别动的方式传递进来而不是对象自己创建或查找依赖对象,促进了各部分的低耦合。面向切面技术允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发,从而提高程序的运行效率。
Hiberante是开源的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使开发人员使用面向对象编程思维来操纵数据库。延迟加载机制是该框架非常重要的一个设计。这种初始化策略旨在一个对象调用它的一对多或者多对多时才将关系对象读取出来,只进行很少的数据库操作请求,因此可以明显的提升数据处理性能。 2.4 AJAX简介
AJAX(Asynchronous JavaScript and XML),指一套综合了多项技术的浏览器端网页开发技术,可以创建更好更快以及交互性更强的Web应用程序的技术。AJAX通过使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信,在不重载页面的情况器与Web服务器交换数据。 2.5 DIV+CSS技术
div+css是一种网页的布局方法,它有别于传统的HTML网页设计语言中的表格定位方式,可以实现网页页面内容与表现相分离。使用div+css布局,页面代码精简,结构清晰,同时也方便搜索引擎的搜索。这种方法可以将css文件和html分开,有些页面会重复利用到一些css格式,而网页浏览时会记录一部分css格式,因此用户再次访问或在同一网站切换页面时可以提高代码的重用率,提高加载速度。
三、需求分析
3.1 系统功能
根据一般图书馆的需要,并结合本系统的具体功能,设计需求共分为以下几部分: (1)图书检索:学生或职工可以进行普通检索、分类检索、借阅次数检索。普通检索为选择检索条件并输入关键词后进行检索,分类检索为根据图书类型查看图书列表,借阅次数检索为根据图书被借阅的次数排序并显示图书列表。
(2)学生信息:实现学生登陆、读者留言、个人信息、购书推荐功能
学生登录为学生输入学号和密码登录,未登录时不能使用读者留言、查看个人信息和购书推
1
荐的功能;读者留言为学生登录后输入留言主题和内容进行留言;查看个人信息为学生登录后产看个人学院、专业、借阅条目等信息,并可以修改登录密码;购书推荐为学生登录后填写推荐的图书的信息。
(3)公告通知:学生或职工可以查看催还通知、预约通知、学生推荐、新书推荐、新闻通告等信息。催还通知为显示催还列表;预约通知为显示预约列表;学生推荐为显示学生推荐的图书列表;新书推荐为图书馆推荐新购的图书列表;新闻通告为显示图书馆的新闻和通告;
(4)图书借还:实现职工登录、借书、还书、续借、挂失功能
职工登陆为职工输入序号和密码登录,未登录不能使用借书、换书、预约、挂失等功能;借书、还书、续借、挂失为职工登录后输入学生学号和图书编号完成相应的操作。
(5)数据管理:实现系统管理员登录、图书管理、学生管理、网站信息功能
系统管理员登录为系统管理员输入员工编号和密码登录,未登录不能使用其他数据管理的功能;图书管理为对图书信息进行增、删、改、查;学生管理为员对学生信息进行增、删、改、查;网站信息更改为系统管理员更改新闻公告、新书推荐中的数据信息。
(6)信息检索帮助:该功能为网站的必要组成部分,可以帮助用户方便快捷的查找所需的信息,并向用户提供必要的帮助。
所需功能如图3-1所示。
图3-1 图书管理功能图
3.2 性能环境
操作系统:Windows XP或Windows 7 虚拟机:jdk-6-win-i586 浏览器:FireFox2.0或IE Web服务器:Apache Tomcat 6.0 数据库:MySql Server 6.0 工作平台:MyEclipse 6.5 3.3 可行性分析
开发所需软件和开发包均可通过网络下载获取,Windows操作系统是最常用的计算机操作系统,就目前的开发技术和开发环境所设计系统的功能应该能够达到,利用现有的技术在规定期限内基本能够完成。
四、数据库设计
4.1 E-R图设计
网站的数据存储使用MySQL,数据E-R下图所示所示。
2
图4-1 借阅、违规记录E-R图
图4-2 预约记录E-R图
图4-3 职工E-R图
3
图4-4 留言记录E-R图
4.2关系描述设计
根据以上实体图和E-R图,经过转换导出各个关系: 学生(学号,姓名,性别,学院,专业,结束权限)
图书(编号,名称,作者,出版社,类型,状态,借阅次数) 职工(编号,姓名,密码,等级)
借书记录(编号,学号,图书编号,时间,截至时间,状态,续借) 违规记录(编号,学号,图书编号,缴纳,罚金,原因,时间) 留言(编号,学号,密码,主题,内容)
五、实现过程
在完成需求分析和数据库设计之后,配置JDK环境,导入相应的开发包,并按照以下步骤开始进行设计的具体实现。 5.1 界面设计
根据需求分析所提到功能并结合实际情况,需要创建首页、检索页面、学生服务相关页面、新闻公告页面、图书借还页面、数据管理页面、网站导航页面,其中页面公用的部分可以单独创建,其他页面直接引用即可。
5.1.1公用部分
公用部分有页面上端的状态栏、主题图片和导航条,其中导航条设计成动态显示即鼠标移到显示所含列表,使得界面更友好,改善用户的体验感受。其中部分JavaScript代码如下:
$(function(){ });
5.1.2 首页和网站地图
首页是网站的门面,既需要网站整体的风格,同时也应提供必要的服务。在首页设计了快速
4
$('.item_first').hover(function(){
$($(this).next()).show(); $($(this).next()).hide(); },function(){
}).animate().stop(true);
登录、新书推荐、图书馆新闻公告、快速检索、导航按钮等功能。其中新书推荐和图书馆新闻公告使用JavaScript设计成动态画面,增加首页的信息量,部分JavaScript代码如下:
function scrolling(){ }
if(o.scrollTop%lh!=0){ o.scrollTop +=1;
if(o.scrollTop>=o.scrollHeight/2) o.scrollTop = 0; clearInterval(t); setTimeout(start,delay);
}else{
}
效果如图5-1所示。
图5-1 系统首页
首页除了标题、导航栏等共用部分之外,在左侧的快速登录部分可以学生或者管理员可以直接登录,登录后分别跳转到个人信息和图书借还页面;左侧新书推荐部分动态显示新书图片,方便读者了解新书信息;右侧上方时快速检索功能,作为使用频率较高的模块放在首页;右侧下方是图书馆新闻模块,动态显示新闻信息。
网站地图的功能是将网站所有主要路径显示给用户,方便用户进行浏览系统的结构,提高用户的操作效率。效果如图5-2所示。
图5-2 网站地图
5.1.3图书检索
图书检索页面分为三部分,分别为普通检索、分类检索和按借阅次数查看。通过导航条的链接或者左侧的选择面板切换页面。其中分类查找和按借阅次数查看通过AJAX发送异步请求,动态的显示图书记录。效果如图5-3所示。
5
图5-3 借阅次数查看页面
在查看排名页面,系统以列表形式显示图书馆图书的历史借阅次数,同时可以在表格上方的选择框中选择需要查阅的图书种类。
5.1.4学生服务
学生服务页面分为四部分,分别为学生登录、学生留言、个人信息、购书推荐,其中在需要用户填写信息时可以加入表单验证,避免用户在没有输入信息或信息格式不合法时提交请求,减轻服务器的压力。以登录界面为例,其中部分JavaScript代码如下:
$(\"#login_form\").submit(function(){
var ok = flag.name&&flag.pwd&&flag.checkcode; if(ok){
return true;
}else{ alert(\"请检查填写内容\"); }
return false;
});
效果如图5-3所示。读者在输入错误的验证码后登陆失败,同时系统在输入区域下方显示错误信息。
6
图5-3 登录面板
5.1.5公告通知
公告通知分为4部分,分别为催还通知、预约通知、学生推荐、新闻公告。在显示通知或推荐记录时使用Struts2标签循环显示,可以减少页面代码量并且是页面显示逻辑更加清晰。以学生推荐页面为例,部分Struts2标签代码如下:
${sta.count } ${stuNum } ${bookName} ${author } ${press } ${ISBN }
循环显示后的列表如图5-4所示。
图5-4 循环显示列表
5.1.6图书借阅
图书借还分为2部分,分别为职工登录、借还处理,其中借还处理又可以分为借书、还书、续借、挂失4部分,为方便管理员工作可以将借还处理的各部分设计为标签切换的形式,使页面简洁明了。其中部分JavaScript代码如下:
$(function(){
var index=1;
$('.work_label,.work_label_selected').click(function(){
$(this).removeClass('work_label').addClass('work_label_selected').siblings().adindex = $('#work_label_box div').index(this)+1; changePanel(index); });
dClass('work_label');
});
效果如图5-5所示。管理员在学号区域输入学生学号之后,系统发送异步请求,如果学号正确则显示学生信息和借阅记录,错误则不会显示。然后管理员在输入正确的图书编号后点击确定,系统生成借书记录,并提示操作成功。
7
图5-5 图书借阅页面
5.1.7数据管理
数据管理分为4部分,分别为员工登录、图书管理、学生管理、网站信息,其中图书管理、学生管理为连个切换面板,方便管理员的操作。 5.2 功能实现
按照MVC设计思想,共需要分表现层、控制层、业务层、持久层四层进行设计,在工程的src目录下对应每个层次分别创建对应的包。持久层对应edu.sxu.library.pojo,业务层对应edu.sxu.library.dao,控制层对应edu.sxu.library.service,表现层对应edu.sxu.library.action。以上的对应关系并不是绝对的,根据业务需要和逻辑的复杂程度,有时一个包可以对应多层。另外,根据Struts2的设计规范和常用方法,创建edu.sxu.library.interceptor包,用来创建拦截器,防止用户在未登录的情况下使用某些功能。同时根据Hibernate的需求创建edu.sxu.library.mapping包,存放类和数据库表映射文件。此外,对于系统中用到的常量和一些辅助方法,创建edu.sxu.library.util包,存放所用到的工具类。
Spring框架和Struts2框架所需的配置文件根据框架本身的需要直接放在src目录下,并根据需要将Struts2的配置文件分为struts.xml,struts-student.xml,struts-student.xml,struts-data.xml,struts-main.xml,struts-search.xml,struts-manager.xml,struts-notice.xml,其中Struts.xml为Struts框架的总配置文件,它调用其他几个配置文件。
5.2.1 配置文件总体设计
在struts.xml中加入了所有请求需要的拦截器。考虑到在请求发出时查询数据需要开启Hibernate的事务,并在业务逻辑结束后关闭事务,可以创建共用的拦截器transaction, transaction拦截器用于开启关闭事务。同时在学生、职工、管理员登录时都需要用到验证码,可以创建checkcode拦截器,用于显示验证码图片。Struts.xml文件的部分代码如下:
inputStream image 8
5.2.2图书检索
图书检索功能中,struts-search.xml负责完成处理相应的请求,其中负责处理请求的部分代码如下:
普通检索、按照借阅次数产看和分类检索分别发出请求,服务器根据配置文件调用相应的edu.sxu.library.action.search包下的Action,并且进行具体的功能实现。因为多个功能使用到图书查询的方法,可以创建SearchService接口来负责完成业务逻辑,调用相应的DAO进行数据查询和其他操作。部分代码如下:
public interface SearchService {
public List public List } 在普通检索中学生可以根据多种条件进行检索,而根据借阅次数检索和和分类检索只是普通 检索的一种特例。在普通检索中,为了改善用户的体验感受,可以添加AJAX异步显示相关信息,提高检索效率,效果如图5-6所示。用户在检索词中输入“生”字时,系统自动按照关键词进行检索,并将搜索到的结果显示在输入框下方,为用户检索提供参考。 图5-6 普通检索面板 5.2.3学生服务 学生服务功能中,struts-student.xml负责完成处理相应的请求。根据需求分析中的要求,学生未登录不能查看学生信息的页面,可以创建拦截器检测学生是否登录。 学生登录拦截器类的部分代码如下: if (session.get(\"student\")== null) {// 没有登录 session.put(\"notLogin\return Action.LOGIN; 9 } else { return invocation.invoke(); } 学生在使用学生信息、购书推荐、读者留言功能时分别发出请求,服务器根据配置文件调用相应的edu.sxu.library.action.student包下的Action,并且进行具体的功能实现。在系统运行结束后,根据action返回的结果提示用户操作是否成功。以图书推荐为例,在用户输入正确的图书信息并且在系统验证没有被推荐过且图书馆没有馆藏该数目时,系统提示操作成功,如图5-7所示。 图5-7 添加图书成功提示 5.2.4公告通知 在公告通知功能中,struts-notice.xml负责完成相应的处理请求。在edu.sxu.library.aciton.notice包下创建RecommendAction,AmercementAction,AppointmentAction,NewsAciton四个Action类,分别处理学生推荐、催还通知、预约通知和新闻公告的请求处理。考虑到业务逻辑的复杂程度较低,可以直接在Action中调用DAO来完成相应的数据操作。在Action运行结束后根据result跳转到相应页面。以推荐图书为例,结果如图5-8所示。 图5-8 推荐图书结果 5.2.5 图书借还 图书借还功能中,struts-manager.xml 负责完成相应的处理请求,在 edu.sxu.library.action.manager创建LoginAction,BorrowAction,ReturnAction,RenewAction,ReportLossAction五个Action类,分别处理职工登录、借书、还书、续借、挂失的请求处理。针对需求分析中图书借还面板的动态显示学生信息,即在输入学生学号之后在页面中显示学生的信息和借书记录,创建MngStuBorrowsAction类处理相应请求。 以图书借阅为例,在管理员输入正确的学号和图书编号后系统根据Action返回的结果提示用 10 户,效果如图所示5-9所示。 图5-9 操作结果提示 5.2.6 信息管理 信息管理功能中,struts-data.xml负责接受并处理相应当的请求,在edu.sxu.library.action.data包下创建LoginAction,BookAction,StudentAction,DataAction四个Action类,分别处理管理员登录、修改图书信息、修改学生信息、修改网站信息的处理请求。以图书管理为例,效果如图5-10所示。管理员可以输入多条查询关键词,也可只输入部分查询关键词。在输入正确的图书编号之后,系统会发出异步请求,获取图书相关信息并显示在页面中,此时管理员可以进行点击相应图片进行删除和更改操作。 图5-10 图书管理页面 六、集成测试 6.1白盒测试(目录结构和文件名检查) 项目 名称 Java代码结构 要求 Library Management src-edu-sxu-library-action |-dao |-interceptor |-mapping |-pojo |-service 说明 action:主要控制器 dao:数据持久层,包括实现类和接口类 interceptor:拦截器 mapping:数据库表影射文件 pojo:实体类 service:业务层代码,暴多实现类和接口 11 |-test |-util Web代码结构 WebRoot-css |-img |-js |-main |-search |-student |-notice |-manager |-data |-WEB-INF IDE配置 Web Context-root:/Library Source:src和test JRE:jdk 1.6.0 Compiler compliance level:5.0 Text file encoding:UTF-8 6.2 黑盒测试(功能单元测试) 单元 首页显示 验收项 Case1:浏览测试步骤 器地址test:测试类 util:工具包 css:存放style.css文件 js:存放jquery-1.4.3.js文件和其他JavaScript文件 main:主页相关JSP文件 search:图书检索相关JSP文件 student:学生服务相关JSP文件 notice:公告通知相关JSP文件 manager:图书借还相关JSP文件 data:数据管理相关JSP文件 WEB-INF:默认目录,编译后的文件和xml 期望结果 栏输入:显示首页 实际结果 相同 Http访问 普通检索 http://localhost:8080/Library/main/main.jsp Case2:输入关键词,选择检索条件,点击确定 Case3:点击选择图书类型 Case4:浏览器地址栏输入:刷新后显示检索结果 刷新后显示检索结果 显示检索结果列表 相同 相同 相同 图书检索 分类检索 借阅次数 学生登录、学http://localhost:8080/Library/search/LoanNum Case5:输入学号、密码、验证码,点击确定 刷新后跳转到学生信息页面 Case6:输入推荐图书信息,点击确定 Case7:输入留言的主题和内容,点击确定 Case8:浏览器地址栏输入:系统提示推荐成功 系统提示留言成功 刷新后显示催还通知记录列表 :刷新后显示预约记录列表 :刷新后显示公告记录 相同 相同 相同 相同 相同 相同 学生服务 生信息 图书推荐 学生留言 催还通知 http://localhost:8080/Library/notice/Amercement Case9:浏览器地址栏输入公告通知 预约通知 http://localhost:8080/Library/notice/Appointment Case10:浏览器地址栏输入新闻公告 http://localhost:8080/Library/notice/News Case11:输入职工编号、密码、验证码,点击确定 刷新后跳转到图书借还页面 Case12:分别在借书、还书、续借、挂失面板中输入正确的学号和图书编号,点击确定 Case13:在学生面板中进行学生增、删、改、查操作,点击确定 12 系统提示操作成功 相同 系统提示操作成功 相同 相同 图书借还 职工登录 图书借还 数据管理 学生信息 因篇幅问题不能全部显示,请点此查看更多更全内容