Go第 13 章 :2-客户信息关系系统

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Go第 13 章 2-客户信息关系系统

13.1 项目需求分析

  1. 模拟实现基于文本界面的《客户信息管理软件》。
  2. 该软件能够实现对客户对象的插入、修改和删除用切片实现并能够打印客户明细表

13.2 项目的界面设计

主菜单界面

请添加图片描述

添加客户界面

请添加图片描述

删除客户界面

请添加图片描述

客户列表界面

请添加图片描述

13.3 客户关系管理系统的程序框架图

请添加图片描述

13.4 项目功能实现-显示主菜单和完成退出软件功能

请添加图片描述

代码实现

customerManage/model/customer.go

package model


//声明一个 Customer 结构体表示一个客户信息
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,
	}
}

customerManage/service/customerService.go

package service

import "go_code/go_code/chapter13/customerManage/model"

type CustomerService struct{
	customers []model.Customer
	//声明一个字段表示当前切片含有多少个客户
	//该字段后面还可以作为新客户的 id+1
	customerNum int
}

customerManage/view/customerView.go

package main

import "fmt"

type customerView struct{
	//定义必要字段
	key string//接收客户输入...
	loop bool//表示是否循环的显示主菜单
	//customerService *service.CustomerService
}
//显示主菜单
func (this *customerView) mainMenu(){
	for {
		fmt.Println("--------客户信息管理软件--------")
		fmt.Println("        1、添加客户")
		fmt.Println("        2、修改客户")
		fmt.Println("        3、删除客户")
		fmt.Println("        4、客户列表")
		fmt.Println("        5、退出")
		fmt.Println()
		fmt.Println("        请选择(1-5)")

		fmt.Scanln(&this.key)

		switch this.key {
		case "1":
			fmt.Println("添加客户")
		case "2":
			fmt.Println("修改客户")
		case "3":
			fmt.Println("删除客户")
		case "4":
			fmt.Println("客户客户")
		case "5":
			this.loop=false
		default:
			fmt.Println("你的输入有误请重新输入...")
		}

		if !this.loop{
			break
		}

		fmt.Println("你退出了客户管理系统...")

	}
}

func main(){
	//在 main 函数中创建一个 customerView,并运行显示主菜单..
	customerView:=customerView{
		key:"",
		loop:true,
	}
	//显示主菜单
	customerView.mainMenu()
}

13.5 项目功能实现-完成显示客户列表的功能

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
customerManage/view/customerView.go

package main

import (
	"fmt"
	"go_code/go_code/chapter13/customerManage/service"
)

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].Id,"\t", customers[i].Name...)
		fmt.Println(customers[i].GetInfo())
	}
	fmt.Println("--------客户列表完成-----------")
}

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

		fmt.Scanln(&this.key)

		switch this.key {
		case "1":
			fmt.Println("添加客户")
		case "2":
			fmt.Println("修改客户")
		case "3":
			this.list()
		case "4":
			fmt.Println("客户客户")
		case "5":
			this.loop = false
		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()
}

13.6 项目功能实现-添加客户的功能

请添加图片描述
请添加图片描述
请添加图片描述
customerManage/service/customerService.go
请添加图片描述
customerManage/service/customerView.go

package main

import (
	"fmt"
	"go_code/go_code/chapter13/customerManage/model"
	"go_code/go_code/chapter13/customerManage/service"
)

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].Id,"\t", customers[i].Name...)
		fmt.Println(customers[i].GetInfo())
	}
	fmt.Println("--------客户列表完成-----------")
}
//得到用户的输入信息构建新的客户并完成添加
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 是唯一的需要系统分配
	custmoer:=model.NewCustomer2(name,gender,age,phone,email)
	//调用
	if this.customerService.Add(custmoer){
		fmt.Println("--------添加完成------------")
	}else{
		fmt.Println("--------添加失败------------")
	}
}

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

		fmt.Scanln(&this.key)

		switch this.key {
		case "1":
			fmt.Println("添加客户")
		case "2":
			fmt.Println("修改客户")
		case "3":
			this.list()
		case "4":
			fmt.Println("客户客户")
		case "5":
			this.loop = false
		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()
}

13.7 项目功能实现-完成删除客户的功能

请添加图片描述
请添加图片描述
customerManage/model/customer.go [没有变化]
customerManage/service/customerService.go
请添加图片描述

customerManage/view/customerView.go

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

13.8 项目功能实现-完善退出确认功能课后作业

请添加图片描述

请添加图片描述

13.9 客户关系管理系统-课后练习

请添加图片描述

CustomerView.go

package main

import (
	"fmt"
	"go_code/go_code/chapter13/customerManage/model"
	"go_code/go_code/chapter13/customerManage/service"
)

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].Id,"\t", customers[i].Name...)
		fmt.Println(customers[i].GetInfo())
	}
	fmt.Println("--------客户列表完成-----------")
}

//得到用户的输入信息构建新的客户并完成添加
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 是唯一的需要系统分配
	custmoer := model.NewCustomer2(name, gender, age, phone, email)
	//调用
	if this.customerService.Add(custmoer) {
		fmt.Println("--------添加完成------------")
	} else {
		fmt.Println("--------添加失败------------")
	}
}
func (this *customerView) delete() {
	flag := false
	fmt.Println("--------删除客户------------")
	for {
		fmt.Println("请选择待删除客户编号-1退出")
		id := -1
		fmt.Scanln(&id)
		if id == -1 {
			return //放弃删除操作
		}
		fmt.Println("确认是否删除(Y/N)")
		//这里同学们可以加入一个循环判断直到用户输入y或者才退出
		for {
			choice := ""
			fmt.Scanln(&choice)
			if choice == "y" || choice == "n" {
				if this.customerService.Delete(id) {
					fmt.Println("--------删除完成------------")
					flag = true
				} else {
					fmt.Println("--------删除失败输入的id号不存在-")
				}
				break
			}
		}
		if flag {
			break
		}
	}
}
func (this *customerView) exit() {
	fmt.Println("确认是否退出(Y/N)")
	for {
		fmt.Scanln(&this.key)
		if this.key == "y" || this.key == "n" {
			break
		} else {
			fmt.Println("输入格式错误请重新输入!")
		}
	}
	if this.key == "y" {
		this.loop = false
	}
}
func (this *customerView) update() {
	fmt.Println("----------------修改客户------------------")
	fmt.Println("客户id(-1退出):")
	id := -1
	fmt.Scanln(&id)
	if id == -1 {
		return // 放弃修改
	}

	//获取要修改的数据,并显示
	index := this.customerService.FindById(id)
	if index == -1 {
		fmt.Println("------------------客户id不存在------------------")
		return
	}
	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)

	fmt.Println("你确定要修改吗? y/n")
	choice := ""
	for {
		fmt.Scanln(&choice)
		if choice == "y" || choice == "n" {
			break
		}
		fmt.Println("你输入有误,请重新输入 y/n")
	}

	customer := model.NewCustomer2(name, gender, age, phone, email)

	//调用customerService.Update
	if this.customerService.Update(index, customer) {
		fmt.Println("------------------修改成功------------------")
	} else {
		fmt.Println("------------------修改失败------------------")
	}
}

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

		fmt.Scanln(&this.key)

		switch this.key {
		case "1":
			this.add()
		case "2":
			this.update()
		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()
}

CustomerService.go

package service

import (
	"go_code/go_code/chapter13/customerManage/model"
)

type CustomerService struct {
	customers []model.Customer
	//声明一个字段表示当前切片含有多少个客户
	//该字段后面还可以作为新客户的 id+1
	customerNum int
}

//编写一个方法可以返回*CustmoerService
func NewCustomerService() *CustomerService {
	//为了能够看到有客户在切片中我们初始化一个切片
	custmoerService := &CustomerService{}
	custmoerService.customerNum = 1
	custmoer := model.NewCustomer(1, "张三", "男",
		20, "112", "zhangsan@sohu.com")
	custmoerService.customers = append(custmoerService.customers, custmoer)
	return custmoerService
}

//返回客户切片
func (this *CustomerService) List() []model.Customer {
	return this.customers
}

//添加客户到切片
//!!!
func (this *CustomerService) Add(custmoer model.Customer) bool {
	this.customerNum++
	custmoer.Id = this.customerNum
	this.customers = append(this.customers, custmoer)
	return true
}
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
}

func (this *CustomerService)Update(index int,customer model.Customer)bool{
	this.customers[index].Name= customer.Name
	this.customers[index].Age= customer.Age
	this.customers[index].Gender= customer.Gender
	this.customers[index].Phone= customer.Phone
	this.customers[index].Email= customer.Email
	return true
}
//根据id查找客户在切片中对应的下表如果没有该客户返回-1
func (this *CustomerService) FindById(id int) int {
	index := -1
	for i := 0; i < len(this.customers); i++ {
		if this.customers[i].Id == id {
			index = i
		}
	}
	return index
}

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go