第1章 概述
1.1 课题背景
目前国企业在管理销售方面还处在比较低的水平。大多数企业在生产和购进货物后,只是将销售用手写式的记录和简单的管理。进入信息社会后,随着企业销售订单的增多,带的麻烦也逐渐增多,管理方面也得不到很好的解决方法,使得大量的数据丢失,使企业造成了很大的损失。Internet已经成为人们生活、工作、学习越来越离不开的平台,在网上进行下单,交易可以更好方便,同时减少了纸质交易资料的管理工作,将全部交由数据库进行保存。
1.2 项目开发的目的及意义
建立一个基于B/S架构的企业订单系统,实现信息网络化.通过较丰富的功能将 Web的技术特点体现出来。该系统可供注册用户登录使用.登录者可以查询商品以及下订单,可以通过此管理供应商、商品 、订单等操作,实现增删改查的操作,方便的管理与维护。要实现这样的功能,离不开后台数据库的支持。本系统中数据库采用了MYSQL作为后台数据库,通过JDBC进行连接,通过SQL语句进行需要的增删改查功能,使得系统与数据库完美结合。整个页面由JSP技术进行开发实现,主要由Web页面生成与JS技术结合JavaBeans技术实现组件重用两部分组成。
本设计主要完成客户端,Web服务器端应用程序和数据库的制作,实现企业订单系统的创建,用户注册/登陆、对记录信息进行添加,删除,修改等功能。实现与完善整个基于B/S企业订单管理系统的组织建立和测试工作。
利用SUN公司推出的强大应用程序开发软件Java,结合有关管理规的知识和实际调研的结果,进行了对“企业订单管理系统”的开发。该系统具有操作简单性、稳定性、安全性和友好性的优点,给用户呈现出满意的界面。
1.3 国外动态分析
在国外,企业订单管理系统的发展非常迅速,在网上进行交易,进行订单的管理非常先进,减少了大量人工工作,同时减少了纸质管理中容易出现的一些错误。
目前,我国企业订单管理系统的管理还比较落后,很多企业还停留在纸质的订单管理。企业需要扩大客户数量,就要做好财务的收付工作和产品的管理,同时做好交易数据的管理。面对来自全世界的竞争和挑战,国企业需要加强自身的管理,自己的信息化水平,更好的管理自己的数据,所以B/S的企业订单管理系统可以解
决这一方面的需求。
1.4 本文结构
第1章是概述,主要介绍课题背景与项目开发的目的和意义,以及对国外动态的分析。
第2章是方案论证,主要介绍该系统开发时的方案选择,并从经济上、技术上论证了本系统是否可行,以及此系统所应用到的一些关键技术的简介。
第3章是需求分析,主要介绍了用户的需求,然后根据用户的需求得出系统应该具有什么功能。最后总结出系统最核心的两个业务逻辑:用户登录和用户下单,管理员对用户的订单进行管理。
第4章是过程论述,主要介绍了软件的系统构架以及系统的相关实体和实体间的关系,并论述了整个数据库的设计过程。最后详细的介绍了各个功能模块的实现过程,并讨论了系统的安全性设计。
第5章是软件测试,介绍了常用的软件测试方法:黑盒测试和白盒测试。并使用基本路径测试的方式对普通用户注册、管理员登录、管理员订单管理进行了测试。
最后是对本次毕业设计的总结和致。并在附录里给出了一些功能实现的代码和相关截图。
第2章 方案论证
2.1 可行性分析
2.1.1 技术可行性
本系统使用Java语言编写,Java语言简单,易上手,开发周期短。 在页面中使用AJAX进行网页局部刷新,减少了对服务器的请求压力。
在开发工具上使用Eclipse,数据库使用MySQL,MySQL数据库同样为轻便型小型数据库,其系统从一个地方到另一个地方的难易程度和安全性都是很乐观的,MVC在使用领域也逐渐地老练起来,该企业订单管理系统在技术上是切实可行的。
2.1.2 经济可行性
随着网络的迅速发展,计算机得到了普遍性。企业订单管理系统成为了很多企业在网上的分销渠道,该系统选择B/S架构,使用B/S架构的系统只需对服务器进行管理,所有的客户端都是浏览器,不需要做任何其它的维护,只要有一台电脑就能使用。同时,本系统的规模并不大,不需要太多的经费,但却十分有效的提高了办公的效率。所以开发订单管理系统是具有经济可行性的。
2.1.3 操作可行性
本系统操作较为简便,同时人员使用起来简单易上手,在开发中会在必要的地方加以提示,帮助人们更加方便地使用,所以在计算机较为普及的今天,很多人都可以进行操作。 2.1.4 法律可行性
本系统所使用的Eclipse和数据方面的信息及技术不违背法律,相关实现和技术不存在侵权问题。系统开发完后主要用于客户对企业进行下单,管理员进行管理订单,文明安全,禁止涉及任何行为。
2.2 最佳设计方案选择简介
2.2.1 MySQL5.0数据库
MySQL数据库是一个对源码开放的“小型关联式数据库管理系统”。MySQL比较适合运用于中小型。因为MySQL的运行速度比较快、所占容量较少、使用成本价较低,所以很多企业在经济实用角度出发会选择MySQL。其主要特性是:CPU利用率高,能够在一定程度上提高查询速度,同时优化了SQL语句的查询算法,并且支持多线程,提供多种语言的支持,因此所需费用较低[1]。 2.2.2 JSP技术
JSP是一种动态网页技术标准。它是一种建立在由Servlet提供的规功能智商的一种动态页面技术,它其实就是在早期的HTML形成网页的XML文件中插入了Java代码和一些JSP标记,从而形成了一个JSP文件[2]。
JSP开发的Web应用是跨平台的,不但能够在Linux下运行,也能在其他操作系统上运行。
JSP采用MVC的设计模式,可以将后台的业务逻辑控制与前台的网页设计分离,耦合性较低,同时给予组件进行设计,并且降低了WEB的前端程序开发[3]。 2.2.3 Servlet技术
Servlet是基于服务器端的一种Java应用程序,它有着与协议和平台都独立的特性,并且能够生成动态的Web网页(但是它自己本身的编程还是较为麻烦的,已经被很少运用)。Servlet可以作为MVC中的V层,也就是说作为服务器响应与客户请求的中间层,它其实是Web 服务器部服务器端的一个比较小型的Java应用程序,但是Servlet与原来在命令行中启动的Java语言还是有所不同的[4]。Web服务器负责加载Servlet,但前提是Web服务器必须包含能够支持Servlet的Java虚拟机。
Servlet是Java Web服务器用来处理用户请求以及其他基于Web服务的Java类。他在Web服务中,根据用户的请求和传递过参数进行运算,返回处理后的结果。开发Servlet类须按照Servlet的要求继承HttpServlet类,实现相应的方法[5]。 2.2.4 AJAX技术
AJAX是Asynchronous JavaScript and XML的缩写,这一技术能够向服务器请求额外的数据而无需卸载整个页面,会带来良好的用户体验。传统的HTTP请求流程大概是这样的,浏览器向服务器发送请求-〉服务器根据浏览器传来数据生成response-〉服务器把response返回给浏览器-〉浏览器刷新整个页面显示最新数据,这个过程是同步的,顺序执行[6]。
AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求)从服务器获取数据,这里的异步是指脱离当前浏览器页面的请求、加载等单独执行,这意味着可以在不重新加载整个网页的情况下,通过JavaScript接受服务器传来的数据,然后操作DOM将新数据对网页的某部分进行更新[7]。使用Ajax最直观的感受是向服务器获取新数据不需要刷新页面等待了。 2.2.5 Eclipse开发工具
Eclipse maven企业级工作平台是对EclipseIDE的一种引申,利用它我们可以在数据库方面和Java2E的开发方面、发布以及应用程序服务器的整合方面,减少工作所用时间,极大的提升工作效益。它是功能非常全面的Java2E集成开发环境,拥有完善编码、进行调试、进行测试以及发布功能,并且支持各种技术,包括:HTML,Struts,JSP技术,CSS,Javascript,Spring,SQL数据库,Hibernate。
Eclipse maven是一个非常优秀的用于开发Java, J2EE,maven项目的 Eclipse 插件集合,Eclipse maven的功能非常强大,支持围也十分广泛,尤其是对各种开源产品的支持也非常好。Eclipse maven可以支持JavaServlet技术,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库连接工具等多项功能。可以说Eclipse maven是几乎涵盖了目前所有主流开源产品的专属Eclipse开发工具。
2.3 开发方案的选择
B/S结构,是Web崛起后的一个计算机结构,Web是客户端最重要的使用软件。这种计算机结构融合了客户端,将系统模块完成的最主要部分会集到服务器上,使系统的开发、运行和应用得到相应的简化。开发企业订单管理系统,客户机上只要安装一个浏览器就可以了,最好是IE浏览器,服务器上安装一个MySQL数据库。
在B/S模式的体系结构系统中,服务器会对浏览器发出的请求进行进一步处理,将用户所需要的信息发到浏览器上。B/S架构使客户端的操作变得更加简单化,客户机上只需要配置一些客户端的软件[8]。
主要优点包括:
1. 具有分布性特点,可以随时随地进行查询、浏览等业务处理。 2. 业务扩展简单方便,通过增加网页即可增加服务器功能。
3. 维护简单方便,只需要改变网页,即可实现所有用户的同步更新。 4. 开发简单,共享性强。
综上所述,本系统使用B/S架构,选用Eclipse maven作为程序开发的主要工具、选用MySQL为数据库管理平台,使用AJAX技术进行页面的局部刷新。
第3章 需求分析
3.1 系统需求分析
企业订单系统是面向所有企业,包括商品的管理,订单管理等业务处理工作,是利用计算机进行集中管理而开发的系统.该系统是基于JSP连接MYSQL数据库进行开发的企业订单管理系统,力求与实际相结合具有查询、操作等功能,旨在达到使订单的管理和运营趋于计算机化,使之更加方便、快捷以提高工作效率。主要包括二大管理模块:
1.后台管理员
(1)用户管理:维护前台的注册的用户信息。 (2)商品分类:维护商品的类别。
(3)供应商管理:该商品的供应商管理。 (4)商品管理:管理商品,删除修改等。
(5)订单管理:管理订单,审核订单,安排发货,订单状态查询等。 (6)权限管理:维护后台用户的权限。 2.前台用户
(1)用户注册:用户第一次登陆该系统下单需要先注册账号: 单击“用户注册”按钮,填写相关注册信息,包括用户名、密码,同时email要求格式正确,填写完成后,需要点击“确定”按钮,这样就可以成为该系统的用户。
(2)用户登陆:用户通过填写正确的“用户名”和“密码”,点击“登陆”按钮,便可完成普通用户的登录。
(3)商品搜索:用户在页面上可以进行商品的搜索,输入需要的商品名称进行商品搜索。
(4)查看商品:用户在页面上可以查看商品,也可以点击页面左侧导航栏进行不同商品类别下的商品。
(5)用户下单:用户在选择好商品后,点击购买,填写相关商品数量,送货地址,付款方式等。
(6)个人中心:用户可以在登录后点击个人中心,在个人中心中查看自己的订单以及订单状态。
3.2 数据流图
数据流图是用来描述数据流和改变信息系统建模的一种技术[9]。通过对用户的可行性需求分析,我们知道企业订单管理系统的核心问题是对订单的管理。以下先
分析系统的顶层数据流图,然后在给出用户登录和订单管理的数据流图。 3.2.1 顶层数据流图
企业订单管理系统,非该系统用户成员,可通过完成用户注册来成为该系统用户,顶层数据流图,如图3-1所示。
管理员 输入 企业订单管理系统 普通用户 输入 图3-1 顶层数据流图 显示器 输出
3.2.2 一层数据流图
一级数据流图,如图3-2所示。
用户信息表 用户信息 合法 登 录 非法 非法 合法 用户信息表 用户信息 普通 用户 提交订单 订单表 结果 操作 操作 结果 管理员 用户信息 用户信息表 图3-2 一层数据流图
3.2.3 二层数据流图
1.用户登录数据流图,如图3-3所示。
用户信息表 管理员信息表 非法登录 管理员 错误验证 合法普通用户 登录 正确信息 正确信息 合法登录 信息 图3-3 用户登录数据流图
2.订单管理数据流图,如图3-4所示。
订单处理 注册用户 下单 订单保 存 返回结果 管理员 图3-4 订单管理数据流图
3.3 数据字典
数据字典是对于数据模型中的数据对象以及项目的描述的集合。数据字典的作用是在策划和的软件剖析过程中给人提供关于数据的形容信息。数据字典可以对数据流图中的数据流、数据源以及外部实体进行描述、组织和管理。数据字典是指对外部实体、处理逻辑、数据存储、数据结构、数据流、数据项等进行定义和描述,数据字典的目的是对数据流程图中的每一种元素进行详细的说明。下面是部分数据结构的说明:
1.数据结构:注册用户信息
组 成:用户名、密码、真实、住址、性别、email、job。 数 据 项:①<用户名>=*大于0小于10的任意长度*
②<密码>=*不小于3位的任意长度字符串* ③<真实>=*任意长度不大于5位的汉字* ④<住址>=*任意长度不大于20位的字符串*
⑤<性别>=*男/女*
⑥ 2.数据结构:供应商信息 组 成:供应商地址、供应商名字、供应商、供应商联系人、供应商详情。 数 据 项:①<供应商地址>=*不大于50的任意字符长度* ②<供应商名字>=*不大于30的任意字符长度* ③<供应商>*不大于15的任意字符长度* ④<供应商联系人>*不大于15的任意字符长度* ⑤<供应商详情>*不大于255的任意字符长度* 3.数据结构:订单信息 组 成:订单编号、订单商品编号、商品数量、订单用户、订单总价、订单地址、订单状态、订单支付方式、下单时间。 数 据 项:①<订单编号>=*任意整数字* ②<订单商品编号>=*任意整数字* ③<商品数量>=*任意整数字* ④<订单用户>=*任意整数字* ⑤<订单总价>=*任意整数字* ⑥<订单地址>=*不大于255的任意字符长度* ⑦<订单状态>=*不大于50的任意字符长度* ⑧<订单支付方式>=*不大于50的任意字符长度* ⑨<下单时间>=*date类型* 4.数据结构:商品信息 组 成:商品编号、商品库存、商品上架时间、商品图片路径、商品名字、商品备注、商品分类编号、商品价格、供应商编号。 数 据 项:①<商品编号>=*任意整数字* ②<商品库存>=*任意整数字* ③<商品上架时间>=*date类型* ④<商品图片路径>=*不大于255的任意字符长度* ⑤<商品名字>=*不大于30的任意字符长度* ⑥<商品备注>=*不大于255的任意字符长度* ⑦<商品分类编号>=*任意整数字* ⑧<商品价格>=*任意整数字* ⑨<供应商编号>=*任意整数字* 5.数据结构:商品分类信息 组 成:商品分类编号、商品分类建立时间、商品分类名、商品分类备注。 数 据 项:①<商品分类编号>=*任意整数字* ②<商品分类建立时间>=*date类型* ③<商品分类名>=*不大于30的任意字符长度* ④<商品分类备注>=*不大于255的任意字符长度* 6.数据结构:系统管理员信息 组 成:用户名、密码、备注、用户管理权限、分类管理权限、供用商管理权限、商品管理权限、订单管理权限、权限管理权。 数 据 项:①<用户名>=*大于0小于10的任意字符长度* ②<密码>=*不小于3位的任意长度字符串* ③<备注>=*不大于255的任意字符长度* ④<用户管理权限>=*yes/no* ⑤<分类管理权限>=*yes/no* ⑥<供用商管理权限>=*yes/no* ⑦<商品管理权限>=*yes/no* ⑧<订单管理权限>=*yes/no* ⑨<权限管理权>=*yes/no* 3.4 系统E-R图 E-R方法是“实体-联系方法”的一个简称,用矩形来表示实体性,矩形框写试题的名字,用菱形来表示实体间的关系,在框注明实体的名字[11]。E-R概念模型具有很强的语义表达能力,通过对用户进行可行性需求分析,选出最直接的实体是注册用户、供应商、订单、商品、商品分类、系统管理员。以下是描述了主要实体的具体属性图。 1.系统实体属性图 (1)注册用户实体属性图,如图3-5所示。 密码 用户名 姓名 地址 注册用户 性别 编号 email job 图3-5 注册用户实体图 (2)供应商实体属性图,如图3-6所示。 名字 地址 供应商 详情 电话 联系人 图3-6 供应商实体图 (3)订单实体属性图,如图3-7所示。 订单编号 下单时间 订单 支付方式 订单总价 订单状态 订单地址 图3-7 订单实体图 订单用户 商品编号 商品数量 (4)商品实体属性图,如图3-8所示。 商品编号 供应商编号 商品 商品价格 商品名字 分类编号 商品备注 图3-8 商品实体图 商品库存 上架时间 商品图片 (5)管理员实体属性图,如图3-9所示。 分类建立时间 分类编号 商品分类 分类名 图3-9 商品分类实体图 分类备注 (6)管理员实体属性图,如图3-10所示。 用户名 密码 备注 管理员 订单管理权限 用户管理权限 分类管理权限 商品管理权限 供用商管理权限 权限管理权 图3-10 管理员实体图 2.系统E-R图 企业订单管理系统采用E-R图的方法对数据库概念结构进行设计。单个的实体属性图只能体现一个实现的属性和行为,不能描述整个系统的结构。因此,我们需要找出各个实体间的关系,组成完整的系统E-R图,如图3-11所示。 m 管理n 1 用户 管理员 管理 m 1 1 n m 浏览 提交 处理 m n m n n 浏览 管理 分类 订单 1 管理 n n n 包含 n 包含 n 1 1 供应商 提供 商品 n 图3-11系统E-R图 3.5 运行环境需求 3.5.1 软件环境 软件环境信息表,如表3-1所示。 表3-1 软件环境信息表 操作系统 数据库平台 服务器平台 客户端软件 名称 Ubuntu/Unix/Linux Windows 7/Windows Server MySQL Tomcat IE/基于IE核浏览器 版本 不限 sp3/2000/2003 5.0或以上 5.5或以上 6.0或以上 语种 中文或英文 中文 英文 英文 中文 3.5.2 硬件环境 硬件环境信息表,如表3-2所示。 表3-2 硬件环境信息表 应用和数据库服务器 名称 CPU 存 硬盘 最大配置 P4 2.0G 2G 320G 推荐配置 P4 2.8G 2G 120G 第4章 过程论述 4.1 概要设计 4.1.1 设计原则 在系统进行编码之前,我们用该对系统所要实现的功能进行整理,如何进行实现以及实现方法的删选,这样做的优点包括:对系统软件整体的代码架构有一定的思路,更好的部署各个功能模块的代码,优化整体的结构,对各层功能代码进行剥离,更加符合MVC的设计模式[12]。 在设计的过程中我们应该遵循的原则包括: 1.全面性:考虑不同用户对系统使用的不同需求,所以系统必须尽量操作简单,容易上手,提高系统使用的普遍性,使系统尽量适合所有用户的需求。 2.规性:本系统遵循MVC的设计模式进行设计,遵循MySQL数据库的操作原理。 3.实用性:根据用户需求情况,满足客户和管理员的使用需求。 4.安全性:保证系统在实际应用时的安全性。 4.1.2 软件架构说明 1.MVC架构各层功能实现说明: Model层(模型层)主要是实现具体业务功能的一些类,业务流程的处理,Model只是一种经过性的操作,模型会接收来自页面的请求,并把最终得出的结果返回给页面,MVC最主要的核心是业务模型的设计。 Control层(控制层)就是从视图层接受数据请求去匹配相应的模型,共同来完成用户的请求。主要负责系统中业务功能的实现流程管理工作,事实上,控制层并不对请求做任何的处理,只是把该用户传来的信息传给了模型,告诉它去在怎么做,然后它做的只是负责把符合要求的视图再返回给用户。所以,一个模型可能会对应很多个视图,一个视图也可能对应很多个模型。 View层(视图层)是指用户与用户之间的交互界面,对于web应用来说,可以把它概括为HTML界面,也有可能是XML、XHTML、Applet。随着应用的规模性和复杂性,界面的处理也变得很有挑战性。一个应用包含多个的视图,MVC设计模式就是视图的处理权限和视图对数据进行处理,包括对用户的请求,但不包括业务流程的处理。业务流程的处理交给模型处理[13]。 2.MVC架构优点: (1)对应中小型项目的开发效率高,架构的搭建相对简单 结构看起来非常简单易懂,搭建时的配制信息只有“web.xml”这一个文件,web.xml主要是用来映射Servlet。Control层的应用在很大程度上是将JSP中的 Java代码给分离开来,降低了JSP文件的复杂程度。另外本架构涉及的架构知识其实是很很少的,很容易把它掌握。 (2)架构的性能优越 相对于使用其他的架构技术创建的系统来说,在使用Jsp+Servlet+JavaBean架构时,系统的执行效率其实是非常高的,主要是因为该架构的配置相对来说比较简单,信息加载量较小。 4.1.3 功能模块图 此系统按照角色的不同分为两大功能模块,一个是前台用户模块,一个是后台管理模块。 1.系统模块图 系统模块图,如图4-1所示。 企业订单管理系统 后台 前台 用户管理 商品分类 商品管理 供应商管理 订单管理 权限管理 用户注册 用户登陆 用户下单 商品搜索 个人中心 查看商品 图4-1 系统模块图 2.普通用户功能模块 普通用户功能模块图,如图4-2所示。 (1)用户注册:用户第一次登陆该系统下单需要先注册账号: (2)用户登陆:用户通过填写正确的“用户名”和“密码”后,点击“登陆”按钮,便可完成普通用户的登录。 (3)商品搜索:用户在页面上可以进行商品的搜索,输入需要的商品名称进行商品搜索。 (4)查看商品:用户在页面上可以查看商品,也可以点击页面左侧导航栏进行不同商品类别下的商品。 (5)用户下单:用户在选择好商品后,点击购买,填写相关商品数量,送货地址,付款方式等。 (6)个人中心:用户可以点击个人中心查看自己提交的订单详情,以及订单的当前状态。 普通用户 用户注册 填写用户信息 用户登陆 使用账密登陆 商品搜索 关键字搜索商品 查看商品 导航栏查看商品 用户下单 购买物品下单 个人中心 查看已提交订单 图4-2 普通用户功能图 3.管理员用户 管理员用户功能模块图,如图4-3所示。 (1)用户管理:维护前台的注册的用户信息。 (2)商品分类:维护商品的类别。 (3)供应商管理:该商品的供应商管理。 (4)商品管理:管理商品,删除修改等。 (5)订单管理:管理订单,审核订单,安排发货,订单状态查询等。 (6)权限管理:维护后台用户的权限。 查看所有用户信息 修改用户信息 用户管理 删除用户信息 根据用户名查询用户 查看所有分类 新增分类 商品分类 修改分类信息 删除某一分类 根据分类名查询分类 查看所有供应商 新增供应商 供应商管理 修改供应商信息 删除供应商信息 根据供应商名查询 管理员 查看所有商品 新增商品信息 商品管理 修改商品信息 删除商品信息 根据商品名查询商品 查看订单以及状态 根据订单发货 订单管理 订单审核不通过 根据订单状态查询 查看所有管理员权限 新增管理员 权限管理 修改管理员权限 删除管理员 根据管理员用户名查询 图4-3 管理员用户功能图 4.2 数据库设计 数据库系统是各种系统实现信息化的基础。数据库把系统所需数据进行整理并进行保存,使得信息系统可以更加方便,准确,及时地获取想要的数据[14]。数据库保存的数据量非常巨大,提高了数据共享性,信息管理方便,用户及其权限管理便捷。目前,常用的一些数据库管理系统包括MySQL 、SQL Server 、Access、Oracle等。 MySQL 是一个关系型数据库管理系统,属于轻量级数据库,安全稳定,目前属于 Oracle 公司。MySQL 是较为流行的关系型数据库管理系统。在 WEB 应用中, MySQL 是一款优秀的RDBMS 应用软件。MySQL 是一种关联数据库管理系统,关联数据库将数据进行整理并分类保存到不同的数据表中,而非将全部的数据保存到一个大仓库里面,提高了提取的速度和管理的灵活性。MySQL 使用 SQL 语言进行数据库的访问以及各种操作,同时支持可视化界面操作。MySQ优点:体积小、速度快、成本低,同时开放源代码,所以一些小型一般都会倾向于选择MYSQL数据库。因此本系统将采用MySQL 数据库。 4.2.1 命名规 1.表命名规则: 该企业订单管理系统的表命名规则是,数据库表名由该表的实体类英文组成的,前缀为t,中间为下划线‘_’,之后是实体类名称,如订单表被命名为:t_order。 2.表项命名规则: 该企业订单管理系统的表项命名规则是每个表格字段采用见闻识意的方法,采用其英文单词或者单词简写定义。 4.2.2 基本表汇总 表4-1 基本表汇总 中文名 管理员表 商品类别表 商品表 订单表 供应商表 用户表 英文名 t_adminuser t_category t_item t_order t_seller t_user 说明 存储管理员信息 存储商品类别信息 存储商品信息 存储用户订单信息 存储供应商信息 存储用户信息 4.2.3 基本表结构 1.管理员表(t_adminuser):括用户名、密码、管理员级别、管理员权限1、管理员权限2、管理员权限3、管理员权限4、管理员权限5、管理员权限6,主要是用来存放管理员信息,如表4-2所示。 表4-2 t_adminuser表 中文名 用户名 密码 英文名 name password 数据类型 bigint(20) varchar(255) varchar(255) varchar(255) varchar(255) varchar(255) varchar(255) varchar(255) varchar(255) varchar(255) 是否为空 否 初始值 说明 主键 管理员编号 id 管理员级别 remark 权限1 权限2 权限3 权限4 权限5 权限6 role1 role2 role3 role4 role5 role6 2.商品类别表(t_category):括商品编号、商品类别上架时间、商品类别名称、商品类别备注,主要是用来存放商品类别信息,如表4-3所示。 表4-3 商品类别表 中文名 商品编号 英文名 id 数据类型 bigint(20) datetime varchar(255) varchar(255) 是否为空 否 初始值 说明 主键 商品上架时间 create_date 商品名称 商品备注 name remark 3.供用商表(t_seller):主要包括供应商编号、供应商地址、详细信息、名称、、联系人。主要用来保存供应商的一些基本信息 ,如表4-4所示。 表4-4 供应商表 中文名 供应商编号 供应商地址 详细信息 名称 联系人 英文名 id addr detail name tel user_name 数据类型 bigint(20) varchar(255) varchar(255) varchar(255) varchar(255) varchar(255) 是否为空 否 初始值 说明 主键 4.订单表(t_order):主要包括订单编号、订单总价、订单数量、订单创建时间、订单付款方式、订单状态、商品编号、用户编号、送货地址。主要用来订单信息,如表4-5所示。 表4-5 订单信息表 中文名 订单编号 订单总价 订单数量 英文名 id total_price count 数据类型 bigint(20) double int(11) date varchar(255) varchar(255) bigint(20) bigint(20) varchar(255) 是否为空 否 外键 外键 初始值 说明 主键 订单创建时间 create_date 订单付款方式 pay_type 订单状态 商品编号 用户编号 送货地址 state item user addr 3. 商品信息表(t_item):主要包括商品数量、商品上架时间、商品图片编号、商品名称、商品备注、商品类别、价格、供应商,主要用来保存商品信息,如表4-6所示。 表4-6 商品信息表 中文名 商品编号 商品数量 英文名 id count 数据类型 bigint(20) int(11) 是否为空 否 外键 外键 初始值 说明 主键 商品上架时间 create_date datetime 商品图片编号 img_path varchar(255) varchar(255) varchar(255) bigint(20) double bigint(20) 商品名称 商品备注 商品类别 商品价格 供应商 name remark category price seller 4.3 详细设计 4.3.1 数据库连接技术 数据库存储是现代信息化系统中的核心与基础,因此数据库的连接是非常必要的。Hibernate是个轻量级数据库连接的框架,不用特定的运行环境,所以,该企业订单管理系统使用MySQL5.0作为数据库,使用Hibernate的配置文件来进行数据库的连接[15],数据库连接的实现代码如下: 4.3.2 前台用户模块设计 1.用户注册 未注册的用户必须注册才能下订单,本模块提供了一个注册入口。用户需要填写相关的个人信息才能进行注册,其中用户名、密码、昵称、电子、地址为必填字段,电子用户找回密码,填写完账号信息后进行提交,若该用户并没有被注册,则保存该用户信息并提示注册成功,跳转到登陆界面,若失败或已经存在该用户则进行提示报错。注册界面如图4-4所示。 图4-4 普通注册图 用户注册主要代码: public String registerUser() throws Exception { userService.save(user); tip=\"注册成功,欢迎登陆!\"; return SUCCESS; } 我们自己定义的XxxxRepository需要继承JpaRepository,这样我们的XxxxRepository接口就具备了通用的数据访问控制层的能力 这个接口提供了最基本的对实体类的添删改查操作 Iterable boolean exists(ID id);//根据id判断实体是否存在 Iterable void delete(Iterable extends T> entities);//删除一个实体的集合 void deleteAll();//删除所有实体,不用或慎用! 2.普通用户登陆 用户登录模块如图所示,只有登录的用户才可以下订单、未登录的用户只能浏览商品。普通用户登陆流程图如图4-5所示。 开始 输入用户名、密码 判断数据输 是 否 入是否合法 进入首页 报错信息 结束 图4-5 普通用户登陆流程图 在这个模块中,用户需要输入用户名、密码,提交请求后将输入数据与数据库中已经注册的用户数据进行对比,若存在该用户名以及密码正确,则登陆成功,将用户名、密码等数据保存在session中,并提示登陆成功进入首页,若不存在则提示报错。登陆界面截图4-6所示。 图4-6 普通登陆界面图 用户登陆的主要代码: /*** * 登录逻辑 查找数据库比较用户名密码 */ Action(value = \"dologin\ results = { Result(name = \"success\" ,type=\"redirect\location = \"index\") , Result(name = \"login\INF/views/login.jsp\") }) public String dologin() throws Exception { User loginuser=userService.login(user.getName(), user.getPassword()); if(loginuser!=null){ session.put(\"user\ return SUCCESS; } else{ ActionContext.getContext().getSession().clear(); this.tip=\"登陆失败 不存在此用户名或密码!\"; return LOGIN; } } 3.查看商品模块 在此模块中,已登录的用户与未登录的用户都可以查看,登录首页时候,默认显示最新上架的6个商品,以及6个库存紧的商品,商品信息包括商品图片、商品名称、商品价格。点击左侧的分类导航,用户可以查看当前分类的下商品,并进行购物。浏览商品界面如图4-7所示。 图4-7 普通用户查看商品图 查看商品模块主要代码: public Page PageRequest pageRequest = new PageRequest(pageNumber - 1, pageSize, new Sort(Direction.DESC, \"id\")); Specification CriteriaQuery> query, CriteriaBuilder cb) { Predicate predicate = cb.conjunction(); if (name != null) { predicate.getExpressions().add( cb.like(root.get(\"name\").as(String.class),\"%\"+ name+ \"%\")); } } return predicate; } }; Page 4.商品搜索模块 在商品搜索模块中,用户可以在首页的搜索框中进行需要的商品搜索,搜索该名称的物品并显示,这里主要采用商品的模糊搜索,在后台将搜索所有商品中包含这个关键字的商品,并将所有相关商品进行显示。搜索界面如图4-8所示。 图4-8 普通用户搜索图 搜索的主要功能代码: public Page PageRequest pageRequest = new PageRequest(pageNumber - 1, pageSize, new Sort(Direction.DESC, \"id\")); Specification } return predicate; } }; Page 5.用户下单 用户挑选自己喜欢的商品放入购物车,选择数量并且填写送货地址后提交订单。后台安排人员审核订单。其中用户下单流程如下,用户下单流程如图4-9所示,用户下单界面如4-10所示。 开始 商品加入购物车 跳转登录页面 是否已登 填写订单并提交 后台审核 发货 图4-9 普通用户下单图 END 在用户下单模块中,用户选择喜欢的商品加入购物车,然后程序进行判断当前是否用户已经登录,如果没有登录则跳转到登陆界面进行用户登陆,如果已经登录,则已该用户的名义生成订单并提交订单,然后管理员在后台对订单进行审核,如果审核通过则进行发货处理。 图4-10 普通用户下单界面图 用户下单功能主要代码: Action(value = \"order\ Result(name = \"success\ Result(name = \"login\ public String order() throws Exception { User user = (User) ServletActionContext.getRequest().getSession() .getAttribute(\"user\"); if (user == null) { tip = \"您还没有登录,请登录后在购买!\"; return LOGIN; } else { item = this.itemService.find(order.getItem().getId()); order.setTotalPrice(item.getPrice() * order.getCount()); order.setCreateDate(new Date(System.currentTimeMillis())); order.setUser(user); } } order.setState(\"待审核\"); this.orderService.save(order); this.tip = \"下单成功,请等待客服审核!\"; orders = orderService.findByUser(user); return SUCCESS; 6.个人中心模块 用户在页面上点击个人中心后可以显示自己已经提交的所有订单,以及当前订单的处理状态、支付方式等信息。用户个人中心如图4-11所示。 图4-11 普通用户个人中心图 用户个人中心主要代码: Action(value = \"myorder\ Result(name = \"success\ Result(name = \"login\ public String myorder() throws Exception { User user = (User) ServletActionContext.getRequest().getSession() .getAttribute(\"user\"); if (user == null) { tip = \"您还没有登录,请登录后在查询!\"; return LOGIN; } else { orders = orderService.findByUser(user); } return SUCCESS; } 4.3.3 后台管理员模块设计 后台管理模块即是管理员的功能模块,包括用户管理、商品分类、供应商、商 品信息、订单管理、系统管理员权限管理等功能。 1.用户管理 在此模块中,管理员可以查看到注册用户的详细信息,可以对用户进行分页显 示、删除、修改、查询等操作。用户信息截图如图4-12所示。 用户可以点击修改按钮对用户名、密码、昵称、性别、email等信息,可以点击删除按钮对某一用户进行删除操作,也可以在搜索框中填写进行相关用户。 图4-12 注册用户管理图 主要的功能代码: /*** * 查找所有的用户 * return */ Action(value = \"list\= \"json\") }, params = { \"contentType\ public String list(){ int pageNumber = (int) (iDisplayStart / iDisplayLength) + 1; int pageSize = iDisplayLength; Page resultMap.put(\"aaData\ resultMap.put(\"iTotalRecords\ resultMap.put(\"iTotalDisplayRecords\list.getTotalElements()); resultMap.put(\"sEcho\ return SUCCESS; } 2.商品分类 在此模块中,管理员可以新增分类,新增的分类会显示的前台的首页中。分类信息如图4-13所示。 在商品分类中,主要包括商品分类的名称、备注、创建时间等信息。用户可以在这个模块中新建一个商品分类或者修改已经创建完的商品分类,创建完成之后,可以将商品归于某个商品分类,以便于用户更加方便的查找商品。 图4-13 商品分类管理图 商品分类管理的主要代码 /* 修改商品分类信息 */ Action(value = \"update\results = { Result(name = \"successype = \"json\") }, params = { \"contentType\ public String update() { } Category bean = categoryService.find(category.getId()); bean.setName(category.getName()); bean.setRemark(category.getRemark()); categoryService.save(bean); resultMap.put(\"state\resultMap.put(\"msg\修改成功\"); return SUCCESS; 3.供应商管理模块 在此模块中,管理员可以查看到供应商的详细信息包括供应商名称、地址、、联系人、备注等信息,并可以对供应商进行分页显示、删除、修改、查询等操作。如图4-14所示。 图4-14 普通用户搜索图 供应商管理模块主要代码 /*** * 修改供应商信息 */ Action(value = \"update\results = { Result(name = \"successype = \"json\") }, params = { \"contentType\ public String update() { Seller bean = sellerService.find(seller.getId()); bean.setName(seller.getName()); bean.setAddr(seller.getAddr()); bean.setDetail(seller.getDetail()); bean.setTel(seller.getTel()); bean.setUserName(seller.getUserName()); sellerService.save(bean); resultMap.put(\"state\ resultMap.put(\"msg\修改成功\"); return SUCCESS; } 4.商品管理模块 在此模块中,管理员可以查看到商品的详细信息,包括商品的价格、库存、分 类、供应商、图片信息等,可以对商品进行分页显示、删除、修改、查询等操作。商品显示如图4-15所示,新增商品界面如4-16所示。 图4-15 商品管理界面图 商品管理模块主要代码: /*** *修改商品信息 * return */ Action(value = \"update\\"json\") }, params = { \"contentType\ public String update() { Item itemToupdate = itemService.find(item.getId()); itemToupdate.setCategory(item.getCategory()); itemToupdate.setCount(item.getCount()); } itemToupdate.setName(item.getName()); itemToupdate.setRemark(item.getRemark()); itemToupdate.setScore(item.getScore()); itemService.save(itemToupdate); resultMap.put(\"state\resultMap.put(\"msg\修改成功\"); return SUCCESS; 在新增商品界面上,管理员可以选择需要上传商品的图片,填写商品名称、商品分类、供应商、库存、价格、简介等商品信息,然后点击保存按钮进行保存。 图4-16 增加商品图 新增商品主要代码: /*** *新增商品信息 * return */ Action(value = \"save\results = { Result(name = \"success\location = \"/WEB-INF/views/admin/item/index.jsp\") }) public String save() throws Exception { item.setCreateDate(new Date(System.currentTimeMillis())); item.setImgPath(this.imgPathFileName); itemService.save(item); /** 文件上传逻辑 */ String realpath = ServletActionContext.getServletContext().getRealPath( \"/upload\"); System.out.println(realpath); File saveImg = new File(new File(realpath), this.imgPathFileName); try { FileUtils.copyFile(imgPath, saveImg); } catch (IOException e) { e.printStackTrace(); return ERROR; } sellers = sellerService.findAll(); categorys = categoryService.findCategorys(); tip = \"新增商品成功\"; return SUCCESS; } 5.订单管理 在此模块中,管理员可以查看到所有的订单详细信息,包括订单的商品、数量、总价、订单状态、付款方式等,可以对订单进行分页显示,根据订单状态进行查询、对订单进行审核以及发货等操作。如图4-17所示。 图4-17 订单管理图 订单管理模块主要代码: /*** * 点击发货按钮 */ Action(value = \"approveOk\results = { Result(name = \"successype = \"json\") }, params = { \"contentType\ public String approveOk() { Order order = orderService.find(id); order.setState(\"已发货\"); orderService.save(order); resultMap.put(\"state\ resultMap.put(\"msg\发货成功\"); return SUCCESS; } 6.权限管理模块 在此模块中,系统管理员可以在改模块中查看各个管理员的账户信息以及权限,并可以进行查询、修改、删除、新增管理员,点击右上角新增按钮可以新增管理员并且设置其相应的权限,各种权限包括用户管理权限、分类管理权限、供应商管理权限、商品管理权限、订单管理权限、权限管理权,如果包含相应权限为yes,否则为no。如图4-18所示。 图4-18 权限管理图 权限管理模块的主要代码: / * 修改时点击保存按钮 * return */ Action(value = \"update\params = { \"contentType\ public String update() { AdminUser bean = adminUserService.find(adminuser.getId()); bean.setName(adminuser.getName()); } bean.setRemark(adminuser.getRemark()); bean.setRole1(adminuser.getRole1()); bean.setRole2(adminuser.getRole2()); bean.setRole3(adminuser.getRole3()); bean.setRole4(adminuser.getRole4()); bean.setRole5(adminuser.getRole5()); bean.setRole6(adminuser.getRole6()); adminUserService.save(bean); resultMap.put(\"state\resultMap.put(\"msg\修改成功\"); return SUCCESS; 第5章 软件测试与结果分析 随着信息化管理技术的快速发展和管理软件的普遍应用,开发各种信息化管理系统时所需要的成本和系统中可能存在的缺陷以及漏洞造成的损失也在不断发生变化,甚至造成不可预料的损失。提高软件质量的一种重要手段就是进行软件测试,可以减少系统在正式上线后的一些不必要的错误。所以此企业订单管理系统也进行了测试,主要包括白盒测试、黑盒测试、以及集成测试。 5.1 白盒测试 白盒测试是在测试软件中比较常用的一种测试方法,受到软件开发人员和测试工程师的喜欢。白盒测试的主要目的是检验系统部功能的逻辑结构,对系统中的逻辑路径进行覆盖测试;对系统的一些功能点建立测试检查点,检查程序的状态,以确定实际运行结果与预期结果是否一致。白盒测试是在已经了解了系统部的逻辑结构,流程,对其进行测试,主要用于程序验证。因为一个功能点会有不同的条件出入,导致不同的执行结果,可以衍生出多条执行路径,需要选择适当的测试方法,才能找到正确的方向[16]。因此,我们采用”基本路径测试”的方法对普通用户注册、管理员登录和资源下载进行测试。 1.普通用户注册测试 普通用户注册流图如图5-1所示。 1 2 3 4 图5-1 用户注册流图 根据流图确定基本路径,可以找出3条逻辑的路径: 路径1:①->②->③->② 路径2:①->②->③->④->② 5 路径3:①->②->③->④->⑤ 为每一条路径设计出测试用例,使得程序在运行时沿着每条路径至少执行一次。 路径1的测试用例: 输入:没有输入用户名或密码。 期望结果:返回注册界面。 路径2的测试用例: 输入:输入了用户名和密码,但没有输入email。 期望结果:返回注册界面。 路径3的测试用例: 输入:输入了用户名和密码,且输入了email,但email格式不正确。 期望结果:返回注册界面。 2.管理员登录测试 由图4-2管理员登录流程图得到管理员登录流图,如图5-2所示。 1 2 3 4 图5-2 管理员登陆 根据流图确定基本路径集合,可以确定2条独立的路径: 路径1:①->②->③->② 路径2:①->②->③->④ 为每条路径设计测试用例,使程序沿着该路径至少执行一次。 路径1的测试用例: 输入:用户名或密码。 期望结果:返回登录界面。 路径2的测试用例: 输入:用户名和密码正确。 期望结果:管理员管理模块界面。 5.2 黑盒测试 黑盒测试被称为数据驱动或功能测试。在测试时,测软件就好像一个不能打开的黑盒子,在不了解系统部结构与部特性的情况下进行测试。采用黑盒测试主要是在已知软件产品所应具有的功能基础上进行操作。黑盒测试不能与白盒测试相互代替,两者是相辅相成的关系[17]。等价划分属于黑盒测试中的一项技术,将程序的输入划分成若干个数据类,从而导出需要的测试用例进行测试。黑盒测试主要能够测试出功能不正确或遗漏了功能、数据结构、界面或外部数据库访问、性能等方面的一些错误。以系统中的用户登录为例,用户登录要求用户输入用户名和密码。登入输入等价类,如表5-1所示。有效等价类测试用例,如表5-2所示。 表5-1 登录输入的等价类划分 输出等价类 用户名类型和长度 密码类型和长度 有效等价类 (1)4位以汉字 (2)10位字母以 (5)3位及以上字母或数字 无效等价类 (3)有非字母汉字字符 (4)不小于4位或10位 (6)有非字母数字 (7)小于3位 表5-2 有效等价类测试用例 用户名 fjm 金明 密码 123 FJM123 期望结果 输入有效 输入有效 覆盖的有效等价类 (2)(5) (1)(5) 为每一个无效等价类设计一个测试用例,设计结果如表5-3所示。 表5-3 无效等价类测试用例 用户名 金明! 金明加油 金明 金明 密码 123 123 !123 12 期望结果 输入无效 输入无效 输入无效 输入无效 覆盖的无效等价类 (3) (4) (6) (7) 通过以上的测试,可以看出系统能够正常运行。 5.3 集成测试 集成测试就是联合测试,是在每一个模块完成单元测试后,根据设计时确定的 结构图,把他们组装起来,进行集成测试。集成测试也被称为综合测试,实践证明,软件的一些模块虽然能够独立出来,单独进行工作,并且运行正常,但无法保证在连接之后也肯定能正常工作。程序在某些局部反映不出来的错误,在联合运行的时候可能就会暴露出来,影响整体软件功能的实现。集成测试包括两种不同的方法:非增量式测试和增量式测试[18]。 本系统最重要的两个业务逻辑就是:普通用户下单和管理员进行订单处理两个业务逻辑。这两个模块间的通信非常重要。只有用户提交了订单,普通用户管理员才能够进行功能订单处理。他们之间有着先后的关系,所以,这两个模块间能否正常通信,将影响整个系统的正常运行。 结 论 通过三个多月的设计和开发,在完成本系统的实现过程中,更加熟悉了JAVA在WEB中进行编程的技术,更加了解了JSP、Servlet等WEB技术。同时学会了运行B/S的系统架构以及MVC的开发模式,在实际开发中去体会这两种技术的优点,B/S降低了系统维护的难度,使用更加方便,只需要浏览器即可。MVC的开发模式降低了各个模块之前的耦合程度,便于开发、维护、调试、升级。当然在开发过程中也遇到了很多困难,更加了解了系统开发的严谨性,需要考虑到每一步骤的多个分支可能,在调试代码的时候也更加的耐心和有章可循。 致 这次毕业设计,通过我自己坚持不懈的努力和邵老师的耐心指导下终于完成了。在系统实现的过程中,邵老师给我很多的意见和建议,使得我在功能设计、数据库设计等方面更加完善、合理。在后期论文修改阶段也是一次次的给予意见,指导我在论文中的不足之处,非常地耐心。他的严谨的工作作风,耐心的工作态度给我树立了很好的榜样,在此非常感邵老师的培养和帮助,对邵老师表示由衷的感。 同时,在我的毕业论文写作期间,还要感我的同学们,他们在平时的学习生活中给予我了很大的帮助。在此,向他们表示衷心的感! 参考文献 [1] 王珊 萨师煊 数据库系统概论[M] :高等教育 2007.4-5. [2] 《JSP高级编程》[M].(电子银行牌号管理):121-147. [3] Simon Brown. Pro JSP Third Edition[M]. Apress,Dec 2003:223 -242. [4] 林信良 JSP&Servlet学习笔记[M]. 清华大学, 2012-5:70-80. [5] Bryan Basham.Head First Servlets and JSP[M].2010:90-110. [6] 褚法政. Ajax开发技术原理与实践教程[M]. :电子工业, 2007-9:76 -98. [7] 刚 疯狂Ajax讲义[M]. :电子工业,2014-1:100-110. [8] Ethan Cerami and O’Reilly. Web Services Essentials[M]. :电子工业,2003-5:184 -192. [9] 钱乐秋 软件工程[M] :清华大学 2009.55-70. [10] Roger S.Pressman. Software Engineering Fifth Edition[M].:清华大学,2002-5:342 -353. [11] 林邦杰. 《Java程序设计入门教程》[M]. 中国青年. 2001:324 -337. [12] 蔡剑 景楠 Java Web 应用开发:J2EE 和 Tomcat[M].:清华大学,2009.30-40. [13] 罗维 MVC程序设计[M]. 中国水利水电, 2013-5:60-80. [14] 西尔伯沙茨 计算机科学丛书:数据库系统概念[M]. 机械工业. 2012:150-160. [15] 勇 晓军 Hibernate ORM 最佳实践 :清华大学 2007.40-50. [16] 苟英. 软件测试技术基础[M]. {H}:中国水利水电,2013:173 -188. [17] 人杰. 软件测试[M]. {H}:人民邮电,2011:452 -469. [18] 佩腾 软件测试[M]. 机械工业, 2006-4:70-80. 附 录 1.普通用户登录代码如下: /*** * 登录逻辑 查找数据库比较用户名密码 * return * throws Exception */ Action(value = \"dologin\ results = { Result(name = \"success\" ,type=\"redirect\\"index\") , Result(name = \"login\INF/views/login.jsp\") }) public String dologin() throws Exception { User loginuser=userService.login(user.getName(), user.getPassword()); if(loginuser!=null){ session.put(\"user\ return SUCCESS; } else{ ActionContext.getContext().getSession().clear(); this.tip=\"登陆失败 不存在此用户名或密码!\"; return LOGIN; } } 2.用户下单代码如下: /*** * 用户下单,生成订单保存 * return * throws Exception */ Action(value = \"order\ Result(name = \"success\ Result(name = \"login\ public String order() throws Exception { User user = (User) ServletActionContext.getRequest().getSession() .getAttribute(\"user\"); if (user == null) { tip = \"您还没有登录,请登录后在购买!\"; return LOGIN; } else { item = this.itemService.find(order.getItem().getId()); order.setTotalPrice(item.getPrice() * order.getCount()); order.setCreateDate(new Date(System.currentTimeMillis())); order.setUser(user); order.setState(\"待审核\"); this.orderService.save(order); this.tip = \"下单成功,请等待客服审核!\"; orders = orderService.findByUser(user); return SUCCESS; } } 3.后台商品管理代码如下: /*** *修改商品信息 * return */ Action(value = \"update\{ \"contentType\ public String update() { Item itemToupdate = itemService.find(item.getId()); itemToupdate.setCategory(item.getCategory()); itemToupdate.setCount(item.getCount()); itemToupdate.setName(item.getName()); itemToupdate.setRemark(item.getRemark()); itemToupdate.setScore(item.getScore()); itemService.save(itemToupdate); resultMap.put(\"state\ resultMap.put(\"msg\修改成功\"); return SUCCESS; } /*** *新增商品信息 * return */ Action(value = \"save\results = { Result(name = \"success\location = \"/WEB-INF/views/admin/item/index.jsp\") }) public String save() throws Exception { item.setCreateDate(new Date(System.currentTimeMillis())); item.setImgPath(this.imgPathFileName); itemService.save(item); /** 文件上传逻辑 */ String realpath = ServletActionContext.getServletContext().getRealPath( \"/upload\"); System.out.println(realpath); File saveImg = new File(new File(realpath), this.imgPathFileName); try { FileUtils.copyFile(imgPath, saveImg); } catch (IOException e) { e.printStackTrace(); return ERROR; } sellers = sellerService.findAll(); categorys = categoryService.findCategorys(); tip = \"新增商品成功\"; return SUCCESS; } 4.订单管理代码如下: /*** * 点击发货按钮 * return */ Action(value = \"approveOk\results = { Result(name = \"successype = \"json\") }, params = { \"contentType\ public String approveOk() { Order order = orderService.find(id); order.setState(\"已发货\"); orderService.save(order); resultMap.put(\"state\ resultMap.put(\"msg\发货成功\"); return SUCCESS; } /*** * 点击审核退回 * return */ Action(value = \"approveNotOk\results = { Result(name = \"successype = \"json\") }, params = { \"contentType\ public String approveNotOk() { Order order = orderService.find(id); order.setState(\"审核不通过\"); orderService.save(order); resultMap.put(\"state\ resultMap.put(\"msg\退回成功\"); return SUCCESS; } 5.权限管理模块代码如下: / * 修改时点击保存按钮 * return */ Action(value = \"update\params = { \"contentType\ public String update() { AdminUser bean = adminUserService.find(adminuser.getId()); bean.setName(adminuser.getName()); bean.setRemark(adminuser.getRemark()); bean.setRole1(adminuser.getRole1()); bean.setRole2(adminuser.getRole2()); bean.setRole3(adminuser.getRole3()); bean.setRole4(adminuser.getRole4()); bean.setRole5(adminuser.getRole5()); bean.setRole6(adminuser.getRole6()); adminUserService.save(bean); resultMap.put(\"state\resultMap.put(\"msg\修改成功\"); return SUCCESS; } 6.系统功能的相关截图: 附图1 非该系统用户权限控制图 附图2 普通用户注册界面图 附图3 点击页面商品分类导航页面图 附图4 搜索手机结果图 附图5 提交订单界面图 附图6 个人中心订单界面图 附图7 后台管理界面图 附图8 注册用户管理界面图 附图9 分类管理界面图 附图10 供应商管理界面图 附图11 商品管理界面图 附图12 新增商品界面图 附图13 订单管理界面图 附图14 管理员权限管理界面图 附图15 管理员修改权限界面图 因篇幅问题不能全部显示,请点此查看更多更全内容