SSM家居商城小程序 毕业设计源码13313

SSM家居商城小程序的开发

                                                                          摘 要

随着时代的进步,尤其是现在正处于信息化时代,电子产品更是飞速发展。它的产量和更新速度每天都在飞速发展,家居商城小程序的诞生不仅可以方便人们足不出户就可以用最合适的价钱买到人们心中最喜欢的商品,更可以满足人们闲置资源的合理利用,促进社会的经济发展。

本文主要通过对家居商城小程序的前端和后端管理进行了功能性需求分析,对程序的安全性和可扩展性进行了非功能性需求分析。在详细的需求分析的基础上,根据程序的功能设计确定了数据库结构,实现完整的代码编写。家居商城小程序完成了主要模块的页面设计和功能实现。本文展示了首页页面的实现效果图,并通过代码和页面介绍了用户注册功能、公告信息、家居商城、购物车、订单管理功能的实现过程。

关键词:小程序;SSM框架;家居

Development of SSM Home Shopping Mall Mini Program

Abstract

With the progress of the times, especially in the information age, electronic products are developing rapidly. Its production and update speed are rapidly developing every day. The birth of furniture mall mini programs not only facilitates people to buy their favorite products at the most suitable price without leaving home, but also meets the reasonable utilization of idle resources and promotes social and economic development.

This paper mainly analyzes the functional requirements of the front-end and back-end management of the small program in the furniture store, and analyzes the non-functional requirement of the security and scalability of the program. On the basis of detailed requirements analysis, the database structure was determined based on the functional design of the program, achieving complete code writing. The furniture mall mini program has completed the page design and functional implementation of the main modules. This article shows the implementation effect of the homepage page, and introduces the implementation process of user registration function, announcement information, furniture mall, shopping cart, and order management function through the code and page.

Key words:Mini program; SSM framework; furniture

目  录

一、 绪论

(一) 研究背景与意义

(二) 国内外发展现状

二、 开发工具及相关技术介绍

(一) 开发技术说明

(二) ssm框架介绍

() Mysql数据库

() 小程序框架以及目录结构介绍

三、 系统分析

(一) 可行性分析

1. 经济可行性

2. 技术可行性

3. 操作可行性

(二) 功能性需求分析

(三) 非功能性需求分析

(四) 业务流程分析

四、 系统设计

(一) 功能模块设计

(二) 数据库设计

1. 概念模型设计

2. 数据库表设计

五、 系统实现

(一) 用户登录的实现

(二) 前主要功能实现

(三) 后端主要功能实现

六、 系统测试

(一) 系统可靠性测试

(二) 系统功能性测试

(三) 系统合格性测试

(四) 测试结果

七、 总结与展望

参考文献

致谢

  • 研究背景与意义

21世纪互联网浪潮来临,传统的商业模式发生了重大转变,高效的电子商务系统的运用已被广泛接受,拥有高效率、安全、节约、快捷、全球化等优点,能有效地提高企业在现代商业活动中的综合竞争力。进入新世纪后,人们在家居消费观念上有了一个全新的转变与突破,由以往的功能性的追求发展为个性化、时尚化的享受与欣赏,求新、求变将是未来家居消费的主流,因此家居的更新速度亦会逐步加快,更新周期由目前的数十年变为4年至5年。家居市场呈现出百家争鸣的气氛,不仅国外家居企业向中国市场进军,而且中国家居业在近几年有了突飞猛进的前进趋势,家居市场竞争异常激烈。

家居作为人们日常生活中必不可少的生活用品,十分适合在互联网上进行展示和销售。所以开发一个家居购物网站是很有必要的。而伴随着电子商务的不断发展,家居购物网站也经历着不断地变化。给用户带来“一站式”体验的家居购物网站像一张网 ,将家居设计、家居制造商和购物者联系到一起。实现用户在网上购买家居和设计家居等各种需求。并通过这一新型的商业模式减少商品的运营成本, 提高品牌竞争力和服务质量,及时发布最新商品的优点。

网上购物系统主要是建立网站以及自己的数据库,使得所需商品信息可以及时的保存、更新、可以更好的及时了解商品买卖的情况。卖家通过购物系统,直接在网页上搜寻到自己所需要的商品,然后通过购物车功能下单,购买。使传统的商品交易电子化,使广大网名可以足不出户就能购买到自己心仪的产品,为其提供便利。

  • 国内外发展现状

目前,国际上家居的主要生产地是欧洲的意大利、德国、西班牙、波兰及北欧的一-些国家。由于意、德等发达国家国内消费市场较小,巨大的中国市场对他们有强烈的吸引力;加之国内中产阶层和国外商社在华人士对国外高端家居的需求在不断扩大进口。实行零关税后,可以预见的是,家居高端产品的进口批量将会越来越大,价格会逐渐降下来。但是,国外家居生产厂商想大举向中国出口家居还存在不利因素。

家居市场永远是个朝阳产业,同时家居也是人们日常生活必不可少的装饰品,我国的家居市场正以成倍的速度增长。家居商城网上销售已经成为一个新型产业发展起来,国内家居电子商务仅仅在2000年最为一个全新的产业发展起来,其发展速度惊人,达到30%以上,并且现在已经形成了由索菲亚、京东商城等网上商城为代表的电子商务网站,只是家居网上销售还不够完善,一些地方需要改进,家居网上商城应该与家居制造厂商和木材供应商形成战略合作关系,降低运营成本和风险,提高竞争力。

  • 开发工具及相关技术介绍

(一)开发技术说明

本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于Java的ssm框架进行开发。

前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。

后端部分:采用ssm作为开发框架,同时集成MyBatis、Redis等相关技术。

(二)ssm框架介绍

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

1.1 Spring

Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。

Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`new`一个对象,而是让Spring框架帮你来完成这一切。

1.2 SpringMVC

SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。

1.3 mybatis

mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。

(三)Mysql数据库

Mysql Database,通常简称为Mysql,是一款关系型数据库的管理系统。Mysql数据库系统是目前最流行的关系型数据库管理系统之一,其系统具有良好的可移植性,功能强大且使用十分方便。Mysql支持很多系统和硬件,包括HP-UX,Linux,MicrosoftWindows,SunSolaris,AppleMac等。

Mysql系统的特点:

(1)Mysql的多线索服务器的体系结构使其只利用很少的资源就能够支持多用户的、大数据的高性能事务处理;

(2)Mysql支持大量的多媒体数据,例如声音、动画、二进制图形和多维数据结构等;

(3)Mysql提供了安全保密管理系统,具有良好的安全性、一致性和完整性;

(4)具有新的分布式数据库能力和分布处理的能力;

(5)提供了一些高级语言的接口软件,可以帮助快速开发基于客户端的应用程序,具有良好的移植性、可连结性和可兼容性。

Mysql数据库逻辑结构包含表空间(tablespace)、段(segment)、范围(extend)、数据块(datablock)、和模式对象(schemaobject) 。每一个数据库都可以逻辑划分为一个或多个表空间,每一个表空间都是由一个或多个数据文件来组成。Mysql数据库分为系统表空间和非系统表空间,每一个Mysql数据库都包含一个称作SYSTEM的系统表空间。

(四)小程序框架以及目录结构介绍

整个小程序框架系统分为两部分:逻辑层和视图层。小程序开发框架的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生 小程序 体验的服务。小程序在视图层与逻辑层间提供了数据传输和事件系统,提供了自己的视图层以及逻辑层框架,让开发者能够专注于数据与逻辑。框架的核心是一个响应的数据绑定系统,可以让数据与视图非常简单地保持同步。在逻辑层做数据修改,在视图层就会做相应的更新。框架提供了一套基础的组件,这些组件自带微信风格的样式以及特殊的逻辑,开发者可以通过组合基础组件,创建出强大的小程序。。

  • 系统分析

本系统将在经济、技术、操作这三个角度上进行可行性分析。

  1. 经济可行性

整个系统从设计到开发以及测试过程严谨步骤齐全,所有工作任务全部由本人完成,并未获取外部技术支持,节约了一切服务成本开销以及人工成本,在硬件方面,为节约成本使用一台二手移动工作站作为项目部署服务器以及数据库服务器,成本在一万元一下,真个网络部署也是由本人独立完成不涉及到其他人工费用,整个开发过程本着低成本,低消耗的原则。

  1. 技术可行性

技术可行性分析的目的是确认该系统能否利用现有技术实现,并评估开发效率和完成情况。技术的可行性是指在当前的技术条件下,计算机软件和硬件的开发是否能够满足发展的要求。因为该系统的开发基于Java语言,所以开发该系统所需的软件和硬件条件可以在普通计算机上满足。因为它占用的内存相对较少,所以用Mysql数据库开发和设计软件理论上没有问题,因为它占用的内存太少。上述技术可以有效地保证系统的成功和高效开发。

  1. 操作可行性

家居商城小程序的使用界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,用户只要平时使用过电脑都能进行访问操作。此系统的开发采用Java技术开发,人性化和完善化是B/S结构开发比较显要的特点使得用户操作相比较其他更加简洁方便。易操作、易管理、交互性好在本系统操作上体现得淋漓尽致。

  • 功能性需求分析

前台需求:

(1)用户模块:主要包括用户的注册和登陆、用户个人信息管理等功能。

(2)家居商城模块:主要包括家居信息浏览、家居信息展示、家居搜索、购买等功能。

(3)购买家居模块:主要包括添加购买订单、查看我的购买订单和删除购买订单等功能。

(4)订单模块:主要包括生成订单、我的订单、查看订单详细信息、在线支付等功能。

(5)公告信息模块:主要用于系统公告信息的浏览以及查看。

后台需求:

(1)用户管理:主要包括用户列表、用户等级管理等功能。

(2)家居商城管理:主要包括家居列表、家居品类管理、家居添加、家居信息管理等功能。商家可以上架家居信息至系统供买家用户浏览选择。

(3)订单管理:商家进行订单确认、支付查看,管理员可以对用户的订单信息进行维护管理等功能。

(4)轮播图管理:管理员对系统轮播图可以进行增删改查操作。

(5)公告信息管理:管理员可以对公告列表进行增删改查操作。

买家用例图如下所示。

 

图1 买家用例图

管理员用例图如下所示。

 

图2 管理员用例图

家居添加用例描述如下表所示。

表1家居添加用例描述

用例名称

添加新家居

参与者

管理员

用例概述

本用例用于管理员进行添加新家居操作

前置条件

管理员添加新家居前必须登录系统

后置条件

系统中添加一个新家居

基本事件流

参与者动作

系统响应

  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. 概念模型设计

概念设计包括实体和联系两部分,如该系统中,用户是一个实体,其属性包括用户 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

  1. 数据库表设计

数据库表是设计和实现系统的一个重要基础。以下列出了家居商城小程序几个重要的数据库表。

  • 表address (收货地址:)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

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

默认判断

  • 表buyer (买家)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

buyer_id

int

10

0

N

Y

买家ID

2

buyer_name

varchar

64

0

Y

N

买家姓名

3

buyer_gender

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

更新时间

  • 表cart (购物车)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

cart_id

int

10

0

N

Y

购物车ID:

2

title

varchar

64

0

Y

N

标题:

3

img

varchar

255

0

N

N

0

图片:

4

user_id

int

10

0

N

N

0

用户ID:

5

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

6

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

7

state

int

10

0

N

N

0

状态:使用中,已失效

8

price

double

9

2

N

N

0.00

单价:

9

price_ago

double

9

2

N

N

0.00

原价:

10

price_count

double

11

2

N

N

0.00

总价:

11

num

int

10

0

N

N

1

数量:

12

goods_id

mediumint

8

0

N

N

商品id:[0,8388607]

13

type

varchar

64

0

N

N

未分类

商品分类:

14

description

varchar

255

0

Y

N

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

  • 表furniture_mall (家居商城)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

furniture_mall_id

int

10

0

N

Y

家居商城ID

2

furniture_brand

varchar

64

0

Y

N

家居品牌

3

furniture_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

更新时间

  • 表goods (商品信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

goods_id

mediumint

8

0

N

Y

产品id:[0,8388607]

2

title

varchar

125

0

Y

N

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

3

img

text

65535

0

Y

N

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

4

description

varchar

255

0

Y

N

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

5

price_ago

double

8

2

N

N

0.00

原价:[1]

6

price

double

8

2

N

N

0.00

卖价:[1]

7

sales

int

10

0

N

N

0

销量:[0,1000000000]

8

inventory

int

10

0

N

N

0

商品库存

9

type

varchar

64

0

N

N

商品分类:

10

hits

int

10

0

N

N

0

点击量:[0,1000000000]访问这篇产品的人次

11

content

longtext

2147483647

0

Y

N

正文:产品的主体内容

12

img_1

text

65535

0

Y

N

主图1:

13

img_2

text

65535

0

Y

N

主图2:

14

img_3

text

65535

0

Y

N

主图3:

15

img_4

text

65535

0

Y

N

主图4:

16

img_5

text

65535

0

Y

N

主图5:

17

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

18

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

19

customize_field

text

65535

0

Y

N

自定义字段

20

source_table

varchar

255

0

Y

N

来源表:

21

source_field

varchar

255

0

Y

N

来源字段:

22

source_id

int

10

0

N

N

0

来源ID:

23

user_id

int

10

0

Y

N

0

添加人

  • 表goods_type (商品类型)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

type_id

int

10

0

N

Y

商品分类ID:

2

father_id

smallint

5

0

N

N

0

上级分类ID:[0,32767]

3

name

varchar

255

0

Y

N

商品名称:

4

desc

varchar

255

0

Y

N

描述:

5

icon

varchar

255

0

Y

N

图标:

6

source_table

varchar

255

0

Y

N

来源表:

7

source_field

varchar

255

0

Y

N

来源字段:

8

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

  • 系统实现
  • 用户登录的实现

用户注册完成后,点击“登陆”进入到登陆页面,输入用户名和密码,点击“登陆”按钮,对用户名和密码进行验证,根据传入的用户名和密码在数据库中是否能查询到一条用户信息,若不能返回用户信息则登陆失败,页面提示用户名或密码错误。

登陆拦截管理器,在config文件夹下的WebAppConfig.java文件,代码如下:

return [

    // 数据库类型

    'type'            => 'mysql',

    // 服务器地址

    'hostname'        => '127.0.0.1',

    // 数据库名

    'database'        => 'CS85950_20211206165410',

    // 用户名

    'username'        => 'root',

    // 密码

    'password'        => 'root',

    // 端口

    'hostport'        => '3306',

    // 连接dsn

    'dsn'             => '',

    // 数据库连接参数

    'params'          => [],

    // 数据库编码默认采用utf8

    'charset'         => 'utf8',

    // 数据库表前缀

    'prefix'          => '',

    // 数据库调试模式

    'debug'           => true,

    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)

    'deploy'          => 0,

    // 数据库读写是否分离 主从式有效

    'rw_separate'     => false,

    // 读写分离后 主服务器数量

    'master_num'      => 1,

    // 指定从服务器序号

    'slave_no'        => '',

    // 自动读取主库数据

    'read_master'     => false,

    // 是否严格检查字段是否存在

    'fields_strict'   => true,

    // 数据集返回类型

    'resultset_type'  => 'array',

    // 自动写入时间戳字段

    'auto_timestamp'  => true,

    // 时间字段取出后的默认时间格式

    'datetime_format' => 'Y-m-d H:i:s',

    // 是否需要进行SQL性能分析

    'sql_explain'     => false,

    // Builder类

    'builder'         => '',

    // Query类

    'query'           => '\\think\\db\\Query',

    // 是否需要断线重连

    'break_reconnect' => false,

    // 断线标识字符串

    'break_match_str' => [],

];

登录界面如下图所示。

 

图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;

        QueryWrapper wrapper = new QueryWrapper<User>();

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

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.selectBaseList(service.select(map, new HashMap<>()));

        }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.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));

        if (groupList.size()<1){

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

        }

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

        //查询用户审核状态

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

            String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());

            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, "账号或密码不正确");

        }

}

    public String 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 sql.toString();

}

    public List selectBaseList(String select) {

        List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);

        List<E> list = new ArrayList<>();

        for (Map<String,Object> map:mapList) {

            list.add(JSON.parseObject(JSON.toJSONString(map),eClass));

        }

        return list;

}

  • 前端主要功能实现 
  1. 首页的实现

用户界面要尽量简洁大方,使用户能够方便找到需要的功能入口,浏览家居商城,且要易于修改和维护,同时还要保证用户合法和系统安全。

首页界面如下图所示。

 

图5-2首页界面

  1. 用户注册的实现

用户进入系统首页后,点击“注册”链接进入到注册页面,按照页面提示输入用户名、密码,页面进行表单验证,验证输入的用户名是否合法,表单验证通过后,点击“立即注册”按钮,利用 Ajax 技术,对用户名实现页面无刷新验证,检测数据库中是否已经存在该用户名,若数据库中不存在,则注册成功,注册成功后,自动跳转到登录页面。

用户注册界面如下所示。

                                 

 

图5-3用户注册界面

用户注册逻辑代码如下:

    /**

     * 注册

     * @return

     */

    @PostMapping("register")

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

        // 查询用户

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

        Map<String,Object> map = service.readBody(request.getReader());

        query.put("username",String.valueOf(map.get("username")));

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

        if (list.size()>0){

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

        }

        map.put("password",service.encryption(String.valueOf(map.get("password"))));

        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){

        E entity = JSON.parseObject(JSON.toJSONString(body),eClass);

        baseMapper.insert(entity);

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

}

  1. 公告信息的实现

公告信息页面,如下图所示。

 

 

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

}

  1. 家居列表的实现

系统首页提供了搜索家居的输入框,用户在输入框内输入想要查找家居的关键字,点击搜索按钮,系统将用户输入的关键字传递到后台。首先创建一个实体类 PageBean,该实体类的属性包括页码 pageCode、每页记录数 pageSize、总记录数 totalRecord 和一个 List 集合 beanList,用循环将搜索到的结果分页展示。

家居列表界面如下图所示。

 

图5-5家居列表界面

家居列表的关键代码如下。

@RequestMapping("/get_obj")

    public Map<String, Object> obj(HttpServletRequest request) {

        List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));

        if (resultList.size() > 0) {

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("obj",resultList.get(0));

            return success(jsonObject);

        } else {

            return success(null);

        }

}

  1. 家居购买的实现

用户在浏览家居信息时,对于心仪的想要购买的家居,可以将该家居添加到购买订单中。点击“添加购买订单”按钮,页面将该家居的数据传递到后台,首先查询数据库购买订单表中是否已经存在该家居,若存在直接将家居数量加一,若不存在则创建一个新的购买订单对象,添加购买订单成功,数据库中的购买订单表添加一条信息。用户还可以点击“我的购买订单”查看添加到购买订单的家居,系统通过读取 session获取到用户 ID,将用户 ID 传递到后台,在购买订单表中查询该用户的所有购买订单信息,返回数据到我的购买订单页面。

家居购买界面如下图所示。

 

图5-6家居购买界面

  • 后端主要功能实现 
  1. 用户管理的实现

管理员对系统用户的管理,在管理员管理实现管理员用户的管理,包括录入、删除、修改,修改密码通过SESSION获取用户名,然后输入新密码,使用sql命令更新密码。

用户管理界面如下图所示。

 

5-7用户管理界面

  1. 家居商城管理的实现

管理员可以获取系统中所有家居商城的列表并对其进行编辑。管理员在添加家居商城时,需要输入家居商城基本信息,如家居名称、价格、规格等,还需要输入家居商城详情描述,包括对家居商城功能的描述以及展示图片等。添加家居商城完成,数据库家居商城表添加一条信息。管理员可以搜索家居商城,同时可以对已经添加的家居商城进行编辑。

家居商城管理界面如下图所示。

 

图5-8家居商城管理界面

家居商城管理关键代码:

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

    }

  1. 订单管理的实现

管理员在后台管理界面点击到所有订单界面列表,可以搜索当前所有订单信息,调用搜索全部订单的请求,向数据库的订单表搜索当前所有订单并将订单信息以对象的形式层层返回到订单列表界面,显示出当前所有订单信息。同时可以删除过期订单,确认已有订单,进行发货处理。

订单管理界面如下图所示。

 

图5-9订单管理界面

订单管理关键代码:

 public Map<String, Object> success(Object o) {

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

        if (o == null) {

            map.put("result", null);

            return map;

        }

        if (o instanceof List) {

            if (((List) o).size() == 1) {

               o =  ((List) o).get(0);

                map.put("result", o);

            }else {

                String jsonString = JSONObject.toJSONString(o);

                JSONArray objects = service.covertArray(JSONObject.parseArray(jsonString));

                map.put("result", objects);

            }

        } else if (o instanceof Integer || o instanceof String) {

            map.put("result", o);

        } else {

            String jsonString = JSONObject.toJSONString(o);

            JSONObject jsonObject = JSONObject.parseObject(jsonString);

            JSONObject j = service.covertObject(jsonObject);

            map.put("result", j);

        }

        return map;

}

  • 系统测试
  • 系统可靠性测试

以进入系统首页的访问速度为例展示系统的性能测试;系统的主要用户群体是购物理念较为先进的消费者,系统要在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.验证用户违规清理功能。

通过

  • 系统合格性测试

集成测试后,所有的模块已经全部连接完毕,形成了一个完整的系统。合格性测试是在集成测试完毕后,进一步对系统进行综合性的检测。经过合格性测试,可以检查出系统是否符合系统的设计,能够完成需求的所有功能。本系统经过最后的测试,所有模块功能都能按预定要求工作。

  • 测试结果

在实际测试中,经过一系列系统性的测试,使我们能够及时发现一些系统在设计中出现的疏忽和漏洞。经过严密的测试,不仅发现了模块内部的错误,也查找到模块连接后产生的错误。经过测试,对系统产生错误的地方进行优化、修改和完善,使得系统能够实现最初设计的基本功能。

  • 总结与展望

本文针对家居商城小程序的特点和用户需求,利用 Java相关技术、SSM等技术,通过详细的需求分析、页面设计和功能设计,最终实现了一个基于Java的家居商城小程序。

实现了包括用户模块、家居商城模块、订单模块和家居商城模块的前台系统以及包括用户管理模块、家居信息管理模块、订单管理模块的后台系统。另外,系统还进行了数据安全设计和家居知识模块设计,并添加了用户的访问控制,建立了一个完整、健壮、安全稳定的家居商城小程序。

由于时间限制和本人能力条件有限,还存在一些不足,今后也会出现许多新的开发技术,未来还可以对程序做出如下改进:

(1)优化程序页面,使页面更加美观且方便操作;

(2)优化家居搜索功能,提供多条件选择查询搜索;

(3)优化在线支付功能,提供更多支付接口,使用户付款更加方便;

(4)进一步提高使用程序的安全性,使其更加健壮;

(5)优化数据和代码,提升软件效率,方便维护和扩展。

参考文献

[1]王静,司占军,崔舒媛.虚拟家居商城的设计与实现[J].电脑知识与技术,2020,14(35):267-268.

[2]叶宝银. 网络商城系统的设计与实现[D].郑州大学,2020.

[3]焦丹. 时尚电子家居商城系统的设计与实现[D].北京工业大学,2020.

[4]孙勤伟. 面向家居制造企业群的销售协同一体化平台研究与实现[D].电子科技大学,2020.

[5]杨漾,姚杭飞,杨琛,许淑华.基于Unity 3D的虚拟家居商城的设计与实现[J].计算机时代,2020(06):47-49+80.

[6]网络家居商城跟家居卖场抢生意[J].建材发展导向,2020,11(03):102.

[7]方筝. 名匠轩与淘宝商城携手搭建家居电子商务化平台[N]. 中国建材报,2020-11-22(B02).

[8]王世芳. 北京首次出现家居“网上商城”[N]. 今日信息报,2020-09-19(005).

[9]黄跃辉,陈真宪.乐从家居商城成长因素与可持续发展的构想[J].商业经济文荟,2019(05):55-57.

[10]宋庆勋.世贸商城成功举办古典家居艺术品周[J].家居,2018(05):64.

[11]以可靠的商品质量和优质的售后服务增强消费者购买家居的信心——记北京三环家居商城[J].监督与选择,2018(08):15-16.

致谢

时光飞逝,转眼间我在学校的这些年生活即将结束,回顾这几年的学习生活,收获良多,既有幸福也有难过,学校生活的结束对于我来说也是一个新的开始。论文即将完成,在此,我心中有许多想要感谢的人。首先感谢我的导师,不仅在学习研究方面加以指导,也在生活和为人处世上给予帮助。还要感谢授课老师,你们严谨的学术精神和积极向上的工作态度都在激励我的成长和进步。感谢多年来一直生活在一起的室友,谢谢你们多年来的陪伴和照顾。最后,要感谢各位论文评审老师,感谢您们在百忙之中抽空评阅本论文并给出宝贵的意见和建议。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值