Hello,我是普通Gopher,00后男孩,极致的共享主义者,想要成为一个终身学习者。专注于做最通俗易懂的计算机基础知识类公众号。每天推送Golang技术干货,内容起于K8S而不止于K8S,涉及Docker、微服务、DevOps、数据库、虚拟化等云计算内容及SRE经验总结
=======================
初次见面,我为你准备了100G学习大礼包:
1、《百余本最新计算机电子图书》
2、《30G Golang学习视频》
3、《20G Java学习视频》
4、《90G Liunx高级学习视频》
5、《10G 算法(含蓝桥杯真题)学习视频》
6、《英语四级,周杰伦歌曲免费送!》
路过麻烦动动小手,点个关注,持续更新技术文章与资料!
客户关系管理系统
GitHub地址:https://github.com/PlutoaCharon/Golang_customerManager
运行:go run $GOPATH/customerManager(存放该项目的文件夹)/view/customerView.go
项目展示
----------------------客户信息管理软件----------------------
1 添加客户
2 修改客户
3 删除客户
4 客户列表
5 退 出
请选择(1-5):
文件介绍
view.customerView.go
- 显示界面
- 接收用户的输入
- 根据用户的输入,调用
cust omerService
的方法完成客户的管理
list 去调用 customerService 的List方法,并显示客户列表
add 方法去调用 customerService 的Add方法, 完成客户添加
delete 方法 调用 customerService 的Delete方法, 完成客户删除
update 方法调用 customerService 的Update方法, 完成客户修改
service.customerService
- 完成对用户的各种操作
- 对客户的增,删除,修改,显示
- 会声明一个customer的切片
List 返回客户信息
NewCustomerService 返回一个customerService实例
Add 将新的客户加入到 customers
Delete(id int) 删除一个客户
FindById(id int) 返回id号对应的切片的下标
Update(id int, customer model.Customer) 修改客户
model.customer
- 表示一个客户
- 客户各种字段
customer 表示一个客户信息
type Customer struct {
Id int
Name string
Gender string...
}
GetInfo 显示该用户的信息
NewCustomer2() 返回客户的方法
目录结构
├─customerManager
│ │ README.md
│ │
│ ├─model
│ │ customer.go
│ │
│ ├─service
│ │ customerService.go
│ │
│ └─view
│ customerView.go
代码详细
customer.go
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
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
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()
}