Just Do IT !

Golang语言学习从入门到实战----基于Golang的客户关系管理系统

字数统计: 1.5k阅读时长: 7 min
2020/03/17 Share

客户关系管理系统

GitHub地址:https://github.com/PlutoaCharon/Golang_customerManager

运行:go run $GOPATH/customerManager(存放该项目的文件夹)/view/customerView.go

项目展示

1
2
3
4
5
6
7
----------------------客户信息管理软件----------------------
1 添加客户
2 修改客户
3 删除客户
4 客户列表
5 退 出
请选择(1-5):

文件介绍

view.customerView.go

  • 显示界面
  • 接收用户的输入
  • 根据用户的输入,调用cust omerService的方法完成客户的管理
    1
    2
    3
    4
    list 去调用 customerService 的List方法,并显示客户列表
    add 方法去调用 customerService 的Add方法, 完成客户添加
    delete 方法 调用 customerService 的Delete方法, 完成客户删除
    update 方法调用 customerService 的Update方法, 完成客户修改

service.customerService

  • 完成对用户的各种操作
  • 对客户的增,删除,修改,显示
  • 会声明一个customer的切片
    1
    2
    3
    4
    5
    6
    List 返回客户信息
    NewCustomerService 返回一个customerService实例
    Add 将新的客户加入到 customers
    Delete(id int) 删除一个客户
    FindById(id int) 返回id号对应的切片的下标
    Update(id int, customer model.Customer) 修改客户

model.customer

  • 表示一个客户
  • 客户各种字段
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    customer 表示一个客户信息

    type Customer struct {
    Id int
    Name string
    Gender string...
    }

    GetInfo 显示该用户的信息
    NewCustomer2() 返回客户的方法

目录结构

1
2
3
4
5
6
7
8
9
10
11
├─customerManager
│ │ README.md
│ │
│ ├─model
│ │ customer.go
│ │
│ ├─service
│ │ customerService.go
│ │
│ └─view
│ customerView.go

代码详细

customer.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package model

import "fmt"

// 声明一个Customer结构体, 表示一个客户信息
type Customer struct {
Id int
Name string
Gender string
Age int
PhoneNumber string
Email string
}

// 编写一个工厂模式, 返回一个Customer的实例
func NewCustomer(id int, name string, gender string, age int, phonenumber string, email string) Customer {
return Customer{
Id: id,
Name: name,
Gender: gender,
Age: age,
PhoneNumber: phonenumber,
Email: email,
}
}

// 新建不带Id的实例方法
func NewCustomer2(name string, gender string, age int, phone string, email string) Customer {
return Customer{
Name: name,
Gender: gender,
Age: age,
PhoneNumber: phone,
Email: email,
}
}

// 返回用户的信息
func (customer Customer) GetInfo() string {
info := fmt.Sprintf("%v\t%v\t%v\t%v\t%v\t%v\n",
customer.Id, customer.Name, customer.Gender, customer.Age, customer.PhoneNumber, customer.Email)
return info
}

customerService.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package service

import (
"customerManager/model"
)

// 该CustomerService, 完成对Customer的操作, 包括增删改查
type CustomerService struct {
customers []model.Customer
customerNum int // 声明一个字段, 表示当前切片含有多少个客户
}

// 初始化
func NewCustomerService() *CustomerService {
customerService := &CustomerService{}
customerService.customerNum = 1
customer := model.NewCustomer(1, "小明", "男", 20, "12345678", "xiaoming@qq.com")
customerService.customers = append(customerService.customers, customer) // 使用切片将数据添加
return customerService
}

// 显示客户列表, 返回客户切片
func (c *CustomerService) List() []model.Customer {
return c.customers
}

// 添加客户
func (c *CustomerService) Add(customer model.Customer) bool {
c.customerNum++
customer.Id = c.customerNum
c.customers = append(c.customers, customer)
return true
}

//根据id删除客户
func (c *CustomerService) Delete(id int) bool {
index := c.FindById(id)
//如果index == -1, 说明没有这个客户
if index == -1 {
return false
}
// 从切片中删除一个元素
c.customers = append(c.customers[:index], c.customers[index+1:]...)
return true
}

//根据id查找客户在切片中对应下标,如果没有该客户,返回-1
func (c *CustomerService) FindById(id int) int {
index := -1
//遍历this.customers 寻找Id号
for i := 0; i < len(c.customers); i++ {
if c.customers[i].Id == id {
index = i
}
}
return index
}

// 修改客户
func (c *CustomerService) Update(id int, customer model.Customer) bool {
index := c.FindById(id)
//如果index == -1, 说明没有这个客户
if index == -1 {
return false
}
// 修改客户
c.customers[index-1] = customer
return true
}

customerView.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
package main

import (
"customerManager/model"
"customerManager/service"
"fmt"
)

type customerView struct {
// 定义必要字段
key string // 输入字符
loop bool // 表示是否循环显示菜单
customerService *service.CustomerService
}

// 显示所有的客户信息
func (cv *customerView) list() {
customers := cv.customerService.List()

// 显示
fmt.Println("---------------------------客户列表---------------------------")
fmt.Printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\n")
for i := 0; i < len(customers); i++ {
fmt.Printf(customers[i].GetInfo())
}
fmt.Printf("\n-------------------------客户列表完成-------------------------\n\n")
}

// 修改客户
func (c *customerView) update() {
fmt.Println("请输入待修改的客户编号(-1)退出:")
id := -1
_, _ = fmt.Scanln(&id)
if id == -1 {
return //放弃删除操作
}
customer := c.getUserInput()

if c.customerService.Update(id, customer) {
fmt.Println("---------------------修改完成---------------------")
} else {
fmt.Println("---------------------修改失败,输入的id号不存在----")
}

}

// 添加用户
func (c *customerView) add() {
customer := c.getUserInput()
// id是唯一的,需要系统分配
//调用
if c.customerService.Add(customer) {
fmt.Println("---------------------添加完成---------------------")
} else {
fmt.Println("---------------------添加失败---------------------")
}
}

// 删除用户
func (c *customerView) delete() {
fmt.Println("---------------------删除客户---------------------")
fmt.Println("请选择待删除客户编号(-1退出):")
id := -1
_, _ = fmt.Scanln(&id)
if id == -1 {
return //放弃删除操作
}
fmt.Println("确认是否删除(Y/N):")
//这里同学们可以加入一个循环判断,直到用户输入 y 或者 n,才退出..
choice := ""
_, _ = fmt.Scanln(&choice)
if choice == "y" || choice == "Y" {
//调用customerService 的 Delete方法
if c.customerService.Delete(id) {
fmt.Println("---------------------删除完成---------------------")
} else {
fmt.Println("---------------------删除失败,输入的id号不存在----")
}
}
}

// 退出系统
func (c *customerView) exit() {
fmt.Println("确认是否退出(Y/N):")
for {
_, _ = fmt.Scanln(&c.key)
if c.key == "Y" || c.key == "N" || c.key == "y" || c.key == "n" {
break
}

fmt.Println("输入有误, 确认是否退出(Y/N)")
}

if c.key == "Y" || c.key == "y" {
c.loop = false
}
}

// 填入信息
func (c *customerView) getUserInput() model.Customer {
fmt.Printf("姓名:")
name := ""
_, _ = fmt.Scanln(&name)
fmt.Printf("性别:")
gender := ""
_, _ = fmt.Scanln(&gender)
fmt.Printf("年龄:")
age := 0
_, _ = fmt.Scanln(&age)
fmt.Printf("电话:")
phone := ""
_, _ = fmt.Scanln(&phone)
fmt.Printf("邮箱:")
email := ""
_, _ = fmt.Scanln(&email)
customer := model.NewCustomer2(name, gender, age, phone, email)
return customer
}

// 显示主菜单
func (cv *customerView) mainMenu() {
for {
fmt.Println("----------------------客户信息管理软件----------------------")
fmt.Println(" 1 添加客户")
fmt.Println(" 2 修改客户")
fmt.Println(" 3 删除客户")
fmt.Println(" 4 客户列表")
fmt.Println(" 5 退 出")
fmt.Print("请选择(1-5):")

_, _ = fmt.Scanln(&cv.key)
switch cv.key {
case "1":
cv.add()
case "2":
cv.update()
case "3":
cv.delete()
case "4":
cv.list()
case "5":
cv.exit()
default:
fmt.Println("你的输入有误,请重新输入")
}

if !cv.loop {
break
}
}

fmt.Println("退出客户关系管理系统")
}
func main() {
// 显示主菜单
customerView := customerView{
key: "",
loop: true,
}
// 对customerView结构体的customerService字段的初始化
customerView.customerService = service.NewCustomerService()
// 显示主菜单
customerView.mainMenu()
}

CATALOG
  1. 1. 客户关系管理系统
    1. 1.0.1. 项目展示
    2. 1.0.2. 文件介绍
    3. 1.0.3. 目录结构
    4. 1.0.4. 代码详细