基于Java EE的网上书店系统

摘要:基于Java EE的网上书店系统,本系统作为电商系统,销售书本,大大提高了买书的方便,是信息化发展的重要体现。21世纪互联网信息化发展的时代,本系统就是致力于互联网,方便生活为主旨。本文简要分析了网上书店系统的功能需求,同时也对图书管理系统做了必要性的分析。    

网上书店系统采用的是轻量级的B/S架构,基于Java EE,使用切合企业级的SSM框架对系统进行开发和实现,数据库采用中小型的关系型数据库MySQL,因为我们个人开发项目数据量相对较少,它可以完全满足需求,数据库的设计部分是本文的重点章节,也是系统设计的重点部分,遵循数据库的三范式的原则。根据系统的需求,确定了数据库的设计要求,字段,表,类型,建立E-R模型图,数据库的逻辑设计,数据库的连接部分进行了详细的说明,包括Mybatis连接数据库的配置。

网上书店的主要分为前台和后台和数据库三部分,在用户采购图书的过程中,为了用户方便的采购图书,本系统设计了购物车的功能,方便客户统一选择完自己想买的图书够,一并下单购买,网上购物系统中很重要的功能就是购物车的功能,因为用户购买的物品可能不止一个,所以购物车的设计是本系统的重点部分。

关键词: 基于Java EE的网上书店系统 SSM框架 数据库 购物车

 

 

 

Web-Based Bookstore System Based On Java EE.

 

Abstract: based on the online bookstore system of Java EE, this system, as an e-commerce system, sells books and greatly improves the convenience of buying books, which is an important embodiment of the development of informatization. In the development of Internet informatization in the 21st century, the system is dedicated to the Internet and the convenience of life. This paper briefly analyzes the functional requirements of the online bookstore system, and analyzes the necessity of the book management system.

Online bookstore system USES B/S architecture is a lightweight, based on Java EE, using relevant enterprise SSM framework for system development and implementation of relational database MySQL database using small and medium, because of our personal development project data volume is relatively small, it can fully meet the requirements, the database design is the key chapter of this article, was a key part of the system design, follow the principle of database of three paradigm. According to the demand of the system, the design requirements of the database, field, form, type, e-r model diagram, logical design of database, database connection part has carried on the detailed instructions, including MyBatis configuration for connecting to the database.

Mainly divided into the foreground and the background of the online bookstores, and database of three parts, the user in the process of purchasing books, convenient for user purchase books, the system design of the shopping cart function, convenient customer unified enough choice after you want to buy books, along with all the orders to buy, online shopping system is very important function in the function of the shopping cart, because the user purchases may be more than one, so the design of the shopping cart is a key part of this system.

Key words: based on Java EE's ,online bookstore system, SSM framework ,database shopping cart.

 

目录

    1 引言.............................. 5

1.1 选题意义....................... 5

1.2 论文结构分析................... 5

1.3系统的现状分析................. 6

    2 系统的需求分析..................... 6

2.1开发工具....................... 6

2.2系统分析....................... 6

    3系统的设计........................ 10

3.1 数据库的设计.................. 10

3.2搭建开发的环境................ 12

3.3网上书店系统的目录结构........ 14

3.4网上书店系统建立业务实体对象.. 20

3.5用户注册模块.................. 22

3.6网站公告...................... 24

3.7购物车模块.................... 25

4系统的实现........................ 28

4.1数据库实现.................... 28

4.2 系统的实现效果图.............. 30

5系统的测试........................ 33

5.1测试的分类和区别.............. 33

5.2 测试报告...................... 33

5.3 测试结果...................... 37

附录................................ 38

   致谢和结论.......................... 42

   参考文献............................ 43

 

 

1 引言

1.1论文结构分析

21世纪是互联网和信息化的时代,无论百亿级的集团企业还是到一个简单的餐馆都离不开互联网,离不开信息化,信息化带给我们的不只是新时代的冲击,更多的是带给我们方便,潜移默化的改变我们的生活习惯,我们的衣食住行的方式都在互联网的浪潮下进行革命和更新。我选择网上书店系统就是为了方便人们购书。传统的购物方式逐渐走下历史的舞台,所以在就餐方面出现了美团,饿了么,购物方面出现了京东淘宝天猫等电商平台,网上购物成为一种新的时尚。购物者不再需要在拥挤的市场或者是人来人往的书店里去买书,购物,不需要仔细找寻自己想买的物品,像图书等,只需要惬意的坐在家里,坐在电脑的旁边,就可以在各种购物网站中方便的査询购买自己想要的书和物品。

1.2论文结构分析

系统是基于Java EE的网上书店系统,,环境是Eclipse,MySQL,JDK用的是1.8版本,Tomcate8.0,系统的框架搭建是用Spring,Spring MVC,MyBatis,系统可是实现用户的注册,购物车,图书的增删改查等功能,购物车的设计和数据库的设计时本文的重点。

本文第一章引言是对系统的开发的技术和环境以及主要功能进行简要的分析;

本文第二章对系统进行了简单的需求分析和功能实现;

本文第三章是讲对数据库的设计也是本文的重点;

本文第四章是系统的实现;

本文第五章是测试部分,本系统采用的是黑盒测试,用黑盒测试对具体的数据库做了检验,对于系统的功能需求作了更进一步验证,这样更加贴近用户使用的需求和系统产品所要表现出来的效果;

1.3系统的现状分析

21世纪信息化和互联网的时代,一些关于互联网的新技术新产业正在发展像大数据,人工智能AI等,都离不开信息化,大数据简单的说就是信息的标签化,本系统是在互联网下的产物,电商平台,比较大的有京东,淘宝,天猫等,本系统只是专业的网上购书系统,目的就是方便人们购书,可以做到足不出户,并且可以提供搜索的功能,模糊查询,只需要做在电脑前就可以买到自己想要的书本,伴随着时代的进步,网上购书已经成了一成新的生活方式,也可以说是一种新的潮流。

 

2 系统的需求分析

2.1开发工具

 本系统是基于Java EE的网上书店系统,开发工具是 Eclipse,数据库选用的是

中小型的数据库MySQL,JDK选用的是1.8版本,Tomcate 8.0版本。

2.2系统分析

2.2.1需求分析

 本系统是基于Java EE的网上书店系统,开发工具是 Eclipse,数据库选用的是

中小型的数据库MySQL,JDK选用的是1.8版本,Tomcate选用的是8.0版本。传统的购物方式逐渐走下历史的舞台,所以在就餐方面出现了美团,饿了么,购物方面出现了京东淘宝天猫等电商平台,还有像所上门推销、电话订购和网上购物等新型的购物渠道。其中网上购物逐渐被越来越多的人接受,并成为一种新的时尚。购物者不再需要在拥挤的市场或者是人来人往的书店里去买书,购物,不需要仔细找寻自己想买的物品,像图书等,只需要惬意的坐在家里,坐在电脑的旁边,就可以在各种购物网站中方便的査询购买自己想要的书和物品。

网上书店系统中购物车是一个很实用而且很重要的功能,因为用户需要购买的物品可能不止是一个,购物车可以实现先选最后统一付款。

如果没有购物车的功能用户就会边选边买(正常的购买过程,都是选择商品提交订单填写收发货地址,最后付款),用户的操作相对来说会很繁琐,而且对供应商来讲也不方便。就像在便利店购买商品是一样的,假如没有购物篮和物品箱,顾客每购买一件就去收银处付一次款,可以猜想工作人员,客户,收银员有多累,超市也会变得没有秩序。
所以,购物网也需要实现购物车功能,来方便用户的购买,同时也方便供应商的管理,像进出货,财务凭证,数据分析等。 拿网上书店系统来说,用户可以将想要购买的图书添加到购物车中,可以在购物车中修改图书购买数量,还可以从购物车中删除不想购买的图书,在购买的过程中提交到购物车里面在最后统一对购物车中所有书本进行付款结账,添加收货地址和联系人的信息实现购物车的业务流程。

2.2.2可行性分析

1. 经济的可行性  

经济可行性的评判决定因素是网上书店系统的经济效益。本系统可以大大的节约消费者时间,可以做到足不出户的购买图书,大大的解决了购买者的时间成本和人力的成本,并且大大的节约了购买者的精力,可以做到不用辛苦的去书店调书,提高了消费者的权益,在系统的经济上可以实施。

2.技术的可行性  

JAVA是当下最火的语言之一,当下很多系统都是基于JAVA开发的,JAVA语言的特性是,可以做到一次编译,在各系统下都可以运行。而且很多其他很火的新兴技术也是依附于JAVA基础的,比如Android,还有大数据等,并且JAVA是面向对象的编程语句,也是面向规范的编程的语言。技术应用层次比较好,所以用JAVA实现是完全没有问题的,满足不如你系统设计的基本要求。

2.1 前端技术应用JSP

   首先JSP做前端界面比较简单,界面看着简洁,而且工作量不大,JSP是JAVA服务器界面,Java sever pages,而且JSP就是为了简化java servlet的设计,并且JSP的功能比较强大,有九大内置的对象,像我们做JSP界面中有九个这分别是①response客户端响应的对象②session对象③application对象④out对象⑤pagcontext对象⑥config对象⑦page对象⑧exception对象⑨request请求对象

2.2 后台技术应用Spring,SpringMVC,Mybatis

Spring:Spring春天,它是一个开源框架,Spring也是一个轻量级的java语言开发框架。

SpringMVC:Spring MVC是SpringFrameWork开发完成,已经融合在Spring Web Flow里面。Spring MVC 的最大亮点在于分离了模型对象、分派器控制器、以及处理程序对象的角色,这种分离可以使他们更加方便的管理和更加容易进行开发定制。

Mybatis:MyBatis 支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架 ,在使用Mybatis需要在开发工具中导入Mybatis所需要的jar包,配置xml,简化了连接数据库的操作。

3. B/S架构

基于JavaEE的网上系统采用的是轻量级B/S架构,与B/S架构相对的是C/S架构,下面我会举例说明两者之间的区别。

C/S架构就是客户端/服务器(Client/Server)模式,需要我们自己有Portal服务器,主要指的是传统的应用程序,像大企业的管理系统,ERP业务系统,都需要这种设计模式。
    B/S模式:是浏览器/服务器(Browser/Server)模式,轻量级的架构主要指的是web应用系统。就像各种电商平台比如京东,苏宁,天猫等等。C/S模式和B/S模式对比可以清晰的看出,B/S模式最大的优势轻量级体现在客户端有浏览器就可以轻松运行系统。C/S模式的系统则需要在服务器上进行安装和运行,相对B/S模式来说更加的繁琐。B/S模式的应用程序对于客户端不存在更新,一直都是最新的。

 

请求

 

数据库服务器

 

  WEB

 服务器

 

请求

图2.1 B/S架构模型所示:

 

响应

 

响应

 

 

        
   
 

  浏览器

   
 
 
   
   
 
 

 

 

 

 

 

                          

图2.1 B/S架构模型

4.数据库设计

本系统选用中小型的数据库Mysql,根据系统的需求,确定需要建立的表,和所需要的字段,并且遵循数据库的三大范式原则,其中第一范式简单的而说是无重复的列,第二范式是非主属性非部分依赖于与主关键字,第三范式,满足第三范式的前提是必须满足第二范式的原则,第三范式属性就是不依赖于其他主属性。并且Mysql的选用是因为它的操作安装相对来说都比较的简单,容易应用。               

2.3功能实现

根据网上书店系统的需求分析,决定将网上书店系统可以这几个模块:搜索界面,登陆界面,注册界面,购物车,网站公告,以及对于购物车的增删改查,购物车的结算功能。

2.3.1  系统模块图

本网上书店系统的功能模块图2. 2网上书店系统模块图所示。

 

网上书店系统

 

网站公告

 

购物车的增删改查

 

登陆

 

注册

 

结算

 

图书搜索功能

 

购物车

 

 

                    
   
 
   
 
   
 
   
   
   
   
       
       
 
 
 
 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

图2.3网上书店系统模块图

2.4 运行环境要求

要完成系统的设计和无差错的运行,对我们的软硬件都有一定的要求,具体的要求如下表2-1系统软硬件要求所示:

表2-1系统软硬件要求

软件

硬件

运行环境

Eclipse 4.4.1

处理器:inter i5以上

Windows7以上

MySQL5.5

内存8G

谷歌最新版浏览器

JDK1.8

硬盘500G以上

 

Tomcate8.0

 

 

 

 

3系统的设计

在开发之前我们要做到就是对系统的分析,首先简要概述一下开发的基本流程:需求分析定义(需求定义书)-外部设计(选取框架等)生成外部设计书-内部设计(界面,内部,功能,表单等)生成内部设计书-项目设计(program)生成程序设计书-代码编写—(源代码)-项目的测试(单体测试,黑盒测试,白盒测试,正测,反测等)。在这部分就是熟悉我们这个项目设计部分,根据需求网上书店系统分为两个部分,前台界面和后台逻辑,在用户购买图书的过程中,添加了购物车的功能,方便用户在购买中能够把想买的书先加入购物车,最后统一付款。

3.1 数据库的设计

根据系统需求的分析和功能的初步设计图,接下来就是对数据库的设计,数据库的设计是最重要的环节,直接影响到程序的使用和功能的实现。

本系统采用的是MySQL数据库,在数据库中,需要为网上书店系统建立一个数据库名为BookShop。集合需求和功能发现本系统一共需要建立五个表分别是:图书表book,目录分类表catalog,订单列表orderitem,订单表orders,用户表user。

book 该表用来存储书本 主要包括书名,价格,和图片 该表字段信息如下表2-2 book表所示:

表2-2 book表

字段名称

类型

约束

catalogid

int

分类表主键

bookname

varchar( 16)

非空

price

double

非空

catalog目录分类表 该表用来存储分类的名字,该表字段设计如下表:

表2-3catalog表

字段名称

含义

类型

约束

catalogid

分类列表主键

int

主键

catalogname

分类列表姓名

Varchar(20)

非空

 

orderditem订单列表,该表用来存储订单的数量,该表字段设计如下表2- 4 orderditem表所示:

表2-4 orderditem表

字段名称

含义

类型

约束

orderitemid

订单数量的主键

int

主键

bookid

书本主键

int

非空

orderid

订单主键

int

非空

quantity

数量

int

非空

orders订单表,该表用来存储订单的数量和订单的时间,该表字段设计如下表2- 5 orders表所示:

表2-5 orders表

字段名称

含义

类型

约束

orderid

订单主键

int

主键

userid

用户主键

int

非空

orderdate

 

订单时间

data

非空

 

user用户表,该表用来存储用户的信息,姓名,密码等,该表的字段设计如下表2- 6 users表所示:

表2-6 users表

字段名称

含义

类型

约束

userid

用户主键

int

主键

username

姓名

Varchr(20)

非空

password

 

密码

int

非空

gender

性别

Varchar(10)

非空

age

年龄

int

非空

3.2搭建开发的环境

基于JavaEE的网上书店系统采用Spring、SpringMVC、Mybatis,MySQL的组合实现,就是我们简称的 SSM框架,它是是标准的MVC开发模式,这样的优势在于将系统划分为四层分别是表现层,controller层,service层,DAO层这四层。

1.SSM框架的处理逻辑,如下图3.1 SSM框架处理逻辑图所示:

 

 

用户

 

Diapacherservlet分发器

 

Hander mapping

        映射

 

Controller

控制器

 

 

 

 

 

 

 

 

   

 

Service

业务逻辑层

 

JSP显示Model数据

 

Model and View

 

视图解析器(渲染视图)

 

 

      
   
 
   
  
 

 

 

 

 

 

 

 

 

 

 

 

 

图3.1 SSM框架处理逻辑图

  1. 要实现一个功能步骤是

①先定义实体类,定义对象属性(参照数据库表中的字段,set,get方法,构造器)的创建

②写Mapper.xml(Mybatis)的配置文件,定义要实现的功能,比如insert,upadte,add,delete方法等

③Mapper.java,将Mapper.xml的操作按照id映射成java函数

④service.java为控制层传递需要的参数,完成相应的功能之后将参数返回给Servlet控制层

⑤编写Controller.java,连接Jsp请求和service业务层,取出想对应的参数,自动分配,映射到不同的URL的处理逻辑和函数方法,获取参数,对参数进行一并的处理,之后传给service服务层。

⑥写JSP页面调用,请求哪些参数,需要获取什么数据。

3.3网上书店系统的目录结构

图3.2代码逻辑目录图

3.3.1代码目录分析

首先本项目是一个Maven项目,Maven项目所需要的JAR包,可以自动下载,只需要debug install,在pom.xml中引入jar包,网上有很多demo,它是Maven项目的核心管理文件,此外,根目录下还有src和target这两个目录,src目录的作用是存放源代码,target目录的作用是存放自动生成的目标代码。

main目录下有java、resources、webapp三个目录,java目录存放java类,resources目录存放资源,如配置文件等,webapp目录存放网站相关的资源,如jsp页面、js、图片、css样式表等。

main目录是我们系统运行的主工作目录空间;可以在项目上创建package(java包)java代码都放在目录下;resources目录放配置文件和注册文件;webapp目录包含js、images、css等存放前台界面图片jar包等。

在这个网上书店系统中中,为了jsp页面的安全性考虑,将jsp页面放在WEB-INF目录中,因为WEB-INF目录是受保护的目录,浏览器不能直接访问WEB-INF目录中的jsp页面这样在安全性上较好。

 

图3.3 代码主目录

3.3.2各配置文件的说明

1配置applicationContext.xml

进行集成商时,首先要明白各部分的关系,Mybatis持久数据库层,涉及到了DAO层,在这儿的applicationContext.xml就是配置了Mybatis的参数,用于连接Mysql,还有Mapper的接口和XMl的位置。

①配置扫描service层

②配置数据源

③配置扫描dao层

④配置扫描相应的映射机制以及扫描相应的mapper文件。

以下是applicationContext.xml 部分配置文件内容:

<?xml version="1.0" encoding="UTF-8" ?>  

       <!--配置扫描service层部分-->  

            <context:annotation-config />  

    <context:component-scan base-package="service包" />  

              <!-- 将jdbc.properties文件读取进来 -->  

       <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  

            <!-- 指定jdbc.properties存放的位置 -->  

            <property name="location" value="classpath:jdbc.properties"></property>  

       </bean>  

                  <!-- 扫描保存sql语句的xml文件,相当于将原来mybatis配置文件中的数据源通过Spring容器的依赖注入直接与Spring完美整合 -->  

       <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">  

        <!-- 配置数据源 -->  

                <!-- 扫描dao层中的java接口类 -->  

       <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">  

        <property name="basePackage" value="mapper接口所在的具体包"></property>  

       </bean>  

   </beans>  

2.Springmvc.xml

      Springmvc.xml和之前springmvc层单独开发的模式大体类似逻辑处理部分也是一样,springmvc检测控制层,Spring是从serlet到service到dao层。另外如果controller层中的文件使用了注释的要开启注释驱动。

     Springmvc的核心是DispatcherServlet,DispatcherServlet负责为控制层返回的ModelAndView进行调度寻找相应的视图文件必须要在配置文件中配置视图解析器,返回的model与view之间才能关联。同时,springmvc中的其它一些内容也可以在这里进行配置,比如编码和文件上传以及数据校验等。着就要通过<bean/>元素进行添加配置内容完成。

Springmvc.xml的部分配置文件如图3.4 SpringMVC配置文件图所示

 

图3.4 SpringMVC配置文件图

3.web.xml

web.xml文件关系着系统的全局,当applicationContext.xml文件和springmvc.xml文件完成之后,全都要加载到web.xml中,这需要配置一些类,如图3.5 web.xml配置文件图所示:

图3.5 web.xml配置文件图

4.pom.xml

Maven项目核心配置文件,存储项目需要的各种jar包,镜像如所图3. 6 maven项目主配置文件图示:

图3.6 maven项目主配置文件图

 

 

3.4网上书店系统建立业务实体对象

按照系统之间的需求,和数据库五张表的字段设计,以及这五张表的映射对象,本章值选取User表说明。

 

1.建立javabean 实体对象:

图3.7 Javabean 实体类图

设置set,get方法,创建构造方法;

  1. Mybatis连接数据库部分

<?xml version="1.0" encoding="UTF-8" ?>

 

<!DOCTYPE mapper

        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.itlaobing.dao.IUserDao">

    <!--<resultMap id="userMapper" type="cn.itlaobing.model.UserModel">-->

        <!--<id property="userId" column="userid"/>-->

        <!--<result property="userName" column="username"/>-->

        <!--<result property="passWord" column="password"/>-->

        <!--<result property="gender" column="gender"/>-->

        <!--<result property="age" column="age"/>-->

    <!--</resultMap>-->

    <select id="findByUser" resultType="userModel" parameterType="string">

        SELECT * FROM USER WHERE username=#{userName}

    </select>

    <insert id="addUser" parameterType="userModel">

        INSERT INTO USER VALUES(NULL,#{userName},#{passWord},#{gender},#{age});

    </insert>

</mapper>

数据库连接的基本信息:

数据库名为bookshop,端口号为8080

url=jdbc:mysql://localhost:3306/bookshop

user=root

pass=123

3.5用户注册模块

  1. 首先编写前台JSP界面名字为reg.jsp 

部分前台注册代码

 

    <div class="zhuce">

       <p>----------------欢迎注册-----------------</p>

       <h4 style="color: red; font-size: 12px;margin-top: 50px">${message}</h4>

       <form action="reg" method="post">

       用户名:<input type="text" name="username" value="" /><br />

       密 码:<input type="password" name="userpass" value=""/><br />

       <a href="login1"><input style="width: 150px;"type="button" value="登录"/></a>

       <input style="width: 150px;" type="submit" value="注册" />

       </form>

       <%-- <a href="zhuce.jsp"><input style="width: 150px; margin-left:140px;" type="submit" value="注册" /></a>--%>

       </div>

前台界面设置Button按钮  name=”注册”,在上述代码form标签中添加action的访问路径action=’post’

写注册处理类LoginController

在这儿简单描述一下method=“post” 和method=“get”的区别

①这两种请求方式数据传输安全性相比post安全性较高,地址栏不会出现用户名和密码;

②在做数据的查询操作时建议用get,增删改查操作时建议用post

③get传参,参数大小不能大于2K,而post一般是不受限制

④对于get传参用的是Request.QueryString取值,对于post传参,用Request.Form取值。

⑤客户端,get通过url传值

Get提交后地址栏会发生改变

Post提交表单后地址栏不会发生改变

本系统为了用户的安全性考虑在前台JSP界面传参的方式选择post。

2.处理类代码

 @RequestMapping(value = "reg",method = RequestMethod.POST)

    public String addUser(Model model,String username,String userpass){

        UserModel userModel = userService.findByUser(username);

        if(userModel != null){

            model.addAttribute("message","用户名已经存在,请登录");

            return "/WEB-INF/view/login.jsp";

        }

        UserModel userModel1 = new UserModel();

        userModel1.setUserName(username);

        userModel1.setPassWord(userpass);

        int i = userService.addUser(userModel1);

        if(i>0){

            model.addAttribute("message","用户名已经注册,请登录");

            return "/WEB-INF/view/login.jsp";

        }else{

            model.addAttribute("message","用户名注册失败");

            return "/WEB-INF/view/reg.jsp";        }

功能实现图展示:

图3.8注册界面图

3.6网站公告

这部分内容是在前台JSP界面写死的,具体的实现代码如下所示:

   <div class="box2_b">

        <img src="img/index_14.gif" />

        <div class="box2_bb">

            <p>在圣诞来临之际</p>

            <p>本书店为答谢新老朋友</p>

            <p>特举办购物有奖活动</p>

            <p>购物有奖,快快行动吧!</p>

        </div>

 

定义一个div文本域在里面添加段落和实现添加一个图片:

实现图如下图3. 9  网站公告所示:

 

图3.9  网站公告

添加JavaScript脚本,前台界面更加的美观

3.7购物车模块

购物车部分是本文的重点部分,用户可以先把自己喜欢的书加入购物车最后统一付款。

3.7.1 实体类的建立

首先根据数据库所需要的字段建立实体类

package cn.itlaobing.model;

import java.util.Date;

public class OrdersModel {

    private int orderId;

    private int userId;

    private Date orderDate;

    public int getOrderId() {

        return orderId;

    }

    public void setOrderId(int orderId) {

        this.orderId = orderId;

    }

    public int getUserId() {

        return userId;

    }

    public void setUserId(int userId) {

        this.userId = userId;

    }

    public Date getOrderDate() {

        return orderDate;

    }

3.7.2 前台jsp界面

部分代码展示:

模糊查询界面:

<div class="box1">

    <form style="text-align: center;" method="post" action="">

        <input style="height: 25px;margin-top: 10px; width: 200px;" id="bookname" type="text" value="请输入书名"/>

        <input type="submit" value="搜索"/>

    </form>

</div>

图3.10 前台Jsp代码图

3.7.3 购物车的逻辑实现模块

    @Controller

    public class ShoppingController {

        @Autowired

        private CartService cartService;

        @Autowired

        private CatalogService catalogService;

        //    查询购物车

    @RequestMapping("/shoplist")

    public String getShopCarList(Model model, HttpServletRequest request)

        List<CatalogModel> list1 = catalogService.findAllCata();

        model.addAttribute("titl",list1);

        int userid = (Integer) request.getSession().getAttribute("userid");

        Logger logger=Logger.getLogger(ShoppingController.class);

        List<CartVo> list= cartService.findCartById(userid);

        if(list!=null)

        {

            model.addAttribute("list",list);

            logger.info("数据查询成功");

        }

        return "WEB-INF/view/shopping.jsp";

    }

//    跳入shopping_result.jsp

    @RequestMapping("/shopresult")

    public String forwardToShopResult(Model model)

    {

        List<CatalogModel> list1 = catalogService.findAllCata();

        model.addAttribute("titl",list1);

        return "WEB-INF/view/shop_result.jsp";

    }

}

4系统的实现

系统的实现分为两个部分第一部分是数据库的实现,第二部分是网上书店系统的实现

4.1数据库实现

4.1.1数据库建表部分

首先建立数据库名字为bookshop

1)建表语句:

CREATE DATABASE /*!32312 IF NOT EXISTS*/`bookshop` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `bookshop`;

2)建立book表

主键为bookid,自增长,bookname,存放书名,price价格,picture,图片的地址,catalogid,存放catalog的主键

DROP TABLE IF EXISTS `book`;

DROP TABLE IF EXISTS `book`;

CREATE TABLE `book` (

  `bookid` int(11) NOT NULL AUTO_INCREMENT,

  `catalogid` int(11) NOT NULL,

  `bookname` varchar(20) NOT NULL,

  `price` int(11) NOT NULL,

  `picture` varchar(300) DEFAULT NULL,

  PRIMARY KEY (`bookid`)

) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

 

3)建立catalog表

catalog目录分类表 该表用来存储分类的名字

CREATE TABLE `catalog` (

  `catalogid` int(11) NOT NULL AUTO_INCREMENT,

  `catalogname` varchar(20) NOT NULL,

  PRIMARY KEY (`catalogid`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

4)建立orderitem表

orderditem订单列表,该表用来存储订单的数量

CREATE TABLE `orderitem` (

  `orderitemid` int(11) NOT NULL AUTO_INCREMENT,

  `bookid` int(11) NOT NULL,

  `orderid` int(11) NOT NULL,

  `quantity` int(11) NOT NULL,

  PRIMARY KEY (`orderitemid`)

(5)建立order表

orders订单表,该表用来存储订单的数量和订单的时间

DROP TABLE IF EXISTS `orders`;

CREATE TABLE `orders` (

  `orderid` int(11) NOT NULL AUTO_INCREMENT,

  `userid` int(11) NOT NULL,

  `orderdate` timestamp NULL DEFAULT NULL,

  PRIMARY KEY (`orderid`)

) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

(6)建立用户表

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

  `userid` int(11) NOT NULL AUTO_INCREMENT,

  `username` varchar(20) NOT NULL,

  `password` varchar(20) NOT NULL,

  `gender` varchar(4) DEFAULT NULL,

  `age` int(11) DEFAULT NULL,

  PRIMARY KEY (`userid`)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

4.1.2数据库连接部分

采用Mybatis连接数据库:

url=jdbc:mysql://localhost:3306/bookshop

user=root

pass=123

地址数据库的名字,用户名和密码

4.2 系统的实现效果图

4.2.1 登录和注册界面

登录界面如下图4. 1注册界面所示:

图4.1注册界面

注册界面:

图4.2注册界面实现图

4.2.2 网站公告模块实现图

图4.3网站公告实现图

4.2.3 图片分类模块

 

图4.4 图书分类图

4.2.4 购物车模块

图4.5 购物车模块图

 

购物车上方带有模糊查询功能可以查询加入购物车的图书

 

图4.6 模糊查询实现图

5系统的测试

简述一下系统的测试,在企业中都有专业的测试人员其中软件的测试在软件开发的过程中,起到了至关重要的作用,这关系到软件的上线使用过程,如果出了问题对企业的影响是比较坏的。

5.1测试的分类和区别

   软件的测试有了行业的标准,是软件开发的最后一个环节,其中测试分为

①单元测试:按照软件的功能测试,软件开发初期常用

②集成测试:就是联调,把单元结合到一起测试,涉及到多系统之间的对接的时候经常地用集成测试,较大的系统之间经常用

③系统测试:把所有的东西整合好之后统一测试

④验收测试:简单说就是看软件符不符合需求

⑤回归测试:软件修改后,在次验证问题的测试

⑥黑盒测试:又称功能测试,是通过使用的功能来测试

⑦白盒测试:是通系统的源代码进行测试不使用前台UI界面

黑盒测并不能取代白盒测试,两者直接是互补的,黑盒测试可能发现不出系统内部的问题,黑盒测试重视的是系统的功能

 

通过几种测试的比较后本系统采用的是黑盒测试,对软件系统的功能需求等的进行进一步的验证,通过正测和反测里来验证系统的功能实现以及问题。

5.2测试报告

我们将采用不同的输入结果给出不同的实现结果看一下测试的结果。

1.登录测试:

同一个用户输入不同的密码,相同密码不同的用户,或者没注册的用户实现登录的处理,结果如下表5-1登录测试表所示:

表5- 1登录测试表

用户信息

结果

分析

用户:drp

密码:123456

实现登录

符合要求

用户:drp

密码:1222222

用户名或密码错误

符合要求

用户:dongrp

密码;123456

用户名或密码错误

符合要求

 

测试系统结果图:

图5.1 登录测试结果图

  1. 注册测试

我们将采用已经注册的用户和新用户注册进行测试,同样的用户不同的密码进行测试:

测试结果表5- 2 测试功能表所示:

表5-2 测试功能表

用户信息

结果

分析

用户:drp

密码:123456

用户已经注册,请登录

符合要求

用户:dongrps

密码:123456

进如登录界面

符合要求

用户:drp

密码:1111111

用户已经注册,请登录

符合要求

                      

图5.2  注册测试结果图

  1. 搜索测试

搜索目录内的图书和不存在的图书名:

测试结果如下所示:

表5-3 模糊查询测试

输入信息

结果

分析

输入:C

下方出现一系列图书

符合要求

输入:潍坊学院

500错误

符合要求

 

 

模糊查询只是测试数据库内的数据,代码里面插入的SQL语句进行校验  

搜索测试结果:

输入:C

图5.3 模糊查询测试图

 

  1. 购物车测试

购物车是本节的重点,用户将图书放到购物车,进行结算:

测试结果如表5-4 购物车测试结果所示:

表5-4 购物车测试结果

加入购物车

结果

分析

C#实用教程

success

符合要求

Oracle应用教程

success

符合要求

 

 

测试系统结果实现图:

 

图5.4购物车测试系统实现图

5.结算测试

在购物车界面的下方点图书进行结算:

图5.5 结算测试系统实现图

5.3 测试结果

通过上述测试用例,本系统测试符合基本的需求,连接数据库正常,模块功能可以正常的使用。

附录

主要分析程序:

   在pom.xml中配置环境JDK版本号,Dynamic Web Module 版本号

<build>

             <finalName>bookstore</finalName>

             <plugins>

                    <plugin>

                           <groupId>org.apache.maven.plugins</groupId>

                           <artifactId>maven-compiler-plugin</artifactId>

                           <version>3.1</version>

                           <configuration>

                                  <source>1.8</source>

                                  <target>1.8</target>

                           </configuration>

                    </plugin>

             </plugins>

      </build>

配置前台JSP界面的镜像

<!-- jsp api -->

             <!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api -->

             <dependency>

                    <groupId>javax.servlet</groupId>

                    <artifactId>jsp-api</artifactId>

                    <version>2.0</version>

                    <scope>provided</scope>

             </dependency>

Mybatis连接数据库:

url=jdbc:mysql://localhost:3306/bookshop

user=root

pass=123

购物车模块处理逻辑:

    @Controller

    public class ShoppingController {

        @Autowired

        private CartService cartService;

        @Autowired

        private CatalogService catalogService;

        //    查询购物车

          List<CatalogModel> list1 = catalogService.findAllCata();

        model.addAttribute("titl",list1);

        int userid = (Integer) request.getSession().getAttribute("userid");

        Logger logger=Logger.getLogger(ShoppingController.class);

        List<CartVo> list= cartService.findCartById(userid);

        if(list!=null)

        {

            model.addAttribute("list",list);

            logger.info("数据查询成功");

        }

        return "WEB-INF/view/shopping.jsp";

    }

//    跳入shopping_result.jsp

    @RequestMapping("/shopresult")

    public String forwardToShopResult(Model model)

    {

        List<CatalogModel> list1 = catalogService.findAllCata();

        model.addAttribute("titl",list1);

        return "WEB-INF/view/shop_result.jsp";

    }

}

注册后台逻辑:

@Controller

public class LoginController {

    @Autowired

    private UserService userService;

    @RequestMapping("login1")

    public String login(){

        return "/WEB-INF/view/login.jsp";

    }

    @RequestMapping(value = "login",method = RequestMethod.POST)

    public String findUser(Model model, String username, String userpass, HttpServletRequest request){

        UserModel userModel = userService.findByUser(username);

        if(userModel == null){

            model.addAttribute("message","用户名不存在,请注册");

            return "/WEB-INF/view/reg.jsp";

                   model.addAttribute("message","用户名或者密码错误");

                return "/WEB-INF/view/login.jsp";

            }

        }

    }

 处理逻辑:

 @RequestMapping("reg1")

    public String reg(){

        return "/WEB-INF/view/reg.jsp";

    }

    @RequestMapping(value = "reg",method = RequestMethod.POST)

    public String addUser(Model model,String username,String userpass){

        UserModel userModel = userService.findByUser(username);

        if(userModel != null){

            model.addAttribute("message","用户名已经存在,请登录");

            return "/WEB-INF/view/login.jsp";

        }

        UserModel userModel1 = new UserModel();

        userModel1.setUserName(username);

        userModel1.setPassWord(userpass);

        int i = userService.addUser(userModel1);

        if(i>0){

            model.addAttribute("message","用户名已经注册,请登录");

            return "/WEB-INF/view/login.jsp";

        }else{

            model.addAttribute("message","用户名注册失败");

            return "/WEB-INF/view/reg.jsp";}

致谢和结论

首先,感谢我的指导老师,能够给我在系统的设计和论文的修改上给与我不厌其烦的帮助。在本次毕业设计中我学习和回顾了大学期间学的JAVA知识和数据库的相关知识,还有文档编写的能力,这将是我的一笔财富,在即将正式踏入工作中的铺垫。

在本次毕业设计中,我做的是基于JAVA的网上书店系统,系统设计的目的是为了方便人们能够足不出户的购书,其中购物车的设计是本系统的亮点,为了迎合信息化和互联网的浪潮。本文的设计和论文的编写都是我自己独立完成,数据库的设计我采用的是MySQL,原因是简单,方便,和易于操作,内存占用较少,可以便于系统更加流利的运行,而且符合我们的基本需求,在数据库的设计中,我首先是续订需求,字段要求,用SQL建表的语句去创建表,其中在建立之前会用SQL脚本去删除表,以防出现重复表的问题,在最后我们通过Mybatis的配置文件链接数据库,实现数据库和JAVA项目的连接。

在选用框架的时候我们选择最契合企业级开发的Spring,SpringMVC,MyBatis的开发模式,因为MyBatis连接数据库比较简单,相对SSH框架来说,Struts2的配置文件比较繁琐,所以我选用的SSM框架完成这个系统。系统前台界面选用的是JSP,它的优势是较为简单,适合个人完成简单的项目。而且我建立的项目是一个Maven项目,可以自动Install下载所需要的JAR包自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。而且是跨平台性的,无论windows还是linux还是mac,使用的都是相同的指令。

大四这段时间我干过半年的二次开发工作主要是接口和ERP系统的单据开发,和外系统的集成工作,对于系统的需求把控和业务流程上所有不错的基础,但是项目底层的开发还是比较欠缺,很感谢学校能给与我这次的机会,和知道老师的帮助,我能顺利完成这个项目。

在互联网的浪潮下,我们的生活发生的质的变化,以后一定是信息化的时代,我们的专业正好对口,现在缺的就是实践经验,这次毕业设计刚刚不理我我们的缺口,我相信,以后再职场中我们一定会更快的上手。

 

参考文献

[1]刘洪星,谢玉山.Eclipse开发平台及其应用[J].武汉理工大学学报,2005

[2]南方.基于Eclipse嵌入式集成开发环境[D].西安:西安电子科技大学,2009

[3]谢文阁,支艳强等.浅谈Windows下的JDK安装与Java开发环境的配置[J].大众科技, 2011

[4]高张,康小军.提高Tomcat服务器运行性能的研究[J].计算机与数字工程,2008

[5]边清刚,潘东华. Tomcat和Apache集成支持JSP技术探讨[J].计算机应用研究, 2010

[6]胡莉萍. Tomcat+JSP+MySQL整合配置初探[J].中国科技信息,2010

[7]李利波;刘明利;一种改进的无回溯反向Web服务动态组合方法[A];2011年全国通信安全学术会议论文集[C];2011年

[8]游争光;刘建勋;唐明董;分布式Web服务测试系统的设计与实现[A];CCF NCSC 2011——第二届中国计算机学会服务计算学术会议论文集[C];2011年

[9]殷华蓓;李通;唐常杰;张天庆;左志松;从Web文件中挖掘个性化导航知识[A];第十七届全国数据库学术会议论文集(研究报告篇)[C];2000年

[10]基于广义对话的Web用户的聚类(英文)[A];第十七届全国数据库学术会议论文集(研究报告篇)[C];

[11] 杜波依斯. MySQL技术内幕[M]. 第4版. 人民邮电出版社 , 2011年07月.
[12] 林信良. JSP & Servlet学习笔记[M]. 清华大学出版社, 2012年05月.
[13] 张峋, 杨三成. 关键技术:JSP与JDBC应用详解[M].中国铁道出版社, 2010年11月.

[14] 岑红旗,浅析网上购物在中国的现状[J]. 时代金融. 2007。

朱谦,罗新. 社区电子商务网上购物模式[J]. 现代经济信息. 2008。

[15] 李贤华,基于JSP技术的大型网上购物系统的设计与实现[J]. 计算机与现代化. 2008。

Logo

快速构建 Web 应用程序

更多推荐