Go语言之客户关系管理系统
一、需求分析
该程序实现对客户的增、删、查、改功能。其主要的界面实现:
- 主菜单界面
---------客户关系管理系统--------- 1 添加客户 2 修改客户 3 删除客户 4 客户列表 5 退 出 请选择(1-5):
-
添加客户界面
... 请选择(1-5): 1 ---------添加客户--------- 姓名:张三 性别:男 年龄:25 电话:15269354825 邮箱:zhangsan@xf.com ---------添加完成---------
-
修改客户界面
... 请选择(1-5): 2 ---------修改客户--------- 请输入待修改的客户编号:1 姓名: 性别: 年龄: 电话:182693548258 邮箱:zhangsan1@xf.com ---------修改完成---------
-
删除客户界面
... 请选择(1-5): 3 ---------删除客户--------- 请输入待删除的客户编号:1 确认是否删除(Y/N): y ---------删除完成---------
-
客户列表界面
...
请选择(1-5): 4 ---------客户列表--------- 编号 姓名 性别 年龄 电话 邮箱 1 张三 男 15 127536915 zhangsan@xf.com ---------客户列表完成------
二、程序框架图
在上面的需求中需要实现的功能有界面功能、业务逻辑(客户的增、删、查、改)、客户数据的模型:
三、实现
实现中先按照自下而上的顺序来实现,先定义customer结构体,然后再对结构体进行一系列的操作,最后通过前端客户来触发操作。
- 项目结构
├─crm │ ├─model │ │ customer.go // 客户模型表 │ │ │ ├─service │ │ customerService.go // 业务逻辑操作 │ │ │ └─view │ customerView.go //页面控制 │ └─document menu.md //项目文档customer.go
- customer.go
package model import "fmt" // 声明一个customer结构体 type Customer struct { Id int Name string Gender string Age int Phone string Email string } // 定义一个结构体变量创建的工厂方法,其中Id让其自动生成, 生成的实例中id默认为0 func CreateCustomer(name string, gender string, age int, phone string, email string) Customer { return Customer{ Name: name, Gender: gender, Age: age, Phone: phone, Email: email, } } // 显示customer信息 func (customer *Customer) ShowInfo() string { res := fmt.Sprintf("%v\t%v\t%v\t%v\t%v\t%v\t", customer.Id, customer.Name, customer.Gender, customer.Age, customer.Phone, customer.Email) return res }
- customerService.go
package service import ( "go_tutorial/day15/crm/model" ) type CustomerService struct { // 声明一个切片,用于存放customer CustomerSlice []model.Customer // 定义一个用于保存customer自增Id的变量,下一个Id就是Id+1 CustomerNum int } // 向切片中添加customer func (cs *CustomerService) Add(customer model.Customer) bool { cs.CustomerNum++ customer.Id = cs.CustomerNum cs.CustomerSlice = append(cs.CustomerSlice, customer) return true } // 查询切片中的customer func (cs *CustomerService) List() []model.Customer { return cs.CustomerSlice } // 查询切片中的编号 func (cs *CustomerService) FindById(id int) int { for index, value := range cs.CustomerSlice { if value.Id == id { return index } } return -1 } // 删除customer func (cs *CustomerService) Delete(id int) bool { index := cs.FindById(id) if index == -1 { // 说明不存在这个customer return false } cs.CustomerSlice = append(cs.CustomerSlice[:index], cs.CustomerSlice[index+1:]...) return true } // 获取一个customer func (cs *CustomerService) GetCustomer(id int) (model.Customer, bool) { index := cs.FindById(id) if index != -1 { return cs.CustomerSlice[index], true } return model.Customer{}, false } // 修改customer func (cs *CustomerService) Update(id int, name string, gender string, age int, phone string, email string) bool { index := cs.FindById(id) if index == -1 { // 说明不存在这个customer return false } cs.CustomerSlice[index].Name = name cs.CustomerSlice[index].Gender = gender cs.CustomerSlice[index].Age = age cs.CustomerSlice[index].Phone = phone cs.CustomerSlice[index].Email = email return true }
- customerView.go
package main import ( "fmt" "go_tutorial/day15/crm/model" "go_tutorial/day15/crm/service" ) type customerView struct { key string //获取客户端的输入 forloop bool // 判断 是否跳出for循环 serviceCustomer service.CustomerService } // 主页面中添加customer,调用customerService中的Add方法 func (cv *customerView) add() { fmt.Println("姓名:") name := " " fmt.Scanln(&name) fmt.Println("性别") gender := " " fmt.Scanln(&gender) fmt.Println("年龄:") age := 0 fmt.Scanln(&age) fmt.Println("电话:") phone := " " fmt.Scanln(&phone) fmt.Println("邮箱:") email := " " fmt.Scanln(&email) customer := model.CreateCustomer(name, gender, age, phone, email) if cv.serviceCustomer.Add(customer) { fmt.Println("---------添加完成---------") } else { fmt.Println("---------添加失败---------") } } // 主页面中查看customer,调用customerService中的List方法 func (cv *customerView) list() { fmt.Println("---------客户列表---------") fmt.Println("编号\t姓名\t性别\t年龄\t电话\t邮箱") customers := cv.serviceCustomer.List() for i := 0; i < len(customers); i++ { fmt.Println(customers[i].ShowInfo()) } fmt.Println("-------客户列表完成-------") } // 主页面中更新customer,调用customerService中的Update方法 func (cv *customerView) update() { fmt.Println("---------修改客户---------") fmt.Println("请输入待修改的客户编号:") Id := -1 fmt.Scanln(&Id) // 这里需要判断是否存在,如果存在获取当前customer customer, flag := cv.serviceCustomer.GetCustomer(Id) if !flag { return } name := customer.Name fmt.Println("姓名:") fmt.Scanln(&name) gender := customer.Gender fmt.Println("性别:") fmt.Scanln(&gender) age := customer.Age fmt.Println("年龄:") fmt.Scanln(&age) phone := customer.Phone fmt.Println("电话:") fmt.Scanln(&phone) email := customer.Email fmt.Println("邮箱:") fmt.Scanln(&email) flag1 := cv.serviceCustomer.Update(Id, name, gender, age, phone, email) if flag1 { fmt.Println("---------修改完成---------") } else { fmt.Println("---------修改失败---------") } } // 主页面中删除customer,调用customerService中的Delete方法 func (cv *customerView) delete() { fmt.Println("---------删除客户---------") fmt.Println("请输入待删除的客户编号:") Id := -1 fmt.Scanln(&Id) cv.serviceCustomer.Delete(Id) fmt.Println("---------删除完成---------") } // 主页面退出循环,通过修改forloop状态,退出循环 func (cv *customerView) exit() { fmt.Println("请确认是否退出(Y/N):") for { fmt.Scanln(&cv.key) if cv.key == "Y" || cv.key == "y" || cv.key == "N" || cv.key == "n" { break } fmt.Println("你的输入有误,请重新输入(Y/N):") } if cv.key == "Y" || cv.key == "y" { cv.forloop = false } } // 主页面 func (cv *customerView) mainMenu() { for { fmt.Println("---------客户关系管理系统---------") fmt.Println(" 1 添加客户") fmt.Println(" 2 修改客户") fmt.Println(" 3 删除客户") fmt.Println(" 4 客户列表") fmt.Println(" 5 退 出") fmt.Println(" 请选择(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.forloop { break } } } // 主方法,初始化变量 func main() { cs := service.CustomerService{CustomerNum: 0} cv := customerView{ key: " ", forloop: true, serviceCustomer: cs, } cv.mainMenu()
在该文件下执行go run customerView.go命令即可。
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本