【综合案例】模拟通讯录-涉及到函数、切片,指针、结构体、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
posted @ 2023-04-08 17:07  乱七八糟博客备份  阅读(23)  评论(0编辑  收藏  举报