一 需求分析
1 模拟实现基于文本界面的《 客户信息管理软件》。
2 该软件能够实现对客户对象的插入、修改和删除(用切片实现),并能够打印客户明细表。
二 程序框架图
三 代码
1 customer.go
package model
import (
"fmt"
)
type Customer struct {
Id int
Name string
Gender string
Age int
Phone string
Email string
}
// 获取一个 Customer
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,
}
}
// 获取一个 Customer, 不提供 id
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,
}
}
// 返回Customer的信息
func (this *Customer) GetInfo() string {
info := fmt.Sprintf("%v\t%v\t%v\t%v\t%v\t%v", this.Id, this.Name, this.Gender,
this.Age, this.Phone, this.Email)
return info
}
2 customerService.go
package service
import (
"customerManage/model"
)
// CustomerService, 完成对 Customer的操作,包括增删改查
type CustomerService struct {
customers []model.Customer
// 声明一个字段,表示当前切片含有多少个客户
// 该字段后面,还可以作为新客户的id+1
customerNum int
}
// 编写一个方法,可以返回 *CustomerService
func NewCustomerService() *CustomerService {
// 为了能够看到有客户在切片中,我们初始化一个客户
customerService := &CustomerService{}
customerService.customerNum = 1
customer := model.NewCustomer(1, "张三", "男", 20, "112", "zs@sohu.com")
customerService.customers = append(customerService.customers, customer)
return customerService
}
// 返回客户切片
func (this *CustomerService) List() []model.Customer {
return this.customers
}
// 添加客户到customers切片
func (this *CustomerService) Add(customer model.Customer) bool {
// 分配 id 的规则,就是添加的顺序
this.customerNum++
customer.Id = this.customerNum
this.customers = append(this.customers, customer)
return true
}
// 根据 id 删除客户(从切片中删除)
func (this *CustomerService) Delete(id int) bool {
index := this.FindById(id)
// 如果index == -1, 说明没有这个客户
if index == -1 {
return false
}
// 从切片中删除一个元素
this.customers = append(this.customers[:index], this.customers[index+1:]...)
return true
}
// 根据 id 查找客户在切片中对应下标,如果没有该客户,返回-1
func (this *CustomerService) FindById(id int) int {
index := -1
// 遍历 this.customers 切片
for i := 0; i < len(this.customers); i++ {
if this.customers[i].Id == id {
// 找到
index = i
}
}
return index
}
3 customerView.go
package main
import (
"customerManage/model"
"customerManage/service"
"fmt"
)
type customerView struct {
key string // 接收用户输入
loop bool // 表示是否循环的显示主菜单
// 增加一个字段 customerService
customerService *service.CustomerService
}
// 显示所有的客户信息
func (this *customerView) list() {
// 首先,获取到当前所有的客户信息(在切片中)
customers := this.customerService.List()
// 显示
fmt.Println("---------------------------客户列表---------------------------")
fmt.Println("编号\t姓名\t性别\t年龄\t电话\t邮箱")
for i := 0; i < len(customers); i++ {
fmt.Println(customers[i].GetInfo())
}
fmt.Printf("\n-------------------------客户列表完成-------------------------\n\n")
}
// 得到用户的输入信息,构建新的客户,并完成添加
func (this *customerView) add() {
fmt.Println("---------------------添加客户---------------------")
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 实例
// 注意: id 号,没有让用户输入,id 是唯一的,需要系统分配
customer := model.NewCustomer2(name, gender, age, phone, email)
if this.customerService.Add(customer) {
fmt.Println("---------------------添加完成---------------------")
} else {
fmt.Println("---------------------添加失败---------------------")
}
}
// 得到用户的输入 id,删除该 id 对应的客户
func (this *customerView) delete() {
fmt.Println("---------------------删除客户---------------------")
fmt.Println("请选择待删除客户编号(-1退出):")
id := -1
fmt.Scanln(&id)
if id == -1 {
return //放弃删除操作
}
fmt.Println("确认是否删除(Y/N):")
choice := ""
fmt.Scanln(&choice)
if choice == "y" || choice == "Y" {
// 调用 customerService 的 Delete方法
if this.customerService.Delete(id) {
fmt.Println("---------------------删除完成---------------------")
} else {
fmt.Println("---------------------删除失败,输入的id号不存在----")
}
}
}
// 退出软件
func (this *customerView) exit() {
fmt.Println("确认是否退出(Y/N):")
for {
fmt.Scanln(&this.key)
if this.key == "Y" || this.key == "y" || this.key == "N" || this.key == "n" {
break
}
fmt.Println("你的输入有误,确认是否退出(Y/N):")
}
if this.key == "Y" || this.key == "y" {
this.loop = false
}
}
// 显示主菜单
func (this *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(&this.key)
switch this.key {
case "1":
this.add()
case "2":
fmt.Println("修 改 客 户")
case "3":
this.delete()
case "4":
this.list()
case "5":
this.exit()
default:
fmt.Println("你的输入有误,请重新输入...")
}
if !this.loop {
break
}
}
fmt.Println("你退出了客户关系管理系统...")
}
func main() {
// 在 main 函数中,创建一个customerView,并运行显示主菜单..
customerView := customerView{
key: "",
loop: true,
}
// 完成对 customerView 结构体的 customerService 字段的初始化
customerView.customerService = service.NewCustomerService()
// 显示主菜单
customerView.mainMenu()
}
四 测试
-----------------客户信息管理软件-----------------
1 添 加 客 户
2 修 改 客 户
3 删 除 客 户
4 客 户 列 表
5 退 出
请选择(1-5):4
---------------------------客户列表---------------------------
编号 姓名 性别 年龄 电话 邮箱
1 张三 男 20 112 zs@sohu.com
-------------------------客户列表完成-------------------------
-----------------客户信息管理软件-----------------
1 添 加 客 户
2 修 改 客 户
3 删 除 客 户
4 客 户 列 表
5 退 出
请选择(1-5):1
---------------------添加客户---------------------
姓名:
cakin
性别:
23
年龄:
34
电话:
123454
电邮:
fd@qq.com
---------------------添加完成---------------------
-----------------客户信息管理软件-----------------
1 添 加 客 户
2 修 改 客 户
3 删 除 客 户
4 客 户 列 表
5 退 出
请选择(1-5):4
---------------------------客户列表---------------------------
编号 姓名 性别 年龄 电话 邮箱
1 张三 男 20 112 zs@sohu.com
2 cakin 23 34 123454 fd@qq.com
-------------------------客户列表完成-------------------------
-----------------客户信息管理软件-----------------
1 添 加 客 户
2 修 改 客 户
3 删 除 客 户
4 客 户 列 表
5 退 出
请选择(1-5):3
---------------------删除客户---------------------
请选择待删除客户编号(-1退出):
1
确认是否删除(Y/N):
y
---------------------删除完成---------------------
-----------------客户信息管理软件-----------------
1 添 加 客 户
2 修 改 客 户
3 删 除 客 户
4 客 户 列 表
5 退 出
请选择(1-5):5
确认是否退出(Y/N):
y
你退出了客户关系管理系统...