基于SpringBoot的家具销售管理系统

2023-10-28

项目摘要

社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的交易方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。
本文从管理员、用户的功能要求出发,家具销售电商平台系统中的功能模块主要是实现管理员;首页、个人中心、家具分类管理、热销家具管理、折扣家具管理、用户管理、订单评价管理、管理员管理、系统管理、订单管理,用户:首页、个人中心、订单评价管理、我的收藏管理、订单管理。前台首页:首页、热销家具、折扣家具、公告资讯、个人中心、后台管理、客服。
经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与家具销售电商平台实现的实际需求相结合,讨论了Java开发家具销售电商平台的使用。

系统开发技术

Java语言

Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,Java(java server pages),和XML技术。Java是一种计算机编程语言,具有封装、继承和多态性三个主要特性,广泛应用于快递员Web应用程序开发和移动应用程序开发。Java语言和一般编译器以及直译的区别在于,Java首先将源代码转换为字节码,然后将其转换为JVM的可执行文件,JVM可以在各种不同的JVM上运行。因此,实现了它的跨平台特性。虽然这使得Java在早期非常缓慢,但是随着Java的开发,它已经得到了改进。

SSM框架

1.Spring的优势:
通过Spring的IOC特性,将对象之间的依赖关系交给了Spring控制,方便解耦,简化了开发。
2.Spring MVC的优势:
SpringMVC是使用了MVC设计思想的轻量级web框架,对web层进行解耦,使我们的开发更简洁。
3.Mybatis的优势:
数据库的操作(sql)采用xml文件配置,解除了sql和代码的耦合,提供映射标签,支持对象和和数据库orm字段关系的映射,支持对象关系映射标签,支持对象关系的组建提供了xml标签,支持动态的sql。

Tomcat服务器

Tomcat属于一种轻型的服务器,所以说在中小快递员中并不具有普适性。但是当程序员需要开发或调试Java 程序时,则通常会将该服务器作为首选。对于一个仅具有计算机基础知识的人来说,计算机系统具有一个好的Apache服务器,可以很好的对HTML 页面进行访问。Tomcat 虽然是Apache的扩展,但是它们都是可以独立运行的,二者是不互相干扰的。当配置正确的时候,Apache服务器为HTML 页面的运行提供技术支持,Tomcat 的任务则是运行Servle和Java 页面。Tomca也具有一定的HTML页面处理功能。

MySQL数据库

Mysql的语言是非结构化的,快递员、学生可以在数据上进行工作。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。并且因为Mysql的语言和结构比较简单,但是功能和存储信息量很强大,所以得到了普遍的应用。
Mysql数据库在编程过程中的作用是很广泛的,为快递员、学生进行数据查询带来了方便。Mysql数据库的应用因其灵活性强,功能强大,所以在实现某功能时只需要一小段代码,而不像其他程序需要编写大段代码。总体来说,Mysql数据库的语言相对要简洁很多。
数据流程分析主要就是数据存储的储藏室,它是在计算机上进行的,而不是现实中的储藏室。数据的存放是按固定格式,而不是无序的,其定义就是:长期有固定格式,可以共享的存储在计算机存储器上。数据库管理主要是数据存储、修改和增加以及数据表的建立。为了保证系统数据的正常运行,一些有能力的处理者可以进行管理而不需要专业的人来处理。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。介于数据库的功能强大等特点,本系统的开发主要应用了Mysql进行对数据的管理。

系统分析

系统流程分析

系统登录流程图,如图所示:
在这里插入图片描述
添加信息流程图,如图所示:
在这里插入图片描述
删除信息流程图,如图所示:
在这里插入图片描述

功能截图

管理员功能模块

管理员通过点击后台管理,进入页面可以输入用户名、密码、角色进行登录相对应操作
在这里插入图片描述
管理员通过点击后台管理,进入页面可以填写首页、个人中心、家具分类管理、热销家具管理、折扣家具管理、用户管理、订单评价管理、管理员管理、系统管理、订单管理等功能模块,进行相对应操作
在这里插入图片描述
家具分类管理:通过家具分类管理可以填写分类等并进行详情、删除、修改操作
在这里插入图片描述
热销家具管理:管理员通过列表可以获取家具名称、分类、风格、类型、图片、规格、品牌、价格等信息,并进行详情、删除、修改操作
在这里插入图片描述
折扣家具管理:通过折扣家具管理可以获取家具名称、分类、风格、类型、图片、规格、品牌、价格等信息并进行详情、删除、修改操作
在这里插入图片描述
用户管理:管理员通过列表可以获取用户名、密码、姓名、性别、头像、手机、邮箱等信息,并进行详情、删除、修改操作
在这里插入图片描述
订单评价管理:管理员通过列表可以获取订单编号、评价标题、订单评分、评价日期、用户名、手机、审核回复、审核状态、审核等信息,并进行详情、删除、修改操作
在这里插入图片描述
订单管理:管理员通过列表可以获取订单编号、商品名称、商品图片、购买数量、价格/积分、折扣价格、总价格/总积分、折扣总价格、支付类型、状态、地址等信息,并进行详情、删除、修改操作
在这里插入图片描述

前台首页功能模块

家具销售电商平台 ,在系统首页可以查看首页、热销家具、折扣家具、公告资讯、个人中心、后台管理、购物车、客服等内容
在这里插入图片描述
登录、用户注册,在用户注册页面可以填写用户名、密码、姓名、手机、邮箱等信息进行注册
在这里插入图片描述
在这里插入图片描述
热销家具,在热销家具页面通过填写家具名称、分类、风格、类型、图片、规格、品牌、价格等信息进行立即提交,如图5-11所示。在折扣家具管理页面通过填写家具名称、分类、风格、类型、图片、规格、品牌、价格等信息进行立即提交操作
在这里插入图片描述
在这里插入图片描述

用户功能模块

个人信息,在个人信息页面可以查看用户名、密码、姓名、性别、头像、手机、邮箱等信息,并可根据需要对个人信息进行删除,修改或查看详细内容等操作
在这里插入图片描述
订单评价管理,用户通过订单评价管理可以查看订单编号、评价标题、订单评分、评价日期、用户名、手机、审核回复、审核状态等信息,进行详情修改或删除
在这里插入图片描述
我的收藏管理,用户通过我的收藏管理可以查看收藏ID、表名、收藏名称、收藏图片等信息,进行详情修改或删除
在这里插入图片描述
订单管理,用户通过订单管理可以查看订单编号、商品名称、商品图片、购买数量、价格/积分、折扣价格、总价格/总积分、折扣总价格、支付类型、状态、地址等信息,进行详情修改或删除
在这里插入图片描述

相关代码

数据库配置

# Tomcat
server:
    tomcat:
        uri-encoding: UTF-8
    port: 8080
    servlet:
        context-path: /springbootr1tjf

spring:
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/springbootr1tjf?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
        username: root
        password: 123456

#        driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
#        url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springbootr1tjf
#        username: sa
#        password: 123456

    servlet:
      multipart:
        max-file-size: 10MB
        max-request-size: 10MB
    resources:
      static-locations: classpath:static/,file:static/

#mybatis
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.entity
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 1
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 2
    #驼峰下划线转换
    db-column-underline: true
    #刷新mapper 调试神器
    refresh-mapper: true
    #逻辑删除配置
    logic-delete-value: -1
    logic-not-delete-value: 0
    #自定义SQL注入器
    sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    call-setters-on-nulls: true
    #springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)
    jdbc-type-for-null: 'null' 

控制层(controller)

package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;

	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
    	UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
    	if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
    		return R.error("用户名已存在。");
    	}
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

业务层(Service)


package com.service;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.IService;
import com.entity.UserEntity;
import com.utils.PageUtils;


/**
 * 系统用户
 */
public interface UserService extends IService<UserEntity> {
 	PageUtils queryPage(Map<String, Object> params);
    
   	List<UserEntity> selectListView(Wrapper<UserEntity> wrapper);
   	
   	PageUtils queryPage(Map<String, Object> params,Wrapper<UserEntity> wrapper);
	   	
}

数据访问层(Dao)

package com.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.entity.UserEntity;

/**
 * 用户
 */
public interface UserDao extends BaseMapper<UserEntity> {
	
	List<UserEntity> selectListView(@Param("ew") Wrapper<UserEntity> wrapper);

	List<UserEntity> selectListView(Pagination page,@Param("ew") Wrapper<UserEntity> wrapper);
	
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于SpringBoot的家具销售管理系统 的相关文章

随机推荐

  • 虚拟实验服务器,MED-V动手实验一:服务器部署

    IT168 专稿 微软在2009年4月份发布的MDOP2009中提供了MED V的正式版本 MED V是Microsoft Enterprise Desktop Virtualization的缩写 顾名思义 MED V为企业提供了桌面虚拟化
  • PHY 驱动目录树构建

    在看Linux网络PHY设备驱动的时候一直有个问题萦绕心头 久久挥之不去 辗转反侧 难以入眠 不是因为看了不 懂 而是因为大体的流程都不明白 主要体现在以下几点 1 在注册PHY设备时 驱动所需要的总线是什么时候准备好的 2 总线 设备 驱
  • CTF MISC图片隐写简单题学习思路总结(持续更新)

    系列文章目录 第一篇文章 CTF Crypto简单题学习思路总结 持续更新 文章目录 系列文章目录 前言 一 JPG类隐写 1 1 JPG文件末尾添加字符串 1 2 JPG文件中添加字符串 1 3 图片文件分离 1 4 JSteg JPHi
  • Filesystem Hierarchy Stardard(FHS)规定Linux应放置文件内容

    第一部分 FHS要求必须要存在的目录 第二部分 FHS建议可以存在的目录 第三部分 其他重要 来源 鸟哥的Linux私房菜 基础篇 第四版
  • Safari的html5 localStorage错误:“ QUOTA_EXCEEDED_ERR:DOM异常22:试图向存储中添加超出配额的内容”...

    如何解决Safari的html5 localStorage错误 QUOTA EXCEEDED ERR DOM异常22 试图向存储中添加超出配额的内容 显然 这是设计使然 当Safari OS X或iOS 处于私有浏览模式时 它似乎local
  • Spring解决循环依赖的思路与代码实现

    Java基基 2023 09 08 11 55 发表于上海 这是一个或许对你有用的社群 一对一交流 面试小册 简历优化 求职解惑 欢迎加入 芋道快速开发平台 知识星球 下面是星球提供的部分资料 项目实战 视频 从书中学 往事中 练 互联网高
  • 程序员面试、算法研究、编程艺术、红黑树、机器学习5大系列集锦

    程序员面试 算法研究 编程艺术 红黑树 机器学习5大经典原创系列集锦与总结 七月在线 https www julyedu com 面试 算法 机器学习在线课程 作者 July 结构之法算法之道blog之博主 时间 2010年10月 2018
  • linux下phpMyAdmin 出现 “缺少 mysqli 扩展,请检查 PHP 配置。”

    问题一 原因 mysqli这个扩展没有安装 或者你没有在php ini里面加入extension mysqli d 解决方案 yum install php mysql 然后重启apache 或者 编辑php ini 在最后加入 exten
  • 多元回归分析

    多元回归分析 MLR多元线性回归多输入单输出预测 Matlab完整程序 目录 多元回归分析 MLR多元线性回归多输入单输出预测 Matlab完整程序 预测结果 评价指标 基本介绍 程序设计 参考资料 预测结果 评价指标 训练集数据的R2为
  • 学习笔记十九:Pod常见的状态和重启策略

    Pod常见的状态和重启策略 常见的pod状态 第一阶段 第二阶段 扩展 pod重启策略 测试Always重启策略 正常停止容器内的tomcat服务 非正常停止容器里的tomcat服务 测试never重启策略 正常停止容器里的tomcat服务
  • 随机图片API

    文章目录 创建自己的图库 创建index php和img txt img txt写入图片链接 一行一个图片链接 可直接调用接口 二次元随机图 API 随机二次元接口源码 双版本 直接调用API 创建自己的图库 创建index php和img
  • java引入包_java如何导入包

    展开全部 1 首先在项目下创建一个新的文件夹 用来保存jar包 在项目名上点击鼠标62616964757a686964616fe4b893e5b19e31333431336665右键 按顺序点击 New Floder 打开新建文件夹的窗口
  • (Java)leetcode-124 Binary Tree Maximum Path Sum(二叉树中的最大路径和)

    更多LeetCode题解 可移步我的解题记录 持续更新中 题目描述 给定一个非空二叉树 返回其最大路径和 本题中 路径被定义为一条从树中任意节点出发 达到任意节点的序列 该路径至少包含一个节点 且不一定经过根节点 示例 1 输入 1 2 3
  • mysql行锁sql语句怎么写_mysql的锁

    在MySQL中 不同的存储引擎采用的不同的锁机制 如MyISAM和MEMORY存储引擎采用表级锁 InnoDB存储引擎既支持行级锁 也支持表级锁 MySQL中使用表锁的语句如下 lock table table name read 共享读锁
  • RandomAccessFile的常见用法

    1 RandomAccessFile的简介 1 1为什么要用到RandomAccessFile 我们平常创建流对象关联文件 开始读文件或者写文件都是从头开始的 不能从中间开始 如果是开多线程下载一个文件我们之前学过的FileWriter或者
  • Web服务器群集:Nginx之Rewrite重写

    目录 一 理论 1 Nginx正则表达式 2 location匹配 3 rewrite重写 4 if指令与全局变量 二 实验 1 基于域名的跳转 2 基于客户端 IP访问跳转 3 基于旧域名跳转到新域名后面加目录 4 基于参数匹配的跳转 5
  • 数据结构---树和二叉树

    树和二叉树 定义 二叉树 二叉树的物理结构 链式存储 数组 二叉树应用 查找 维持相对顺序 二叉树的遍历 深度优先遍历 前序遍历 中序遍历 后序遍历 二叉树广度优先遍历 层序遍历 定义 有且仅有一个特定的称为根的节点 当n gt 1时 其余
  • python读取csv文件并把文件放入一个list中脚本实例

    coding utf8 读取CSV文件 把csv文件放在一份list中 import csv class readCSV object def init self path Demo csv 创建一个属性用来保存要操作CSV的文件 self
  • 修改tomcat默认端口号

    一 只配置一个tomcat的情况 如果不想使用tomcat默认的端口号8080 则直接找到D Program FilesTomcat7 2apache tomcat 7 0 82conf下的server xml配置文件 搜索
  • 基于SpringBoot的家具销售管理系统

    项目摘要 社会的发展和科学技术的进步 互联网技术越来越受欢迎 网络计算机的交易方式逐渐受到广大人民群众的喜爱 也逐渐进入了每个用户的使用 互联网具有便利性 速度快 效率高 成本低等优点 因此 构建符合自己要求的操作系统是非常有意义的 本文从