代码:
package main
import "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 int
fmt.Scan(&num)
switch num {
// 添加
case 1:
addUser()
// 删除
case 2:
deleteUser()
// 编辑
case 3:
editUser()
// 查看
case 4:
findUser()
case 5:
break
}
}
func addUser() {
// 1、添加
var name string
var phoneType string
var phone string
var exit string
var 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] = phone
fmt.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 string
index := -1
fmt.Println("请输入要删除联系人的姓名:")
fmt.Scan(&name)
// 2、记录要删除联系人的的索引
for i := 0; i < len(userList); i++ {
if userList[i].userName == name {
index = i
break
}
}
// 3、执行删除操作
/**
从0索引截取到userList[:index],但是不算index
从index+1索引截取到末尾,因为不算index所以要+1
append,相当于做了一个拼接把第二个参数追加到第一个参数后面,但是如果第二个参数是一个切片,需要加三个点
*/
if index != -1 {
userList = append(userList[:index], userList[index+1:]...)
}
showUser()
}
func findUser() *User {
// 1、根据联系人姓名查询,判断切片中是否有要查询的联系人
var name string
index := -1
fmt.Println("请输入要查询联系人的姓名:")
fmt.Scan(&name)
for key, value := range userList {
if value.userName == name {
index = key
fmt.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 string
var user *User
var num int
menu := make([]string, 0) // 保存电话类型
var userNum int
var newPhone string
user = findUser()
if user != nil {
for {
fmt.Println("编辑用户名称请按1,编辑用户电话请按2,退出请按3")
fmt.Scan(&num)
switch num {
case 1:
fmt.Println("请输入新的用户姓名:")
fmt.Scan(&name)
user.userName = name
showUser()
case 2:
// 显示联系人所有的电话信息
var n int
for 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("没有查询到要编辑的联系人")
}
}