开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:客户管理系统-显示客户列表】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9721
客户管理系统-显示客户列表
内容介绍
一、 功能说明
二、 思路分析
三、 代码实现
项目功能实现-完成显示客户列表的功能
一、 功能说明
-----------------------------客户列表-----------------------------
编号 姓名 性别 年龄 电话 邮箱
1 张三 男 30 010-56253825 abc@email.com
2 李四 女 23 010-56253825 lisi@ibm.com
3 王芳 女 26 010-56253825 wang@163.com
----------------------------客户列表完成--------------------------
当输入要显示客户列表时,能够显示所有客户信息。
二、 思路分析
需要编写 CustomerView 和 CustomerService
1. customerService
(1) 显示客户列表,编写方法List【返回客户信息,其实就是切片】;
(2) 编写 NewCustomerService 返回一个 customerService 实例。
2. customerView
编写一个方法 list 去调用 customerService 的 List 方法,并显示客户列表。
三、 代码实现(改变如下)
1. customerManage/model/customer.go
增加了返回用户信息的方法GetInfo
//返回用户的信息,格式化的字符串
func (this Customer) GetInfo() string {
info := fmt.sprintf(“%v\t%v\t%v\t%v\t%v\t%v\t”,this.Id,this.Name,
this.Gender,this.Age,this.Phone,this.Email)
return info
}
(注:输入一个customer,会返回格式化后的客户信息)
2. customerManage/service/customerService.go
增加了两个方法
(1) //编写一个方法,可以返回*CustomerService(注:指针类型)
func NewCustomerService() * CustomerService{
(2) //为了能够看到有客户在切片中,初始化一个客户
customerService := &CustomerService{} (注:创建一个对象并初始化)
customerService.customerNum = 1 (注:默认值)
customer := model.NewCustomer(1,”张三”,“男”,20,“112”,
zs@sohu.com
)
创建一个初始化客户并加入新的客户;由于是在model中创建的,所以要写成model.NewCustomer;“()”表示方法,不能使用“{}”)
customerService.customer = append(customerService.customers,customer)
(注:给这个切片加了一个customer,再传给customer)
return customerService
}
(3) //返回客户切片 (注:写list方法)
func (this * CustomerService) List() []model,Customer{
return this.customers
(注:返回的类型是切片类型)
}
3. customerManage/view/customerView.go
(1) //增加一个字段 customerService
customerService *service.CustomerService
(注:在service包里面,所以是service.CustomerService,“*”表示指针类型)
(注:customerView.go要调用customerService,所以必须要有一个customerService字段才可以实现调用,否则不能满足面向对象的要求)
(2) //显示所有的客户信息
func (this *customerView) list()
(注:在customerView中写一个list去调用customerService中的list方法,来完成显示功能)
//首先,获取到当前所有的客户信息(在切片中)
customers := this.customerService.List()
//显示
fmt.Printfln(“-----------------客户列表---------------”)
fmt.Printfln(“编号\t姓名\t性别\t年龄\t电话\t邮箱”)
(注:表头,用“\t”标比较整洁)
for i := 0; i< len(customers); i++{
(注:用for循环进行遍历)
//fmt.Printfln(customers[i].Id,“\t”,customers[i].Name…)
(注:这样写比较复杂,比较low)
fmt.Printfln(customers[i].GetInfo())
(注:在customer.go中写一个方法,显示该用户的信息,用GetInfo)
}
fmt.Printf(“\n----------------客户列表完成-------------\n\n”)
(“\n”用来换行,使得输出结果更整齐,方便查看)
(3)
case “4”:
this.list()
(注:this 指代 customerView,customerView 中含有list方法,list方法又去调用了customerService 中的 list。这样做很有结构性,扩展性、可读性都非常好)
(注:添加新客户时,要先输入到切片中进行保存)
(4)
//在main函数中,创建一个customerView,并运行显示主菜单
(注:结构体创建完毕,要实例化后才能被调用)
customerView := customerView{
key :””(注:初始值为空字符)
loop : true, (注:默认返回主菜单)
}(注:这里是给出前面的参数)
//这里完成对customView结构体的customerService字段的初始化(注:创建customerView的时候顺便创建)
customerView.customerService = service.NewCustomerService
(注:在service包里,不需要其他参数,所以已经完成了初始化)
//显示主菜单
customerView.mainMenu()
小结:
写程序要有结构和框架的概念,如果程序比较大但不用框架图的话程序容易看不懂。客户管理系统中,customerView 是界面,customerService 是处理业务逻辑的,真正干活的,customer 是数据。customerService 中的切片维护了所有的客户信息,customerView 是调用 customerService 中的方法来完成相应的处理。