【综合案例】模拟通讯录-涉及到函数、切片,指针、结构体、Map基础知识
通讯录案例,对通讯录进行添加,删除,查询,编辑操作
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("没有找到要编辑联系人的信息")
}
}
代码输出内容:
添加联系人
添加联系人,请按1
删除联系人,请按2
查询联系人,请按3
编辑联系人,请按4
1
请输入姓名:
张三
请输入电话类型
公司
请输入电话号码:
110
继续添加号码按任意键,结束请按Q
w
请输入电话类型
座机
请输入电话号码:
120
继续添加号码按任意键,结束请按Q
Q
姓名:张三
电话类型: 座机
电话号码: 120
电话类型: 公司
电话号码: 110
添加联系人,请按1
删除联系人,请按2
查询联系人,请按3
编辑联系人,请按4
查询联系人:
添加联系人,请按1
删除联系人,请按2
查询联系人,请按3
编辑联系人,请按4
3
请输入查询联系人姓名:
张三
姓名:张三
电话类型:公司 电话号码:110
电话类型:座机 电话号码:120
编辑联系人电话信息:
添加联系人,请按1
删除联系人,请按2
查询联系人,请按3
编辑联系人,请按4
4
请输入查询联系人姓名:
张三
姓名:张三
电话类型:公司 电话号码:110
电话类型:座机 电话号码:120
编辑用户名按:5 编辑电话按:6 退出编辑按:7
6
编辑(公司)110 请按0
编辑(座机)120 请按1
请输入编辑号码类型:
1
请输入新的电话号码:
666666
编辑用户名按:5 编辑电话按:6 退出编辑按:7
7
编辑联系人姓名信息
添加联系人,请按1
删除联系人,请按2
查询联系人,请按3
编辑联系人,请按4
4
请输入查询联系人姓名:
张三
姓名:张三
电话类型:公司 电话号码:110
电话类型:座机 电话号码:666666
编辑用户名按:5 编辑电话按:6 退出编辑按:7
5
请输入新的名称:
李四
姓名:李四
电话类型: 公司
电话号码: 110
电话类型: 座机
电话号码: 666666
编辑用户名按:5 编辑电话按:6 退出编辑按:7
删除联系人:
添加联系人,请按1
删除联系人,请按2
查询联系人,请按3
编辑联系人,请按4
2
请输入要删除联系人姓名:
李四
暂时没有联系人信息
添加联系人,请按1
删除联系人,请按2
查询联系人,请按3
编辑联系人,请按4
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!