SSM客户管理系统CRM开发mysql数据库web结构java编程计算机网页源码eclipse项目

news2024/9/21 14:46:21

一、源码特点
  SSM 客户管理系统CRM是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
前段主要技术 html.css jquery
后端主要技术 SSM
数据库 mysql
开发工具 eclipse  JDK1.8 TOMCAT 8.5

视频链接 https://www.bilibili.com/video/BV1Ru4y1L7bm/

二、功能介绍
本系统模块实现功能如下:

(1)员工管理:对员工信息进行添加、删除、修改和查看
(2)菜单管理:对菜单信息进行添加、删除、修改和查看
(3)菜单权限管理:对菜单权限信息进行添加、删除、修改和查看 动态菜单实现
(4)职位管理:对职位信息进行添加、删除、修改和查看
(5)客户管理:对客户信息进行添加、删除、修改和查看
(6)联系人管理:对联系人信息进行添加、删除、修改和查看
(7)商机管理:对商机信息进行添加、删除、修改和查看
(8)邮件管理:对邮件信息进行添加、删除、修改和查看
(9)任务管理:对任务信息进行添加、删除、修改和查看
(10)产品管理:对产品信息进行添加、删除、修改和查看
(11)个人信息修改、登录

数据库设计

(1)员工信息表如表5.1所示:

表5.1 员工信息表

序号

字段名称

数据类型

长度

主键

描述

1

ygid

INTEGER

11

员工编号

2

yhm

VARCHAR

40

用户名

3

mm

VARCHAR

40

密码

4

xm

VARCHAR

40

姓名

5

qx

VARCHAR

40

权限

6

lxdh

VARCHAR

40

联系电话

7

lxdz

VARCHAR

40

联系地址

8

zw

VARCHAR

40

职位

(2)菜单信息表如表5.2所示:

表5.2 菜单信息表

序号

字段名称

数据类型

长度

主键

描述

1

cdid

INTEGER

11

菜单编号

2

cdmc

VARCHAR

40

菜单名称

(3)菜单权限信息表如表5.3所示:

表5.3 菜单权限信息表

序号

字段名称

数据类型

长度

主键

描述

1

cdqxid

INTEGER

11

菜单权限编号

2

cd

VARCHAR

40

菜单

3

qx

VARCHAR

40

权限

(4)职位信息表如表5.4所示:

表5.4 职位信息表

序号

字段名称

数据类型

长度

主键

描述

1

zwid

INTEGER

11

职位编号

2

zwmc

VARCHAR

40

职位名称

3

js

VARCHAR

40

介绍

(5)客户信息表如表5.5所示:

表5.5 客户信息表

序号

字段名称

数据类型

长度

主键

描述

1

khid

INTEGER

11

客户编号

2

khmc

VARCHAR

40

客户名称

3

jyfw

VARCHAR

40

经营范围

4

djsj

VARCHAR

40

登记时间

5

sm

VARCHAR

40

说明

6

lxdh

VARCHAR

40

联系电话

(6)联系人信息表如表5.6所示:

表5.6 联系人信息表

序号

字段名称

数据类型

长度

主键

描述

1

lxrid

INTEGER

11

联系人编号

2

kh

VARCHAR

40

客户

3

lxr

VARCHAR

40

联系人

4

lxdh

VARCHAR

40

联系电话

5

sm

VARCHAR

40

说明

控制层设计

@RequestMapping(value="/add")
	public String add(kehu kehu,HttpServletRequest request){//添加方法
		Map<String,Object> map= new HashMap<String,Object>();//初始化对象
		//String name=(String)request.getParameter("name");

		map.put("khid", kehu.getKhid());//客户编号

		map.put("khmc", kehu.getKhmc());//客户名称

		map.put("jyfw", kehu.getJyfw());//经营范围

		map.put("djsj", kehu.getDjsj());//登记时间

		map.put("sm", kehu.getSm());//说明

		map.put("lxdh", kehu.getLxdh());//联系电话



		String khid=(String)kehu.getKhid();//客户编号

		String khmc=(String)kehu.getKhmc();//客户名称

		String jyfw=(String)kehu.getJyfw();//经营范围

		String djsj=(String)kehu.getDjsj();//登记时间

		String sm=(String)kehu.getSm();//说明

		String lxdh=(String)kehu.getLxdh();//联系电话

		kehudao.save(map);//调用 add方法 保存kehu 数据
		
		
		request.setAttribute("msg", "<script>alert('添加成功');</script>");
		System.out.println("addok");
		return "kehu/kehuadd";
	}
	
	/**删除 kehu
	 * 
	 */
	@RequestMapping(value="/del")
	public String  del(Integer id,HttpServletRequest request,Map<String,Object> map){
	//	Map<String,Object> map= new HashMap<String,Object>();//初始化对象
		String a=(String)request.getParameter("keyid");//request 方式获得主键id
		id=Integer.parseInt(a);
		request.setAttribute("msg", "<script>alert('删除成功');</script>");
		kehudao.del(id);//调用 删除方法
		return selectall(null,map,request);
	}
	/**
	 * 修改kehu信息
	 */
	@RequestMapping(value="/update")
	public String update(kehu kehu,HttpServletRequest request,Map<String,Object> map1){
		Map<String,Object> map= new HashMap<String,Object>();//初始化对象
		map.put("khid", kehu.getKhid());//客户编号

		map.put("khmc", kehu.getKhmc());//客户名称

		map.put("jyfw", kehu.getJyfw());//经营范围

		map.put("djsj", kehu.getDjsj());//登记时间

		map.put("sm", kehu.getSm());//说明

		map.put("lxdh", kehu.getLxdh());//联系电话



		String khid=(String)kehu.getKhid();//客户编号

		String khmc=(String)kehu.getKhmc();//客户名称

		String jyfw=(String)kehu.getJyfw();//经营范围

		String djsj=(String)kehu.getDjsj();//登记时间

		String sm=(String)kehu.getSm();//说明

		String lxdh=(String)kehu.getLxdh();//联系电话

		request.setAttribute("msg", "<script>alert('修改成功');</script>");
		kehudao.update(map);//执行update 方法
		return selectall(null,map1,request);
	}
	/**
	 * 查询kehu信息
	 */
	@RequestMapping(value="/modify")
	public String modify(Integer id,Map<String,Object> map,HttpServletRequest request){
		String keyid=(String)request.getParameter("keyid");//request 方式获得主键id
		List<Map<String,Object>> list= new  ArrayList<Map<String,Object>>();//初始化对象
		list=kehudao.select(Integer.parseInt(keyid));//根据id返回 kehu对象数据
		request.setAttribute("khid", list.get(0).get("khid"));//客户编号

		request.setAttribute("khmc", list.get(0).get("khmc"));//客户名称

		request.setAttribute("jyfw", list.get(0).get("jyfw"));//经营范围

		request.setAttribute("djsj", list.get(0).get("djsj"));//登记时间

		request.setAttribute("sm", list.get(0).get("sm"));//说明

		request.setAttribute("lxdh", list.get(0).get("lxdh"));//联系电话

		
		return "kehu/kehumodify";
	}
	
	@RequestMapping(value="/detail")
	public String detail(Integer id,Map<String,Object> map,HttpServletRequest request){
		String keyid=(String)request.getParameter("keyid");//request 方式获得主键id
		List<Map<String,Object>> list= new  ArrayList<Map<String,Object>>();//初始化对象
		list=kehudao.select(Integer.parseInt(keyid));//根据id返回 kehu对象数据
		request.setAttribute("khid", String.valueOf(list.get(0).get("khid")));//客户编号

		request.setAttribute("khmc", list.get(0).get("khmc"));//客户名称

		request.setAttribute("jyfw", list.get(0).get("jyfw"));//经营范围

		request.setAttribute("djsj", list.get(0).get("djsj"));//登记时间

		request.setAttribute("sm", list.get(0).get("sm"));//说明

		request.setAttribute("lxdh", list.get(0).get("lxdh"));//联系电话

		return "kehu/kehudetail";
	}
	

持久层设计

public void save(Map<String, Object> map) {
		sqlSession.insert("com.chanpin.insertchanpin", map);//执行insert 插入方法
		
	}
	/**
	 * 删除aa
	 * @param id
	 */
	public void del(Integer id) {
		sqlSession.delete("com.chanpin.delchanpin", id);//执行delete 删除方法
	}

	/**
	 * 修改chanpin信息
	 * @param map
	 */
	public void update(Map<String, Object> map) {
		sqlSession.update("com.chanpin.updatechanpin", map);//执行update 修改方法
	}

	/**
	 * 查询chanpin信息
	 * @param id
	 * @return 
	 */
	public List<Map<String, Object>> select(Integer id) {
		return sqlSession.selectList("com.chanpin.selectchanpin", id) ; //执行select 查询
	}

三、注意事项
1、管理员账号:admin密码:admin 数据库配置文件DBO.java
2、开发环境为eclipse开发,数据库为mysql,使用java语言开发。
3、数据库文件名是jspssmcrm.sql 系统名称ssmcrm
4、地址:http://127.0.0.1:8080/ssmcrm/login.jsp

四 系统实现

源码获取 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

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

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

相关文章

五金零件经营小程序商城的效果如何

五金零件无论批发还是零售都有很高的需求度&#xff0c;传统消费者往往是线下门店寻找购买&#xff0c;但如今更多的客户选择线上消费&#xff0c;而商家们也选择线上开店拓展更广的客源及生意增长。 除了第三方平台进驻外&#xff0c;私域开店对商家来说也是一种方式。微信场…

【20年扬大真题】编写程序,功能是从键盘输入若干4位数字学号,然后输出学号中百位数字是3的学号 (输入0时结束循环)

【20年扬大真题】 编写程序&#xff0c;功能是从键盘输入若干4位数字学号&#xff0c;然后输出学号中百位数字是3的学号 &#xff08;输入0时结束循环&#xff09; #include<stdio.h> #define MaxSize 20 int BaiWei3(int x) {x x / 100;if (x % 10 3) {return 1;}els…

python中的exec()、eval()以及complie()

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 1.eval函数 函数的作用&#xff1a; 计算指定表达式的值。 也就是说它要执行的python代码只能是单个表达式&#xff08;注意eval不支持任何形式的赋值操作&…

iEnglish全国ETP大赛:教育游戏助力英语习得

“seesaw,abacus,sword,feather,frog,lion,mouse……”11月18日,经过3局的激烈较量,“以过客之名队”的胡玲、黄长翔、林家慷率先晋级“玩转英语,用iEnglish”第三届全国ETP大赛的16强,在过去的周末中,还有TIK徘徊者队、不负昭华队、温柔杀戮者队先后晋级。据悉,根据活动规则,在…

全民阅读营造良好氛围 助力培养孩子阅读习惯

日前,2023年全民终身学习活动周全国总开幕式在重庆举行,自2005年起,终身学习活动周已连续举办了18届,累计带动4亿多群众参与全民终身学习活动周,有效推进全面阅读。 随着全民阅读氛围的持续浓厚,阅读不再是语文学科的专项,不再是学校教育的专属,家庭、社会都在积极参与进来。尤…

多篇论文介绍-可变形卷积

01 具有双层路由注意力的 YOLOv8 道路场景目标检测方法 01 摘要: 随着机动车的数量不断增加&#xff0c;道路交通环境变得更复杂&#xff0c;尤其是光照变化以及复杂背景都会干扰目标检测算法的准确性和精度&#xff0c;同时道路场景下多变形态的目标也会给检测任务造成干扰&am…

飞书多维表格【单选】的排序规则

飞书多维表格的排序竟然不是根据拼音排的&#xff0c;而是根据单选的先后顺序进行排序的。

Mysql查看Binlog文件

前期准备 检查是否开启binlog mysql> SHOW VARIABLES LIKE log_bin; // 或者 mysql> SHOW VARIABLES LIKE log%;ON代表开启&#xff0c;OFF代表关闭。如为OFF需 开启 后才能查看&#xff0c;但只能查看开启之后时间点的。 查看binlog文件有哪些 一般yum安装的mysql…

left join查询耗时太慢,添加索引解决问题

背景 因为最近自己用的小app越用感觉加载越慢&#xff0c;以为是自己app开发逻辑出现问题了&#xff0c;结果才发现是自己很早以前的代码用到的是left join多表联查&#xff0c;以前因为数据少&#xff0c;所以没有感觉&#xff0c;现在数据量稍微一大&#xff0c;耗时就非常严…

Android跨进程传图片或者大数据(解决TransactionTooLargeException)

跨进程传图片方案 直接intent传bitmap使用文件读写intent传递自定义binder&#xff0c;binder中传递image使用网络传输 一、直接intent传bitmap 优势 使用简单 劣势 相关代码可能有侵入性&#xff0c;必须在四大组件中接收。 intent传递数据的总大小是1MB&#xff0c;其中…

Redis(哨兵模式)

哨兵模式的定义&#xff1a; 是Redis的一种高可用解决方案&#xff0c;通过运行多个Redis实例来监控主从Redis实例的状态&#xff0c;当主实例出现故障时&#xff0c;哨兵会自动选举一个从实例作为新的主实例&#xff0c;从而保证系统的高可用性。哨兵模式可以监控多个主从Red…

感恩三十载 再创新辉煌——中国音乐著作权协会成立30周年暨著作权集体管理制度实施30周年纪念大会在京召开

感恩三十载 再创新辉煌 2023年11月19日&#xff0c;中国音乐著作权协会成立30周年暨著作权集体管理制度实施30周年纪念大会在北京举行。中宣部副部长张建春&#xff0c;国际作者和作曲者协会联合会&#xff08;CISAC&#xff09;总干事甘迪奥龙&#xff08;Gadi Oron&#xff0…

【追求卓越02】数据结构--链表

引导 今天我们进入链表的学习&#xff0c;我相信大家对链表都很熟悉。链表和数组一样&#xff0c;作为最基础的数据结构。在我们的工作中常常会使用到。但是我们真的了解到数组和链表的区别吗&#xff1f;什么时候使用数组&#xff0c;什么时候使用链表&#xff0c;能够正确的选…

WPF实战项目十五(客户端):RestSharp的使用

1、在WPF项目中添加Nuget包&#xff0c;搜索RestSharp安装 2、新建Service文件夹&#xff0c;新建基础通用请求类BaseRequest.cs public class BaseRequest{public Method Method { get; set; }public string Route { get; set; }public string ContenType { get; set; } &quo…

sd-webui-controlnet代码分析

controlnet前向代码解析_Kun Li的博客-CSDN博客文章浏览阅读1.5k次。要分析下controlnet的yaml文件&#xff0c;在params中分成了4个部分&#xff0c;分别是control_stage_config、unnet_config、first_stage_config、cond_stage_config。其中control_stage_config对应的是13层…

Leo赠书活动-10期 【AIGC重塑教育 AI大模型驱动的教育变革与实践】文末送书

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

好题分享(2023.11.12——2023.11.18)

目录 ​ 前情回顾&#xff1a; 前言&#xff1a; 题目一&#xff1a;《有效括号》 思路&#xff1a; 总结&#xff1a; 题目二&#xff1a;《用队列实现栈》 思路&#xff1a; 总结&#xff1a; 题目三&#xff1a;《用栈实现队列》 思路&#xff1a; 总结 &#x…

验证码 | 可视化一键管控各场景下的风险数据

目录 查看今日验证数据 查看未来趋势数据 验证码作为人机交互界面经常出现的关键要素&#xff0c;是身份核验、防范风险、数据反爬的重要组成部分&#xff0c;广泛应用网站、App上&#xff0c;在注册、登录、交易、交互等各类场景中发挥着巨大作用&#xff0c;具有真人识别、身…

C#winfrom端屏幕截图功能的简单实现(修改了屏幕的缩放比例后,截图功能异常,慎用!!!)

文章目录 1 主要文件1.1 FrmScreenShot.cs1.2 FrmScreenShot.Designer.cs1.1 Utility.cs 在发现有一款播放软件禁止截图功能后&#xff0c;使用了其他的截图工具发现都会被播放软件禁用掉截图功能&#xff0c;想了下试着自己做一个截图工具&#xff0c;也可以方便将截图工具添加…

【追求卓越01】数据结构--数组

引导 这一章节开始&#xff0c;正式进入数据结构与算法的学习过程中。由简到难&#xff0c;先开始学习最基础的数据结构--数组。 我相信对于数组&#xff0c;大家肯定是不陌生&#xff0c;因为数组在大多数的语言中都有&#xff0c;也是大家在编程中常常会接触到的。我不会说数…