基于Springboot+Vue的Java项目-企业客户管理系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:Java毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀 Python毕业设计
🌎微信小程序毕业设计

开发环境

开发语言:Java
框架:Springboot+Vue
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7
数据库工具:Navicat12
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器

演示视频

springboot024企业客户管理系统录像

原版高清演示视频:
https://pan.quark.cn/s/5cda95b17ee0

源码下载地址:

https://download.csdn.net/download/2301_76953549/89100236

LW目录

【如需全文请按文末获取联系】
在这里插入图片描述
在这里插入图片描述

目录

  • 开发环境
  • 演示视频
  • 源码下载地址:
  • LW目录
  • 一、项目简介
  • 二、系统设计
    • 2.1软件功能模块设计
    • 2.2数据库设计
  • 三、系统项目部分截图
    • 3.1管理员功能模块
    • 3.2员工功能模块
  • 四、部分核心代码
    • 4.1 用户部分
  • 获取源码或论文

一、项目简介

企业客户管理系统的主要使用者分为管理员和员工,实现功能包括管理员:首页、个人中心、员工管理、客户信息管理、行业类型管理、项目信息管理、项目类型管理、项目收益管理,员工:首页、个人中心、客户信息管理、项目信息管理、项目收益管理等功能。由于本网站的功能模块设计比较全面,所以使得整个企业客户管理系统信息管理的过程得以实现。

二、系统设计

2.1软件功能模块设计

整个系统是由多个功能模块组合而成的,要将所有的功能模块都一一列举出来,然后进行逐个的功能设计,使得每一个模块都有相对应的功能设计,然后进行系统整体的设计。
本企业客户管理系统结构图如图4-2所示。
在这里插入图片描述

2.2数据库设计

本企业客户管理系统采用的是MYSQL数据库,数据存储快,因为企业客户管理系统 ,主要的就是对信息的管理,信息内容比较多,这就需要好好的设计一个好的数据库,分类要清楚,不能添加信息的时候,造成信息太过混乱,设计好的数据库首先就需要先把各个实体之间的关系表达明确,系统的E-R图如下图所示:
1、员工管理实体图如图4-5所示:
在这里插入图片描述
2、客户信息管理实体图如图4-6所示:
在这里插入图片描述
3、项目信息管理实体图如图4-7所示:
在这里插入图片描述

三、系统项目部分截图

3.1管理员功能模块

管理员登录,通过填写用户名、密码、角色进行登录,如图5-1所示。
在这里插入图片描述

管理员登录进入企业客户管理系统可以查看首页、个人中心、员工管理、客户信息管理、行业类型管理、项目信息管理、项目类型管理、项目收益管理等信息。
个人信息,在个人信息页面中可以通过填写用户名等内容进行修改、添加操作,如图5-2所示。在员工管理页面中可以填写工号、姓名、性别、照片、身份证、手机、邮箱等信息,还可以根据需要对员工管理进行详情、修改或删除等操作,如图5-3所示。
在这里插入图片描述
在这里插入图片描述
行业类型管理,在行业类型管理页面中可以填写行业类型等内容,并可根据需要对已有行业类型管理进行修改或删除等操作,如图5-5所示。
在这里插入图片描述
项目类型管理,在项目类型管理页面中可以填写项目类型等内容,并且根据需要对已有项目类型管理进行详情、修改或删除等操作,如图5-7所示。
在这里插入图片描述

3.2员工功能模块

员工登录进入企业客户管理系统可以查看首页、个人中心、客户信息管理、项目信息管理、项目收益管理等内容。
员工注册,员工注册通过填写输入工号、姓名、性别、照片、身份证、手机、邮箱等信息即可进行员工注册,如图5-9所示。
在这里插入图片描述
客户信息管理,在客户信息管理页面中通过填写客户名称、行业类型、性别、年龄、照片、手机、身份证、备注、工号、姓名等信息内容,并且根据需要对已有客户信息管理进行详情、修改、删除等其他详细操作,如图5-11所示。
在这里插入图片描述
项目信息管理,在项目信息管理页面中可以填写项目名称、项目类型、客户名称、签单金额、签单数量、项目进度、签订日期、工号、签单人等信息内容,并且根据需要对已有项目信息管理进行详情、修改、删除等详细操作,如图5-12所示。
在这里插入图片描述

四、部分核心代码

4.1 用户部分

package com.controller;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;import com.entity.XiangmuleixingEntity;
import com.entity.view.XiangmuleixingView;import com.service.XiangmuleixingService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;/*** 项目类型* 后端接口* @author * @email * @date 2021-03-10 20:37:31*/
@RestController
@RequestMapping("/xiangmuleixing")
public class XiangmuleixingController {@Autowiredprivate XiangmuleixingService xiangmuleixingService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,XiangmuleixingEntity xiangmuleixing,HttpServletRequest request){EntityWrapper<XiangmuleixingEntity> ew = new EntityWrapper<XiangmuleixingEntity>();PageUtils page = xiangmuleixingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, xiangmuleixing), params), params));return R.ok().put("data", page);}/*** 前端列表*/@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,XiangmuleixingEntity xiangmuleixing, HttpServletRequest request){EntityWrapper<XiangmuleixingEntity> ew = new EntityWrapper<XiangmuleixingEntity>();PageUtils page = xiangmuleixingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, xiangmuleixing), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( XiangmuleixingEntity xiangmuleixing){EntityWrapper<XiangmuleixingEntity> ew = new EntityWrapper<XiangmuleixingEntity>();ew.allEq(MPUtil.allEQMapPre( xiangmuleixing, "xiangmuleixing")); return R.ok().put("data", xiangmuleixingService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(XiangmuleixingEntity xiangmuleixing){EntityWrapper< XiangmuleixingEntity> ew = new EntityWrapper< XiangmuleixingEntity>();ew.allEq(MPUtil.allEQMapPre( xiangmuleixing, "xiangmuleixing")); XiangmuleixingView xiangmuleixingView =  xiangmuleixingService.selectView(ew);return R.ok("查询项目类型成功").put("data", xiangmuleixingView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){XiangmuleixingEntity xiangmuleixing = xiangmuleixingService.selectById(id);return R.ok().put("data", xiangmuleixing);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){XiangmuleixingEntity xiangmuleixing = xiangmuleixingService.selectById(id);return R.ok().put("data", xiangmuleixing);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody XiangmuleixingEntity xiangmuleixing, HttpServletRequest request){xiangmuleixing.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(xiangmuleixing);xiangmuleixingService.insert(xiangmuleixing);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody XiangmuleixingEntity xiangmuleixing, HttpServletRequest request){xiangmuleixing.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(xiangmuleixing);xiangmuleixingService.insert(xiangmuleixing);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody XiangmuleixingEntity xiangmuleixing, HttpServletRequest request){//ValidatorUtils.validateEntity(xiangmuleixing);xiangmuleixingService.updateById(xiangmuleixing);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){xiangmuleixingService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 提醒接口*/@RequestMapping("/remind/{columnName}/{type}")public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}Wrapper<XiangmuleixingEntity> wrapper = new EntityWrapper<XiangmuleixingEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}int count = xiangmuleixingService.selectCount(wrapper);return R.ok().put("count", count);}}

获取源码或论文

如需对应的LW或源码,以及其他定制需求,也可以点我头像查看个人简介联系。

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

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

相关文章

00_Linux

文章目录 LinuxLinux操作系统的组成Linux的文件系统Linux操作系统中的文件类型Linux操作系统的组织结构 Linux vs WindowsNAT vs 桥接模式 vs 仅主机Linux Shell命令Linux⽂件与⽬录管理相关指令目录文件普通文件文本编辑 用户管理添加用户删除用户用户组管理 文件权限管理权限…

[生活][杂项] 上班党的注意事项

前言 目前是上班已经接近两年了&#xff0c;目前的状态是&#xff0c;一个人租了一个单间在上班。对于这种情况有以下几点需要注意。 钥匙问题&#xff0c;一定不要陷入钥匙丢失的情况&#xff01;一定不要陷入钥匙丢失的情况&#xff01;一定不要陷入钥匙丢失的情况&#xff…

共享电动车哪家强?人民出行共享电动车绿色出行

在当下这个快节奏、高压力的生活环境中,人们越来越注重出行的便捷性和环保性。共享电动车以其灵活方便、绿色低碳的特性,受到了越来越多人的青睐。那么,在众多的共享电动车品牌中,哪个牌子比较好呢?今天,就让我来为大家介绍一下人民出行共享电动车,它以其卓越的品质和贴心的服…

邮箱群组是什么?怎么创建邮箱群组?

在我们群发邮件时&#xff0c;可能会遇到这样的状况&#xff0c;一个个输入邮箱地址效率很低&#xff0c;而且很容易就漏发。而对于一个企业来说&#xff0c;如果出现这样的问题&#xff0c;很有可能会影响公司的业务进展和团队协作。这个时候我们就需要邮箱群组这个功能&#…

【Java】导出Mysql表表结构与注释数据字典

需求&#xff1a; 把mysql中所有表的字段名、数据类型、长度、注释整理成csv&#xff0c;做成数据字典。 import java.io.IOException; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import ja…

聊聊binlog是什么

1. 上一讲思考題解答:redo日志刷盘策略的选择建议 先给大家解释一下上一讲的思考題&#xff0c;我给大家的一个建议&#xff0c;其实对于redo日志的三种刷盘策略&#xff0c;我们通常建议是设置为1 也就是说&#xff0c;提交事务的时候&#xff0c;redo日志必须是刷入磁盘文件…

AWB学习记录

主要参考食鱼者博客&#xff1a;https://blog.csdn.net/wtzhu_13/article/details/119301096&#xff0c;以及相关的论文&#xff0c;感谢食鱼者老师整理分享。 灰度世界和完全反射 灰度世界法和完全反射法分别是基于(Rmean, Gmean, Bmean)和(Rmax, Gmax, Bmax)来进行白平衡校…

Leetcode 76. 最小覆盖子串和Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置

文章目录 Leetcode 76. 最小覆盖子串题目描述C语言题解和思路解题思路 Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置题目描述C语言题解和思路解题思路 Leetcode 76. 最小覆盖子串 题目描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子…

多任务学习的显著优势!

多任务学习是一种机器学习技术&#xff0c;它允许模型同时学习多个相关任务。与不进行多任务的整体学习&#xff08;单任务学习&#xff09;相比&#xff0c;多任务学习具有多个显著优势。 首先&#xff0c;多任务学习可以提高学习效率和速度。在并行学习中&#xff0c;多个任…

数组和指针的联系(C语言)

数组和指针是两种不同的数据类型&#xff0c;数组是一种构造类型&#xff0c;用于存储一组相同类型的变量&#xff1b;而指针是一种特殊类型&#xff0c;专门用来存放数据的地址。数组名除了sizeof(数组名)和&数组名表示整个数组外&#xff0c;其他情况下都表示的是首元素的…

profinet协议基础

文章目录 工业以太网自动化通讯金字塔工业以太网技术比较 profinet概述profinet特性 EtherNet通信EtherCAT通信EtherCat特性EtherCat过程同步 工业以太网 工业以太网是基于IEEE 802.3 (Ethernet)的强大的区域和单元网络。 自动化通讯金字塔 各个组织与工业以太网 工业以太网…

水气表CJ/T188协议学习及实例

水气表CJ/T188协议学习及实例 1 CT/J 188协议简介 CJ/T188协议规定了户用计量仪表(以下简称仪表)&#xff0c;包括水表、燃气表、热量表等仪表数据传输的基本原则&#xff0c;接口形式及物理性能、数据链路、数据标识及数据安全性和数据表达格式的要求。 CJ/T188协议为主-从…

DP10RF001一款工作于200MHz~960MHz低功耗、高性能、单片集成的(G)FSK/OOK无线收发芯片

产品概述. DP10RF001是一款工作于200MHz~960MHz范围内的低功耗、高性能、单片集成的(G)FSK/OOK无线收发机芯片。内部集成完整的射频接收机、射频发射机、频率综合器、调制解调器&#xff0c;只需配备简单、低成本的外围器件就可以获得良好的收发性能。芯片支持灵活可设的数据包…

Node.js安装与配置

Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;可以让你用JavaScript编写服务器端代码。在本文中&#xff0c;我将向大家介绍如何安装和配置Node.js。 首先&#xff0c;你需要前往Node.js官方网站&#xff08;https://nodejs.org/&#xff09;下载最新版本的…

DDD 领域驱动设计 - Domain Primitive(Kotlin 落地实现)

本文部分借鉴了阿里技术专家的 DDD 系列文章&#xff0c;笔者只是在学习 DDD 的过程中记录自己想法、思考. Ps&#xff1a;为了便于理解&#xff0c;笔者改动了部分案例&#xff0c;语言也换成 Kotlin 文章目录 为什么出现 DDD&#xff1f;Domain Primitive&#xff08;DP&…

C#中检查一个矩阵是否可逆

在C#中&#xff0c;要检查一个矩阵是否可逆&#xff08;即是否是满秩的&#xff0c;或者说是否有逆矩阵&#xff09;&#xff0c;以及计算它的逆矩阵&#xff0c;你可以使用数学库&#xff0c;比如Math.NET Numerics。这个库提供了强大的数学和统计功能&#xff0c;包括线性代数…

JavaEE初阶Day 10:多线程(8)

目录 Day 10&#xff1a;多线程&#xff08;8&#xff09;单例模式阻塞队列1. 生产者消费者模型1.1 生产者消费者模型解耦合1.2 生产者消费者模型削峰填谷 2. 生产者消费者代码3. 阻塞队列实现 Day 10&#xff1a;多线程&#xff08;8&#xff09; 单例模式 单例模式&#xf…

SQL Server Management Studio 显示行号

前言 在使用 SQL Server Management Studio (SSMS) 进行数据库管理和查询时&#xff0c;能够看到代码的行号是非常有用的。这可以帮助您更容易地定位代码错误、讨论特定的代码行&#xff0c;或者在执行长查询时快速找到特定行。在本文中&#xff0c;我将向您展示如何在 SSMS 中…

2024年华中杯数学建模竞赛ABC题思路分析

简单分析一下各个题目可能需要用到的方法和模型&#xff0c;完整代码和成品论文见文末 A题 太阳能路灯光伏板的朝向设计问题: 1. 球面几何、天文学相关知识,如赤纬角、太阳高度角、时角等概念和公式 2. 太阳辐射模型,根据太阳能辐射强度、大气衰减系数等计算地表太阳辐射强度…

蓝桥杯第十五届javab组个人总结

javab组 额今天早上打完了得对自己此次比赛做总结&#xff0c;无论是明年还参赛还是研究生蓝桥杯&#xff0c;体验感有点差&#xff0c;第一题其实一开始想手算但怕进位导致不准确还是让代码跑了&#xff0c;但跑第202420242024个数&#xff08;被20和24整除&#xff09;一直把…