IDEA+SpringBoot+mybatis+SSM+layui+Mysql客户管理系统源码

news2024/9/23 9:25:51

IDEA+SpringBoot+mybatis+SSM+layui+Mysql客户管理系统

  • 一、系统介绍
    • 1.环境配置
  • 二、系统展示
    • 1. 管理员登录
    • 2.修改密码
    • 3.客户管理
    • 4.添加客户
    • 5.充值记录管理
    • 6.消费记录管理
    • 7.客户类型
    • 8.添加客户类型
  • 三、部分代码
    • UserMapper.java
    • LoginController.java
    • User.java
  • 四、其他
    • 获取源码


一、系统介绍

本系统实现了客户管理系统,管理端实现了管理员登录、修改密码、客户管理、添加客户、充值记录管理、消费记录管理、客户类型,添加客户类型

1.环境配置

JDK版本:1.8
Mysql:5.7

二、系统展示

1. 管理员登录

在这里插入图片描述

2.修改密码

在这里插入图片描述

3.客户管理

在这里插入图片描述

4.添加客户

在这里插入图片描述

5.充值记录管理

在这里插入图片描述

6.消费记录管理

在这里插入图片描述

7.客户类型

在这里插入图片描述

8.添加客户类型

在这里插入图片描述

三、部分代码

UserMapper.java


package com.rain.dao.user;

import com.rain.domain.entity.user.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 *  Mapper 接口
 */
public interface UserMapper extends BaseMapper<User> {

}


LoginController.java


package com.rain.controller;

import com.rain.common.base.BaseController;
import com.rain.common.base.JSONResult;
import com.rain.common.cache.SessionCache;
import com.rain.common.constant.Constant;
import com.rain.domain.dto.user.LoginDto;
import com.rain.domain.vo.user.LoginVo;
import com.rain.service.user.IUserService;
import com.rain.util.JsonUtils;
import com.rain.util.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

/**
 * 登录控制器
 */
@Controller
public class LoginController extends BaseController {
    private static final Logger logger = LoggerFactory.getLogger(LoginController.class);

    @Autowired
    private IUserService userService;

    @RequestMapping("/")
    public String index() {
        return "index";
    }

    /**
     * 进入登录页面
     *
     * @return
     */
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String loginPage(HttpServletRequest request) {
        logger.debug("into /loginPage >>>>>>>>>>>>>>>>>>>>>>>");

        //判断当前用户是否登录,如果已登录转到系统首页
        LoginVo user = SessionCache.getUser(request);
        if (ObjectUtils.isNotEmpty(user)) {
           // return "redirect:/";
            return "index";
        }
        return "login";
    }

    /**
     * 登录
     *
     * @return
     */
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    @ResponseBody
    public Object login(LoginDto loginDto, HttpServletRequest request) {
        logger.info("into /login loginDto:{}", JsonUtils.toJson(loginDto));
        //用户登录信息
        LoginVo loginVo = userService.login(loginDto);

        //将用户信息存放在session中
        SessionCache.setUser(request, loginVo);
        request.getSession().setAttribute(Constant.SESSION_USER, loginVo);
        return new JSONResult();
    }

    /**
     * 登出
     *
     * @return
     */
    @RequestMapping(value = "/logout", method = RequestMethod.GET)
    public Object logout(HttpServletRequest request) {
        logger.info("into /logout >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        SessionCache.removeUser(request);
        return "redirect:/login";
    }

}

User.java



package com.rain.domain.entity.user;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.rain.common.base.BaseEntity;
import com.rain.common.enums.YNEnum;

/**
 * 用户表
 */
@TableName("t_user")
public class User extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 用户名
     */
    @TableField("user_name")
    private String userName;
    /**
     * 密码
     */
    private String password;
    /**
     * 盐值
     */
    private String salt;
    /**
     * 是否可用Y可用N禁用
     */
    @TableField("is_enable")
    private YNEnum isEnable;

    public User() {
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public YNEnum getIsEnable() {
        return isEnable;
    }

    public void setIsEnable(YNEnum isEnable) {
        this.isEnable = isEnable;
    }
}

四、其他

获取源码

点击以下链接获取源码。
IDEA+SpringBoot+mybatis+SSM+layui+Mysql客户管理系统源码
IDEA+springboot+jpa+Layui+Mysql销售考评系统源码
IDEA+Spring + Spring MVC + MyBatis+Bootstrap+Mysql酒店管理系统源码
IDEA+spring boot+mybatis+spring mvc+bootstrap+Mysql停车位管理系统源码

Java+Swing+Mysql实现学生宿舍管理系统

Java+Swing+Txt实现自助款机系统

Java+Swing+Mysql自助存取款机系统

Java+Swing+mysql5实现学生成绩管理系统(带分页)

Java+Swing+Mysql实现超市商品管理系统源码

Java+Swing+Mysql实现通讯录管理系统源码

Java+Swing+Mysql实现图书管理系统源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ElasticSearch】ES案例:旅游酒店搜索

文章目录 一、项目分析二、需求1&#xff1a;酒店搜索功能三、需求2&#xff1a;添加过滤功能四、需求3&#xff1a;我附近的酒店五、需求4&#xff1a;置顶花广告费的酒店 一、项目分析 启动hotel-demo项目&#xff0c;访问localhost:servicePort&#xff0c;即可访问static下…

不停服迭代更新-服务网格

系列文章目录 本章将根据多年经验&#xff0c;进行规划讲解 文章目录 系列文章目录前言一、如何做到 不停服更新、 不停服更新的机制有什么好处&#xff0c; 前言 服务迭代发版、少不了的就是停服更新&#xff0c;为了不影响 用户体验&#xff0c;大部分公司选择半夜更新迭代&…

TPCE260PCIE转PMC载板

TPCE60是一个标准的高度PCI Express版本1.1兼容的模块&#xff0c;提供了一个槽用于安装标准PMC模块&#xff0c;灵活和成本有效的I/O解决方案的各种应用如过程控制、医疗系统、电信和交通控制。 桥接PCI Express x1连接到主机板和PCI总线信号的PMC槽之间是由透明的PCIe到PCI桥…

正确释放vector的内存:clear还是swap?

一、size()和capacity()方法的区别 1、vector有size()和capacity()方法都用来获取vector的大小&#xff0c;那么它们两之间有什么区别呢&#xff1f; 我们先来看一段代码&#xff1a; int main() {std::vector<int> v1;std::cout <<"size:"<< v…

工厂模式(工厂方法和简单工厂模式)

工厂模式 概述常见分类简单工厂模式概述设计图解创建People抽象类(产品说明书)创建子类(产品角色)创建工厂(用于根据需求实例化对象)消费者简单工厂模式优点简单工厂模式缺点 工厂方法模式概述设计图解创建抽象父类(产品说明书)子类&#xff08;产品角色&#xff09;工厂工厂接…

数据结构二叉树(OJ)题

分析&#xff1a; 2. 我们要想办法区分&#xff0c;从队列当中出队的数据是属于那一层的数据 3. 我们当前这一道题的时间复杂度是O&#xff08;h * N&#xff09; h是树的高度&#xff0c;我们最坏情况就是在树的最底下找到&#xff0c;得递归h次&#xff0c;树的高度&#x…

vue开发:vue的插槽功能讲解

vue的插槽 举一个生活中的例子&#xff1a;比如装修房子的时候我们会在很多地方预留出一些插孔&#xff0c;可能要插电冰箱&#xff0c;插电式&#xff0c;插充电器等&#xff0c;反正就是你觉得预留在这个位置的插座一定有用&#xff0c;这个预留的插座就类似我们今天要说的插…

【C语言13】结构体的声明,定义与结构体的内存对齐

文章目录 一、结构体1.1结构体是什么1.2结构体声明1.3结构体的内存 以上便是结构体的介绍&#xff0c;如有不足&#xff0c;请多多指正&#xff01; 一、结构体 1.1结构体是什么 通俗的说&#xff0c;结构体就是一个类的集合&#xff0c;如同整形数组是整形数字的集合体&…

高数中的驻点以及要注意的事项

在高等数学中&#xff0c;驻点是指函数导数为零的点&#xff0c;即函数的极值点或拐点。在求解函数的最大值、最小值或拐点时&#xff0c;需要找到函数的驻点。 要注意以下几点&#xff1a; 1. 导数为零不一定是驻点&#xff1a;虽然驻点定义为函数导数为零的点&#xff0c;但…

力扣 | 双指针技巧

前文回顾&#xff1a;力扣 | 数组和字符串简介 力扣LeetBook&#xff1a;数组和字符串 文章目录 &#x1f4da;双指针技巧&#xff1a;情形一&#x1f449;反转字符串&#x1f449;数组拆分I&#x1f449;两数之和 II - 输入有序数组 &#x1f4da;双指针技巧&#xff1a;情形二…

基于智能手机的医院服务客户端设计与实现(论文+源码)_kaic

摘 要 近年来&#xff0c;随着中国经济的迅猛发展&#xff0c;医疗技术水平也在不断提高&#xff0c;但由于人口数目巨大&#xff0c;导致医疗资源人均分配不足的情况依旧十分严峻。预约挂号一直是制约医疗机构服务质量提高的主要环节之一。在传统预约挂号方式下&#xff0c;繁…

EMQ X(3):客户端websocket消息收发

在EMQ X Broker提供的 Dashboard 中 TOOLS 导航下的 Websocket 页面提供了一个简易但有效的WebSocket 客户端工具&#xff0c;它包含了连接、订阅和发布功能&#xff0c;同时还能查看自己发送和接收的报文数据&#xff0c;我们期望 它可以帮助您快速地完成某些场景或功能的测试…

ncm格式如何转换为mp3,分享几个方法!

你是否曾在网易云音乐上下载了一些NCM格式的音频文件&#xff0c;但发现无法在其他设备上播放&#xff1f;别担心&#xff0c;记灵在线工具可以帮助你将这些NCM格式转换为常见的MP3格式。今天小编就来分享三种方法&#xff0c;教你如何搞定&#xff01; 方法一&#xff1a;曲线…

C#学习之路-循环

有的时候&#xff0c;可能需要多次执行同一块代码。一般情况下&#xff0c;语句是顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了允许更为复杂的执行路径的多种控制结构。 循环语句允许我们多次执行一个…

Notepad++设置查看函数列表的快捷键

Notepad是一个非常精巧、启动便捷、支持文本自动补全的记事本软件&#xff0c;到2023年7月&#xff0c;已经更新到了v8.5.4版本&#xff0c;这里介绍设置其查看函数列表的快捷键方法。老版本的Notepad&#xff0c;比如Notepad v7.3, 默认查看函数列表的快捷键的为F8&#xff0c…

python PYQT5 键盘,鼠标,绘制,焦点,改变,输入法,事件的方法和使用例子

https://img-blog.csdnimg.cn/7630017d3ee444eab9bdedf8d48d575f.png from PyQt5.Qt import * import sys class MyQwidget(QWidget):def __init__(self):super().__init__()def showEvent(self, a0) -> None:print("窗口被展示出来",a0)def closeEvent(self,a0) …

网络编程4——传输层TCP协议的三大安全机制:三次握手四次挥手+确认应答机制+超时重传机制

文章目录 前言一、TCP协议段与机制TCP协议的特点TCP报头结构TCP协议的机制与特性 二、TCP协议的 连接管理机制 TCP建立连接&#xff1a;三次握手 TCP断开连接&#xff1a;四次挥手 三、TCP协议的 确认应答机制 四、TCP协议的 超时重传机制 总结 前言 本人是一个刚刚上路的I…

快速入门QT大法

QT大法 个人博客地址&#xff1a;https://zjxweb.github.io/#/ 1. 入门介绍 1.1 版本控制工具 svn vss git 1.2 QT 优点 跨平台接口接单&#xff0c;容易上手一定程度上简化了内存回收 2. 创建第一个QT程序 2.1 流程 点击创建项目后&#xff0c;选择项目路径以及给项目…

计算机体系结构基础知识介绍之指令集并行的基本编译器技术(循环展开、基本管道调度)

一、基本管道调度和循环展开 为了保持管道满载&#xff0c;必须通过查找可以在管道中重叠的不相关指令序列来利用指令之间的并行性。 为了避免流水线停顿&#xff0c;相关指令的执行必须与源指令分开一定的时钟周期距离&#xff0c;该距离等于该源指令的流水线延迟。 编译器执…

linux内核TCP/IP源码浅析

目录 数据接收流程图硬件层网络层ip_rcvip_rcv_coreip_rcv_finish 和 ip_rcv_finish_coreip_local_deliverip_local_deliver_finish 和 ip_protocol_deliver_rcu 传输层tcp_v4_rcvtcp_v4_do_rcvtcp_rcv_state_processtcp_rcv_establishedtcp_recvmsg 数据结构socketsocksock_co…