3.4.6 删除信息流程
北京公司网站设计成都网站建设泰州网站设计网站建设案例汉中建网站洛阳网站建设商丘网站制作东莞常平网站设计西安企业网站建设租车网站建设首页制作网站设计报价动态网站建设广州网站制作公司网站模板网站程序开发网叶制作网页开发网站开发制作公司低价网站设计龙华网站建设安阳网站制作网站建设技术泰安网站制作佛山小程序开发佛山企业网站制作太原网站建设哪家便宜网站建设代理平台app网站建设淮北建网站网站设计报价
线上商城是一种具有交互功能的商业信息系统。它向用户提供静态和动态两类信息资源。所谓静态信息是指那些不经常变动或更新的资源,如商家信息、管理规范、页面图像等等;动态信息是指随时变化的信息,如商品报价、公告信息、更新产品等。线上商城具有强大的交互功能,可使商家和用户方便的传递信息,完成电子贸易或EDI交易。这种全新的交易方式实现了商家与用户间的无纸化交换。
电器商城作为B2B,B2C ( Business to Customer,即企业对消费者),C2C(Customer to Customer,即消费者对消费者)电子商务的前端商务平台,在其商务活动全过程中起着举足轻重的作用。本文主要考虑的是如何建设并运作B2C的电器商城小程序。通过分析国内一些主流的、大型的、有代表性的B2C电子商务网站,如易趣网、亚马逊网、当当网等,可以得到以下的一些B2C电子商务系统的共性,而功能模块则体现了小程序所具有的功能,这些功能包括用于指向小程序特定内容的链接集合的导航栏、普通信息、即时信息、电器商品信息等。
电器商城小程序,是在小程序的基础上建立一个虚拟的电器购物商城,避免了挑选商品的烦琐过程,使您的购物过程变得轻松、快捷,很适合现代人快节奏的生活。同时又能有效的控制“商场”运营的成本,开辟了一个新的销售渠道。为顾客提供一个足不出户的供货服务,方便顾客了解商品新闻信息、货物信息以及售后服务留言反馈。为商家提供一个展示和宣传商品的平台,方便商家信息的发布,商品管理和价格统计,以及用户管理等功能。
就家电业而言,经济发达国家显然走在家电网购市场的前列。许多电器零售店早就放弃在城市商业街设店经营的传统方式,转向网上销售的电子商务模式。国外大部分人推崇时尚,追求效率,生活节奏较快,这是国外网上购物市场发展迅猛的主要原因,但更重要的是法制上的完善,越来越多的消费者对在线购物感到信赖放心”。同时国外不断运用信息技术,充分地利用巨大的信息资源,计算机技术应用于家电行业已经十分成熟。
与世界发达国家相比,我国的家电经营系统管理水平还有很大的差距。我国近年来网上销售爆发火热,家电网上销售也呈现快速增长。2009、2010年随着国美、苏宁、京东商城这些主流企业的进入,消费者对于家电网购的信任感增强,同时由于能从网上以便宜实惠的价格购买到正品行货且有配送物流服务,家电网购逐渐为更大的消费群所接收。
Java是一种面向对象的程序设计语言,类是Java程序的基本组成单元,类中又包含了属性和方法,在类中又可以创建无数个对象。类中包含的主要成员是字段和方法,字段是指一种数据变量,方法是指对字段进行操作的集合,包括给其他变量赋值、调用方法等[1]。
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。
Mysql数据库逻辑结构包含表空间(tablespace)、段(segment)、范围(extend)、数据块(datablock)、和模式对象(schemaobject) [9]。每一个数据库都可以逻辑划分为一个或多个表空间,每一个表空间都是由一个或多个数据文件来组成。Mysql数据库分为系统表空间和非系统表空间,每一个Mysql数据库都包含一个称作SYSTEM的系统表空间。
Mysql的语言是非结构化的,用户可以在数据上进行工作。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。并且因为Mysql的语言和结构比较简单,但是功能和存储信息量很强大,所以得到了普遍的应用。
Mysql数据库在编程过程中的作用是很广泛的,为用户进行数据查询带来了方便。Mysql数据库的应用因其灵活性强,功能强大,所以在实现某功能时只需要一小段代码,而不像其他程序需要编写大段代码。总体来说,Mysql数据库的语言相对要简洁很多。
数据流程分析主要就是数据存储的储藏室,它是在计算机上进行的,而不是现实中的储藏室。数据的存放是按固定格式,而不是无序的,其定义就是:长期有固定格式,可以共享的存储在计算机存储器上。数据库管理主要是数据存储、修改和增加以及数据表的建立。为了保证系统数据的正常运行,一些有能力的处理者可以进行管理而不需要专业的人来处理。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。介于数据库的功能强大等特点,本系统的开发主要应用了Mysql进行对数据的管理。
B/S(Browser/Server)比前身架构更为省事的架构。它借助Web server完成数据的传递交流。只需要下载浏览器作为客户端,那么工作就达到“瘦身”效果, 不需要考虑不停装软件的问题。
B/S架构采取浏览器请求,服务器响应的工作模式。
用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息;
而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中;
从Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。而各个企业可以在此结构的基础上建立自己的Internet。
在 B/S 模式中,用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的,浏览器的请求通过服务器进行处理,并将处理结果以及相应的信息返回给浏览器,其他的数据加工、请求全部都是由Web Server完成的。通过该框架结构以及植入于操作系统内部的浏览器,该结构已经成为了当今软件应用的主流结构模式。
MVVM模式是常用的开发模式,主要是在代码实现上将其分为M层、V层和C层。
视图(View)代表用户交互界面,一个 Web 应用就可能有很多的界面,在 MVVM 模式中,视图仅仅处理的只有数据采集、处理,还有用户的请求, 并不包括业务流程的处理,业务流程由模型(Model)来处理。
模型(Model)就是业务流程/状态的处理及业务规则的制定。模型处理业务流程的过程其它层是无法看见了的,它就像黑箱子,在接受视图请求的数据之后,然后返回最终的处理结果。MVVM 最主要的核心就是业务模型的设计,一个典型的应用例子就是目前流行的 EJB 模型,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但是它不能作为应用设计模型的框架。
控制器(Controller)可以理解为接收用户的请求,然后视图和模型匹配在一起,一起再完成用户请求。它有非常明显的作用在划分控制层上,可以很清晰地告诉你,它就是一个分发器,选择什么样的模型、视图,可以完成用户的什么样的请求。控制层不做所有的数据处理,比如说:用户点击一个连接,控制层接受到请求之后,并不处理业务信息,它只是向模型传递用户的信息,同时告诉模型做什么,然后选择符合需求的视图返回给用户。
本系统将在经济、技术、操作这三个角度上进行可行性分析。
整个系统从设计到开发以及测试过程严谨步骤齐全,所有工作任务全部由本人完成,并未获取外部技术支持,节约了一切服务成本开销以及人工成本,在硬件方面,为节约成本使用一台二手移动工作站作为项目部署服务器以及数据库服务器,成本在一万元一下,真个网络部署也是由本人独立完成不涉及到其他人工费用,整个开发过程本着低成本,低消耗的原则。
技术可行性分析的目的是确认该系统能否利用现有技术实现,并评估开发效率和完成情况。技术的可行性是指在当前的技术条件下,计算机软件和硬件的开发是否能够满足发展的要求。因为该系统的开发基于Java语言,所以开发该系统所需的软件和硬件条件可以在普通计算机上满足。因为它占用的内存相对较少,所以用Mysql数据库开发和设计软件理论上没有问题,因为它占用的内存太少。上述技术可以有效地保证系统的成功和高效开发。
电器商城小程序的使用界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,用户只要平时使用过电脑都能进行访问操作。此系统的开发采用Java技术开发,人性化和完善化是B/S结构开发比较显要的特点使得用户操作相比较其他更加简洁方便。易操作、易管理、交互性好在本系统操作上体现得淋漓尽致。
前台需求:
(1)用户模块:主要包括用户的注册和登陆、用户个人信息管理等功能。
(2)产品管理模块:主要包括产品信息浏览、产品信息展示、产品搜索、产品购买等功能。
(3)购买订单模块:主要包括添加购买订单、查看我的购买订单和删除购买订单等功能。
(4)订单模块:主要包括生成订单、我的订单、查看订单详细信息、在线支付等功能。
后台需求:
(1)用户管理:主要包括用户列表、用户等级管理等功能。
(2)产品管理:主要包括产品列表、产品品类管理、产品添加、产品信息管理等功能。
(3)订单管理:主要包括订单确认、支付查看等功能。
用户用例图如下所示。
图1 用户用例图
管理员用例图如下所示。
图2 管理员用例图
产品添加用例描述如下表所示。
表1产品添加用例描述
用例名称 | 添加新产品 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行添加新产品操作 | |
前置条件 | 管理员添加新产品前必须登录系统 | |
后置条件 | 系统中添加一个新产品 | |
基本事件流 | 参与者动作 | 系统响应 |
4、管理员填写新产品信息,点击“添加”按钮。 | 2、系统打开添加新产品界面。 3、系统检查管理员输入的产品信息是正确有效的。 5、系统将产品添加到数据库中。 6、系统提示“操作成功”。 7、系统跳转到产品管理界面。 | |
其他事件流 | 1、系统验证管理员输入的产品名为空,则提示“*请填写产品名称!”。 2、系统验证管理员输入的价格不是数字格式,则提示“*价格必须是数字格式!” |
产品删除用例描述如下表所示。
表2产品删除用例描述
用例名称 | 删除产品 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行删除产品操作 | |
前置条件 | 管理员删除产品前必须登录系统 | |
后置条件 | 系统中删除一个产品 | |
基本事件流 | 参与者动作 | 系统响应 |
1、管理员在后台主界面选择“产品管理”。 4、管理员选择一个产品,点击“删除”按钮。 6、管理员点击“确定”按钮。 | 2、系统从数据库中获取产品信息列表 3、系统打开产品列表界面。 5、系统提示“你确定要删除吗?”。 7、系统将产品从数据库中删除。 8、系统提示“删除成功”。 9、系统跳转到产品管理界面。 | |
其他事件流 | 无 |
用户编辑用例描述如下表所示。
表3用户编辑用例描述
用例名称 | 修改用户 | |
参与者 | 管理员 | |
用例概述 | 本用例用于管理员进行修改用户信息操作 | |
前置条件 | 管理员已经登录系统 | |
后置条件 | 系统中更新一条用户记录 | |
基本事件流 | 参与者动作 | 系统响应 |
1、管理员在后台主界面选择“用户管理”。 4、管理员在用户列表中选择一个用户,点击“编辑”按钮。 6、管理员填写用户信息,点击“保存修改”按钮。 | 2、系统从数据库中获取用户信息。 3、系统打开用户列表界面。 5、系统打开修改用户信息界面。 7、系统将更改后的添加到数据库中。 8、系统提示“操作成功”。 9、系统跳转到用户管理界面。 | |
其他事件流 | 无 |
产品购买用例描述如下表所示。
表4产品购买用例描述
用例名称 | 产品购买 | |
参与者 | 用户 | |
用例概述 | 本用例用于用户进行对产品购买操作 | |
前置条件 | 用户已经登录系统 | |
后置条件 | 系统中增加一条用户购买记录 | |
基本事件流 | 参与者动作 | 系统响应 |
1、用户在前台首页选择任意一个产品分类。 4、管理员在用户列表中选择一个产品。 7、用户填写购买订单,点击“购买”按钮。 | 2、系统从数据库中获取产品列表信息。 3、系统打开产品列表界面。 5、系统从数据库中获取产品信息。 6、系统打开产品信息及购买界面。 8、系统检查用户输入的信息是正确有效的。 9、系统将购买记录添加到数据库中。 | |
其他事件流 | 1、系统验证用户输入的字段为空,则提示“*购买数量不能为空!”。 |
随着用户量的增加,系统可能会需要同时服务上千、上万个页面,服务器需要同时响应大量用户的操作,这就要求系统需要有良好的可扩展性,否则系统会出现延迟,卡顿甚至服务器崩溃的问题。高扩展性可以使软件保持旺盛的生命力,同时也能够使系统更好的适应用户增加、提高性能需求、增加应用功能等改变。
系统中保存了大量用户和管理员的个人信息,因此,保证系统服务器和数据安全是在开发过程中需要考虑的重要问题。安全性包括服务器安全、操作系统安全、数据库安全、程序代码安全以及用户个人信息和支付安全等,系统可以通过采用防火墙技术、加密技术、认证技术等来增强其安全性,只有一个健壮安全的系统才能具有长久的生命力。
电器商城小程序的前台中,用户模块和产品商品模块进行数据交互,实现购买的功能。前台的功能主要包括用户模块、好物推荐模块、商城模块、购买模块和订单模块。
电器商城小程序的后台中,管理员对用户在前台提交申请产生的数据进行处理,以满足用户的需求。前台系统和后台系统有数据交互,整个系统各个部分相互独立又密不可分。后台的功能主要包括用户管理、商城管理、产品管理、订单管理。
通过软件的需求分析已经获得了系统的基本功能需求。根据各大功能模块的不同,将系统分为各种功能大块。系统功能结构如下图所示。
图4系统功能结构图
注册/登录
游客(未进行注册或登陆的用户)可以浏览、搜索产品,但不能进行收藏和购买。用户注册首先需要进行表单验证,来验证账号和密码是否合法,然后验证账号是否已经存在,验证通过即可注册。
注册成功后,用户可以通过输入用户名来登录系统,输入密码后进行验证。登录成功后,用户可以使用产品收藏、产品购买、查看我的订单、产品展示、个人信息管理等功能。
个人信息管理
用户登录系统后,在账户设置中,可以修改昵称、头像、登陆密码、收货地址等个人基本信息。
产品搜索
系统首页展示了产品搜索输入框,用户在输入框内输入与产品类型相关的关键字,系统通过模糊查询搜索到用户需要的产品并展示。
产品信息展示
用户在浏览产品时,点击某一个产品,跳转到该产品的信息展示页。在产品信息页面展示了产品的详情信息,比如产品介绍,产品详情等,用户通过浏览信息了解产品的具体信息,最终决定是否购买。
产品购买
在产品信息页面,用户可以通过点击“购买”进行购买产品,点击后跳转到订单生成页面。订单生成页面会展示产品信息,收货地址,配送信息等,用户确认后信息无误点击“提交”生成订单,订单生成后跳转到支付页面,支付完成则购买成功。
查看订单详情
用户在查看我的订单列表时,可以点击某一个订单来查看该订单的详细信息,主要包括订单编号、订单状态、订单日期、订单中的产品信息、交易金额等。
商城列表
管理员可以在“商城列表”中展示商城中需要销售的商城,包含商城名称,商城属性以及类目等商城信息。管理员可以对商城进行搜索,按分类查询商城。
产品添加
添加产品首先需要输入产品基本信息,如产品信息、产品价格、产品分类等;然后需要编辑产品详情,如产品类型,产品价格,产品图片等。管理员也可以删除已添加的产品。
产品管理
用户在购买产品时需要选择产品类型,管理员可以设置产品类型以及展示的顺序等。管理员还可以给产品类型添加属性值,也可以删除不需要的属性值。同时,管理员可以编辑产品信息,如产品介绍、价格、展示图片等,方便用户浏览。
概念设计包括实体和联系两部分,如该系统中,用户是一个实体,其属性包括用户 ID 标识、用户名、密码、电话、地址等属性。联系是指实体之间有意义的关联,包括一对一、一对多、多对多三种类型。
系统E-R图如下所示。
图5系统E-R图
在图中,用户购买产品,关系为1:N,管理员管理产品信息,关系为1:N,用户和订单的关系为1:N。
连接数据库的文件在Resources 文件夹下的application.yml文件,代码如下:
server:
port: 5000
servlet:
context-path: /api
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/CS725260_20211101091736?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
jackson:
property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
default-property-inclusion: ALWAYS
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
针对系统的实体和属性,结合数据设计思想,对系统的逻辑设计的内容进行如下描述。
产品(产品编号、产品名称、产品图片、价格、品牌、介绍)。
购买订单(购买订单编号、产品编号、购买数量、总额、购买人、购买时间)。
订单(订单编号、用户名、订单内容、总金额、收货地址、是否支付、配送信息)。
产品展示(展示编号、标题、类别、品牌、图片)。
数据库表是设计和实现系统的一个重要基础。以下列出了电器商城小程序几个重要的数据库表。
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
registered_user_id | int | 11 | 是 | 是 | 注册用户ID |
user_name | varchar | 64 | 是 | 否 | 用户名 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
mall_center_id | int | 11 | 是 | 是 | 商城中心ID |
brand | varchar | 64 | 否 | 否 | 品牌 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
cart_title | varchar | 125 | 否 | 否 | 标题 |
cart_img | text | 0 | 否 | 否 | 封面图 |
cart_description | varchar | 255 | 否 | 否 | 描述 |
cart_price_ago | double | 8 | 是 | 否 | 原价 |
cart_price | double | 8 | 是 | 否 | 卖价 |
cart_inventory | int | 11 | 是 | 否 | 商品库存 |
cart_type | varchar | 64 | 是 | 否 | 商品分类: |
cart_content | longtext | 0 | 否 | 否 | 正文 |
cart_img_1 | text | 0 | 否 | 否 | 主图1: |
cart_img_2 | text | 0 | 否 | 否 | 主图2: |
cart_img_3 | text | 0 | 否 | 否 | 主图3: |
cart_img_4 | text | 0 | 否 | 否 | 主图4: |
cart_img_5 | text | 0 | 否 | 否 | 主图5: |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
type_id | int | 11 | 是 | 是 | 商品分类ID: |
father_id | smallint | 5 | 是 | 否 | 上级分类ID |
name | varchar | 255 | 否 | 否 | 商品名称: |
desc | varchar | 255 | 否 | 否 | 描述: |
icon | varchar | 255 | 否 | 否 | 图标: |
source_table | varchar | 255 | 否 | 否 | 来源表: |
source_field | varchar | 255 | 否 | 否 | 来源字段: |
create_time | timestamp | 0 | 是 | 否 | 创建时间: |
update_time | timestamp | 0 | 是 | 否 | 更新时间: |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
cart_id | int | 11 | 是 | 是 | 购物车ID: |
title | varchar | 64 | 否 | 否 | 标题: |
img | varchar | 255 | 是 | 否 | 图片: |
user_id | int | 10 | 是 | 否 | 用户ID: |
create_time | timestamp | 0 | 是 | 否 | 创建时间: |
update_time | timestamp | 0 | 是 | 否 | 更新时间: |
state | int | 1 | 是 | 否 | 状态: |
price | double | 8 | 是 | 否 | 单价: |
price_ago | double | 8 | 是 | 否 | 原价: |
price_count | double | 10 | 是 | 否 | 总价: |
num | int | 8 | 是 | 否 | 数量: |
goods_id | mediumint | 8 | 是 | 否 | 商品id |
type | varchar | 64 | 是 | 否 | 商品分类: |
description | varchar | 255 | 否 | 否 | 描述 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
order_id | int | 11 | 是 | 是 | 订单ID: |
order_number | varchar | 64 | 否 | 否 | 订单号: |
goods_id | mediumint | 8 | 是 | 否 | 商品id |
title | varchar | 32 | 否 | 否 | 商品标题: |
img | varchar | 255 | 否 | 否 | 商品图片: |
price | double | 10 | 是 | 否 | 价格: |
price_ago | double | 10 | 是 | 否 | 原价: |
num | int | 8 | 是 | 否 | 数量: |
price_count | double | 8 | 是 | 否 | 总价: |
norms | varchar | 255 | 否 | 否 | 规格: |
type | varchar | 64 | 是 | 否 | 商品分类: |
contact_name | varchar | 32 | 否 | 否 | 联系人姓名: |
contact_email | varchar | 125 | 否 | 否 | 联系人邮箱: |
contact_phone | varchar | 11 | 否 | 否 | 联系人手机: |
contact_address | varchar | 255 | 否 | 否 | 收件地址: |
postal_code | varchar | 9 | 否 | 否 | 邮政编码: |
user_id | int | 10 | 是 | 否 | 买家ID: |
merchant_id | mediumint | 8 | 是 | 否 | 商家ID: |
create_time | timestamp | 0 | 是 | 否 | 创建时间: |
update_time | timestamp | 0 | 是 | 否 | 更新时间: |
description | varchar | 255 | 否 | 否 | 描述 |
state | varchar | 16 | 是 | 否 | 订单状态 |
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
feedback_id | int | 11 | 是 | 是 | 意见反馈ID |
theme | varchar | 64 | 否 | 否 | 主题 |
relevant_vouchers | varchar | 255 | 否 | 否 | 相关凭证 |
user_name | int | 11 | 否 | 否 | 用户名 |
content | text | 0 | 否 | 否 | 内容 |
merchant_reply | text | 0 | 否 | 否 | 商家回复 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
用户注册完成后,点击“登陆”进入到登陆页面,输入用户名和密码,点击“登陆”按钮,对用户名和密码进行验证,根据传入的用户名和密码在数据库中是否能查询到一条用户信息,若不能返回用户信息则登陆失败,页面提示用户名或密码错误。
登陆拦截管理器,在config文件夹下的WebAppConfig.java文件,代码如下:
@Configuration
@Slf4j
public class WebAppConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//登录拦截的管理器
InterceptorRegistration registration = registry.addInterceptor(loginInterceptor());
//拦截的地址
registration.addPathPatterns("/**");
//方行的地址
//registration.excludePathPatterns("/**");
//根据需要拦截,一般设置所有地址拦截,放行公共连接
}
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
}
登录界面如下图所示。
图5-1登录界面
用户登录的关键代码如下。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
用户界面要尽量简洁大方,使用户能够方便找到需要的功能入口,浏览、购买产品,且要易于修改和维护,同时还要保证用户合法和系统安全。
首页界面如下图所示。
图5-2首页界面
用户进入系统首页后,点击“注册”链接进入到注册页面,按照页面提示输入用户名、密码和产品号,页面进行表单验证,验证输入的用户名和产品号是否合法,表单验证通过后,点击“立即注册”按钮,利用 Ajax 技术,对用户名和产品号实现页面无刷新验证,检测数据库中是否已经存在该用户名,若数据库中不存在,则注册成功,注册成功后,自动跳转到登录页面。
用户注册界面如下所示。
图5-3用户注册界面
好物推荐页面,如下图所示。
图5-4好物推荐页面
好物推荐的关键代码如下。
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
系统首页提供了产品展示,用户可以在线浏览产品信息、也可以进行产品搜索等。产品展示界面如下图所示。
图5-5产品展示界面
产品展示的关键代码如下。
@RequestMapping(value = {"/count_group", "/count"})
public Map<String, Object> count(HttpServletRequest request) {
Query count = service.count(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
用户在浏览产品时,对于心仪的想要购买的产品,可以将该产品添加到购买订单中。点击“添加购买订单”按钮,页面将该产品的数据传递到后台,首先查询数据库购买订单表中是否已经存在该产品,若存在直接将产品数量加一,若不存在则创建一个新的购买订单对象,添加购买订单成功,数据库中的购买订单表添加一条信息。用户还可以点击“我的购买订单”查看添加到购买订单的产品,系统通过读取 session获取到用户 ID,将用户 ID 传递到后台,在购买订单表中查询该用户的所有购买订单信息,返回数据到我的购买订单页面。
产品购买界面如下图所示。
图5-6产品购买界面
个人购买订单界面如下图所示。
图5-7个人购买订单界面
个人购买的关键代码:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
管理员对系统用户的管理,在管理员管理实现管理员用户的管理,包括录入、删除、修改,修改密码通过SESSION获取用户名,然后输入新密码,使用sql命令更新密码。
用户管理界面如下图所示。
图5-8用户管理界面
管理员可以获取系统中所有商城的列表并对其进行编辑。管理员在添加商城时,需要输入商城基本信息,如标题。、标签,还需要输入商城详情描述,包括对商城功能的描述以及展示图片等。添加商城完成,数据库商城表添加一条信息。管理员可以搜索商城,同时可以对已经添加的商城进行编辑。
商城管理界面如下图所示。
图5-9商城管理界面
商城管理关键代码:
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
管理员在后台管理界面点击到所有订单界面列表,可以搜索当前所有订单信息,调用搜索全部订单的请求,向数据库的订单表搜索当前所有订单并将订单信息以对象的形式层层返回到订单列表界面,显示出当前所有订单信息。同时可以删除过期订单,确认已有订单,进行发货处理。
订单管理界面如下图所示。
图5-10订单管理界面
意见反馈界面如下图所示。
图5-11意见反馈界面
订单管理的关键代码如下。
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
Query select = service.select(service.readQuery(request), service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
public Query select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return runEntitySql(sql.toString());
}
以进入系统首页的访问速度为例展示系统的性能测试;系统的主要用户群体是购物理念较为先进的消费者,系统要在3秒钟内响应;需要完成页面的菜单栏、首页轮播图片、类目及产品列表、好物推荐以及各功能模块入口等元素的显示。
功能性测试是指执行指定的工作流程,通过对一个系统的所有特性和功能都进行测试确保符合需求和规范。
系统功能性测试表如下表所示。
表11系统功能性测试表
编号 | 测试功能 | 测试内容 | 测试结果 |
1 | 用户登录 | 1.验证用户名与密码的正确性。 2.验证密码是否可见。 | 通过 |
2 | 首页展示 | 1.首页数据是否成功加载。 2.验证搜索功能的准确性。 3.验证是否可以异步加载。 4.验证导航栏按钮。 | 通过 |
3 | 个人信息修改 | 1.验证登录名是否可以正常更改。 2.验证联系方式是否可以更改。 3.验证收货地址可以正常修改。 4.验证密码是否可以修改。 | 通过 |
4 | 购买订单管理 | 1.购买订单清单是否可以生成。 2.验证消费信息是否准确。 | 通过 |
7 | 好物推荐管理 | 1.验证类目新增是否可以成功。 2.验证类目删除是否可以成功。 | 通过 |
8 | 产品管理 | 1.产品信息是否与上传一致。 2.是否能完成价格修改。 3.验证库存信息修改。 | 通过 |
9 | 订单处理 | 1.能否正常上传单号完成发货。 2.验证数据准确性。 | 通过 |
10 | 添加产品 | 1.上传产品是否添加验证。 2.图片是否成功上传。 3.验证表单是否提交成功。 | 通过 |
11 | 用户管理 | 1.验证用户录入功能。 2.验证用户违规清理功能。 | 通过 |
集成测试后,所有的模块已经全部连接完毕,形成了一个完整的系统。合格性测试是在集成测试完毕后,进一步对系统进行综合性的检测。经过合格性测试,可以检查出系统是否符合系统的设计,能够完成需求的所有功能。本系统经过最后的测试,所有模块功能都能按预定要求工作。
在实际测试中,经过一系列系统性的测试,使我们能够及时发现一些系统在设计中出现的疏忽和漏洞。经过严密的测试,不仅发现了模块内部的错误,也查找到模块连接后产生的错误。经过测试,对系统产生错误的地方进行优化、修改和完善,使得系统能够实现最初设计的基本功能。
">