-
项目功能实现-添加客户的功能
![](https://i-blog.csdnimg.cn/blog_migrate/1f3568d9fd5d22814645c6f96a5e6de8.png)
代码实现:
在Add方法中我们需要将customer切片当做参数传入,因为在上面操作中customer实例已经在customerView层中构建好了,因此我们现在需要做的就是将新的customer加到customer切片中去
func (this *CustomerService) Add(customers Customer) {
this.customers = append(this.customers,customers)
return true
}
接下来就是编写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 := ""
需要注意的是在构建新的customer实例时,id是唯一的,不能让客户输入,应当由系统分配,但在customer文件中我们返回的Customer实例是带id的,因此我们需要另一种创建Customer实例不带id的方法,只需做简单的修改,将含有的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是不带id的,在调用Add方法时需要给客户分配一个id,所以我们需要修改customerService文件中的Add方法,在该方法中我们要确定一个分配id的规则,就是添加的 顺序,要想实现该操作可以使用我们之前在CustomerService结构体中定义的customerNum字段,通过该变量不断自加赋值给id来实现
func (this *CustomerService) Add(customers model.Customer) {
this.customerNum++
customer.Id = this.customerNum
this.customers = append(this.customers,customers)
return true
}
然后再在customerView中做些修改
if this.customerService.Add(customer) {
fmt.Println("---------------------添加完成---------------------")
} else {
fmt.Println("---------------------添加失败---------------------")
}
运行后报错:undefined: customer,经检查代码后发现Add方法中传入的参数不是customers而是customer,传入的是model文件中的结构体变量而不是customers切片,运行后还是报错undefined: customers,检查代码后发现在append语句中拼接的也应是customer变量
-
项目功能实现-完成删除客户的功能
![](https://i-blog.csdnimg.cn/blog_migrate/15072ec1628857101acecc023bc9d803.png)
//根据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 = id
}
return index
}
然后编写Delete方法,根据id从切片中删除客户,通过一个index接收上个方法的返回值并用if语句判断,重点在于如何从切片在删除一个元素
//根据id从切片中删除客户
func (this *CustomerService) Delete(id int) bool {
index := this.FindById(id)
if index == -1 {
return false
}
//从切片中删除一个元素
this.customers = append(this.customers[:index], this.customers[index+1:]...)
return true
}
接下来就是在customerView文件中编写delete方法,该函数得到用户输入的id,删除该id对应的客户
//得到用户输入的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 {
if this.customerService.Delete(id) {
fmt.Println("---------------------删除完成---------------------")
}else{
fmt.Println("--------------删除失败,输入的id不存在--------------")
}
}
}
运行后报错:cannot use assignment (index) = (i) as value,检查代码后发现是if语句的{}没有将index = i括起来,运行后发现无论输入多少id和任何字母都直接退出删除客户,检查代码后发现实因为错将||打成&&
-
项目功能实现-完善退出确认功能
func (this *customerView) exit() {
fmt.Println("你确定要退出吗? y/n")
choice := ""
for {
fmt.Scanln(&choice)
if choice == "y" || choice == "n" || choice == "Y" || choice == "N"{
break
}
fmt.Println("你的输入有误,请重新输入 y/n")
}
if choice == "y" || choice == "Y" {
this.loop = false
}
}
- 项目功能实现-完成修改客户功能
![](https://i-blog.csdnimg.cn/blog_migrate/72d055068308e5d1227b26847657938b.png)
func (this *CustomerService) Update(customer model.Customer) bool {
index := this.FindById(customer.Id)
if index == -1 {
return false
}
this.customers = append(append(this.customers[:index], customer), this.customers[index+1:]...)
return true
}
//得到用户的输入,修改对应Id的客户
func (this *customerView) update() {
fmt.Println("---------------修改客户---------------")
fmt.Print("请选择修改客户的编号(-1退出):")
id := -1
fmt.Scanln(&id)
if id == -1 {
return
}
fmt.Print("姓名:")
name := ""
fmt.Scanln(&name)
fmt.Print("性别:")
gender := ""
fmt.Scanln(&gender)
fmt.Print("年龄:")
age := 0
fmt.Scanln(&age)
fmt.Print("电话:")
phone := ""
fmt.Scanln(&phone)
fmt.Print("电邮:")
email := ""
fmt.Scanln(&email)
customer := model.NewCustomer(id, name, gender, age, phone, email)
if this.customerService.Update(customer) {
fmt.Println("---------------修改成功---------------")
} else {
fmt.Println("---------------修改失败---------------")
}
}
但是通过这种方式修改用户信息不能完成“直接回车表示不修改功能”,于是我查找到了另一种方法
//修改客户
func (this *CustomerService) Change(id int, customer model.Customer) bool {
index := this.FindById(id)
if index == -1 {
fmt.Println("该编号对应的客户不存在")
return false
}
customer.Id = id
if customer.Age != 0 {
this.customers[index].Age = customer.Age
}
if customer.Name != "" {
this.customers[index].Name = customer.Name
}
if customer.Gender != "" {
this.customers[index].Gender = customer.Gender
}
if customer.Phone != "" {
this.customers[index].Phone = customer.Phone
}
if customer.Email != "" {
this.customers[index].Email = customer.Email
}
return true
}
//修改客户
func (this *customerView) change() {
fmt.Println("------------------修改客户------------------")
fmt.Print("请选择待修改客户编号(-1退出):")
id := -1
fmt.Scanln(&id)
if id == -1 {
return
}
oldCustomer := this.customerService.GetinfoById(id)
fmt.Printf("姓名(%v):", oldCustomer.Name)
name := ""
fmt.Scanln(&name)
fmt.Printf("性别(%v):", oldCustomer.Gender)
gender := ""
fmt.Scanln(&gender)
fmt.Printf("年龄(%v):", oldCustomer.Age)
age := 0
fmt.Scanln(&age)
fmt.Printf("电话(%v):", oldCustomer.Phone)
phone := ""
fmt.Scanln(&phone)
fmt.Printf("邮箱(%v):", oldCustomer.Email)
email := ""
fmt.Scanln(&email)
//构建一个新的Customer实例
customer := model.NewCustomer(0, name, gender, age, phone, email)
if this.customerService.Change(id, customer) {
fmt.Println("------------------修改完成------------------\n")
} else {
fmt.Println("------------------修改失败------------------\n")
}
}