基于Servlet的CRM客户关系管理系统

news2024/11/16 6:03:07

1.需求分析

客户是公司最宝贵的资源,为了更好的发掘老客户的价值,并开发更多新客户,公司实施客户关系管理系统。系统的功能是:通过这个系统完成对员工基本信息、客户基本信息、交往信息、客户服务信息的充分共享和规范化管理;通过对销售机会、客户开发过程的追踪和记录,提高新客户的开发能力;在客户将要流失时系统及时预警,以便销售人员及时采取措施,降低损失。

客户服务水平的高低决定着公司的核心竞争力。该客户关系管理系统提供一个客户服务在线平台,使客户服务处理过程中的相关人员可以在线完成服务的处理和记录工作。

1.1 功能需求分析

功能需求分析目的是为了对每一个模块和模块内每一个小的功能点进行规划和设计,为之后的开发打好信息基础做好准备。根据对收集的用户问询馈意见,需要对系统的前端和后台进行总体布局设计。

本客户关系管理系统,旨在为所有用户提供如下功能:

(1)需要对企业信息进行统一管理,以提升公司的管理规范,对人员信息管理更加规范;

(2)当企业用户发掘下新客户时,需要将客户录入系统并将客户联系人进行管理,方便后续跟踪拜访客户;

(3)当企业员工对客户进行拜访后,需将拜访信息录入系统,方便管理自己对客户的跟踪情况;也方便系统提示自己下次拜访客户时间,根据每次拜访记录可分析客户的目前状态等;

(4)根据系统现有数据呈现可视化统计图,图文并茂呈现出结果,使管理者可清晰看到自己感兴趣的数据。

1.2 用户需求分析

CRM系统是指利用信息化手段将客户、拜访记录等做一个管理,从而提升工作效率、业绩及其公司管理水平。因此,开发客户关系管理系统,首先需要明确现阶段整个系统需要实现的功能。本系统主要是企业用户进行使用。

用户登录后,可以进行客户管理、联系人管理、拜访客户、统计查看操作。

(1)用户登录

用户输入正确的用户名、密码的用户才能登陆成功并自动取得获得授予的对应访问权限,退出登录应移出用户状态。

(2)用户功能

·客户管理

对客户信息进行进行增、删、改、查操作。

·联系人管理

对联系人进行增、删、改、查操作。

·拜访跟踪

对已录入客户进行拜访跟踪信息记录、查询。

·统计

按照来源、行业等对信息进行可视化统计展示。

2.E-R图与关系模式设计

2.1 E-R图

2.1.1 实体分析描述

从用户角度来说,数据库的需求主要体现在对数据库表的增删改查。因此,数据库结构需同时满足两个要素:输入、输出。在进行数据设计时,首先需收集数据,然后分析数据结构,最后处理数据。根据本系统的需求,设计以下主要的数据项和数据结构:

(1)用户实体:用户id、用户账号、用户名称、用户密码、用户状态。

(2)联系人实体:联系人编号、联系人姓名、客户id、联系人性别、联系人办公电话、联系人手机、联系人邮箱、联系人qq、联系人职位、联系人备注。

(3)客户实体:客户编号、客户名称(公司名称)、客户信息来源、客户所属行业、客户级别、固定电话、移动电话。

(4)客户详情实体:客户编号、客户地区、客户邮政编码、客户联系地址、客户传真、客户网址、客户营业执照注册号、企业法人、客户注册资金、开户银行及账号、客户资质图片、客户简介。

(5)数据字典实体:数据字典id、数据字典类别代码、数据字典类别名称、数据字典项目名称、数据字典项目、排序字段、状态、备注。

2.1.2 实体E-R图

用户实体如图1.1所示。

图1.1 用户实体

联系人实体如图1.2所示。

图1.2 联系人实体

客户实体如图1.3所示。

图1.3 客户实体

客户详情实体如图1.4所示。

图1.4 客户详情实体

2.1.3 整体E-R图

图1.5 整体E-R图

2.2关系模式

关系模式:用户信息(用户id、用户账号、用户名称、用户密码、用户状态)

模式判定:用户信息∈2NF,且每个非主属性都不传递函数依赖于员工信息的主关系键,所以用户信息∈3NF

关系模式:联系人信息(联系人编号、联系人姓名、客户id、联系人性别、联系人办公电话、联系人手机、联系人邮箱、联系人qq、联系人职位、联系人备注)

模式判定:联系人信息∈2NF,且每个非主属性都不传递函数依赖于部门信息的主关系键,所以联系人信息∈3NF

关系模式:客户信息(客户编号、客户名称(公司名称)、客户信息来源、客户所属行业、客户级别、固定电话、移动电话)

模式判定:客户信息∈2NF,且每个非主属性都不传递函数依赖于工资信息的主关系键,所以客户信息∈3NF

关系模式:客户详情信息(客户编号、客户地区、客户邮政编码、客户联系地址、客户传真、客户网址、客户营业执照注册号、企业法人、客户注册资金、开户银行及账号、客户资质图片、客户简介)

模式判定:客户详情信息∈2NF,且每个非主属性都不传递函数依赖于考勤信息的主关系键,所以客户详情信息∈3NF

关系模式:数据字典信息(数据字典id、数据字典类别代码、数据字典类别名称、数据字典项目名称、数据字典项目、排序字段、状态、备注)

模式判定:数据字典信息∈2NF,且每个非主属性都不传递函数依赖于津贴信息的主关系键,所以数据字典信息∈3NF

关系模式:客户拜访信息(客户拜访id、客户id、用户id、拜访时间、拜访地址、拜访详情、下次拜访时间)

模式判定:客户拜访信息∈2NF,且每个非主属性都不传递函数依赖于津贴信息的主关系键,所以数据字典信息∈3NF

2.3 数据库表结构

表2.1 用户表sys_user

属性名

字段名

数据类型

长度

是否允许为空

是否主键

用户id

user_id

bigint

0

不允许

用户账号

user_code

varchar

32

允许

用户名称

user_name

varchar

64

允许

用户密码

user_password

varchar

32

允许

用户状态

user_state

varchar

2

允许

表2.2 联系人表cst_linkman

属性名

字段名

数据类型

长度

是否允许为空

是否主键

联系人编号

lkm_id

int

0

不允许

联系人姓名

lkm_name

varchar

16

允许

客户id

lkm_cust_id

bigint

16

允许

联系人性别

lkm_gender

varchar

0

允许

联系人办公电话

lkm_phone

varchar

16

允许

联系人手机

lkm_mobile

varchar

16

允许

联系人邮箱

lkm_email

varchar

16

允许

联系人qq

lkm_qq

varchar

16

允许

联系人职位

lkm_position

varchar

16

允许

联系人备注

lkm_memo

varchar

512

允许

表2.3 客户表cst_customer

属性名

字段名

数据类型

长度

是否允许为空

是否主键

客户编号

cust_id

int

0

不允许

客户名称(公司名称)

cust_name

varchar

32

允许

客户信息来源

cust_source

varchar

32

允许

客户所属行业

cust_industry

varchar

32

允许

客户级别

cust_level

varchar

32

允许

固定电话

cust_phone

varchar

32

允许

移动电话

cust_mobile

varchar

32

允许

表2.4 客户详情表cst_customer_detail

属性名

字段名

数据类型

长度

是否允许为空

是否主键

客户编号

cust_id

int

0

不允许

客户地区

cust_region

varchar

64

允许

客户邮政编码

cust_zip

varchar

16

允许

客户联系地址

cust_address

varchar

128

允许

客户传真

cust_fax

varchar

64

允许

客户网址

cust_website

varchar

128

允许

客户营业执照注册号

cust_licence

varchar

64

允许

企业法人

cust_corporation

varchar

64

允许

客户注册资金

cust_capital

bigint

0

允许

开户银行及账号

cust_bank

varchar

20

允许

客户资质图片

cust_pic

varchar

64

允许

客户简介

cust_memo

longtext

0

允许

表2.5 基础数据字典表base_dict

属性名

字段名

数据类型

长度

是否允许为空

是否主键

数据字典id

dict_id

int

0

不允许

数据字典类别代码

dict_type_code

varchar

32

允许

数据字典类别名称

dict_type_name

varchar

10

允许

数据字典项目名称

dict_item_name

varchar

64

允许

数据字典项目

dict_item_code

varchar

64

允许

排序字段

dict_sort

varchar

10

允许

状态

dict_enable

varchar

1

允许

备注

dict_memo

varchar

64

允许

表2.6 客户拜访表sale_visit

属性名

字段名

数据类型

长度

是否允许为空

是否主键

客户拜访id

visit_id

int

0

不允许

客户id

visit_cust_id

bigint

0

允许

用户id

visit_user_id

bigint

0

允许

拜访时间

visit_time

date

0

允许

拜访地址

visit_addr

varchar

128

允许

拜访详情

visit_detail

varchar

256

允许

下次拜访时间

visit_nexttime

date

0

允许

3.实现效果

(1)登录

(2) 系统主界面

(3)新增客户

 (4)客户列表

(5)新增联系人

 (6)联系人列表

(7) 新增客户拜访

(8)客户拜访列表

4.数据库核心

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for base_dict
-- ----------------------------
DROP TABLE IF EXISTS `base_dict`;
CREATE TABLE `base_dict`  (
  `dict_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '数据字典id(主键)',
  `dict_type_code` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '数据字典类别代码',
  `dict_type_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '数据字典类别名称',
  `dict_item_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '数据字典项目名称',
  `dict_item_code` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据字典项目(可为空)',
  `dict_sort` int(10) NULL DEFAULT NULL COMMENT '排序字段',
  `dict_enable` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '1:使用 0:停用',
  `dict_memo` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`dict_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of base_dict
-- ----------------------------
INSERT INTO `base_dict` VALUES ('1', '001', '客户行业', '教育培训 ', NULL, 1, '1', NULL);
INSERT INTO `base_dict` VALUES ('10', '003', '公司性质', '民企', NULL, 3, '1', NULL);
INSERT INTO `base_dict` VALUES ('12', '004', '年营业额', '1-10万', NULL, 1, '1', NULL);
INSERT INTO `base_dict` VALUES ('13', '004', '年营业额', '10-20万', NULL, 2, '1', NULL);
INSERT INTO `base_dict` VALUES ('14', '004', '年营业额', '20-50万', NULL, 3, '1', NULL);
INSERT INTO `base_dict` VALUES ('15', '004', '年营业额', '50-100万', NULL, 4, '1', NULL);
INSERT INTO `base_dict` VALUES ('16', '004', '年营业额', '100-500万', NULL, 5, '1', NULL);
INSERT INTO `base_dict` VALUES ('17', '004', '年营业额', '500-1000万', NULL, 6, '1', NULL);
INSERT INTO `base_dict` VALUES ('18', '005', '客户状态', '基础客户', NULL, 1, '1', NULL);
INSERT INTO `base_dict` VALUES ('19', '005', '客户状态', '潜在客户', NULL, 2, '1', NULL);
INSERT INTO `base_dict` VALUES ('2', '001', '客户行业', '电子商务', NULL, 2, '1', NULL);
INSERT INTO `base_dict` VALUES ('20', '005', '客户状态', '成功客户', NULL, 3, '1', NULL);
INSERT INTO `base_dict` VALUES ('21', '005', '客户状态', '无效客户', NULL, 4, '1', NULL);
INSERT INTO `base_dict` VALUES ('22', '006', '客户级别', '普通客户', NULL, 1, '1', NULL);
INSERT INTO `base_dict` VALUES ('23', '006', '客户级别', 'VIP客户', NULL, 2, '1', NULL);
INSERT INTO `base_dict` VALUES ('24', '007', '商机状态', '意向客户', NULL, 1, '1', NULL);
INSERT INTO `base_dict` VALUES ('25', '007', '商机状态', '初步沟通', NULL, 2, '1', NULL);
INSERT INTO `base_dict` VALUES ('26', '007', '商机状态', '深度沟通', NULL, 3, '1', NULL);
INSERT INTO `base_dict` VALUES ('27', '007', '商机状态', '签订合同', NULL, 4, '1', NULL);
INSERT INTO `base_dict` VALUES ('3', '001', '客户行业', '对外贸易', NULL, 3, '1', NULL);
INSERT INTO `base_dict` VALUES ('30', '008', '商机类型', '新业务', NULL, 1, '1', NULL);
INSERT INTO `base_dict` VALUES ('31', '008', '商机类型', '现有业务', NULL, 2, '1', NULL);
INSERT INTO `base_dict` VALUES ('32', '009', '商机来源', '电话营销', NULL, 1, '1', NULL);
INSERT INTO `base_dict` VALUES ('33', '009', '商机来源', '网络营销', NULL, 2, '1', NULL);
INSERT INTO `base_dict` VALUES ('34', '009', '商机来源', '推广活动', NULL, 3, '1', NULL);
INSERT INTO `base_dict` VALUES ('4', '001', '客户行业', '酒店旅游', NULL, 4, '1', NULL);
INSERT INTO `base_dict` VALUES ('5', '001', '客户行业', '房地产', NULL, 5, '1', NULL);
INSERT INTO `base_dict` VALUES ('6', '002', '客户信息来源', '电话营销', NULL, 1, '1', NULL);
INSERT INTO `base_dict` VALUES ('7', '002', '客户信息来源', '网络营销', NULL, 2, '1', NULL);
INSERT INTO `base_dict` VALUES ('8', '003', '公司性质', '合资', NULL, 1, '1', NULL);
INSERT INTO `base_dict` VALUES ('9', '003', '公司性质', '国企', NULL, 2, '1', NULL);

SET FOREIGN_KEY_CHECKS = 1;

5.核心代码

public class BaseDao {
    //驱动
    private static String driver = "com.mysql.jdbc.Driver";
    //url
    private static String url = "jdbc:mysql://localhost:3306/crm?characterEncoding=utf-8";
    //用户名
    private static String username = "root";
    //密码
    private static String pwd = "root";


    /**
     * 创建连接
     * @return
     */
    public static Connection getConnection(){
        Connection connection=null;
        //加载驱动
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //建立连接获取Connection对象
        try {
            connection= DriverManager.getConnection(url,username,pwd);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    /**
     * 关闭链接
     * @param connection
     * @param statement
     * @param resultSet
     */
    public static void closeAll(Connection connection, Statement statement, ResultSet resultSet){

        try {
            if(resultSet!=null){
                resultSet.close();
            }

            if(statement!=null){
                statement.close();
            }
            if (connection!=null){
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    /**
     * 执行增、删、改的方法
     * @param sql
     * @return
     */
    public static int execute(String sql){
        //获取链接
        Connection connection=getConnection();
        int flag=0;
        try {
            //创建Statement对象
            Statement statement=connection.createStatement();
            //执行sql语句
            flag=statement.executeUpdate(sql);
            //关闭链接
            closeAll(connection,statement,null);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return flag;
    }
    /*
      测试
     */
    public static void main(String[] args) {
        String sql = "SELECT * FROM `cm_cst`.`base_dict`  WHERE dict_id = 1";
        Connection connection = getConnection();
        Statement statement = null;
        try {
            statement= connection.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            while(resultSet.next()){
                String typename = resultSet.getString(3);
                System.out.println("类别名称"+typename);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

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

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

相关文章

服务器配置静态IP

服务器配置静态IP 一、前期准备二、配置静态IP 将服务器配置为使用静态IP地址。这将使服务器拥有一个永久的IP地址,而不会在每次启动时更改。为此,您需要编辑网络配置文件并将服务器的IP地址添加到其中。详细步骤如下: 一、前期准备 请在配置…

Docter容器

轻量,高效,敏捷 本质是进程,所以才轻量,namespace隔离资源,cgroups资源限制 namespace 运行容器,100个容器争夺资源, 给每个容器分配多少资源 审计:你利用多少资源?技…

免费的CRM软件都有哪些功能?

有哪些免费好用的CRM软件推荐?Zoho CRM是免费的CRM客户管理软件。虽然限制了部分功能,但是依然可以管理客户关系,提高销售效率,实现快速增长。 联系人管理: 创建和管理联系人,记录他们的基本信息、交易历…

阿里云短信平台收费标准价格表

阿里云短信服务平台,阿里云短信0.032元一条,阿里云短信?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信0.032元一条。新用户购买阿里云短信套餐包6.9元200条起,费用0.032元/条,阿里云短信…

轻量级的CRM系统有哪些优势

市面上的CRM客户管理系统多种多样,但并不是所有的CRM系统都适合您的企业——有些CRM过于复杂和昂贵,初创或小型企业无法负担。那么,有哪些好用的轻量级在线CRM系统? Zoho Bigin是初创或小型企业设计的轻量级在线CRM系统&#xff…

联想小新电脑无法启动怎么办?

1,电脑启动不了 2,强制断电3次开机后,Win11进入高级启动模式 (注意每次强制关机要按住15秒左右) 3,选择疑难解答 4,选择高级选项 5,卸载更新 6,卸载最新的质量更新 7&am…

Spring Boot 中的 Spring Cloud Feign

Spring Boot 中的 Spring Cloud Feign Spring Boot 是一个非常流行的 Java Web 开发框架,它提供了很多工具和组件来简化 Web 应用程序的开发。其中,Spring Cloud Feign 是 Spring Boot 中的一个非常重要的组件,它可以帮助我们实现声明式的 R…

Git构建和Github的ssh配置

由于你的本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息 ssh-keygen -t rsa -C "youremailexample.com" your_emailyouremail.com 改为你在 Github 上注册的邮箱,之后会要求确认路径和输入密码&#xff0c…

计算机网络(谢希仁版)基础期末复习

一、前言 该篇文章是对计算机网络(谢希仁版)常考的期末复习知识点进行的总结,可以供大家进行简单的复习,适用于网络工程、计算机网络类专业的同学进行复习使用。其他对计算机网络感兴趣的同学、相关专业人士也可进行阅读。 二、第…

arcpy调用系统自带工具箱、检测文件是否存在、获取要素文件的属性(名称类型)、列出数据函数的使用

前言 前言其实我也不知道说什么,以往说的都是;垃圾话,现在垃圾话也说不出了,但是这是必不可少的内容! 一、调用系统工具箱 我在这里以裁剪工具为例,其他的工具类似。 那么我们怎么知道我想使用的工具在…

【如何用大语言模型快速深度学习系列】从n-gram到TFIDF

感谢上一期能够进入csdn“每日推荐看”,那必然带着热情写下第二期《从n-gram到TFIDF》,这里引入一本《Speach and Language Processing》第三版翻译版本(语音与语言处理(SLP)),前半部分写的很好!里面连编辑…

软件测试的概念与过程---项目启动与需求评审

软件测试的概念与过程---项目启动与需求评审 1、项目启动参加的人员成员组成 2、需求评审 1、项目启动参加的人员 成员组成 项目经理: 为项目的成功策划和执行负总责的人产品经理: 根据市场的需求制定需求分析研发组长: 1.负责本小组的安全工作和日常研发工作 2.对组内人员…

High Performance Visual Tracking with Siamese Region Proposal Network(SiamRPN)

High Performance Visual Tracking with Siamese Region Proposal Network(SiamRPN,CVPR2018) 主要贡献: 提出了SiamRPN跟踪器,首次将端到端的离线训练方式,应用到了大尺度的图像跟踪任务上在在线跟踪过程…

Elasticsearch 分词器切词器分析器

normalization : 文档规范化 先切词,然后规范化. 规范化要规范哪些内容? 大小写; 标点符号; 时态; 复数; 规范化主要是为了匹配更精准 character filter : 字符过滤器. 标点符号 分词之前的预处理,过滤无用字符 HTML Strip Character Filter :htm…

【C3】内核模块,设备号,字符驱动,设备节点

文章目录 1.内核模块:必须包含module.h2.内核模块参数:权限位是用在sysfs文件系统里,只读权限用S_IRUGO设置2.1 extern:声明来自另一个模块 3.设备号:主设备号对应驱动程序,具有相同主设备号设备使用相同驱…

Android Studio Bot 下载使用

Android Studio Bot 下载使用 本文最新更新地址 https://gitee.com/chenjim/chenjimblog 下载 Android Studio Hedgehog 当前的新版本是 2023.1.1 Canary 10找到Studio Bot: View->Tool Windows->Studio Bot,或者下图 登录 Google 账号,注意当前限…

Echarts拼接折线图,左右两部分设置不同的样式及formatter的处理

option {tooltip: {trigger: axis,formatter: (params) > {console.log(params);if (params && params.length 2) {if (params[0].value ! -) {return 日期&#xff1a;${params[0].name}<br>${params[0].marker} ${params[0].value};} else {return 日期&a…

Spring Boot 中的分布式配置中心

Spring Boot 中的分布式配置中心 Spring Boot 是一个非常流行的 Java Web 开发框架&#xff0c;它提供了很多工具和组件来简化 Web 应用程序的开发。其中&#xff0c;分布式配置中心是 Spring Boot 中的一个非常重要的组件&#xff0c;它可以帮助我们管理应用程序中的配置信息…

Android---SQLite优化

SQLite 是一款轻型的数据库&#xff0c;是遵循 ACID 关系型数据库管理系统&#xff0c;它包含在一个相对小的 C 库中。它是 D.RichardHipp 建立的公有领域项目。它的设计目的是嵌入式的&#xff0c;而且目前已经在很多嵌入式产品中使用了它&#xff0c;它占用资源非常的低&…

日期时间~

1&#xff1a;Data类的概述 Data类的对象在Java中代表的是当前所在系统的此刻日期时间 2&#xff1a;Data的构造器 3&#xff1a;常用方法 2:SimpleDateFormat 可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式。也可以把字符串的时间形式解析成日期对象 1&#xff1…