基于JSP心悦图书城系统设计与实现

570 篇文章 0 订阅
569 篇文章 6 订阅
源码及论文下载:
http://www.byamd.xyz/tag/java/

1 开发背景

1.1 系统开发背景与意义

本着计算机技术在各行各业日益广泛和深入的应用,网络的概念早已深入人心。网络在各行各业的发展战略中占据了重要的位置,并逐步进入传统的流通领域,从而电子商务开始流行起来,现在越来越多的商家在网上建起在线商店,向消费者展示出一种新颖的购物理念。如今网上购物系统作为B2B,B2C(Business Customer,企业对消费者),C2C(Customer to Customer,消费者对消费者)电子商务的前端商务平台,在其商务活动过程中起着很重要的作用。本系统主要考虑的是如何建设B2C网上购物系统。本系统利用Internet的技术和协议,建立各种企业内部网Intranet,企业外部网Extranet,通过廉价的通讯手段,将买家与卖家、厂商和合作伙伴紧密结合在一起,消除时间与空间带来的障碍,从而大大的节约了交易成本,扩大了交易范围。

1.2 研究内容

心悦图书城系统通过简洁、一目了然的方法进行界面设计,主界面上可以根据商品查询和其他操作,方便的查看各模块的详细明细等信息研究的内容主要包括以下方面:

心悦图书城系统系统的开发主要包括后台数据库的建立、连接和维护以及前台网络页面的开发两大方面。由于Java的跨平台性、安全性等诸多优势,本论文采用Jsp+Tomcat+MYSQL的技术途径和规范全局设计开发流程,在MyEclipse的开发环境下设计、编写网上商城系统。

该系统主要模块有登录、分类管理、图书管理、订单管理、搜索管理等五大功能模块,用户主要是进行注册登陆后,对所有书本信息进行浏览,按条件查询具体商品信息,增加具体书本信息,修改具体书本信息,删除具体书本信息。

1.3 文档的组织结构

文档的组织结果安排如下:

第一章绪论介绍了系统开发的背景与意义,对主要研究内容进行了说明,对文档的组织结构进行了阐述。

第二章主要讨论了系统的需求以及实现相关功能的关键技术和方法。

第三章对系统进行了业务建设与设计,对系统的用户角色和功能需求作了初步设计。

第四章主要对系统相关实现作了更详细的阐述,阐述了系统开发过程中所设计的代码、接口等。

第五章系统测试与分析。

第六章主要阐述了对系统的总结和展望。

最后为致谢与参考文献

2 系统需求分析

2.1 系统需求分析

需求分析就是详细分析要解决的问题,弄明白问题的要求,包括需要输入哪些数据,将要得到何种结果,最后期望输出什么等。总之,“需求分析”在软件工程当中就是确定要计算机“做什么”。需求分析通过对收集到的需求资料进行分析,深层次的说明需求所表达的含义,介绍软件需要开发的功能和特性,描述软件要提供的接口或者和其它软件交互的方式,确定其它的非功能性需求。所以,需求分析是确定软件需要完成的内容,而不是如何完成这些功能要求。

2.2可行性分析

2.2.1经济可行性

开发本系统的相关资料均可通过网上搜索、线下调查获得,在开发过程中所需的软件系统都可从相关站点免费获得。信息的获取都是通过自己去各大地区长询问人民群众得到,不需要任何其他费用。

所以从经济角度开发工程监管信息系统是完全可行的。

2.2.2技术可行性

大部分用过程语言比如ASP,PHP开发出来的WEB应用,初始的开发模板就是混合层的数据编程。例如,直接向数据库发送请求并用HTML显示,开发速度往往比较快,但由于数据页面的分离不直接,因而很难体现出业务模型的样子或者模型的重要性。产品设计弹性力度很小,很难满足用户的变化性需求。而MVC模式要求对应分层,虽然要花费额外的工作,但产品的结构清晰,产品的应用通过模型可以得到更好的体现。一旦模型发生改变也易于维护。其次,由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。再次,由于一个应用被分离为三层,因此有时改变其中的一层就能满足应用的改变由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。

而且开发本系统所需的软件系统都可免费获得,软件所依赖的相关组件都为开源软件并可以免费引用。

所以从技术角度开发心悦图书城系统也是完全可行的。

2.2.3社会因素可行性

目前,中国有上亿的网民,上千万的网上购物者,而且这个人群正在迅速的扩大。生活节奏的加快以及质量的提高,使人们需要一种更快捷 、 更方便的购物方式,尤其象图书这样品种繁多、数量庞大的商品,在网上购买不仅查找方便,而且选择的范围也远胜于传统购物。

2.3功能分析

1.登录管理:管理商品、订单、类目、商品规格属性、用户管理以及内容发布等功能。

2.分类管理:管理员可以对图书进行分类管理,可以添加、查看、修改、删除分类信息。

3.图书管理:管理员可以对图书信息进行管理,可以添加、查看、修改和删除图书信息。

4.搜索管理:提供图书信息的搜索功能。

5.订单管理:提供下单、查询订单。

6.评论管理:管理员可以对图书的评论进行管理,可以查看、删除评论信息。

2.4 技术分析

大部分用过程语言比如ASP,PHP开发出来的WEB应用,初始的开发模板就是混合层的数据编程。例如,直接向数据库发送请求并用HTML显示,开发速度往往比较快,但由于数据页面的分离不直接,因而很难体现出业务模型的样子或者模型的重要性。产品设计弹性力度很小,很难满足用户的变化性需求。而MVC模式要求对应分层,虽然要花费额外的工作,但产品的结构清晰,产品的应用通过模型可以得到更好的体现。一旦模型发生改变也易于维护。其次,由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。再次,由于一个应用被分离为三层,因此有时改变其中的一层就能满足应用的改变由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。

在当今JSP开发中有两种模式,模式一是JSP+JavaBean的结合,模式二是JSP+JavaBean+Servlet的结合。模式一中,JSP页面独自响应请求并处理结果返回客户。所有数据通过Bean处理,JSP实现页面的表现。而本系统开发采用的模式二遵循了MVC模式,它的主要思想是使用一个或多个Servlet作为控制器。请求由前沿的Servlet(可能是多个Servlet构成的一个处理链)接受后,通过JDBC来连接数据库,执行数据库的操作,然后再用JavaBean来封装执行的结果,把结果保存到请求对象中,最后把视图派发到用于显示的JSP页面。在模式二中,JSP用于显示,充当了视图的角色;JavaBean组件用于数据的封装,相当于模型的角色;Servlet用于执行业务逻辑,相当于控制器的角色。如图2-1所示

图2-1 模式二 数据传递关系

img

3 系统设计

3.1 系统概述

心悦图书城系统分为前台模块和后台模块两大部分。前台模块主要是注册会员用来浏览图书信息的。后台模块是管理员用来管理书本信息的。

心悦图书城系统采用JAVA的三层架构开发,发布版本的运行环境包括:

(1)客户端:

​ 操作系统:Win10

​ 浏览器:谷歌浏览器

(2)服务器端:

​ 操作系统:windows server 2003

​ 应用服务器:Tomcat

(3)数据库服务器端:

​ 操作系统:windows server 2003

​ 数据库系统:MYSQL5.6

3.2 系统功能

l 系统功能模块

img

3.3 数据库设计

数据库的设计关系到整个应用系统的运行效率,数据库设计得好,不仅有利于日常数据的维护更新,而且可以提高系统的运行效率,缩短数据查询响应周期,增加网站的流量[9]。合理的数据库设计可以使围绕它支持的Web页面的Java代码简单化,易于实现,并且可以提高数据存储的效率,保证数据的完整一致。酒店管理系统采用MySQL作为后台数据库开发工具。

3.3.1 数据库概念设计

概念模型用于信息世界的建模,与具体的DBMS无关。为了把现实世界中的具体事物抽象、组织为某一DBMS支持的数据模型。人们常常首先将现实世界抽象为信息世界,然后再将信息世界转换为机器世界。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统和具体的DBMS,而是概念级的模型,然后再把模型转换为计算机上某一个DBMS支持的数据模型。实际上,概念模型是现实世界到机器世界的一个中间层次。

信息世界中包含的基本概念有实体和联系。

(1) 实体 (entity)

客观存在并可相互区别的事物称为实体。实体可以是具体的人、事、物,也可以是抽象的概念或联系。例如,一个学生、一门课、一个供应商、一个部门、一本 书、一位读者等都是实体。

(2) 联系 (relationship)

在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为实体内部的联系和实体之间的联系。实体内部的联系通常是组成实体的各属性之间的联系。两个实体型之间的联系可以分为3类,一对一联系,(1:1);一对多联系(1 : n);多对多联系(m : n)。

概念模型是对信息世界建模,所以概念模型应该能够方便、准确地表示信息世界中的常用概念。概念模型的表示方法很多,其中最为常用的是P.P.S.Chen于1976年提出的实体,联系方法(Entity-Relationship Approach)简记为E-R表示法)。该方法用E-R图来描述现实世界的概念模型,称为实体-联系模型,简称E-R模型。根据系统分析的主要实体有:管理员、图书、用户、订单。各个实体具体的描述属性图如下(实体属性在下图中并没有全部给出,因为属性过多的原因):

\1. 管理员实体(如图3-1所示)

img

图3-1 管理员实体

\2. 图书实体(如图3-2所示)

img

图3-2 图书实体

\3. 用户实体(如图3-3所示)

img

图3-3 用户实体

\4. 订单实体(如图3-4所示)

img

图3-4 订单实体

\5. 评论实体(如图3-5所示)

img

图3-4 订单实体

3.3.2 数据库逻辑设计

数据库逻辑设计主要是把数据库概念设计时设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。它包括数据项、记录及记录间的联系、安全性和一致性约束等等。导出的逻辑结构是否与概念模式一致,从功能和性能上是否满足用户的要求,要进行模式评价。

本系统数据库名称为bookstore,一共有五张数据表,分别为类别表(如表3-5所示)、图书信息表(如表3-6所示)、用户表(如表3-7所示)、订单表(如表3-8所示)、订单明细表(如表3-9所示)、评论表(如图3-10所示)

表3-5 类别表(tb_category)表结构

字段名称数据类型主键是否空说明
idvarchar(40)YN类别ID
namevarchar(100)NN类别名
descriptionvarchar(255)NY类别描述

表3-6 图书信息表(tb_book)表结构

字段名称数据类型主键是否空说明
idvarchar(40)YN管理员ID
namevarchar(100)NN账号
authorvarchar(100)NN作者
pricedoubleNN价格
imagevarchar(100)NY图片
descriptionvarchar(255)NY书本描述
category_idvarchar(40)NY类别ID

表3-7 用户表(tb_user)表结构

字段名称数据类型主键是否空说明
idvarchar(11)YN用户ID
usernamevarchar(40)NN账号
passwordvarchar(40)NN密码
phonevarchar(40)NN手机号码
cellphonevarchar(40)NN座机号码
emailvarchar(40)NN邮箱
addressvarchar(255)NN地址

表3-8 订单表(tb_orders)表结构

字段名称数据类型主键是否空说明
idint(11)YN管理员ID
ordertimevarchar(20)NY创建时间
pricevarchar(20)NY价格
statebooleanNY状态
user_idvarchar(40)NY用户ID

表3-9 订单明细表(tb_orderitem)表结构

字段名称数据类型主键是否空说明
idvarchar(11)YN订单明细ID
quantityintNY数量
pricedouble(20)NY价格
order_idvarchar(40)NY订单ID
book_idvarchar(40)NY书本ID

表3-10 评论表(tb_comment)表结构

字段名称数据类型主键是否空说明
idintYN评论ID
user_idintNY用户ID
create_timedatetimeNY创建时间
book_idvarchar(40)NY书本ID
contentvarchar(300)NY内容

4 系统实现

4.1 系统开发规划

心悦图书城系统采用JAVA标准分层的基于组件模型设计。将处理过程拆分到不同的层级、不同服务、不同应用服务器中分别处理,使服务器资源得到更好的利用,解决网络传输时高并发的问题。

心悦图书城系统采用经典的三层结构,面向对象的JAVA语言和MYSQL数据库存储数据。三层框架包括了界面层、逻辑层和数据层。

表现层:是系统数据来源和UI部分,承担用户操作与逻辑层之间的交互。在本层中实现前台页面的信息显示。后台登录和基本信息的管理操作。用户通过界面操作和业务逻辑层传输数据。

逻辑层是整个系统的核心,它与这个系统的业务紧密相关。

数据层:其功能主要是负责数据库的访问。简单的说就是实现对数据表的Select, Insert, Update, Delete的操作。数据库的设计是在这一套开发系统中十分重要的,好的数据库建立可以让其更快的完成项目。整个数据库的创建是心悦图书城系统开发和创立的核心技术,概括的说,就是根据用户的需求创立起满足用户的需要的数据库。数据库的整体设计是在软件开发是其最主要的问题。

4.2 开发技术简介

4.2.1 Ajax

Ajax全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。Ajax技术可以提供高度交互的Web应用,给予用户更丰富的页面浏览体验,Ajax功能的实现主要依靠XMLHttpRequest对象及其属性和方法、发送请求和处理响应。

4.2.2 MYSQL数据库

心悦图书城系统使用MYSQL平台,MYSQL相比其它数据库软件有独特的优越性,可视化的数据库创建平台,自动生成数据库关系图,视图的可视化编辑,这些特性都为程序员带来了很大便捷。MYSQL数据库和JAVA配合较为紧密,选用MYSQL数据库,无须再编写驱动或者下载驱动。ADO.NET提供了所有操作MYSQL数据库的方法。而MYSQL数据库是相对比较成熟和完善的,适合心悦图书城系统的要求。

4.2.3 JQuery

jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

4.2.4 B/S模式

B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,以不同的接入方式访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全 。

B/S模式最大的优点就是可以在任何地方进行操作而不需客户端安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护,系统的扩展非常容易。它具有分布性特点,可以随时随地进行业务处理。业务扩展简单方便,通过增加网页即可增加服务器功能。在维护方面,只需要改变网页,即可实现所有用户的同步更新,共享性较强。它实现了跨平台的系统集成服务,提供了异种机、异种网、异种应用服务的联机、联网、统一服务的开放性基础。而C/S模式开发是具有针对性的,对客户端有一定的要求,因此缺少通用性,移植性,业务变更不灵活,在维护、系统升级方面都有很大的麻烦而且兼容性较差,对于不同的开发工具,相互之间很难兼容,具有较大的局限性,新技术不便于使用。另外,它的开发成本较高,需要具有一定专业水准的技术人员才能完成。

4.2.5 BootStrap

Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目。2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用、优雅、灵活、可扩展的前端工具集–BootStrap。Bootstrap由MARK OTTO和Jacob Thornton所设计和建立。

4.3 开发页面简介

4.3.1首页

本界面是心悦图书城系统的首页设计,其功能主要具体如图4-1所示

img

图4-1

会员可以浏览书本信息,搜索书本信息,登录,注册,以下为html关键代码

<c:forEach var=“book” items="${page.list }">

<img src=“http://localhost:8080/bookstore/images/${book.image}”

data-echo="http://localhost:8080/bookstore/images/${book.image}" alt=""

width=“140” height=“212” />

${book.name }

作者:${book.author }

售价:${book.price }

加入购物车

</c:forEach>

4.3.2登录

本界面是心悦图书城系统的登录设计,其功能主要具体如图4-2所示

img

图4-2

用户可以进行登录及注册,其登录Servlet中的关键代码如下

public void doGet(HttpServletRequest request, HttpServletResponse response)

​ throws ServletException, IOException {

​ String username = request.getParameter(“username”);

​ String password = request.getParameter(“password”);

​ BusinessServiceImpl service = new BusinessServiceImpl();

​ User user = service.userLogin(username, password);

​ if(user == null){

​ request.setAttribute(“message”, “用户名和密码不对”);

​ request.getRequestDispatcher("/books.jsp").forward(request, response);

​ return;

​ }

​ request.getSession().setAttribute(“user”, user);

​ List categories = service.getAllCategory();

​ request.setAttribute(“categories”, categories);

​ String pagenum = request.getParameter(“pagenum”);

​ Page page = service.getBookPageData(pagenum);

​ request.setAttribute(“page”, page);

​ request.getRequestDispatcher("/books.jsp").forward(request, response);

​ }

4.3.3注册

本界面是心悦图书城系统的注册设计,其功能主要具体如图4-3所示

img

图4-3

用户可以进行登录及注册,其登录Servlet中的关键代码如下

public void doGet(HttpServletRequest request, HttpServletResponse response)

​ throws ServletException, IOException {

​ try{

​ String username = request.getParameter(“username”);

​ String password = request.getParameter(“password”);

​ String phone = request.getParameter(“phone”);

​ String cellphone = request.getParameter(“cellphone”);

​ String email = request.getParameter(“email”);

​ String address = request.getParameter(“address”);

​ User user = new User();

​ user.setAddress(address);

​ user.setCellphone(cellphone);

​ user.setEmail(email);

​ user.setId(WebUtils.makeID());

​ user.setPassword(password);

​ user.setPhone(phone);

​ user.setUsername(username);

​ BusinessServiceImpl service = new BusinessServiceImpl();

​ service.registerUser(user);

​ request.setAttribute(“message”, “注册成功”);

​ request.getRequestDispatcher("/client/login.jsp").forward(request, response);//这里要跳转到首页,并且显示欢迎您,,,待修改

​ }catch(Exception e){

​ e.printStackTrace();

​ request.setAttribute(“message”, “注册失败”);

​ request.getRequestDispatcher("/message.jsp").forward(request, response);

​ }

​ }

4.3.4购物车

本界面是心悦图书城系统的购物车设计,其功能主要具体如图4-4所示

img

图4-4

用户可以对图书进行删除和修改,还可以查询订单信息,其购物车中的Servlet关键代码如下

public void doGet(HttpServletRequest request, HttpServletResponse response)

​ throws ServletException, IOException {

​ try{

​ User user = (User) request.getSession().getAttribute(“user”);

​ if(user == null){

​ request.setAttribute(“message”, “对不起,请先登录”);

​ request.getRequestDispatcher("/message.jsp").forward(request, response);

​ return;

​ }

​ Cart cart = (Cart) request.getSession().getAttribute(“cart”);

​ BusinessServiceImpl service = new BusinessServiceImpl();

​ service.createOrder(cart, user);

​ request.setAttribute(“message”, “订单已生成”);

​ request.getSession().removeAttribute(“cart”);//清空购物车,这是我自己加上去的,因为点购买后,如果不清空购物车,前端点击查看购物车又出现了

​ request.getRequestDispatcher("/client/mycart.jsp").forward(request, response);

​ }catch(Exception e){

​ e.printStackTrace();

​ request.setAttribute(“message”, “订单生成失败”);

​ request.getRequestDispatcher("/message.jsp").forward(request, response);

​ }

​ }

4.3.5评论管理

本界面是心悦图书城系统的评论管理设计,其功能主要具体如图4-5所示

img

图4-5

管理员可以对评论进行管理,可以删除,查看评论信息,其Servlet关键代码如下

public void doGet(HttpServletRequest request, HttpServletResponse response)

​ throws ServletException, IOException {

​ String method = request.getParameter(“method”);

​ if (method.equals(“delete”)) {

​ delete(request, response);

​ }else if (method.equals(“listall”)) {

​ listAll(request, response);

​ } else {

​ request.setAttribute(“message”, “不支持此类操作”);

​ request.getRequestDispatcher("/message.jsp").forward(request,

​ response);

​ }

​ }

​ private void listAll(HttpServletRequest request,

​ HttpServletResponse response) throws ServletException, IOException {

​ BusinessServiceImpl service = new BusinessServiceImpl();

​ List CommentList = service.getAllComment();

​ request.setAttribute(“comment”, CommentList );

​ request.getRequestDispatcher("/manager/comment.jsp").forward(request, response);

​ }

4.3.6订单明细

本界面是心悦图书城系统的订单明细设计,其功能主要具体如图4-6所示

img

图4-6

用户可以对之前的订单进行明细查询,其订单明细中的html关键代码如下

书名 售价 数量 应收货款

<c:forEach var=“orderitem” items="${order.orderitems }">

​ ${orderitem.book.name }

​ ${orderitem.book.price }

​ ${orderitem.quantity }

​ ${orderitem.price }

</c:forEach>

订单总价 ${order.price }

收货人详细信息

用户 电话 手机 地址 邮箱 ${order.user.username } ${order.user.phone } ${order.user.cellphone } ${order.user.address } ${order.user.email }

4.3.7分类管理

本界面是心悦图书城系统的分类管理设计,其功能主要具体如图4-7所示

img

图4-7

管理员可以对书本类别进行管理,可以删除,修改类别,其Servlet关键代码如下

​ public void doGet(HttpServletRequest request, HttpServletResponse response)

​ throws ServletException, IOException {

​ String method = request.getParameter(“method”);

​ if (method.equals(“add”)) {

​ add(request, response);

​ } else if (method.equals(“delete”)) {

​ delete(request, response);

​ } else if (method.equals(“update”)) {

​ update(request, response);

​ } else if (method.equals(“find”)) {

​ find(request, response);

​ } else if (method.equals(“listall”)) {

​ listAll(request, response);

​ } else {

​ request.setAttribute(“message”, “不支持此类操作”);

​ request.getRequestDispatcher("/message.jsp").forward(request,

​ response);

​ }

​ }

​ private void listAll(HttpServletRequest request,

​ HttpServletResponse response) throws ServletException, IOException {

​ BusinessServiceImpl service = new BusinessServiceImpl();

​ List CategoryList = service.getAllCategory();

​ request.setAttribute(“categories”, CategoryList);

​ request.getRequestDispatcher("/manager/listcategory.jsp").forward(request, response);

​ }

​ private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

​ try {

​ String name = request.getParameter(“name”);

​ String description = request.getParameter(“description”);

​ Category category = new Category();

​ category.setName(name);

​ category.setDescription(description);

​ category.setId(WebUtils.makeID());

​ BusinessServiceImpl service = new BusinessServiceImpl();

​ service.addCategory(category);

​ request.setAttribute(“message”, “添加成功”);

​ } catch (Exception e) {

​ e.printStackTrace();

​ request.setAttribute(“message”, “添加失败”);

​ }

​ request.getRequestDispatcher("/message.jsp").forward(request, response);

​ }

4.3.8图书管理

本界面是心悦图书城系统的图书管理设计,其功能主要具体如图4-8所示

img

图4-8

管理员可以对书本进行管理,可以删除,修改书本信息,其Servlet关键代码如下

public void doGet(HttpServletRequest request, HttpServletResponse response)

​ throws ServletException, IOException {

​ String method = request.getParameter(“method”);

​ if (method.equalsIgnoreCase(“addUI”)) {

​ addUI(request, response);

​ }

​ if (method.equalsIgnoreCase(“add”)) {

​ add(request, response);

​ }

​ if(method.equalsIgnoreCase(“list”)){

​ list(request, response);

​ }

​ }

​ private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

​ String pagenum = request.getParameter(“pagenum”);

​ BusinessServiceImpl service = new BusinessServiceImpl();

​ Page page = service.getBookPageData(pagenum);

​ request.setAttribute(“page”, page);

​ request.getRequestDispatcher("/manager/listbook.jsp").forward(request, response);

​ }

​ private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

​ try {

​ Book book = doupLoad(request);

​ BusinessServiceImpl service = new BusinessServiceImpl();

​ book.setId(WebUtils.makeID());

​ service.addBook(book);

​ request.setAttribute(“message”, “添加成功”);

​ } catch (Exception e) {

​ e.printStackTrace();

​ request.setAttribute(“message”, “添加失败”);

​ }

​ request.getRequestDispatcher("/message.jsp").forward(request, response);

​ }

​ private Book doupLoad(HttpServletRequest request) {

​ //把上传的图片保存到images目录中,并把request中的请求参数封装到Book中

​ Book book = new Book();

​ try {

​ DiskFileItemFactory factory = new DiskFileItemFactory();

​ ServletFileUpload upload = new ServletFileUpload(factory);

​ List list = upload.parseRequest(request);

​ for(FileItem item : list){

​ if(item.isFormField()){

​ String name = item.getFieldName();

​ String value = item.getString(“UTF-8”);

​ BeanUtils.setProperty(book, name, value);

​ }else{

​ String filename = item.getName();

​ String savefilename = makeFileName(filename);//得到保存在硬盘的文件名

​ String savepath= this.getServletContext().getRealPath("/images");

​ InputStream in = item.getInputStream();

​ FileOutputStream out = new FileOutputStream(savepath + “\” + savefilename);

​ int len = 0;

​ byte buffer[] = new byte[1024];

​ while((len = in.read(buffer)) > 0){

​ out.write(buffer, 0, len);

​ }

​ in.close();

​ out.close();

​ item.delete();

​ book.setImage(savefilename);

​ System.out.println(book.getImage());

​ }

​ }

​ return book;

​ } catch (Exception e) {

​ e.printStackTrace();

​ throw new RuntimeException(e);

​ }

​ }

4.3.9订单管理

本界面是心悦图书城系统的订单管理设计,其功能主要具体如图4-9所示

img

图4-9

管理员可以对订单进行管理,可以删除,查看订单信息,其Servlet关键代码如下

public void doGet(HttpServletRequest request, HttpServletResponse response)

​ throws ServletException, IOException {

​ String state = request.getParameter(“state”);

​ BusinessServiceImpl service = new BusinessServiceImpl();

​ List orders = service.listOrder(state);//这里需要获得该用户所有订单消息,不用只看未发货的(state==false),在后台会区分未发货和已发货,在前台要罗列在一起

​ request.setAttribute(“orders”, orders);

​ request.getRequestDispatcher("/manager/listorder.jsp").forward(request, response);

​ }

查询订单明细关键代码如下

public void doGet(HttpServletRequest request, HttpServletResponse response)

​ throws ServletException, IOException {

​ String orderid = request.getParameter(“orderid”);

​ BusinessServiceImpl service = new BusinessServiceImpl();

​ Order order = service.findOrder(orderid);

​ request.setAttribute(“order”, order);

​ request.getRequestDispatcher("/manager/orderdetail.jsp").forward(request, response);

​ }

5 系统测试与分析

测试是开发时期最后一个阶段,是保证软件质量的重要手段。软件测试就是在受控制的条件下对系统或应用程序进行操作并评价操作结果的过程,所谓控制条件应包括正常条件与非正常条件。软件测试过程中应该故意地去促使错误的发生,也就是事情在不该出现的时候出现或者在应该出现的时候没有出现。从本质上说,软件测试是"探测",在"探测"中发现软件的毛病。

5.1 系统测试的目的与目标

在此系统进行初步实现之后,开始进行对系统进行测试,找出系统中存在的Bug,通过测试,用提交的Bug报告来为以后软件的改进提供标准和参考,能够在以后的系统改进中找到依据。

测试后的软件各模块基本功能可以顺利进行,尽可能的提高软件的健壮性。

5.2 系统测试意义

软件危机曾经是软件界甚至整个计算机界最热门的话题。为了解决这场危机,软件从业人员、专家和学者做出了大量的努力。现在人们已经逐步认识到所谓的软件危机实际上仅是一种状况,那就是软件中有错误,正是这些错误导致了软件开发在成本、进度和质量上的失控。有错是软件的属性,而且是无法改变的,因为软件是由人来完成的,所有由人做的工作都不会是完美无缺的。问题在于我们如何去避免错误的产生和消除已经产生的错误,使程序中的错误密度达到尽可能低的程度。

5.3 系统测试的方法

l 从是否关心软件内部结构和具体实现的角度划分:黑盒测试和白盒测试;

l 从是否执行程序的角度:静态测试和动态测试;

l 从软件开发的过程按阶段划分有:单元测试、集成测试、确认测试、系统测试、验收测试、回归测试、Alpha测试、Beta测试;

单元测试又称模块测试,是针对软件设计的最小单位 ─ 程序模块(这里所说的程序模块在Java中一个模块就是一个方法),进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。

集成测试 (组装测试、联合测试),通常在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:

l 在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;

l 一个模块的功能是否会对另一个模块的功能产生不利的影响;

l 各个子功能组合起来,能否达到预期要求的父功能;

l 全局数据结构是否有问题;

l 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。

确认测试(Validation Testing),确认测试又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致。对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。

系统测试(System Testing),是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。系统测试的目的在于通过与系统的需求定义作比较, 发现软件与系统的定义不符合或与之矛盾的地方。

验收测试(Acceptance Testing),在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验收测试。验收测试是以用户为主的测试。软件开发人员和QA(质量保证)人员也应参加。由用户参加设计测试用例,使用生产中的实际数据进行测试。在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复功能等进行确认。

5.4 系统测试环境

处理器:Inter® Core ™2 Duo T5750

内存:6GB

硬盘:500G

操作系统:Windows 10

数据库: mysql

5.5 软件测试

通过对心悦图书城系统的分析、设计和实现,完成了系统功能,下面对心悦图书城系统进行系统测试,完成软件开发最后步骤。

在测试过程中,可以使用测试工具进行系统测试、功能测试,测试过程中,遇到的Bug,需要及时修改,并形成测试文档,说明测试过程、修改情况。

软件测试包括了黑盒测试和白盒测试,不同的测试方法,测试目的不同,通过对心悦图书城系统的详细测试,完成了测试目的。

5.6 功能测试

心悦图书城系统包括了多个功能,下面对各主要功能进行测试用例说明。由于测试过程具有一定的相似性,所以本系统选取一部分功能进行测试,其余相似功能模块不再一一展示。

表5.1 注册测试用例

注册测试用例
测试用例输入数据覆盖等价类预期结果
邮箱密码用户名头像昵称性别联系手机注册时间
Test1123456@qq.comadminadmin图片Maomao1136458978502014-3-101,6,7,11注册成功
Test2*@$$.comAdmin1Admin1图片Maomao21365454520162,6,7,11注册失败
Test3.@Admin2Admin2图片Maomao313654545063,6,7,11注册失败
Test4adminAdmin3Admin3图片Maomao413654545444,6,7,11注册失败
Test5@@…Admin4Admin4图片Maomao5136545454525,6,7,11注册失败
Test6123456@qq.comAbcdAbcd图片Maomao61365454511,7,8,11注册失败
Test7123456@qq.comAbcdefghiAbcdefghi图片Maomao713654545441,7,9,11注册失败
Test8123456@qq.com##########图片Maomao813654545541,6,10,11注册失败
Test9123456@qq.comAdmin5Admin6图片Maomao9136545451,6,7,12注册失败

表5.2 登录测试用例

登录测试用例
测试用例输入数据覆盖等价类预期结果
登录名密码
Test1AdminAdmin1,3登录成功
Test2Admin1,4登录失败

**
**

5.7 测试总结

把开始的代码写得越好,它出现的错误也就越少,你也就越能相信所做过的测试是彻底的。系统化测试以一种有序方式设法探测潜在的麻烦位置。同样,毛病最可能出现在边界,这可以通过手工的或者程序的方式检查。自动进行测试是最理想的,用得越多越好,因为机器不会犯错误、不会疲劳、不会用臆想某此实际无法工作的东西能行来欺骗自己。回归测试检查一个程序是否能产生与它们过去相同的输出。在做了小改变之后就测试是一种好技术, 能帮助我们将出现问题的范围局部化,因为新问题一般就出现在新代码里面。

测试和排错常常被说成是一个阶段,实际上它们根本不是同一件事。简单地说,排错是在你已经知道程序有问题时要做的事情。而测试则是在你在认为程序能工作的情况下,排错是在你已经知道程序有问题时要做的事情。而测试则是在你在认为程序能工作的情况下,为设法打败它而进行的一整套确定的系统化的试验。

Edsger Dijkstra有一个非常有名的说法:测试能够说明程序中有错误,但却不能说明其中没有错误。他的希望是,程序可以通过某种构造过程正确地做出来,这样就不再会有错误了,因此测试也就不必要了。这确实是个美好生活的目标,但是,对今天的实际程序而言,这仍然还只是一个理想。所以应该集中精力讨论如何测试,如何才能够更快地发现程序错误,如何才可以使得工作更有成效、效率更高。

6 总结与展望

心悦图书城系统,实现了该网站的后台管理模块、前台管理模块、会员管理模块、订单管理模块、搜索管理模块、单点登录管理模块。本系统介绍了心悦图书城系统的设计与实现过程,主要经过需求分析,相关技术研究,系统架构设计,后台数据库设计,模块设计和数据库设计,最后进行了编码,最终实现了一个B/S模式的心悦图书城系统。在系统的设计和开发过程中,主要完成了以下工作:

  1. 对心悦图书城系统进行用户需求调研,将现有业务与传统技术进行对比总结,完成本系统的用户需求分析。通过对用户需求分析和技术背景研究,分析了系统的业务流程,并采用UML工具对用户需求进行统一建模,导出系统的软件需求分析说明。

  2. 心悦图书城系统使用MYECLIPSE和MYSQL数据库开发。

  3. 根据系统业务需求对系统数据库进行详细设计,主要采用了数据库3NF标准对数据库内部各种关系进行抽象分析,建立数据库E-R模型图,最大程度上避免数据冗余,保证数据的一致性。

  4. 实现了心悦图书城系统的架构设计,在系统的设计与实现的过程中,系统采用经典的三层结构,面向对象的JAVA语言和MYSQL数据库存储数据。三层框架包括了界面层、逻辑层和数据层。

此外,我还觉得,我个人在这次设计中走了很多弯路。主要是因为平时很少接触软件开发工作,在应用方面缺乏经验,以后还需要更多的努力。

对我来说,这次设计的本身所产生的影响,还远远没有结束,我从本次毕业设计中学到了许多课本上没有的知识。通过自己的学习和努力;通过老师的指导和教育,使我不仅仅在知识水平和解决实际问题的能力上有了很大的提高。还从思想的深处体会到,要把自己的所学变成现实时所将面对的种种难题。

系统不免有错误和待改进之处,真诚欢迎各位师长、同行提出宝贵意见。

致谢

时光荏苒,不觉三年已到头。很多熟悉的形影也许就将从身边永远地失落了。每年的这个时候,校园总难掩物是人非的感伤。
毕业论文正代表着大学的终结,完成它既有一种收获感,又有一种失落感,可无论如何它代表着我三年的努力,代表了我三年的历程。当它终于完工的时候,我不禁想起了很多人,很多事,尤其是辛勤培养我的老师们,谢谢你们!
感谢我的论文导师孙小强老师,感谢他在我的论文完成过程中给与的指导与帮助,让我得以顺利地完成论文。

参 考 文 献

[1] 刘京华等.Java Web整合开发王者归来+Java Web整合开发实战.北京:清华大学出版社,2017.1

[2] 王克宏,Java技术编程(基础篇),北京,清华大学出版社,2006.2

[3] 老虎工作室,JSP动态网页制作基础培训教材[M](第2版),北京,清华大学出版社,2005.1

[4] 凯 S.霍斯特曼(Cay S. Horstmann).Java核心技术 卷I.北京:机械工业出版社,2016.9

[5] 杨开振等.Java EE互联网轻量级框架整合开发—.北京.电子工业出版社,2017.7

[6] 刘洁,基于JSP和javaBean技术的网络书城设计与实现[J],现代情报.2005年第11期

[7] 塞若(Sierra,K.)等.Head First Java(中文版).北京:中国电力出版社,2016.5

[8] 许令波.深入分析Java Web技术内幕.北京:中国电力出版社,2017.5

[9] 本·弗莱恩HTML5+ CSS3+JavaScript 网页设计实战.北京.人民邮电出版社,2017.1

[10] 崔红娟,网络书城建设分析[J],农业图书情报学刊,第17卷.第11期,2005年11期

[11] 威廉斯Java Web高级编程[M].北京:清华大学出版社,2017.6

[12] 柴田望洋.明解Java[M].北京.人民邮电出版社,2018.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值