基于 SSM的家装管理系统毕业设计-附源码191452

 摘 要

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,家装公司要生存要发展,要高效率地把装修活动有机地组织起来,就必须加强装修资源管理,即加强对公司内部的各种资源(人、财、物等)的有效管理,建立与自身特点相适应的管理信息系统。

本文主要通过对家装管理系统的功能性需求分析,对系统的安全性和可扩展性进行了非功能性需求分析。在详细的需求分析的基础上,根据系统的功能设计确定了数据库结构,实现完整的代码编写。家装管理系统完成了主要模块的页面设计和功能实现。本文展示了首页页面的实现效果图,并通过代码和页面介绍了用户注册功能、方案设计、设计沟通、单品订单管理的实现过程。

关键词:家装管理;SSM框架;方案设计

Home decoration management system based on SSM

Abstract

With the more and more in-depth and extensive application of information technology in management, the implementation of management information system has gradually matured in technology. In order to adapt to the development of the company's internal information system, it is necessary to establish an efficient management system for various decoration activities, that is, to strengthen the management of the company's internal resources.

This paper mainly analyzes the functional requirements of the home decoration management system, and analyzes the non functional requirements of the security and scalability of the system. Based on the detailed demand analysis, the database structure is determined according to the functional design of the system to realize the complete coding. The home decoration management system has completed the page design and function realization of the main modules. This paper shows the implementation effect of the home page, and introduces the implementation process of user registration function, scheme design, design communication and single product order management through code and page.

Key words: Home decoration management; SSM framework; conceptual design

目  录

一、 绪论

(一) 研究背景与意义

(二) 研究内容

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

(一) 开发技术

(二) ssm框架介绍

() Mysql数据库

() B/S结构

() B/S体系工作原理

() ssm框架各层关系

三、 系统分析

(一) 可行性分析

1. 经济可行性

2. 技术可行性

3. 操作可行性

(二) 功能性需求分析

(三) 非功能性需求分析

(四) 业务流程分析

四、 系统设计

(一) 功能模块设计

(二) 数据库设计

1. 概念模型设计

2. 数据库逻辑设计

3. 数据库表设计

五、 系统实现

(一) 用户登录的实现

(二) 系统前台主要功能实现

1. 首页的实现

2. 用户注册的实现

3. 家装单品的实现

4. 家装资讯的实现

5. 成品订单的实现

(三) 系统后台主要功能实现

1. 用户管理的实现

2. 方案设计管理的实现

3. 成品订单管理的实现

六、 系统测试

(一) 系统可靠性测试

(二) 系统功能性测试

(三) 系统合格性测试

(四) 测试结果

七、 总结与展望

参考文献

致谢

  • 研究背景与意义

近年来随着电脑的普及和计算机技术在各个领域的广泛应用,当今社会正快速向信息化社会前进,办公信息化,管理信息化成为了趋势,信息自动化的作用也越来越大,它可以使我们从繁杂的事务中解放出来,提高了工作效率,家庭装修作为一个独立的行业,装修方案管理的电子化也就成了时代的必然。

随着装修方案数量的不断增多,有关装修方案的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致家装公司管理上的混乱,人力与物力过多浪费,家装公司管理费用的增加,从而使公司的负担过重,影响整个家装公司的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的装修信息管理系统,对装修信息进行集中统一的管理。

另一方面,IT产业和 Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。

装修信息管理工作面对大量的可模块化处理的信息,是当今信息革命的一个重要阵地。我们小组开发装修信息管理信息系统就是采用现代化的信息管理方式代替手工管理方式,提高装修信息管理工作效率,作到信息的规范管理,科学统计和快速查询,让家装公司更好的为社会服务。

从以前的手工管理的记录中我们可以发现这样的问题:

  1. 检索速度慢、效率低

因为家装公司的建材种类多、数量多,很难将材料准确地分门别类,快速检索,手工进行非常困难往往是终于查到了建材或家具的信息,仓库中没有此材料或已用完。家装公司的规模越大,这个问题越突出。

(2)引进、管理建材工作量大

引进新建材频率越大,说明家装公司的作用越大,然而随之而来的大量的引进、管理登记、实存材料的更新以及借出材料超期、遗失等的处理,其工作量之大,往往是人工操作所难以胜任的。而且经常会出现这样那样的差错。

(3)材料统计工作难、材料更新不能及时完成。

家装公司的材料应根据科学技术的发展和教学工作的需要及时添加和更新。

然而由于材料数量及材料种类越来越多,加上自然损耗,人为破坏,使材料的统计工作难以及时完成,材料的更新也就很难有针对性地进行,材料的知识结构得不到良好地控制。

  • 研究内容

基于SSM的家装管理系统的开发及实现,所需要的工作内容:

(1)首先是确定选题,确定好所要做的系统,并对系统的背景及现在面临的一些问题等进行系统的初步确认。

(2)系统确认完成后,结合系统开发的需求进行确认系统开发所使用的技术家装管理系统的开发使用SSM框架,数据库进行系统的搭建开发,确认好使用的技术进行技术分析,所使用的技术是否可以完成系统的实现。

(3)确定好系统使用的技术,进行在线确认系统所划分的用户角色,并且根据用户角色划分确定所要设计的功能模块,对于家装管理系统的设计主要划分别为管理员和用户角色,并所使用的功能模块也相应不同,但是系统的数据库实现的内容是交互的,用户可以随时根据自己的需求进行信息搜索,对于系统工作人员可以根据自己的分管内容进行在线信息的处理及操作,管理员获取到所有用户的详细数据信息,并根据需求进行第一时间处理解决。

(4)系统的功能模块确认完成后进行程序及界面的设计,设计完成后,并且通过测试来判断程序是否完善,对于系统测试,需要不同的用户进行不同的内容编辑及提交,及使用不同的测试方式找出程序中存在的漏洞,并对程序出现的漏洞问题进行在线解决处理,如果测试系统没有任何问题时,可以将系统上传进行正式操作使用。

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

本系统前端部分基于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.1Spring

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

Mysql的语言是非结构化的,用户可以在数据上进行工作。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。并且因为Mysql的语言和结构比较简单,但是功能和存储信息量很强大,所以得到了普遍的应用。

Mysql数据库在编程过程中的作用是很广泛的,为用户进行数据查询带来了方便。Mysql数据库的应用因其灵活性强,功能强大,所以在实现某功能时只需要一小段代码,而不像其他程序需要编写大段代码。总体来说,Mysql数据库的语言相对要简洁很多。

数据流程分析主要就是数据存储的储藏室,它是在计算机上进行的,而不是现实中的储藏室。数据的存放是按固定格式,而不是无序的,其定义就是:长期有固定格式,可以共享的存储在计算机存储器上。数据库管理主要是数据存储、修改和增加以及数据表的建立。为了保证系统数据的正常运行,一些有能力的处理者可以进行管理而不需要专业的人来处理。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。介于数据库的功能强大等特点,本系统的开发主要应用了Mysql进行对数据的管理。

  • B/S结构

B/S(Browser/Server)比前身架构更为省事的架构。它借助Web server完成数据的传递交流。只需要下载浏览器作为客户端,那么工作就达到“瘦身”效果, 不需要考虑不停装软件的问题。           

  • B/S体系工作原理

B/S架构采取浏览器请求,服务器响应的工作模式。

用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息;

而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中;

从Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。而各个企业可以在此结构的基础上建立自己的Internet。

在 B/S 模式中,用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的,浏览器的请求通过服务器进行处理,并将处理结果以及相应的信息返回给浏览器,其他的数据加工、请求全部都是由Web Server完成的。通过该框架结构以及植入于操作系统内部的浏览器,该结构已经成为了当今软件应用的主流结构模式。

   (六)ssm框架各层关系

DAO层、Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势。

Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之前只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。 

          

  • 系统分析

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

  1. 经济可行性

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

  1. 技术可行性

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

  1. 操作可行性

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

  • 功能性需求分析

前台需求:

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

(2)家装资讯模块:主要包括家装信息浏览、家装信息展示、搜索等功能。

(3)方案设计模块:主要包括方案设计详细信息、查看方案和删除方案等功能。

(4)成品订单模块:主要包括生成的成品订单、包括方案类型、方案名称、方案价格、设计师编号等功能。

后台需求:

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

(2)设计沟通管理:主要包括设计师与客户沟通信息的管理,客户问题,设计师回复等。

(3)成品订单管理:主要包括订单确认等功能。

用户用例图如下所示。

图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、用户在前台首页选择任意一个单品分类。

4、管理员在用户列表中选择一个单品。

7、用户填写购买订单,点击“购买”按钮。

2、系统从数据库中获取单品列表信息。

3、系统打开单品列表界面。

5、系统从数据库中获取单品信息。

6、系统打开单品信息及购买界面。

8、系统检查用户输入的信息是正确有效的。

9、系统将购买记录添加到数据库中。

其他事件流

1、系统验证用户输入的字段为空,则提示“*购买数量不能为空!”。

  • 非功能性需求分析 

随着用户量的增加,系统可能会需要同时服务上千、上万个页面,服务器需要同时响应大量用户的操作,这就要求系统需要有良好的可扩展性,否则系统会出现延迟,卡顿甚至服务器崩溃的问题。高扩展性可以使软件保持旺盛的生命力,同时也能够使系统更好的适应用户增加、提高性能需求、增加应用功能等改变。

系统中保存了大量用户和管理员的个人信息,因此,保证系统服务器和数据安全是在开发过程中需要考虑的重要问题。安全性包括服务器安全、操作系统安全、数据库安全、程序代码安全以及用户个人信息和支付安全等,系统可以通过采用防火墙技术、加密技术、认证技术等来增强其安全性,只有一个健壮安全的系统才能具有长久的生命力。

  • 业务流程分析

家装管理系统的前台中,用户模块和家装单品模块进行数据交互,实现单品下单的功能。前台的功能主要包括用户模块、家装单品模块、家装资讯模块和单品订单模块。

成品订单管理系统的后台中,管理员对用户在前台提交申请产生的数据进行处理,以满足用户的需求。前台系统和后台系统有数据交互,整个系统各个部分相互独立又密不可分。后台的功能主要包括用户管理、成品订单管理、方案设计管理。

  • 系统设计
  • 功能模块设计

通过软件的需求分析已经获得了系统的基本功能需求。根据各大功能模块的不同,将系统分为各种功能大块。系统功能结构如下图所示。

图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. 数据库逻辑设计

针对系统的实体和属性,结合数据设计思想,对系统的逻辑设计的内容进行如下描述。

家装单品(家装单品编号、单品名称、图片、价格、类目、介绍)。

单品订单(单品订单编号、单品编号、单品名称、价格、购买人、购买时间)。

成品订单(成品订单编号、成品编号、成品名称、方案价格、购买人)。

设计师沟通(沟通编号、客户问题、设计师回复、内容)。

家装资讯(家装资讯编号、标题、资讯内容、资讯列表)。

  1. 数据库表设计

数据库表是设计和实现系统的一个重要基础。以下列出了家装管理系统几个重要的数据库表。

名称

类型

长度

不是null

主键

注释

ordinary_users_id

int

11

普通用户ID

full_name

varchar

64

姓名

gender

varchar

64

性别

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

single_product_order_id

int

11

单品订单ID

item_no

varchar

64

单品编号

item_name

varchar

64

单品名称

item_type

varchar

64

单品类型

unit_price

varchar

64

单品价格

designer_number

int

11

设计师编号

designer_name

varchar

64

设计师姓名

number_of_purchases

varchar

64

购买数

total

varchar

64

总计

purchaser

int

11

购买人

contact_number

varchar

64

联系电话

contact_address

varchar

64

联系地址

examine_state

varchar

16

审核状态

pay_state

varchar

16

支付状态

pay_type

varchar

16

支付类型:

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

item_classification_id

int

11

单品分类ID

item_type

varchar

64

单品类型

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

home_decoration_piece_id

int

11

家装单品ID

item_no

varchar

64

单品编号

item_name

varchar

64

单品名称

item_type

varchar

64

单品类型

item_cover

varchar

255

单品封面

unit_price

varchar

64

单品价格

designer_number

int

11

设计师编号

designer_name

varchar

64

设计师姓名

item_details

longtext

0

单品详情

hits

int

11

点击数

praise_len

int

11

点赞数

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

finished_product_scheme_id

int

11

成品方案ID

scheme_name

varchar

64

方案名称

scheme_type

varchar

64

方案类型

scheme_cover

varchar

255

方案封面

designer_number

int

11

设计师编号

designer_name

varchar

64

设计师姓名

scheme_price

varchar

64

方案价格

scheme_details

longtext

0

方案详情

hits

int

11

点击数

praise_len

int

11

点赞数

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

finished_product_order_id

int

11

成品订单ID

scheme_name

varchar

64

方案名称

scheme_type

varchar

64

方案类型

designer_number

int

11

设计师编号

designer_name

varchar

64

设计师姓名

scheme_price

varchar

64

方案价格

next_person

int

11

下单人

scheduled_time

date

0

预定时间

contact_number

varchar

64

联系电话

contact_address

varchar

64

联系地址

examine_state

varchar

16

审核状态

pay_state

varchar

16

支付状态

pay_type

varchar

16

支付类型:

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

design_communication_id

int

11

设计沟通ID

scheme_name

varchar

64

方案名称

scheme_type

varchar

64

方案类型

designer_number

int

11

设计师编号

designer_name

varchar

64

设计师姓名

user

int

11

用户

guest_book_

text

0

用户留言

designer_reply

text

0

设计师回复

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

conceptual_design_id

int

11

方案设计ID

designer_number

int

11

设计师编号

designer_name

varchar

64

设计师姓名

user

int

11

用户

scheme_price

varchar

64

方案价格

production_time

date

0

出品时间

scheme_details

longtext

0

方案详情

examine_state

varchar

16

审核状态

pay_state

varchar

16

支付状态

pay_type

varchar

16

支付类型:

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

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

        }

}

  • 系统前台主要功能实现 
  1. 首页的实现

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

首页界面如下图所示。

图5-2首页界面

  1. 用户注册的实现

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

用户注册界面如下所示。

            

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

}

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

}

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

    }

  1. 家装资讯的实现

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

家装资讯界面如下图所示。

图5-5家装资讯界面

家装资讯的关键代码如下。

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

}

  1. 成品订单的实现

用户在浏览成品方案时,对于确认的成品方案,可以将方案添加购买,点击“购买”按钮,页面将该成品方案的数据传递到后台,首先查询数据库购买订单表中是否已经存在该成品订单,若存在直接将数量加一,若不存在则创建一个新的购买订单对象,添加购买订单成功,数据库中的购买订单表添加一条信息。用户还可以点击“我的订单”查看添加到订单的成品,系统通过读取 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);

}

  • 系统后台主要功能实现 
  1. 用户管理的实现

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

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

5-8用户管理界面

  1. 方案设计管理的实现

管理员可以获取系统中所有设计师的设计方案列表并对其进行编辑。管理员在添加方案信息时,需要输入方案的设计师编号、设计师姓名、方案价格、出品时间等,还需要输入方案详情描述。

方案设计管理界面如下图所示。

图5-9方案设计管理界面

方案设计管理关键代码:

 @RestController

@RequestMapping("auth")

public class AuthController extends BaseController<Auth, AuthService> {

    /**

     * 服务对象

     */

    @Autowired

    public AuthController(AuthService service) {

        setService(service);

  1. 成品订单管理的实现

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

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

图5-10成品订单管理界面

设计咨询界面如下图所示。

图5-11设计咨询管理界面

成品订单管理的关键代码如下。

 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框架和等技术,通过详细的需求分析、页面设计和功能设计,系统利用JQuery 技术和 CSS 技术进行了页面设计,实现了包括用户模块、家装单品模块、家装资讯模块。成品订单模块和方案设计模块的前台系统以及包括用户管理模块、资讯管理模块、订单管理模块的后台系统。另外,系统还进行了数据安全设计和家装单品模块设计,并添加了用户的访问控制,建立了一个完整、健壮、安全稳定的家装管理系统。

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

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

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

(3)优化分类功能,提高分类的精准度;

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

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

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

参考文献

[1]陆文娴.家装设计中的新中式风格的应用研究[J].流行色,2021(01):80-81.

[2]李洋.现代北欧风格设计色彩和材料的运用[J].西部皮革,2020,42(10):24.

[3]张昱悦.视觉传达设计元素在家装设计中的基础分析[J].建筑与文化,2020(02):190-191.

[4]石嘉佳.现代和式风格在设计中的研究与应用[J].西部皮革,2020,42(02):19-20.

[5]赵坤.设计风格在家装市场中的应用模式研究[J].家具与室内装饰,2018(04):24-25.

[6]黄雪峰.家装设计风格调查与客户沟通方案模式的分析研究[J].艺术科技,2018,30(11):323.

[7]覃敏. 墙绘艺术在现代室内装饰空间设计中的应用研究[D].湖南科技大学,2018.

[8]刘晓星. 家居装修设计的快速生成[D].辽宁石油化工大学,2018.

[9]赵坤. 家装设计风格研究[D].青岛大学,2018.

[10]李丹丹.室内家装设计之简欧风格探究[J].现代装饰(理论),2018(04):31.

[11]马晓聪. 基于家装企业“一站式”服务体系的构建研究[D].浙江农林大学,2018.

[12]侯鹏程. 定制家装的交互设计模式研究[D].中南林业科技大学,2018.

[13]莫莫.“有机整体家装”——现代家装最“潮”理念[J].21世纪建筑材料居业,2018(03):56-57.

[14]达人.家装最新流行趋势[J].时代青年(月读),2018(01):67.

[15].未来十年家装流行趋势预测[J].广东建材,2018(11):61.

致谢

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340