总计架构图:

model/customer.go

package model

import (
"fmt"
) type Customer struct {
Id int
Name string
Gender string
Age int
Phone string
Email string
} func NewCustomer(id int, name string, gender string, age int, phone string, email string) Customer {
return Customer{
Id: id,
Name: name,
Gender: gender,
Age: age,
Phone: phone,
Email: email,
}
} func NewCustomer2(name string, gender string, age int, phone string, email string) Customer {
return Customer{
Name: name,
Gender: gender,
Age: age,
Phone: phone,
Email: email,
}
} func (c Customer) GetInfo() string {
info := fmt.Sprintf("%v\t%v\t%v\t%v\t%v\t%v\t", c.Id, c.Name, c.Gender, c.Age, c.Phone, c.Email)
return info
}

service/customerService.go

package service

import (
"go_code/project_6/model"
) //增删查改
type CustomerService struct {
customers []model.Customer
customerId int
} func NewCustomerService() *CustomerService {
customerService := &CustomerService{}
customerService.customerId =
customer := model.NewCustomer(, "张三", "男", , "", "347688971@qq.com")
customerService.customers = append(customerService.customers, customer)
return customerService
} func (cs *CustomerService) List() []model.Customer {
return cs.customers
} func (cs *CustomerService) Add(customer model.Customer) bool {
//确定一个添加id的规则,就是添加的顺序
cs.customerId++
customer.Id = cs.customerId
cs.customers = append(cs.customers, customer)
return true
} //根据Id查找客户在切片中的对应下标,如果没有则返回-1
func (cs *CustomerService) FindById(id int) int {
index := -
for i := ; i < len(cs.customers); i++ {
if cs.customers[i].Id == id {
//找到了
index = i
}
}
return index
} //根据Id删除客户
func (cs *CustomerService) Delete(id int) bool {
index := cs.FindById(id)
if index == - {
return false
}
//从切片中删除元素
cs.customers = append(cs.customers[:index], cs.customers[index+:]...)
return true
} func (cs *CustomerService) GetinfoById(id int) model.Customer {
i := id -
return cs.customers[i]
} //根据id修改客户信息
func (cs *CustomerService) Update(id int, customer model.Customer) bool {
for i := ; i < len(cs.customers); i++ {
if cs.customers[i].Id == id {
cs.customers[i].Name = customer.Name
cs.customers[i].Gender = customer.Gender
cs.customers[i].Age = customer.Age
cs.customers[i].Phone = customer.Phone
cs.customers[i].Email = customer.Email
}
}
return true
}

view/customerView.go

package main

import (
"fmt"
"go_code/project_6/model"
"go_code/project_6/service"
) type customerView struct {
//定义必要的字段
key string //接受用户输入
loop bool //用于循环判断
customerService *service.CustomerService
} 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 "":
cv.add()
case "":
cv.update()
case "":
cv.delete()
case "":
cv.list()
case "":
cv.logout()
default:
fmt.Println("你的输入有误,请重新输入")
}
if !cv.loop {
break
}
}
fmt.Println("你已退出了客户关系管理系统。。。")
} func (cv *customerView) list() {
//首先获取当前客户所有信息
customers := cv.customerService.List()
fmt.Println("--------------------客户列表--------------------------")
fmt.Println("编号\t姓名\t性别\t年龄\t电话\t\t邮箱")
for i := ; i < len(customers); i++ {
fmt.Println(customers[i].GetInfo())
}
fmt.Println("------------------客户列表完成------------------------")
} func (cv *customerView) add() {
fmt.Println("--------------------添加客户--------------------------")
fmt.Print("姓名:")
name := ""
fmt.Scanln(&name)
fmt.Print("性别:")
gender := ""
fmt.Scanln(&gender)
fmt.Print("年龄:")
age :=
fmt.Scanln(&age)
fmt.Print("电话:")
phone := ""
fmt.Scanln(&phone)
fmt.Print("邮箱:")
email := ""
fmt.Scanln(&email)
customer := model.NewCustomer2(name, gender, age, phone, email)
if cv.customerService.Add(customer) {
fmt.Println("--------------------添加成功--------------------------")
} else {
fmt.Println("--------------------添加失败--------------------------")
} fmt.Println("--------------------添加完成--------------------------")
} func (cv *customerView) delete() {
fmt.Println("--------------------删除客户--------------------------")
fmt.Println("请选择要删除客户的客户编号(-1退出):")
id := -
fmt.Scanln(&id)
if id == - {
return
}
fmt.Println("确认是否删除?y/n")
choice := ""
fmt.Scanln(&choice)
if choice == "y" || choice == "n" {
if cv.customerService.Delete(id) {
fmt.Println("--------------------删除完成--------------------------")
} else {
fmt.Println("-----------------输入id不存在,请重新输入--------------")
}
} } func (cv *customerView) update() {
fmt.Print("请输入要修改的id:")
id :=
fmt.Scanln(&id)
if cv.customerService.FindById(id) != - {
customer := cv.customerService.GetinfoById(id)
fmt.Printf("姓名(%v:)", customer.Name)
name := ""
fmt.Scanln(&name)
fmt.Printf("性别(%v):", customer.Gender)
gender := ""
fmt.Scanln(&gender)
fmt.Printf("年龄(%v):", customer.Age)
age :=
fmt.Scanln(&age)
fmt.Printf("电话(%v):", customer.Phone)
phone := ""
fmt.Scanln(&phone)
fmt.Printf("邮箱(%v):", customer.Email)
email := ""
fmt.Scanln(&email)
customer2 := model.NewCustomer2(name, gender, age, phone, email)
cv.customerService.Update(id, customer2)
} else {
fmt.Println("-----------------输入id不存在,请重新输入--------------")
}
} func (cv *customerView) logout() {
fmt.Println("确认是否退出?y/n")
for {
fmt.Scanln(&cv.key)
if cv.key == "y" || cv.key == "n" {
break
}
fmt.Println("你的输入有误,请从新输入")
}
if cv.key == "y" {
cv.loop = false
}
} func main() {
var cv customerView
cv.loop = true
cv.customerService = service.NewCustomerService()
cv.mainMenu()
}

由于代码都比较基础,就不一一介绍了,很容易看懂。我们运行程序:

先选择4:我们已经初始化了一条数据。

再选择1添加一条数据:

再选择4查看一下:

数据确实已经添加成功,我们再选择3,删除一条数据:

再查看一下:

确实已经删除,然后我们选择2修改数据:

再查看一下:

已经修改了,最后我们选择5进行退出:

总结:通过golang实现的客户信息管理系统。学习一门语言最好的方式就是通过一个实际的例子。通过这个实例,不仅可以进一步巩固golang的相关基础技能,同时,也能让我们加强自己的逻辑能力,从一步步的调用函数,掌握参数传递和接收技巧。

golang实战--客户信息管理系统的更多相关文章

  1. JavaWeb 简单实现客户信息管理系统

    项目介绍 本项目使用Jsp+Servlet+MySQL实现 功能介绍 查询客户信息:查询数据库中所有客户信息,分页展示 添加客户信息:创建新客户并添加到数据库中 搜索客户信息:根据用户的输入查询客户信 ...

  2. loadrunner实战篇 - 客户关系管理系统性能测试

    系统介绍                                                             图1(客户关系管理系统模块关系图) 需求分析 一.性能指标 性能指标分 ...

  3. Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍

    本文承接上一篇:Java高级项目实战之CRM系统01:CRM系统概念和分类.企业项目开发流程 先来CRM系统结构图: 每个模块作用介绍如下: 1.营销管理 营销机会管理:针对企业中客户的质询需求所建立 ...

  4. Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  6. Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  7. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  8. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  9. Asp.Net Core 项目实战之权限管理系统(6) 功能管理

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

随机推荐

  1. SpringMVC方法的返回值类型和自动装配

    1. void类型作为返回值类型 /** * 如果方法写成了void就跟原来servlet含义是差不多 的 * json */ @RequestMapping("/firstRequest& ...

  2. 05Shell循环语句

    循环语句 for 语法结构 for 变量名 [ in 取值列表 ] do 循环体 done 注意 当for对文件内容进行逐行处理时,会忽略空行 示例 例1 ping 主机的脚本(初始版):缺点执行过程 ...

  3. 人生苦短?试试Groovy进行单元测试

    如果您今天正在编程,那么您很可能听说过单元测试或测试驱动的开发过程.我还没有遇到一个既没有听说过又没有听说过单元测试并不重要的程序员.在随意的讨论中,大多数程序员似乎认为单元测试非常重要. 但是,当我 ...

  4. 【CodeChef】Find a special connected block - CONNECT(斯坦纳树)

    [CodeChef]Find a special connected block - CONNECT(斯坦纳树) 题面 Vjudge 题解 还是一样的套路题,把每个数字映射到\([0,K)\)的整数, ...

  5. pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)

    长宽格式的转换 宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1.id2.var1.var2 ...

  6. linux 安装 nvm, node.js, npm

    vscode在wsl中开发node应用,如何安装nvm? git clone git@github.com:nvm-sh/nvm.git ~/.nvm 设置淘宝registry npm config ...

  7. [debug] 关闭vs的增量链接

    1. 什么是增量链接? 答:采用Debug模式下,函数地址并不是该函数的开始部分,而是跳转到一个 jmp 函数地址. 比如,一个函数 test(),其地址 test 对应的汇编语句是 "jm ...

  8. 练手WPF(三)——扫雷小游戏的简易实现(上)

    一.创建项目1.创建WPF项目,设置初始化窗口大小(初级难度):高x宽为430x350.2.添加文件夹Images,并添加相关图片. 3.xaml中引入图片资源. <Window.Resourc ...

  9. DB2 catalog 编目

    (步骤)ap用户: (1)进入db2 db2 (2)catalog database 命令 catalog db list (3)查看本地节点目录.IP.节点名.服务名称.目录条目类型 list no ...

  10. django5-书籍与出版社关联外键

    1.外键相关 一对多的概念 ,这里是一个出版社对应本书籍 ! 设计表使用model models.ForeignKey('关联一', on_delete=models.CASCADE) #给多设置外键 ...