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