运动服线上销售系统的设计与实现 毕业设计-附源码34480

摘  要

中国是世界上最大的服装消费国和生产国。服装业的发展对促进中国经济发展具有重要作用。信息技术的发展使服装公司能够通过Internet进行运动服销售,从而减少了运动服销售中的几个中间环节。本文以运动服线上销售系统为例,设计并开发了运动服线上销售系统。

基于运动服线上销售系统的研究背景,本文研究了国内外运动服线上销售系统的相关理论,并分析了其研究目的,研究的重要性以及主题研究的内容。在系统开发技术方面,采用B/S架构结合软件工程设计思想,在系统需求分析阶段描述了系统需求分析。在系统设计的总体阶段分别介绍了技术架构、逻辑结构、系统模块的设计和系统数据库的设计。最后简要介绍了系统每个功能模块的实现和具体测试。最后完成了基本系统功能、订单物流管理、意见反馈管理、系统用户管理、商城管理和网站公告管理的功能模块。本文研究的运动服线上销售系统有效地提高了运动服公司的销售信息水平,并为运动服线上销售系统的综合竞争力提供了技术支持。

关键词:B/S模式;运动服线上销售系统;MySQL

Abstract

China is the world's largest consumer and producer of clothing. The development of the clothing industry plays an important role in promoting China's economic development. The development of information technology has enabled clothing companies to sell sportswear through the Internet, thereby reducing several intermediate links in sportswear sales. This article takes the online sales system of sportswear as an example to design and develop an online sales system for sportswear.

Based on the research background of online sales systems for sportswear, this article studies the relevant theories of online sales systems for sportswear both domestically and internationally, and analyzes their research objectives, importance, and theme research content. In terms of system development technology, the B/S architecture combined with software engineering design ideas was used to describe the system requirements analysis in the system requirements analysis stage. In the overall stage of system design, the technical architecture, logical structure, system module design, and system database design were introduced separately. Finally, a brief introduction was given to the implementation and specific testing of each functional module of the system. Finally, the basic system functions, order logistics management, feedback management, system user management, mall management, and website announcement management modules were completed. The online sales system for sportswear studied in this article effectively improves the sales information level of sportswear companies and provides technical support for the comprehensive competitiveness of the sportswear online sales system.

Key words:B/S mode; Sports clothing online sales system; MySQL

目    录

  

Abstract

1 绪论

1.1 研究背景

1.2研究意义

2 运动服线上销售系统系统分析

2.1 可行性分析

2.1.1 技术可行性分析

2.1.2 经济可行性分析

2.1.3 操作可行性分析

2.1.4 管理可行性分析

2.2 系统流程分析

2.2.1 数据流程

2.2.2 业务流程

2.3 系统功能分析

2.4 系统用例分析

2.3 功能需求分析

3 运动服线上销售系统总体设计

3.1 系统功能结构设计

3.2 数据库设计

3.2.1 数据库概念结构设计

3.2.2 数据库逻辑结构设计

4 运动服线上销售系统详细设计与实现

4.1前台用户功能模块

4.1.1 前台首页界面

4.1.2注册界面

4.1.3登录界面

4.1.4 意见反馈界面

4.1.5 商品详情界面

4.1.6购物车界面

4.1.7我的订单界面

4.2管理员功能模块

4.2.1意见反馈管理界面

4.2.2 订单物流管理界面

4.2.3 商城中心管理界面

4.2.4 分类列表界面

4.2.5订单列表界面

4.2.6系统用户管理界面

5系统测试

5.1系统测试的目的

5.2 系统测试用例

5.3 系统测试结果

结论

参考文献

  

1 绪论

1.1 研究背景

随着Internet技术的不断发展,消费者可以随时随地通过任何网络访问终端设备访问网络,并获得对服装零售系统的访问权限。通过线上销售进行服装销售是在短时间内以较低的成本减少服装销售的有效方法。

服装公司是一家服装销售公司,代表来自二线品牌的各种男女运动服。它主要向河南省的主要和中型城市销售产品。在制衣业竞争日趋激烈的背景下,该公司还通过互联网启动了订单和销售业务。公司目前使用的销售信息系统具有独特的功能。客户可以通过从信息系统输入的图像和文字来了解公司出售的服装产品的信息。使用页面上的客户联系表来填写信息,例如服装的类型,数量和个人联系信息。根据客户填写的信息,服装销售公司的销售人员将与客户进行手动通信,以管理商品的付款和交付。或者客户可以根据网站上留下的联系信息直接联系销售公司进行商业交流。在建立系统的初期,由于电子商务的不成熟发展,这种模式可能会吸引一些客户进行业务谈判。但是,随着电子商务的逐步发展,该模型明显落后于信息时代对在线销售的速度和及时性的要求。根据该公司对该系统的访问统计,平均每天访问该系统的次数少于100次,并且通过该系统进行业务交易的客户呈下降趋势。由于系统的运行情况不同,因此通过该系统购买商品的零售客户几乎为零,并且该系统基本上不受服装零售企业的支持。

在上述背景下,为了解决公司现有服装销售系统中存在的问题,提高服装销售公司的商业加工能力并增加在线零售数量服装,本文旨在根据公司销售信息管理系统的实际需求设计和开发服装。该系统在公司的Intranet上实现,并通过Web服务器提供外部服务。购买服装的客户可以使用Internet访问销售系统,销售公司的销售人员可以通过该系统了解各种产品的销售情况,并组织订单审核,交付和其他服务。该系统的开发可以为服装销售的商业处理的计算机化和自动化提供技术支持。

1.2研究意义

本文基于运动服销售的实际业务处理,设计并开发了运动服线上销售信息管理系统,以提高公司的运动服销售信息的水平。在这个项目中研究的重要性主要体现在以下几个方面。

(1)扩大公司的营销渠道通过开发运动服销售信息系统,您可以为服装公司提供新的销售方式。服装公司该行业使用在线销售平台与最终用户建立直接联系,加速公司的资金流动并为公司的发展提供动力。

(2)塑造企业形象统一风格,标准化设计的销售信息系统是服装企业形象的重要体现,企业形象也是企业软实力的象征。改善业务软实力可以成为业务发展的主要动力。

(3)促进行业的总体发展通过开发和使用服装销售系统,可以促进服装制造企业的发展。在服装产业链中,生产公司是整个产业链的核心。产业链核心的发展必将带动上下游相关产业的发展。通过点对线和线对表面的作用,必然会促进服装业的整体发展。

2 运动服线上销售系统系统分析

系统需求分析是系统开发的一个关键环节,它在系统的设计和实现上起到了一个承上启下的位置。系统需求分析是对所需要做的系统进行一个需求的挖掘,如果分析的准确可以精准的解决现实中碰到的问题。如果分析不到位会影响后期系统的实现。一个系统的优秀程度需求分析也是占据了非常大的比例,如果需求分析不到位,后面的系统设计要实现就是一个偏离导航的设计。

2.1 可行性分析

2.1.1 技术可行性分析

运动服线上销售系统设计与实现是一个基于Web的交易、管理平台,我们在实现这个系统所采用的技术方案是基于JAVA语言,MYSQL数据库,在大学的学习中这两门课程都已经学过,而且自己也用这些技术开发过小的项目,在平时的课程设计以及作业也经常用到JAVA和MYSQL,在技术上实现自己的自主开发是可行的。

2.1.2 经济可行性分析

开发本运动服线上销售系统的技术都是可以从网上直接免费下载,不用花一分钱,而且系统的源代码都是自己进行设计开发的,不需要成本,如果后期想要进行运营,只要把配置到服务器上,花费服务器的租赁费用,在使用中可以进行增加广告收益,因此在经济方面是可性的。

2.1.3 操作可行性分析

当下网络新时代,计算机已经得到了普及,多数人对计算机都比较的熟悉,知道如何使用它,当然也存在对计算机比较陌生的这一群体,也需要对其进行考虑。在进行运动服线上销售系统页面的设计的时候,考虑到使用人群,可能也存在对计算机比较陌生的人,所以,在页面的设计方面,设计的很是简单、简洁,布局明了,色调明朗,让无论是对计算机陌生还是对计算机熟悉的使用者,都可以使用自如,这也说明了该程序的操作方面非常可行。

2.1.4 管理可行性分析

本运动服线上销售系统开发完成后只需要一个管理人员进行后台商品的增删改查以及用户、订单的管理就可以,不需要进行特别的培训,所有的操作只要有一点电脑基础就可以进行管理,在管理方面是可行的。

2.2 系统流程分析

2.2.1 数据流程

运动服线上销售系统主要的目的就是实现对商品的在线选购,图2-1就是系统的数据流图。

图2-1商品购买操作展开图

2.2.2 业务流程

分析完运动服线上销售系统的数据流,接下来我们来看系统的业务流程,图2-2就是业务流程图:

图2-2业务流程图

2.3 系统功能分析

按照运动服线上销售系统的角色,我划分为了注册用户管理模块和管理员管理模块这两大部分。

注册用户管理模块:

(1)注册登录:游客可以随时进入到系统中,对系统中的信息浏览,但是想要实现商品购买、收藏、意见反馈以及评论等操作,就必须有这个系统的账号,如果没有本系统账号的话,可以点击“注册”按钮,根据提示输入注册的信息,然后再进行登录,登录成功以后,点击“我的”这以按钮对个人信息以及操作的信息进行管控。

(2)查看运动服线上销售系统的首页信息:运动服线上销售系统的首页信息包含了首页、网站公告、商城中心、商城管理、意见反馈等。

(3)网站公告:在前台点击“网站公告”这一菜单按钮以后就会进入到网站公告界面。

(4)商城中心详情:用户可以点击搜索查看自己喜欢的商品,点击可以进入到商品的详细界面当中,在详情界面可以查看商品的各种参数,对喜欢的商品可以加购、立即购买、收藏、评论。

(5)意见反馈:在前台点击“意见反馈”按钮会跳转到意见反馈填写页面,根据页面提示输入意见反馈的内容,点击“提交”进行提交意见反馈信息。

(6)购物车:用户对喜欢的宠物商品可以加购,在购物车里面,可以查看到所有加购的商品,支持对商品数量的更改、删除商品,可以进行选择购买。

(6)我的订单:用户在提交订单后,可以对提交的订单进行管理。

(7)收货地址:点击“我的”中“我的地址”按钮的时候就会显示出自己的收货地址信息,支持对收货地址的增删改查操作。

(8)我的账户:用户点击“我的账户”可以对个人资料以及密码进行更新。

管理员管理模块:

(1)网站公告:点击“网站公告”可以查看到系统中的网站公告信息,如果想要添加新的网站公告,点击“添加”按钮,根据提示输入上网站公告信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果网站公告信息有误,可以对网站公告更新维护,也可以直接删除某一公告栏。

(2)管理员:点击“系统用户”可以查看到系统中的管理员信息,如果想要添加新的管理员,点击“添加”按钮,根据提示输入上管理员信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果管理员信息有误,可以对管理员更新维护,也可以直接删除某一管理员。

(3)注册用户:点击“系统用户”可以查看到系统中的用户信息,如果想要添加新的用户,点击“添加”按钮,根据提示输入上用户信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果用户信息有误,可以对注册用户更新维护,也可以直接删除某一注册用户。

(4)订单物流管理:点击“订单物流”可以查看到系统中的订单物流信息,如果想要添加新的订单物流,点击“添加”按钮,根据提示输入上订单物流信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果订单物流信息有误,可以对订单物流更新维护,也可以直接删除某一订单物流。

(5)意见反馈:点击“意见反馈”可以查看到系统中的意见反馈信息,如果想要添加新的意见反馈,点击“添加”按钮,根据提示输入上意见反馈信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果意见反馈信息有误,可以对意见反馈更新维护,也可以直接删除某一意见反馈。

(6)轮播图:点击“系统管理”可以查看到系统中的轮播图信息,如果想要添加新的轮播图,点击“添加”按钮,根据提示输入上轮播图信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果轮播图信息有误,可以对轮播图更新维护,也可以直接删除某一轮播图。

(7)商城中心:点击“商城中心”可以查看到系统中的商品信息,如果想要添加新的商品,点击“添加”按钮,根据提示输入上商品信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果商品信息有误,可以对商品更新维护,也可以直接删除某一商品。

(8)分类列表:点击“分类列表”可以查看到系统中的商品分类信息,如果想要添加新的分类,点击“添加”按钮,根据提示输入上分类信息,点击“提交”按钮,信息没有错误的话,添加就完成了,如果分类信息有误,可以对分类更新维护,也可以直接删除某一分类。

(9)订单列表:点击“订单列表”可以查看到用户购买的我的商品订单,对提交的订单进行管理。

2.4 系统用例分析

本运动服线上销售系统的设计主要是针对三种用户进行使用,第一种是以游客身份使用,游客在进入系统后可以查看到系统中的所有内容,包括网站公告、商城中心,如果想要评论或者购买,可以注册登录;第二种是注册之后有账号的用户,登录以后可以收藏、评论、购买、管理收货地址、订单、个人资料等;第三种则是管理员,是系统的管理者,管理员对系统中的意见反馈、商品/商品分类、订单进行整体把控。

2.3 功能需求分析

(1)注册登录模块:注册是游客独有的功能,注册后就成了系统的注册用户了,然后注册用户通过前台登录,管理员用户通过后台登录。注册登录模块用例如下图2-3所示。

图2-3 注册登录模块用例图

(2)用户管理模块:用户管理试后台管理员独有功能,管理员可以对注册的用户进行修改、删除、查询、也可以添加新的用户。用户管理模块用例如下图2-4所示。

图2-4用户管理模块用例图

(3)购物管理模块:购物管理是前台用户独有功能,用户可以选择两种购买方式,一种是把商品加入到购物车,另一种是直接购买,最终实现购物功能,购物管理模块用例如下图2-5所示。

图2-5购物管理模块用例图

(4)订单管理模块:订单管理模块是前台用户和后台管理员都有的功能,前台用户可以提交订单,管理订单,管理员能够对用户订单进行管控。订单管理模块用例如下图2-6所示。

图2-6订单管理模块用例图

(5)个人中心模块:个人中心模块是用户独有的功能,可以管理个人资料,密码修改,收货地址,订单,购物车,用例如下图2-7所示。

图2-7个人中心模块用例图

3 运动服线上销售系统总体设计

本章主要讨论的内容包括运动服线上销售系统的功能模块设计、数据库系统设计。

3.1 系统功能结构设计

系统在结构上的设计至关重要,要考虑周全,设计全面,一个完善的结构体系,能够满足用户在使用时的各种需求,这样会让提高程序的使用率,保证程序被长久的利用。在设计运动服线上销售系统的结构时,也列入重点,采用模块化的方法来进行设计,即首先将大模块确定下来,再慢慢的将大模块进行补充完善,向下分支出小模块,一起共同组成的系统的结构体系,下图是该运动服线上销售系统的结构设计图,直观明了的可以看出本项目程序的功能。

运动服线上销售系统模块图如图3-1所示。

图3-1 运动服线上销售系统功能模块图

3.2 数据库设计

数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。

3.2.1 数据库概念结构设计

下面是整个运动服线上销售系统中主要的数据库表总E-R实体关系图。

图3-2 运动服线上销售系统总E-R关系图

下面根据运动服线上销售系统的数据库总E-R关系图可以得出运动服线上销售系统需要很多E-R图,在此罗列出来一些主要的数据库E-R模型图。

图3-3注册用户信息E-R关系图

图3-4 购物车信息E-R关系图

图3-5商城中心E-R关系图

图3-6 订单信息E-R关系图

图3-7 地址信息E-R关系图

图3-8 意见反馈E-R关系图

图3-9 订单物流信息E-R关系图

3.2.2 数据库逻辑结构设计

在数据库表中我们会看到系统的表名、主键、外键等信息,我们通过数据库表的主键、外键把每个表关联起来,然后在界面中展示,本运动服线上销售系统的主要的数据库表如下:

(1)registered_user表如表3-1所示包含了注册用户id+姓名+性别+审核状态等,主要用在前台用户来登录运动服线上销售系统时进行使用。

表3-1registered_users注册用户信息表

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

registered_users_id

int

10

0

N

Y

注册用户ID

2

gender

varchar

64

0

Y

N

性别

3

name

varchar

64

0

Y

N

姓名

4

examine_state

varchar

16

0

N

N

已通过

审核状态

5

recommend

int

10

0

N

N

0

智能推荐

6

user_id

int

10

0

N

N

0

用户ID

7

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

(2)order_logistics表如表3-2所示包含了订单物流信息的主键+用户+订单号+快递公司+快递单号+是否收货+商品明细等。

表3-2order_logistics订单物流表

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

order_logistics_id

int

10

0

N

Y

订单物流ID

2

user

int

10

0

Y

N

0

用户

3

order_number

varchar

64

0

Y

N

订单号

4

courier_services_company

varchar

64

0

Y

N

快递公司

5

courier_number

varchar

64

0

Y

N

快递单号

6

received_or_not

varchar

64

0

Y

N

是否收货

7

commodity_details

text

65535

0

Y

N

商品明细

8

recommend

int

10

0

N

N

0

智能推荐

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

(3)order表如表3-3所示,主要订单信息由前端(用户)发出订单和管理员执行管理而形成的,用户、管理员都可以在看到订单所有的信息。

表3-3order订单信息表

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

order_id

int

10

0

N

Y

订单ID:

2

order_number

varchar

64

0

Y

N

订单号:

3

goods_id

mediumint

8

0

N

N

商品id:[0,8388607]

4

title

varchar

32

0

Y

N

商品标题:

5

img

varchar

255

0

Y

N

商品图片:

6

price

double

10

2

N

N

0.00

价格:

7

price_ago

double

10

2

N

N

0.00

原价:

8

num

int

10

0

N

N

1

数量:

9

price_count

double

8

2

N

N

0.00

总价:

10

norms

varchar

255

0

Y

N

规格:

11

type

varchar

64

0

N

N

未分类

商品分类:

12

contact_name

varchar

32

0

Y

N

联系人姓名:

13

contact_email

varchar

125

0

Y

N

联系人邮箱:

14

contact_phone

varchar

11

0

Y

N

联系人手机:

15

contact_address

varchar

255

0

Y

N

收件地址:

16

postal_code

varchar

9

0

Y

N

邮政编码:

17

user_id

int

10

0

N

N

0

买家ID:

18

merchant_id

mediumint

8

0

N

N

0

商家ID:

19

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

20

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

21

description

varchar

255

0

Y

N

描述:[0,255]用于产品规格描述

22

state

varchar

16

0

N

N

待付款

订单状态:待付款,待发货,待签收,已签收,待退款,已退款,已拒绝,已完成

(4)mall_center表如表3-4所示,主要在卖家中可以更好的调动商品的价格以及推荐的商品更换,在前端(买家)可以有效的查找商品、直观的看到商品外观和商品的属性等等。

表3-4mall_center商城中心信息表

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

mall_center_id

int

10

0

N

Y

商城中心ID

2

brand

varchar

64

0

Y

N

品牌

3

specifications

varchar

64

0

Y

N

规格

4

recommend

int

10

0

N

N

0

智能推荐

5

cart_title

varchar

125

0

Y

N

标题:[0,125]用于产品html的标签中

6

cart_img

text

65535

0

Y

N

封面图:用于显示于产品列表页

7

cart_description

varchar

255

0

Y

N

描述:[0,255]用于产品规格描述

8

cart_price_ago

double

8

2

N

N

0.00

原价:[1]

9

cart_price

double

8

2

N

N

0.00

卖价:[1]

10

cart_inventory

int

10

0

N

N

0

商品库存

11

cart_type

varchar

64

0

N

N

未分类

商品分类:

12

cart_content

longtext

2147483647

0

Y

N

正文:产品的主体内容

13

cart_img_1

text

65535

0

Y

N

主图1:

14

cart_img_2

text

65535

0

Y

N

主图2:

15

cart_img_3

text

65535

0

Y

N

主图3:

16

cart_img_4

text

65535

0

Y

N

主图4:

17

cart_img_5

text

65535

0

Y

N

主图5:

18

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

19

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

(5)address表如表3-5所示,主包含了收货地址id+姓名+手机+邮编+地址,主要用在用户对提交订单选择地址的时候进行使用。

表3-5address地址信息表

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

address_id

int

10

0

N

Y

收货地址:

2

name

varchar

32

0

Y

N

姓名:

3

phone

varchar

13

0

Y

N

手机:

4

postcode

varchar

8

0

Y

N

邮编:

5

address

varchar

255

0

N

N

地址:

6

user_id

mediumint

8

0

N

N

用户ID:[0,8388607]用户获取其他与用户相关的数据

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

9

default

bit

1

0

N

N

0

默认判断

(6)feedback表如表3-6所示包含了意见反馈id+主题+相关图片+反馈内容+用户+联系电话+审核状态+审核回复等。

表3-6feedback意见反馈信息表

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

feedback_id

int

10

0

N

Y

意见反馈ID

2

theme

varchar

64

0

Y

N

主题

3

related_pictures

varchar

255

0

Y

N

相关图片

4

feedback_content

text

65535

0

Y

N

反馈内容

5

user

int

10

0

Y

N

0

用户

6

contact_number

varchar

64

0

Y

N

联系电话

7

examine_state

varchar

16

0

N

N

未审核

审核状态

8

examine_reply

varchar

16

0

Y

N

审核回复

9

recommend

int

10

0

N

N

0

智能推荐

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

4 运动服线上销售系统详细设计与实现

4.1前台用户功能模块

4.1.1 前台首页界面

游客或者用户进入系统后可以查看系统的信息,包含了程序的标题,导航栏,轮播图,公告信息等,其主界面展示如下图4-1所示。

图4-1 前台首页界面图

4.1.2注册界面

游客可以查看系统信息,也有注册成为用户的权限。其用注册流程图如图4-2所示,注册界面展示如下图4-3所示。

图4-2注册流程图

图4-3 用户注册界面图

注册逻辑代码如下:

/**

     * 注册

     * @param user

     * @return

     */

    @PostMapping("register")

    public Map<String, Object> signUp(@RequestBody User user) {

        // 查询用户

        Map<String, String> query = new HashMap<>();

        query.put("username",user.getUsername());

        List list = service.select(query, new HashMap<>()).getResultList();

        if (list.size()>0){

            return error(30000, "用户已存在");

        }

        user.setUserId(null);

        user.setPassword(service.encryption(user.getPassword()));

        service.save(user);

        return success(1);

}

/**

     * 用户ID:[0,8388607]用户获取其他与用户相关的数据

     */

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "user_id")

    private Integer userId;

    /**

     * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

     */

    @Basic

    @Column(name = "state")

    private Integer state;

    /**

     * 所在用户组:[0,32767]决定用户身份和权限

     */

    @Basic

    @Column(name = "user_group")

    private String userGroup;

    /**

     * 上次登录时间:

     */

    @Basic

    @Column(name = "login_time")

    private Timestamp loginTime;

    /**

     * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "phone")

    private String phone;

    /**

     * 手机认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "phone_state")

    private Integer phoneState;

    /**

     * 用户名:[0,16]用户登录时所用的账户名称

     */

    @Basic

    @Column(name = "username")

    private String username;

    /**

     * 昵称:[0,16]

     */

    @Basic

    @Column(name = "nickname")

    private String nickname;

    /**

     * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

     */

    @Basic

    @Column(name = "password")

    private String password;

    /**

     * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "email")

    private String email;

    /**

     * 邮箱认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "email_state")

    private Integer emailState;

    /**

     * 头像地址:[0,255]

     */

    @Basic

    @Column(name = "avatar")

    private String avatar;

    /**

     * 创建时间:

     */

    @Basic

    @Column(name = "create_time")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    private Timestamp createTime;

    @Basic

    @Transient

    private String code;

}

4.1.3登录界面

当用户注册成功以后就成为了用户,用户可以通过前台的登录页面登录到系统当中,用户登录流程如图4-4所示,登录界面如下图4-5所示。

图4-4 登录流程图

图4-5登录界面图

登录的逻辑代码如下所示。

/**

     * 登录

     * @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);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

}

4.1.4 意见反馈界面

游客是不能进行意见反馈的,只有注册成为用户才能进行提交意见反馈,意见反馈界面如下图4-6所示。

图4-6意见反馈界面图

4.1.5 商品详情界面

游客只能查看商城中心的商品,不能进行任何购买、评论操作,注册用户可以选择自己需要的商品,加入购物车、立即购买、收藏、评论,详情展示页面如图4-7所示,购买流程图如图4-8所示。

            

图4-7 商品详情界面图

图4-8加入购物车流程图

4.1.6购物车界面

用户可以对加入购物车的商品进行管理、购买,购物车界面如下图4-9所示,购买流程图如图4-10所示。

图4-9 购物车界面图

图4-10 购买工作流程图

4.1.7我的订单界面

注册用户可以查看到自己购买的商品,查看订单状态、删除,我的订单界面如下图4-11所示。

                     

图4-11 订单界面图

4.2管理员功能模块

4.2.1意见反馈管理界面

管理员拥有对前台注册用户提交的意见反馈的管理功能,对意见反馈进行审核、回复,意见反馈管理界面如下图4-12所示。

图4-12意见反馈管理界面图

4.2.2 订单物流管理界面

管理员拥有对订单物流管理的功能,订单物流的界面如下图4-13所示。

图4-13订单物流管理界面图

订单物流管理逻辑代码如下:

 @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());

}

4.2.3 商城中心管理界面

管理员拥有对商城中心中的商品进行添加、修改、删除、管理评论的功能,商城中心管理界面如下图4-14所示。

图4-14商城中心管理界面图

商城中心管理界面逻辑代码如下:

@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());

}

4.2.4 分类列表界面

管理员拥有对商品的分类增删改查的功能,分类列表界面如下图4-15所示。

图4-15分类列表界面图

4.2.5订单列表界面

管理员拥有对所有订单的查询、删除的功能。订单列表界面如下图4-16所示。

图4-16 订单列表界面图

订单列表管理的逻辑代码如下:

 @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);

}

    public Map<String,Object> readBody(BufferedReader reader){

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

            while ((str = br.readLine()) != null){

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

4.2.6系统用户管理界面

在后台系统用户管理中,主要是管理注册的用户和管理员用户,管理员拥有对所有用户管控的功能。系统用户管理界面如下图4-17所示。

图4-17 系统用户管理界面图

系统用户管理界面逻辑代码如下:

@PostMapping("/set")

@Transactional

    public Map<String, Object> set(HttpServletRequest request) throws IOException {

        service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));

        return success(1);

}

    public Map<String,String> readConfig(HttpServletRequest request){

        Map<String,String> map = new HashMap<>();

        map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));

        map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));

        map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));

        map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));

        map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));

        map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));

        map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));

        map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));

        return map;

}

    public Map<String,String> readQuery(HttpServletRequest request){

        String queryString = request.getQueryString();

        if (queryString != null && !"".equals(queryString)) {

            String[] querys = queryString.split("&");

            Map<String, String> map = new HashMap<>();

            for (String query : querys) {

                String[] q = query.split("=");

                map.put(q[0], q[1]);

            }

            map.remove(FindConfig.PAGE);

            map.remove(FindConfig.SIZE);

            map.remove(FindConfig.LIKE);

            map.remove(FindConfig.ORDER_BY);

            map.remove(FindConfig.FIELD);

            map.remove(FindConfig.GROUP_BY);

            map.remove(FindConfig.MAX_);

            map.remove(FindConfig.MIN_);

            return map;

        }else {

            return new HashMap<>();

        }

}

    @Transactional

    public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){

        StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");

            }else {

                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");

            }

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));

        log.info("[{}] - 更新操作:{}",table,sql);

        Query query1 = runCountSql(sql.toString());

        query1.executeUpdate();

}

    public String toWhereSql(Map<String,String> query, Boolean like) {

        if (query.size() > 0) {

            try {

                StringBuilder sql = new StringBuilder(" WHERE ");

                for (Map.Entry<String, String> entry : query.entrySet()) {

                    if (entry.getKey().contains(FindConfig.MIN_)) {

                        String min = humpToLine(entry.getKey()).replace("_min", "");

                        sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (entry.getKey().contains(FindConfig.MAX_)) {

                        String max = humpToLine(entry.getKey()).replace("_max", "");

                        sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (like == true) {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");

                    } else {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");

                    }

                }

                sql.delete(sql.length() - 4, sql.length());

                sql.append(" ");

                return sql.toString();

            } catch (UnsupportedEncodingException e) {

                log.info("拼接sql 失败:{}", e.getMessage());

            }

        }

        return "";

    }

5系统测试

系统的前台、后台、数据库完成以后,这个系统才算是完成了一半,我们在这之后要对系统进行最后的一个阶段,那就是测试了,测试对一个系统来说是非常重要的,有的时候开发完一个系统,如果测试不合格的话,这个系统是没有办法进行投入使用的,所有我们要用测试对系统的功能进行检验,把不完善的功能尽量完善,把出现的bug解决掉,然后给用户呈现出一个完美的系统。通过对系统最后一步的测试,使得开发人员对自己的系统更加有信心,更加积极的为后期的系统版本的更新提供支持。

5.1系统测试的目的

一个系统测试的目的就是检验系统在真正的工作环境、条件下是不是能够正常运行,各种功能能不能符合设计的要求,通过测试发现系统当中存在的一些潜在的错误,然后对系统进行改进,使得系统最终以完美的形式展现给用户,提高用户使用过程中的体验度,真正达到项目的实际使用目的。

5.2 系统测试用例

系统测试包括:管理员登录功能测试、商城查看功能测试、商城中心添加功能测试、加入购物车购买功能测试,如表5-1、5-2、5-3、5-4所示:

管理员登录功能测试:

表5-1 管理员登录功能测试表

测试名称

测试功能

操作过程

预期结果

测试结果

登录模块测试

登录成功的情况

管理员可以通过浏览器进入到运动服线上销售系统后台登录界面,输入用户名:admin和密码admin后,点击“登录”按钮。

成功登录到管理员管理的界面

正确

登录模块测试

登录失败的情况

管理员可以通过浏览器进入到运动服线上销售系统后台登录界面,输入用户名:admin和密码111后,点击“登录”按钮。

系统提示“用户名和密码不匹配”

正确

商城查看功能测试:

表5-2 商城查看功能测试表

测试名称

测试功能

操作过程

预期结果

测试结果

查询商城信息功能测试

查询成功的情况

用户在导航栏中点击“商城”,输入关键词查询商品,输入的商品在系统中存在,显示查询商品信息 

查询成功

正确

商城中心中商品添加界面测试:

表5-3 管理员添加商品界面测试表

测试名称

测试功能

操作过程

预期结果

测试结果

 商品添加模块测试

商品添加成功的情况

在“商城中心”菜单中点击“商城中心”会显示出所有的商品信息,点击“添加”,输入商品信息,输入正确的信息后,点击“提交”按钮。

提示添加成功

正确

商品添加模块测试

商品添加失败的情况

在“商城中心”菜单中点击“商城中心”会显示出所有的商品信息,点击“添加”,不输入标题,其他信息正常填写后,点击“提交”按钮。

提示“添加失败,标题不能为空”

正确

加入购物车购买功能测试:

表5-4 加入购物车购买功能测试表

测试名称

测试功能

操作过程

预期结果

测试结果

加入购物车购买功能测试

购买的情况

用户在商城中心的商品详情页面,点击“加入购物车”,然后在“我的购物车”界面,点击“购买”按钮,进行付款。

加入购物车购买成功

正确

5.3 系统测试结果

本次开发的系统是一运动服线上销售、购买的系统,主要功能就是实现用户的在线购买,通过对管理员登录、商城查询、商品添加、加入购物车购买这几个方面的测试可以看出系统的基本可以实现用户对商品购买的功能,而且在测试的过程中也对界面的展示进行了查看,发现界面并没有出现扭曲、混乱等情况,能够满足用户的需求,系统运行良好,是可以进行投入使用的。

结论

网络大环境下,电子商务的商业模式已经遍及全国各地,由于人们生活水平的提高以及生活节奏的加快,让人们也已经爱上这种购物模式。本次开发的运动服线上销售系统即是基于目前电子商务模式而建设的,其开发目的是给用户提供一个全新的交易环境,提高用户购物的体验度,系统的开发不仅可以实现商品的购物、销售,还能进行订单物流、意见反馈,功能非常多样。

该运动服线上销售系统使用的开发环境是功能强大的JAVA+MYSQL,在大学的学科中重点学习了这两中技术,在对这些技术学习、熟悉之后,结合对系统进行的需求分析顺利的完成了本次项目的设计。在最初接到任务书的那一刻,比较迷茫,没有任何的思路,在经过了老师的指导以后,调查了一些购物系统相关的资料后,慢慢的有了头绪,开始入手开题,明确了系统的内容,对系统进行可行性的分析,确定系统可行以及功能内容以后,就按照开题初步设计的内容进行完善,慢慢补充、学习,最终结束了程序的开发,也完成了论文的写作。这一过程,虽然艰辛,但也学习到了很多,对项目开发流程也有了一个新的认识,动手能力也得到了提高,这正是书本上所学习不到的。

经过开发本项目,让我非常有成就高,与此同时我对程序的开发更加感兴趣了,信息技术真的很强大,也很深奥,在以后工作中,我将会寻找与其相关工作,继续深入学习,开发出更优秀的项目。

参考文献

[1]吕晓钢,王鹏飞,封晨. 基于SpringBoot生产大屏监控系统的设计与实现[C]//天津市电子学会.第三十七届中国(天津)2023’IT、网络、信息技术、电子、仪器仪表创新学术会议论文集.第三十七届中国(天津)2023’IT,2023:169-171.DOI:10.26914/c.cnkihy.2023.022878.

[2]Karthik G,Debashish M,Jagoda C, et al. Developing a MySQL Database for the Provenance of Black Tiger Prawns (Penaeus monodon).[J]. Foods (Basel, Switzerland),2023,12(14).

[3]李洋,刘婷.MySQL数据库安全加固技术的研究[J].科技与创新,2023(13):120-122.DOI:10.15913/j.cnki.kjycx.2023.13.035.

[4]李艳杰.基于MySQL数据库的数据安全应用设计[J].现代信息科技,2023,7(12):151-154.DOI:10.19850/j.cnki.2096-4706.2023.12.037.

[5]王希超,李晓峰,戚勇等. 基于Springboot框架的代码自动生成方法及系统[P]. 山东省:CN116301780A,2023-06-23.

[6]孟思明.基于SpringBoot框架选购系统的设计与实现[J].中国设备工程,2023(11):94-95.

[7]赵将.Java语言在计算机软件开发中的应用[J].数字技术与应用,2023,41(03):160-162.DOI:10.19695/j.cnki.cn12-1369.2023.03.46.

[8]刘丹青,李超,王青海.基于Java技术的藏汉双语学前教育云平台设计与实现[J].信息技术,2023,47(02):17-23.DOI:10.13274/j.cnki.hdzj.2023.02.004.

[9]乔赟鸽凌.基于B/S结构和JAVA编程技术的高校档案管理系统设计[J].无线互联科技,2023,19(02):52-54.

[10]陈新府豪. 基于SpringBoot和Vue框架的创新方法推理系统的设计与实现[D].浙江理工大学,2022.DOI:10.27786/d.cnki.gzjlg.2022.000649.

[11]马静.线上商品销售管理数据库系统的设计与实现[J].科技创新与生产力,2022(03):86-88.

[12]吕元祥, 基于Java技术框架的组件资源管控系统V1.0. 湖北省,武汉东湖学院,2021-11-01.

[13]Sriratana W,Khagwian V,Satthamsakul S. Analysis of Electric Current by Using MySQL Database on Web Server for Machine Performance Evaluation: A Case Study of Air Conditioning System[J]. 제어로봇시스템학회 국제학술대회 논문집,2020.

[14]王建勇. 基于微服务的B2B2C平台销售系统服务端的设计与实现[D].北京邮电大学,2020.DOI:10.26969/d.cnki.gbydu.2020.002302.

[15]士明军. 在线销售系统中平台与物流公司及生产商的决策研究[D].重庆大学,2019.DOI:10.27670/d.cnki.gcqdu.2019.003499.

[16]ISO/IEC 9075-13 Technical Corrigendum 1-2010, 信息技术.数据库语言.SQL语言.第13部分:使用Java TM程序设计语言(SQL/JRT)的SQL例程和类型.技术勘误表1[S].

 

通过这样设计与开发这样一个系统,首先向我们老师、同学和朋友表达真诚的感谢。没有指导老师的指导和平日子的教导,我也不能够学到如此多的专业知识。另外,也佩服老师兢兢业业的工作态度,给我们做好了表率。系统开发技术要学习的东西很多,前台框架、后台框架、业务流程、数据结构、操作系统等各种知识非常的丰富,都需要慢慢的专研。在这里,首先感谢老师细心的教导,我只想说一句:“老师,谢谢您,您辛苦了!有您在,大学生活才更加的充实。”另外,我要感谢我的室友,由于知识掌握得不够产生各种问题,正因为有了你们的帮忙,给我提出很多很好的建议,才能更好的解决系统开发问题。同时,我也应该感谢那些计算机专业的先哲们,正是由于有这么一群人,才能把这样的专业研究得如此透彻,才能助力新世界的诞生。你们的理论,是我们一生学习的内容,你们的成就,是我们一生追求的目标。

最后,也希望自己在未来的道路上能够走得更远,不辜负在大学的学习,以及老师们的细致的教导。

点赞+收藏+关注 → 私信领取本源代码、数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值