package main
import (
"fmt"
)
type Person struct {
userName string
addressPhone map[string]string
}
var personList = make([]Person, 0)
func main() {
for {
fmt.Println()
sanNum()
}
}
// 页面展示
func sanNum() {
fmt.Println("添加联系人,请按1")
fmt.Println("删除联系人,请按2")
fmt.Println("查询联系人,请按3")
fmt.Println("编辑联系人,请按4")
var num int
fmt.Scan(&num)
switchType(num)
}
// 对输入的内容进行判断
func switchType(num int) {
switch num {
case 1:
addPerson()
case 2:
removePerson()
case 3:
findPerson()
case 4:
editPerson()
}
}
// 添加联系人
func addPerson() {
var name string
var phoneType string
var phone string
var exit string
var addressPhone = make(map[string]string)
fmt.Println("请输入姓名:")
fmt.Scan(&name)
for {
fmt.Println("请输入电话类型")
fmt.Scan(&phoneType)
fmt.Println("请输入电话号码:")
fmt.Scan(&phone)
addressPhone[phoneType] = phone // 向Map中添加数据 key:电话类型,values:电话号码
fmt.Println("继续添加号码按任意键,结束请按Q")
fmt.Scan(&exit)
if exit == "Q" {
break
} else {
continue
}
}
personList = append(personList, Person{userName: name, addressPhone: addressPhone})
showPersonList()
}
// 展示切片中存储联系人信息
func showPersonList() {
if len(personList) == 0 { // 判断personList切片中是否存在数据
fmt.Println("暂时没有联系人信息")
} else {
for _, value := range personList { // 遍历输出name
fmt.Printf("姓名:%s\n", value.userName)
for k, v := range value.addressPhone { // 遍历输出Map
fmt.Println("电话类型:", k)
fmt.Println("电话号码:", v)
}
}
}
}
func removePerson() {
var name string
var index int = -1
fmt.Println("请输入要删除联系人姓名:")
fmt.Scan(&name)
// 遍历切片查询除删除联系人是否存在,如果存在则记录下标
for i := 0; i < len(personList); i++ {
if personList[i].userName == name {
index = i
break
}
}
if index != -1 {
// 删除下标数据 append第二个参数如果是切片需要加... 这是语法
personList = append(personList[:index], personList[index+1:]...)
}
showPersonList()
}
// 查找联系人信息
func findPerson() *Person {
var name string
var index int = -1
fmt.Println("请输入查询联系人姓名:")
fmt.Scan(&name)
for k, value := range personList {
if value.userName == name {
index = k
fmt.Printf("姓名:%v\n", value.userName)
for key, v := range value.addressPhone {
fmt.Printf("电话类型:%v\t电话号码:%v\n", key, v)
}
}
}
if index == -1 {
fmt.Println("没有查询到改联系人")
return nil
} else {
return &personList[index]
}
}
// 编辑联系人
func editPerson() {
var p *Person = findPerson()
var name string
var num int
var menu = make([]string, 0) // 保存电话类型
var pNum int // 编辑电话类型编号
var newPhone string
if p != nil {
for {
fmt.Println("编辑用户名按:5 编辑电话按:6 退出编辑按:7")
fmt.Scan(&num)
switch num {
case 5:
fmt.Println("请输入新的名称:")
fmt.Scan(&name)
p.userName = name
showPersonList()
case 6:
var j int
for kye, value := range p.addressPhone {
fmt.Printf("编辑(%v)%v 请按%v\n", kye, value, j)
menu = append(menu, kye)
j++
}
fmt.Println("请输入编辑号码类型:")
fmt.Scan(&pNum)
for index, v := range menu {
if index == pNum {
fmt.Println("请输入新的电话号码:")
fmt.Scan(&newPhone)
p.addressPhone[v] = newPhone
}
}
}
if num == 7 {
break
}
}
} else {
fmt.Println("没有找到要编辑联系人的信息")
}
}
【综合案例】涉及到函数、切片,指针、结构体、Map
发布时间 2023-04-08 17:15:01作者: 躺平摆烂