基于SSM的图书管理系统
- 开发语言:Java
- 数据库:MySQL
- 技术:Spring+SpringMVC+MyBatis
- 工具:IDEA/Ecilpse、Navicat、Maven
该系统主要有普通用户和管理员,主要功能有图书信息管理、用户信息管理、借阅管理、个人信息管理等等。
1 绪 论
1.1 研究背景
作为专用于特定领域的信息管理系统,图书管理系统也被称为图书馆的自动化、信息化集成系统,图书管理系统是现代化信息发展的必然产物,也是图书馆发挥信息服务功能的基础设施[1]。高校是图书资源的重要聚集地,伴随着改革开放为高等教育带来的大发展,高校图书馆建设也迎来了快速发展阶段和难得的发展契机。国内众多高校图书馆抢抓机遇,进一步扩充丰富的文献资源,同时,积极应用最前沿的信息技术,提高高校图书馆的服务职能。
1.2 研究意义
自上世纪八十年代以来,计算机技术、微电子技术以及网络通信技术的迅猛发展,对图书馆建设的自动化和数字化起到了不可估量的推动作用。而传媒技术的发展,使得高校图书馆藏资源渐进丰富,除了传统意义上的书籍之外,光盘、电子出版物等数字化产品的出现,馆藏资源呈现出了印刷型与电子型资源并存的局面,这也推进了数字化图书馆建设的步伐[2]。以计算机技术为依托设计开发数字化管理系统,是数字化建设的基本发展方向,对于促进图书管理信息化、网络化、共享化具有重要的研究价值和实际意义。
健全完善服务体系,充分开展资源共享,使馆藏资源作用最大化,这是高校图书馆面临的共同课题和难题,而信息化技术的飞速发展,无疑为这一难题提供了有效的解决途径[3]。依托网络环境建设网络基础设施,开发高校图书管理系统,开展包括网上图书预约、催还和续借服务、网上馆际互借和文献传递服务、网上信息资源导引服务等,成为国内众多高校纷纷采取的措施。可以说,在高等学校图书馆信息化建设的进程中,图书管理系统发挥了重要的作用,成为引导读者便捷、准确获取和共享资源的保证。
目前,图书管理系统并不是新鲜事物,但是早期的单机版系统早已经不能够
适应网络时代化的新要求,基于C/S模式 的系统也随着Java、Jsp等技术的兴起日渐被摒弃。Jsp、JavaBean、Servlet是电子商务开发的主流,本文使用Jsp开发高校图书管理系统,从系统结构,功能需求,技术可行性等考虑,开发具有实际使用价值的图书管理系统。
1.3 相关研究现状
1.3.1 高校图书管理面临的问题
1、馆藏图书面临严重的“老化”危机
目前,国内高校的发展都对图书馆藏资源进行了明确要求和规定,在这种数量压力下,图书资源的质量难以得到有效的保证。削減了图书资源的利用效率,也为图书管理增加了难度。
2、信息化发展程度不足
全球信息化、网络一体化的到来,电子资源呈现喷薄之势,图书的概念大为扩展,种类也日益丰富,不仅包含过去传统的纸质图书,更多的是増加了电子媒介。电子化的资源为图书管理带来了新的难题,信息化的管理方式势在必行。
3.共享程度和开放程度不高
信息化不足导致难以提高馆藏资源的开放度,也就影响了资源的共享利用。图书资源作为一种社会服务,在为高校师生提供服务的同时,适度对外提供共享,不仅是高等学校开放发展的一种方式,也将有利于开阔校内师生的思维模式。
1.3.2 信息化为图书管理带来新变化
1.资源内涵发生根本性变化
从某种程度上来讲,电子资源对用户的重要性更大,因为其存储、使用、共享上的便捷性,使其在目前读者中更为受宠。因此,纵然纸质资源目前仍为图书主体,但电子资源的发展速度却不容小视。
2.图书管理有了更为简便的方式
文献借阅是图书馆为用户提供服务的集中体现,在传统的方式中,用户需要到图书馆中进行文献的查阅,得到感兴趣的书目之后,填写借阅信息单,办理相关的借阅手续,效率极为低下。而信息化的图书管理,这一系列操作在客户端由读者自行即可完成,节约过程方便、快捷,图书馆也可以通过互联网提供不间断的服务,大大提高服务效率。
3.检索方式发生巨大变化
各种检索工具的出现,为用户提供了不同形式、不同类型的检索功能,极大地方便了馆藏资源信息的获取和检索。交互界面、菜单选项、鼠标操作等应用,使得信息检索更为简洁和容易,用户只需要根据提示进行简单的操作,便可以实现较为复杂的检索功能,并且这种检索速度是手工方式无法比拟的,消除了手工检索在效率上和应用中的不便。
2 相关技术
2.1 JSP 概述
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准[4]。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
JSP 技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑[5]。网页还能通过tags和scriptlets访 问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来[6]。
2.2 MySQL 数据库技术
MySQL是一个关系型数据库管理系统,由瑞典MySQLAB 公司开发,属于 Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。
2.3 Spring
Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用[7]。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
2.4 SpringMVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架。
Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。 使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架[8]。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
2.5 Dbcp
DBCP(DataBase Connection Pool)数据库连接池,是Java数据库连接池的一种,由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。
DBCP(DataBase connection pool)数据库连接池。是 Apache 上的一个 Java 连接池项目,也是 tomcat 使用的连接池组件。单独使用DBCP需要2个包:commons-dbcp.jar和commons-pool.jar。由于建立数据库连接是一种非常耗时、耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,使用完毕后再归还到连接池中。
2.6 Maven
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目[9]。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。
3 系统分析
3.1 需求分析
3.1.1 系统的功能需求分析
(1) 图书借阅者的功能需求分析
图书借阅者的需求是查询图书室所存的图书、个人借阅情况及个人信息的修改。
图书借阅者可直接查看图书馆图书情况,如果图书借阅者根据本人借书证号和密码登录系统,还可以进行本人借书情况的查询和维护部分个人信息。
查询图书馆的所有藏书信息(书名、作者、出版社、ISBN、价格、剩余数量以及详情) ;查看个人信息(包括个人信息情况、查询馆藏图书信息、借阅图书信息、借阅图书归还信息、图书借还日志) ; 借阅者修改个人信息。
(2) 图书管理员的功能需求分析
图书馆管理人员的功能,包括对图书借阅者、图书信息进行管理和维护,及系统状态的查看、维护等。
对现有藏书的信息操作(包括查询图书信息、添加图书信息修改图书信息、删除图书信息) ;对新进藏书信息的操作(图书的编号、图书名称、著作者出版信息) ;藏书借出与归还操作;查看借阅者信息操作(借阅者的编号、借阅者姓名、图书名称) ;借阅者身份管理操作(增加借阅者、修改借阅者信息、删除借阅者信息)。
3.1.2 系统的非功能需求分析
(1)安全性。在当今网络普及的社会,网络安全问题一直是人们关注的问题。一个系统更要考虑安全问题。在网络安全方面除了物理设备一些的安全防范外,还可以通过软件防止一些非授权的损害。在程序方面的网络安全我们可以从用户权限、动态口令、数据库字段加密等入手[10]。出于安全角度的考虑,在本系统内中使用了用户权限的方法,为用户的敏感资料保密。
(2)可靠性。可靠就是在规定的时间和条件下,保持软件的性能水平的稳定性。可靠性除了容错性好、恢复性强外,还与系统的运行环境、平台的选择、代码的质量息息相关。越可靠的系统其运行的速度就会越慢,运行效率和运行时的可靠性是相互制约的一组属性,所以在选择的时候要综合考虑。
(3)维护性。可维护性是指对特定内容修改所要做的努力程度。为了便于系统维护时候的分析,可以在系统的某些部分加入日志记录。为了方便以后系统的升级维护,在设计的时候本系统是以模块设计的,并尽量减少模块之间的联系,这样在改动其中的一个模块的时候不至于所有的模块都要改动,从而减少后期维护的工作量。
(4)美观性。要求界面美观,操作简便。
3.2 可行性分析
3.2.1 经济可行性
从经济来说,本系统是学生们在学校利用课设时间做出来的,不需要任何的消费和支出,是学生们用自己所学的课程和自己的知识相结合起来的成果,唯一需要的就是时间,因此,该系统在经济上来说是可行的。
3.2.2 技术可行性
基于本学期我们所学的JSP课程及相关技术,开发出图书管理系统。在进行技术可行性分析之前,必须要明确系统的目标,从系统的性能开始,考察它的性能,是否具备必要的环境,是否具备有工作经验的系统操作人员,人员的数量问题等等。在技术的选择上,该系统运用了JSP、Dbcp、SpringMVC,在数据的存储上应用的是MYSQL数据库。该系统的硬件相当过关,具有较大的选择余地,保障了系统的开发和运行,所以在硬件配置方面具有一定的可行性。诸多的研究发现,该系统在技术上是可行的。
3.2.3 操作可行性
图书管理系统具备友好的用户界面,使用方便,易于维护,操作简单易于被用户接受,用户不需要学习复杂的计算机专业知识,用户只需熟练操作计算机,另外此系统也附带有显示视频,和对此系统使用做简单的了解即可方便使用,且操作工具只需要一台计算机即可,在人员的配备上也能够满足系统运行的需要。因此从使用操作方面看,此系统的开发是可行的。
5 系统实现
5.1 详细设计
系统分为读者模块和管理模块。
读者模块,查询所有图书的信息,如图书的名称、剩余数量、详情等;个人信息的编辑完善,修改初始化密码等。
管理员模块,图书管理、用户管理、借还日志管理,如图书的增删改查、用户信息的增删改查等。
5.1.1 读者登录模块
在没有登录系统的情况下,不可以进入该系统查询和借阅图书,对于用户的账号管理,统一由管理员完成注册,并通过负责人发放账号。对于读者在登录时,后台会验证该账户是否存在,密码是否正确。下面是实现读者登录功能的核心代码块。
当点击登录按钮前端页面会通过Ajax向后端发送POST请求,数据并以JSON的形式传递,请求后端接口“api/loginCheck”。
$.ajax({
type: "POST",
url: "api/loginCheck",
data: {
id:id ,
passwd: passwd
},
后端接收到请求后,验证账号密码是否正确,通过身份码来确定登录人员的权限,并响应跳转到相对应的页面。
@RequestMapping(value = "/api/loginCheck", method = RequestMethod.POST) //接口,请求方式是POST
public @ResponseBody Object loginCheck(HttpServletRequest request) {
// @ResponseBody,数据是JSON形式
if (isAdmin) {
request.getSession().setAttribute("admin", admin);
res.put("stateCode", "1");
//1代表管理员,2代表读者,0代表失败
res.put("msg", "管理员登陆成功!");
} else if (isReader) {
request.getSession().setAttribute("readercard", readerCard);
res.put("stateCode", "2");
res.put("msg", "读者登陆成功!");
} else {
res.put("stateCode", "0");
res.put("msg", "账号或密码错误!");
}
return res;
}
5.1.2 读者搜索图书模块
图书查询页面默认展示所有图书的信息,当有想借阅的图书时,可以通过图书的名称进行模查询。下面是实现读者查询搜索图书功能的核心代码块。
全部图书的展示。
<td><c:out value="${book.name}"></c:out></td>
<td><c:out value="${book.author}"></c:out></td>
<td><c:out value="${book.publish}"></c:out></td>
<td><c:out value="${book.isbn}"></c:out></td>
<td><c:out value="${book.price}"></c:out></td>
<td><c:out value="${book.number}"></c:out></td>
后端调用bookService的getAllBooks()方法查询所有图书。
@RequestMapping("/admin_books.html")
public ModelAndView adminBooks() {
ArrayList<Book> books = bookService.getAllBooks();
ModelAndView modelAndView=new ModelAndView("admin_books");
modelAndView.addObject("books", books);
return modelAndView;
}
当读者输入自己想要借阅的图书名字,点击搜索按钮时,此时会通过表单的形式把关键字以post形式提交到reader_querybook_do.html,后端会调用bookService的queryBook(searchWord)方法来查询符合查询条件的所有图书,没有符合的图书信息则返回“没有匹配的图书”。相对应的接口核心代码如下。
@RequestMapping("/reader_querybook_do.html")
public ModelAndView readerQueryBookDo(String searchWord) {
if (bookService.matchBook(searchWord)) {
ArrayList<Book> books = bookService.queryBook(searchWord);
ModelAndView modelAndView=newModelAndView("reader_books");
modelAndView.addObject("books", books);
return modelAndView;
} else {
return new ModelAndView("reader_books", "error", "没有匹配的图书");
}
}
5.1.3 读者个人信息编辑模块
读者个人页面展示自己的所有信息,当点击编辑时跳转到reader_info_edit页面。下面是实现读者个人信息编辑功能的核心代码块。
个人信息接口核心代码如下。
@RequestMapping("/reader_info.html")
public ModelAndView toReaderInfo(HttpServletRequest request) {
ReaderCardreaderCard=(ReaderCard)request.getSession().getAttribute("readercard");
ReaderInforeaderInfo=readerInfoService.getReaderInfo(readerCard.getReaderId());
ModelAndView modelAndView = new ModelAndView("reader_info");
modelAndView.addObject("readerinfo", readerInfo);
return modelAndView;
}
对应的数据库查询代码如下。
public ReaderInfo findReaderInfoByReaderId(final long reader_id) {
returnsqlSessionTemplate.selectOne
(NAMESPACE+"findReaderInfoByReaderId", reader_id);
}
当填好修改过后的个人信息,点击确定按钮时,会把信息提交到reader_edit_do_r.html页面,来请求后端接口。编辑个人信息接口核心代码如下。
@RequestMapping("reader_edit_do_r.html")
public String readerInfoEditDoReader(HttpServletRequest request,
String name, String sex, String birth, String address,
String phone, RedirectAttributes redirectAttributes) {
ReaderCardreaderCard=(ReaderCard)request.getSession().getAttribute("readercard");
ReaderInfo readerInfo = getReaderInfo(readerCard.getReaderId(), name, sex, birth, address, phone);
}
5.1.4 我的借还日志模块
读者借阅图书后,记录会在我的借还日志页面来显示,可以看到借还状态,借还时间等信息。我的借还日志模块核心代码如下。
我的借还日志接口核心代码如下。
@RequestMapping("/mylend.html")
public ModelAndView myLend(HttpServletRequest request) {
ReaderCardreaderCard=(ReaderCard)request.getSession().getAttribute("readercard");
ModelAndView modelAndView = new ModelAndView("reader_lend_list");
modelAndView.addObject("list",lendService.myLendList(readerCard.getReaderId()));
return modelAndView;
}
5.1.5 读者修改密码模块
读者拿到自己的账号后,会有一个初始的密码,为了读者账户的安全,读者可以自行修改自己的密码,用户修改密码模块核心代码如下。
读者在修改密码时,填写两次密码是否一致,完整,通过前端验证即可来提示读者。检验密码核心代码如下。
$("#repasswd").submit(function () {
if($("#oldPasswd").val()==''||$("#newPasswd").val()==''|| $("#reNewPasswd").val() == '') {
$("#tishi").text("提示:请填写完整!");
return false;
} else if ($("#newPasswd").val() != $("#reNewPasswd").val()) {
$("#tishi").text("提示:两次输入的新密码不同,请检查!");
return false;
}
})
后端接口核心代码如下。
@RequestMapping("/reader_repasswd_do")
public String reReaderPasswdDo(HttpServletRequest
request, String oldPasswd, String newPasswd, String reNewPasswd,
RedirectAttributes redirectAttributes) {
ReaderCardreader=request.getSession().getAttribute("readercard");
if (password.equals(oldPasswd)) {
if (loginService.readerRePassword(id, newPasswd)) {
redirectAttributes.addFlashAttribute("succ", "密码修改成功!");
return "redirect:/reader_repasswd.html";
} else {
redirectAttributes.addFlashAttribute("error", "密码修改失败!");
return "redirect:/reader_repasswd.html";
}
} else {
redirectAttributes.addFlashAttribute("error", "旧密码错误!");
return "redirect:/reader_repasswd.html";
}
}
5.1.6 管理员对图书的增删改查模块
管理员登录系统后可以对已经上架的图书进行编辑、删除等操作;还可以上架新的图书。管理员对图书的增删改查模块详细代码如下。
后端添加图书接口核心代码如下。
@RequestMapping("/book_add.html")
public ModelAndView addBook() {
return new ModelAndView("admin_book_add");
}
相应的数据库操作核心代码如下。
<insert id="addBook" parameterType="com.library.bean.Book">
insert into book_info values
(null, #{name}, #{author}, #{publish}, #{ISBN},
\#{introduction}, #{language}, #{price}, #{pub_date},
\#{class_id}, #{number})
</insert>
编辑、删除都是通过图书的ID来进行操作。
其后端接口核心代码如下。
@RequestMapping("/book_edit_do.html")
public String bookEditDo(@RequestParam(value = "pubstr")
String pubstr, Book book, RedirectAttributes redirectAttributes) {
book.setPubdate(getDate(pubstr));
if (bookService.editBook(book)) {
redirectAttributes.addFlashAttribute("succ", "图书修改成功!");
} else {
redirectAttributes.addFlashAttribute("error", "图书修改失败!");
}
return "redirect:/admin_books.html";
}
@RequestMapping("/admin_book_detail.html")
public ModelAndView adminBookDetail(HttpServletRequest request) {
long bookId = Long.parseLong(request.getParameter("bookId"));
Book book = bookService.getBook(bookId);
ModelAndView modelAndView=
newModelAndView("admin_book_detail");
modelAndView.addObject("detail", book);
return modelAndView;
}
其数据库操作核心代码如下。
<update id="editBook" parameterType="com.library.bean.Book">
update book_info set name=#{name}, author=#{author},
publish=#{publish}, ISBN=#{ISBN}, introduction=#{introduction},
language=#{language}, price=#{price}, pub_date=#{pub_date},
class_id=#{class_id}, number=#{number} where book_id=#{book_id}
</update>
<delete id="deleteBook" parameterType="long">
delete from book_info where book_id = #{book_id}
</delete>
5.1.7 管理员对读者信息的增删改查模块
管理员登录系统后可以新增读者账号,发放给读者;对已经存在的读者账号进行管理操作。管理员对读者信息的增删改查模块详细代码如下。
当有新读者需要账号时,管理员可以新增读者账号,其核心代码如下。
前端校验信息是否合法完整。
$("#readeredit").submit(function () {
if($("#password").val()==''||$("#name").val()==''
||$("#sex").val()==''||$("#birth").val()==''
||$("#address").val()==''||$("#phone").val()==''){
alert("请填入完整读者信息!");
return mySubmit(false);
}
})
后端接口核心代码如下。
@RequestMapping("reader_add.html")
public ModelAndView readerInfoAdd() {
return new ModelAndView("admin_reader_add");
}
数据库操作代码如下。
<insert id="addReaderInfo" parameterType="com.library.bean.ReaderInfo">
insert into reader_info values
(null, #{name},#{sex},#{birth},#{address},#{phone})
</insert>
5.1.8 管理员对借还日志的操作模块
管理员登录系统后可以查看读者借还信息,是否超时,对已经还的读者借阅记录可以删除,没有归还的图书借阅日志则无法删除。管理员对借还日志的操作模块详细代码如下。
后端接口核心代码如下。
@RequestMapping("/lendbook.html")
public String bookLend(HttpServletRequest request,
RedirectAttributes redirectAttributes) {
if (lendService.lendBook(bookId, readerId)) {
redirectAttributes.addFlashAttribute("succ", "图书借阅成功!");
} else {
redirectAttributes.addFlashAttribute("succ", "图书借阅成功!");
}
return "redirect:/reader_books.html";
}
6 测试
6.1 系统测试
测试是程序的一种执行过程,是软件生命周期中一项非常重要且非常复杂的工作,对软件可靠性保证具有极其重要的意义。在目前形式化方法和程序正确性证明技术还无望成为实用性方法的情况下,软件测试在将来相当一段时间内仍然是软件可靠性保证的有效方法。
6.1.1 测试目的
测试的目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性,尽可能发现更多缺陷,提高开发效率,降低开发成本,提高用户体验。
6.1.2 测试方法
在用例设计环节中,测试人员为了尽可能实现高覆盖率的测试,测试用例设计涉及多种方法和技术,以保证更多的覆盖系统的每一行代码、每一个逻辑判断的运行,每一个可操作的功能分支都得以覆盖,相当于“穷举测试”。测试的最终目的,是尽可能在有限的时间内发现更多有效的,容易被用户认知的,复现几率较大的缺陷。
6.1.3 测试的意义
测试是很重要的一个环节,如果没有做好,或许会对公司造成损失,影响客户体验,所以软件测试时必须进行的一个环节。软件测试主要是要心细,一个软件往往大错误就不多,最多的就是小错误、小毛病。本系统经过以上部分测试系统功能基本齐全,实现了增加、删除、修改、查询等功能,各个功能未发现重大错误,只是有一些小瑕疵,使用的时候若不能正常运行,将网址刷新一下,等待系统运行,即可成功运行,可投入使用。
6.2 系统功能测试
功能测试就是对系统中表现层的各项功能进行验证,首先需要设计各功能测试用例,然后根据功能测试用例进行各层功能,实现逐项测试,检查图书管理系统是否达到用户要求的功能,检查系统中的各项功能模块的是否有效和是否符合规格说明。通常在进行系统测试时,则按照功能需求的规定对系统的功能、数据、流程、业务规则等进行逐一的测试。包括相关性检查、检查按钮的功能是否正常、字符串长度检查、字符类型检查、检查系统管理员能否正常登录、能否正常浏览图书、能否查看读者的借还日志、能否正常编辑图书信息;用户能否正常查阅图书、借还图书、能否修改自己的密码。整个图书管理系统的使用流程是否顺畅。
图书管理系统的测试用例如表6.1所示。
表6.1 图书管理系统的测试用例
测试模块 | 测试功能 | 预期输出 | 实际输出 |
---|---|---|---|
用户模块 | 浏览图书 | 正常 | 正常 |
借阅图书 | 正常 | 正常 | |
归还图书 | 正常 | 正常 | |
查看借还日志 | 正常 | 正常 | |
修改个人密码 | 正常 | 正常 | |
管理员模块 | 浏览图书 | 正常 | 正常 |
编辑图书 | 正常 | 正常 | |
查看读者 | 正常 | 正常 | |
添加读者 | 正常 | 正常 | |
删除读者 | 正常 | 正常 | |
查看读者借还日志 | 正常 | 正常 | |
修改个人密码 | 正常 | 正常 |
6.3 系统性能测试
性能的测试主要是通过模拟系统正常运行的环境,测试系统的性能状况是否完全符合用户的需求。系统性能测试的重要内容和技术指标之一就是:系统正常运行的速度、网络响应的时间和是否支持网络并发的节点等参数。
(1)保证系统的运行速度:技术人员通过在不同平台计算机上的测试运行本产品系统,没有被人发现有任何迟滞、停顿等异常现象。
(2)用户网络最大响应时间:网络最大响应的时间主要可以包括用户网络最小响应时间、平均最大响应时间、最大响应时间三个基本参数。经过响应时间测试,在用户网络正常运营良好的状态下,局域网内平均最大响应时间三参数为:1/2/5s,外网响应时间三参数为3/7/12s,符合了用户的需求,属于满足用户的心理需求和可承受的范围。
(3)系统可以支持多个并发管理节点的服务个数:经过多次针对模拟用户网络运营环境的运行测试,本平台系统在模拟网络环境中的支持并发服务节点个数达45个时,网络用户运营的数据速度波动可能也就会自动随网络时间推移发生较大的速度波动,延迟时间10秒左右,符合大部分网络用户的实际需求。
总之,图书管理系统性能测试能够正常实现,该系统能够投入市场使用。
设计总结和心得体会
通过此次课程设计,使我们更加扎实的掌握了所学的知识,实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。此次课程设计使我们的编程水平提高了一大步,使我们充分的认识到合作的可贵。由于这次设计涉及到数据库,我的学到了不少编程工具与数据库连接的知识,对数据库的操作有了进一步的了解。这次设计对我们的综合能力是一次很好的锻炼,但是我必须承认自己的能力和知识还很肤浅。所以今后我们的学习道路还是很漫长的。
在这次课程设计中,我们学到了很多的知识,同时学会了怎么将学到的理论知识用到实践中去,改变了过去的学习方法和学习态度,找到了一门自己很喜欢的学科。本次课程设计是由我们团队一起完成的,团队的力量往往比个人力量之和大上很多,并且在今后的开发中,我们都将是以团队的形式展开工作的,所以我们应该在现在学习的时候养成一种良好的团队精神,以为将来的开发打下基础。
参考文献
[1]陈召久.基于互联网的图书情报一体化管理系统设计[J].电子技术,2022,51(02):186-187.
[2]林辉.基于Java Web的渭南市大荔县图书管理系统的设计与实现[J].电子设计工程,2021,29(24):155-158+163.
[3]陈新,张楠.图书管理系统设计与实现[J].硅谷,2011(14):102+100.
[4]邓鲜艳.基于JSP语言的图书管理系统设计[J].科技信息,2011(07):488+515.
[5]庄礼金,黄晓云.基于JSP的图书在线借阅系统的分析与设计[J].信息技术与信息化,2019(11):36-38.
[6]林卓.基于JSP的图书超市管理系统设计与实现[J].山西大同大学学报(自然科学版),2009,25(05):16-17+20.
[7]林辉.基于Java Web的渭南市大荔县图书管理系统的设计与实现[J].电子设计工程,2021,29(24):155-158+163.
[8]赵泽忠,刘欢.基于MVC模式下的图书管理系统设计与实现[J].数码世界,2019(10):106.
[9]周永宏,肖国政.基于Servlet的在线图书管理系统设计[J].科技风,2019(21):15 [10]徐连霞,傅伟.图书管理系统设计与实现[J].今日财富,2019(19):203.