代码:
package mainimport "fmt"func main() {for {menu()}
}type User struct {userName string/**key:表示电话的类型value:电话号码*/addressPhone map[string]string
}// 定义切片
var userList = make([]User, 0)func menu() {// 1、给出提示fmt.Println("添加联系人信息,请按1")fmt.Println("删除联系人信息,请按2")fmt.Println("编辑联系人信息,请按3")fmt.Println("查看联系人信息,请按4")fmt.Println("退出,请按5")fmt.Println("--------------------")// 2、对用户输入的数字进行判断var num intfmt.Scan(&num)switch num {// 添加case 1:addUser()// 删除case 2:deleteUser()// 编辑case 3:editUser()// 查看case 4:findUser()case 5:break }
}func addUser() {// 1、添加var name stringvar phoneType stringvar phone stringvar exit stringvar userPhone = make(map[string]string)fmt.Println("请输入姓名:")fmt.Scan(&name)for {// 2、保存电话类型fmt.Println("请输入电话类型:")fmt.Scan(&phoneType)// 3、保存电话号码fmt.Println("请输入电话号码:")fmt.Scan(&phone)// 4、把电话以及电话类型存储到userPhone中userPhone[phoneType] = phonefmt.Println("结束录入输入Q")fmt.Scan(&exit)if exit == "Q" {break} else {continue}}// 5、将联系人的信息添加到切片中userList = append(userList, User{userName: name, addressPhone: userPhone})fmt.Println("添加成功")
}/**
查询联系人
*/
func showUser() {// 1、判断切片中是否有数据if len(userList) == 0 {fmt.Println("通讯录为空,请先添加联系人")} else {for _, value := range userList {fmt.Println("姓名:", value.userName)for key, v := range value.addressPhone {fmt.Println("电话类型:", key)fmt.Println("电话号码:", v)}}}
}/**
删除信息
*/
func deleteUser() {// 1、根据联系人姓名删除,判断切片中是否有要删除的联系人var name stringindex := -1fmt.Println("请输入要删除联系人的姓名:")fmt.Scan(&name)// 2、记录要删除联系人的的索引for i := 0; i < len(userList); i++ {if userList[i].userName == name {index = ibreak}}// 3、执行删除操作/**从0索引截取到userList[:index],但是不算index从index+1索引截取到末尾,因为不算index所以要+1append,相当于做了一个拼接把第二个参数追加到第一个参数后面,但是如果第二个参数是一个切片,需要加三个点*/if index != -1 {userList = append(userList[:index], userList[index+1:]...)}showUser()
}func findUser() *User {// 1、根据联系人姓名查询,判断切片中是否有要查询的联系人var name stringindex := -1fmt.Println("请输入要查询联系人的姓名:")fmt.Scan(&name)for key, value := range userList {if value.userName == name {index = keyfmt.Println("联系人姓名", value.userName)for k, v := range value.addressPhone {fmt.Printf("%s:%s\n", k, v)}}}if index == -1 {fmt.Println("没有查询到该联系人")return nil} else {return &userList[index]}
}func editUser() {// 1、添加var name stringvar user *Uservar num intmenu := make([]string, 0) // 保存电话类型var userNum intvar newPhone stringuser = findUser()if user != nil {for {fmt.Println("编辑用户名称请按1,编辑用户电话请按2,退出请按3")fmt.Scan(&num)switch num {case 1:fmt.Println("请输入新的用户姓名:")fmt.Scan(&name)user.userName = nameshowUser()case 2:// 显示联系人所有的电话信息var n intfor key, value := range user.addressPhone {fmt.Println("编辑(", key, ")", value, "请按:", n)menu = append(menu, key)n++}// 修改fmt.Println("请输入编辑号码的类型:")fmt.Scan(&userNum)for key, value := range menu {if key == userNum {fmt.Println("请输入新的电话号码:")fmt.Scan(&newPhone)user.addressPhone[value] = newPhone}}case 3:break}break}} else {fmt.Println("没有查询到要编辑的联系人")}
}