CRM-Kundenbeziehungsmanagementsystem basierend auf Servlet

1. Bedarfsanalyse

Kunden stellen die wertvollste Ressource des Unternehmens dar. Um den Wert bestehender Kunden besser auszuschöpfen und mehr neue Kunden zu gewinnen, implementiert das Unternehmen ein Kundenbeziehungsmanagementsystem. Die Funktion des Systems besteht darin, den vollständigen Austausch und die standardisierte Verwaltung von Basisinformationen der Mitarbeiter, Basisinformationen der Kunden, Kommunikationsinformationen und Kundendienstinformationen über dieses System zu vervollständigen; die Fähigkeit zur Entwicklung neuer Kunden durch Verfolgung und Aufzeichnung von Verkaufschancen und Kundenentwicklung zu verbessern Prozesse: Droht dem Kunden ein Verlust, gibt das System rechtzeitig eine Warnung aus, so dass die Vertriebsmitarbeiter rechtzeitig Maßnahmen ergreifen können, um den Verlust zu reduzieren.

Das Niveau des Kundenservice bestimmt die zentrale Wettbewerbsfähigkeit des Unternehmens. Das Customer-Relationship-Management-System stellt eine Online-Plattform für den Kundenservice bereit, die es dem relevanten Personal im Prozess der Kundenserviceabwicklung ermöglicht, Serviceabwicklungs- und Aufzeichnungsarbeiten online abzuschließen.

1.1 Analyse der funktionalen Anforderungen

Der Zweck der funktionalen Anforderungsanalyse besteht darin, jedes Modul und jeden kleinen Funktionspunkt innerhalb des Moduls zu planen und zu entwerfen und die Informationsgrundlage für die nachfolgende Entwicklung vorzubereiten. Basierend auf den gesammelten Benutzeranfragen und Rückmeldungen ist es notwendig, das Gesamtlayout des Front-Ends und Backends des Systems zu entwerfen.

Ziel dieses Customer-Relationship-Management-Systems ist es, allen Nutzern folgende Funktionen zur Verfügung zu stellen:

(1) Es ist notwendig, ein einheitliches Management von Unternehmensinformationen durchzuführen, um die Managementstandards des Unternehmens zu verbessern und das Personalinformationsmanagement stärker zu standardisieren;

(2) Wenn Unternehmensbenutzer neue Kunden entdecken, müssen sie die Kunden in das System eingeben und die Kundenkontakte verwalten, um Folgebesuche bei Kunden zu erleichtern;

(3) Wenn die Mitarbeiter des Unternehmens den Kunden besuchen, müssen sie die Besuchsinformationen in das System eingeben, um die Verwaltung ihrer eigenen Verfolgung des Kunden zu erleichtern; es ist auch praktisch, dass sich das System an den Zeitpunkt des Besuchs erinnert nächster Besuch beim Kunden, und der aktuelle Status des Kunden kann entsprechend jeder Besuchsaufzeichnungswartezeit analysiert werden;

(4) Basierend auf den vorhandenen Daten des Systems wird ein visuelles statistisches Diagramm angezeigt und die Ergebnisse werden mit Bildern und Texten dargestellt, sodass Manager die Daten, an denen sie interessiert sind, klar erkennen können.

1.2 Analyse der Benutzerbedürfnisse

Unter CRM-System versteht man den Einsatz von Informationstechnologie zur Verwaltung von Kunden- und Besuchsaufzeichnungen, um die Arbeitseffizienz, Leistung und das Managementniveau des Unternehmens zu verbessern. Um ein Customer-Relationship-Management-System zu entwickeln, ist es daher zunächst notwendig, die Funktionen zu klären, die das Gesamtsystem in dieser Phase realisieren muss. Dieses System wird hauptsächlich von Unternehmensbenutzern verwendet.

Nachdem sich der Benutzer angemeldet hat, kann er Kundenverwaltung und Kontaktverwaltung durchführen, Kunden besuchen und Statistiken anzeigen.

(1) Benutzeranmeldung

Benutzer, die den richtigen Benutzernamen und das richtige Passwort eingeben, können sich erfolgreich anmelden und erhalten automatisch die entsprechenden Zugriffsrechte gewährt. Beim Abmelden sollte der Benutzerstatus entfernt werden.

(2) Benutzerfunktionen

·Kundenmanagement

Kundeninformationen hinzufügen, löschen, ändern und überprüfen.

·Kontaktmanagement

Kontakte hinzufügen, löschen, ändern und überprüfen.

·Besuchsverfolgung

Erfassen und erfragen Sie die Besuchsverfolgungsinformationen der eingegebenen Kunden.

·Statistiken

Visuelle statistische Darstellung von Informationen nach Quelle, Branche usw.

2. ER-Diagramm und relationales Schemadesign

2.1 ER-Diagramm

2.1.1 Beschreibung der Entitätsanalyse

Aus Sicht des Benutzers spiegeln sich die Anforderungen der Datenbank hauptsächlich im Hinzufügen, Löschen, Ändern und Abfragen von Datenbanktabellen wider. Daher muss die Datenbankstruktur zwei Elemente gleichzeitig erfüllen: Eingabe und Ausgabe. Beim Datendesign müssen Sie zunächst Daten sammeln, dann die Datenstruktur analysieren und schließlich die Daten verarbeiten. Entsprechend den Anforderungen dieses Systems werden folgende Hauptdatenelemente und Datenstrukturen entworfen:

(1) Benutzerentität: Benutzer-ID, Benutzerkonto, Benutzername, Benutzerkennwort, Benutzerstatus.

(2) Kontaktentität: Kontaktnummer, Kontaktname, Kunden-ID, Kontaktgeschlecht, Bürotelefon des Kontakts, Mobiltelefon des Kontakts, E-Mail des Kontakts, QQ des Kontakts, Position des Kontakts, Kontaktnotizen.

(3) Kundenentität: Kundennummer, Kundenname (Firmenname), Quelle der Kundeninformationen, Branche, zu der der Kunde gehört, Kundenebene, Festnetztelefon, Mobiltelefon.

(4) Entität der Kundendaten: Kundennummer, Kundenregion, Postleitzahl des Kunden, Kontaktadresse des Kunden, Fax des Kunden, Website des Kunden, Registrierungsnummer der Geschäftslizenz des Kunden, juristische Person des Unternehmens, eingetragenes Kapital des Kunden, Bank- und Kontonummer, Bild der Kundenqualifikation, Kundenprofil.

(5) Datenwörterbuch-Entität: Datenwörterbuch-ID, Datenwörterbuch-Kategoriecode, Datenwörterbuch-Kategoriename, Datenwörterbuch-Elementname, Datenwörterbuchelement, Sortierfeld, Status, Bemerkungen.

2.1.2 Entity ER-Diagramm

Die Benutzerentität ist in Abbildung 1.1 dargestellt.

Abbildung 1.1 Benutzerentität

Die Kontaktentität ist in Abbildung 1.2 dargestellt.

Abbildung 1.2 Kontaktentität

Die Kundenentität ist in Abbildung 1.3 dargestellt.

Abbildung 1.3 Kundenentität

Die Entität „Kundendaten“ ist in Abbildung 1.4 dargestellt.

Abbildung 1.4 Kundendetails-Entität

2.1.3 Gesamt-ER-Diagramm

Abbildung 1.5 Gesamt-ER-Diagramm

2. 2 Relationales Schema

Beziehungsmodus: Benutzerinformationen (Benutzer-ID, Benutzerkonto, Benutzername, Benutzerpasswort, Benutzerstatus)

Modusbestimmung: Benutzerinformationen ∈ 2NF, und jedes nicht primäre Attribut überträgt die Funktion nicht, abhängig von den MitarbeiterinformationenDer primäre Beziehungsschlüssel der Informationen, also Benutzerinformationen ∈ 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

允许

Kontaktieren Sie das Bürotelefon

lkm_phone

Varchar

16

erlauben

NEIN

Kontakt-Telefon

lkm_mobile

Varchar

16

erlauben

NEIN

Kontakt E-mail

lkm_email

Varchar

16

erlauben

NEIN

Kontaktieren Sie qq

lkm_qq

Varchar

16

erlauben

NEIN

Kontaktposition

lkm_position

Varchar

16

erlauben

NEIN

Kontaktnotizen

lkm_memo

Varchar

512

erlauben

NEIN

Tabelle 2.3 Kundentabelle cst_customer

Attributname

Feldname

Art der Daten

Länge

Darf es leer sein?

Ob Primärschlüssel

Kundennummer

cust_id

int

0

nicht erlaubt

Ja

Kundenname (Firmenname)

Kundenname

Varchar

32

erlauben

NEIN

Kundeninformationsquellen

cust_source

Varchar

32

erlauben

NEIN

Branche des Kunden

cust_industry

Varchar

32

erlauben

NEIN

Kundenebene

Kundenebene

Varchar

32

erlauben

NEIN

Repariertes Telefon

cust_phone

Varchar

32

erlauben

NEIN

Mobiltelefon

cust_mobile

Varchar

32

erlauben

NEIN

Tabelle 2.4 Tabelle „Kundendetails“ cst_customer_detail

Attributname

Feldname

Art der Daten

Länge

Darf es leer sein?

Ob Primärschlüssel

Kundennummer

cust_id

int

0

nicht erlaubt

Ja

Kundenbereich

cust_region

Varchar

64

erlauben

NEIN

Postleitzahl des Kunden

cust_zip

Varchar

16

erlauben

NEIN

Kontaktadresse des Kunden

Kundenadresse

Varchar

128

erlauben

NEIN

Kundenfax

cust_fax

Varchar

64

erlauben

NEIN

Kunden-URL

cust_website

Varchar

128

erlauben

NEIN

Registrierungsnummer der Gewerbelizenz des Kunden

Kundenlizenz

Varchar

64

erlauben

NEIN

Unternehmen

cust_corporation

Varchar

64

erlauben

NEIN

Stammkapital des Kunden

cust_capital

bigint

0

erlauben

NEIN

Eröffnungsbank- und Kontonummer

cust_bank

Varchar

20

erlauben

NEIN

Bild der Kundenqualifikation

cust_pic

Varchar

64

erlauben

NEIN

Kundenprofil

cust_memo

Langtext

0

erlauben

NEIN

Tabelle 2.5 Basisdaten-Wörterbuchtabelle base_dict

Attributname

Feldname

Art der Daten

Länge

Darf es leer sein?

Ob Primärschlüssel

Datenwörterbuch-ID

dict_id

int

0

nicht erlaubt

Ja

Kategoriecode des Datenwörterbuchs

dict_type_code

Varchar

32

erlauben

NEIN

Name der Datenwörterbuchkategorie

dict_type_name

Varchar

10

erlauben

NEIN

Name des Datenwörterbuchelements

dict_item_name

Varchar

64

erlauben

NEIN

Datenwörterbuchprojekt

dict_item_code

Varchar

64

erlauben

NEIN

Sortierfeld

dict_sort

Varchar

10

erlauben

NEIN

Zustand

dict_enable

Varchar

1

erlauben

NEIN

Anmerkung

dict_memo

Varchar

64

erlauben

NEIN

Tabelle 2.6 Kundenbesuchstabelle sale_visit

Attributname

Feldname

Art der Daten

Länge

Darf es leer sein?

Ob Primärschlüssel

Kundenbesuchs-ID

Visit_ID

int

0

nicht erlaubt

Ja

Kundennummer

visit_cust_id

bigint

0

erlauben

NEIN

Benutzer-ID

visit_user_id

bigint

0

erlauben

NEIN

Besuchszeiten

Besuchszeit

Datum

0

erlauben

NEIN

Besuchsadresse

visit_addr

Varchar

128

erlauben

NEIN

Besuchen Sie Details

visit_detail

Varchar

256

erlauben

NEIN

nächster Besuchszeitpunkt

visit_nexttime

Datum

0

erlauben

NEIN

3. Erkennen Sie die Wirkung

(1) Anmelden

(2) Hauptschnittstelle des Systems

(3) Neukunden

 (4) Kundenliste

(5) Neue Kontakte hinzufügen

 (6) Kontaktliste

(7) Neukundenbesuch

(8) Kundenbesuchsliste

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();
        }
    }

}

Supongo que te gusta

Origin blog.csdn.net/lf21qp/article/details/131509025
Recomendado
Clasificación