【愚公系列】2022年08月 Go教学课程 028-函数小结案例(通讯录)

举报
愚公搬代码 发表于 2022/08/31 21:18:15 2022/08/31
【摘要】 一、通讯录 1.什么是通讯录通讯录的信息可以涵盖多项内容比如:姓名、电话号码、单位电话、移动电话、传真号、电子邮件、QQ、MSN、个人主页、公司、街道、邮编、生日、大头贴、车牌、银行账号、俱乐部名称、爱好等等。以往的通讯录都是纸制的容易破损丢失,如今的通讯录都是可以在个人电脑、掌上电脑、移动电话等任何联网设备上录入你的联系人的手机\电话号码、Email、QQ、MSN、微信等通讯录信息。随时...

一、通讯录

1.什么是通讯录

通讯录的信息可以涵盖多项内容比如:姓名、电话号码、单位电话、移动电话、传真号、电子邮件、QQ、MSN、个人主页、公司、街道、邮编、生日、大头贴、车牌、银行账号、俱乐部名称、爱好等等。

以往的通讯录都是纸制的容易破损丢失,如今的通讯录都是可以在个人电脑、掌上电脑、移动电话等任何联网设备上录入你的联系人的手机\电话号码、Email、QQ、MSN、微信等通讯录信息。随时随地都可以在任何设备上查找通讯录联系人。

2.通讯录小结案例

2.1 用户录入界面

package main

import (
	"fmt"
)

type Person struct {
	userName     string
	addressPhone map[string]string // key :表示出电话的类型,value:电话
}

var personList = make([]Person, 0)

func main() {
	for {
		scanNum()
	}

}
func scanNum() {
	// 1: 给出相应的操作提示
	fmt.Println("添加联系人信息,请按1")
	fmt.Println("删除联系人信息,请按2")
	fmt.Println("查询联系人信息,请按3")
	fmt.Println("编辑联系人信息,请按4")
	// 2: 对用户输入的数字进行判断。
	var num int // 保存用户输入的数字
	fmt.Scan(&num)
	switchType(num)
}

// 对输入的内容进行判断,决定执行哪块操作
func switchType(n int) {
	switch n {
	case 1:
		// 添加联系人的操作
		addPerson()
	case 2:
		// 删除联系人的操作
		removePerson()
	case 3:
		// 查询联系人的操作
		findPerson()
	case 4:
		// 编辑联系人的操作
		editPerson()
	}
}

2.2 增

// 添加联系人
func addPerson() {
	// 1: 定义结构体表示联系人的信息
	// 2: 定义切片保存多个人的联系信息。
	// 3; 向切片中保存数据。
	//  3.1 添加姓名
	var name string
	var address string
	var phone string
	var exit string                            // 表示退出电话的录入
	var addressPhone = make(map[string]string) // 保存电话的类型和电话,电话类型作为key
	fmt.Println("请输入姓名")
	fmt.Scan(&name)

	for {
		//  3.2 保存电话类型
		fmt.Println("请输入电话类型")
		fmt.Scan(&address)
		//  3.3 保存电话号码
		fmt.Println("请输入电话号码")
		fmt.Scan(&phone)
		// 将电话以及电话类型存储到addressPhone 中。
		addressPhone[address] = phone
		fmt.Println("如果结束电话的录入,请按Q")
		fmt.Scan(&exit)
		if exit == "Q" {
			break;
		} else {
			continue
		}

	} //将联系人的信息存储到切片中。
	personList = append(personList, Person{userName: name, addressPhone: addressPhone})
	//fmt.Println(personList)
	showPersonList() // 调用函数展示联系人的信息
}

2.3 删

// 删除联系人信息
func removePerson() {
	// 1: 输入要删除的联系人的姓名
	var name string
	var index int = -1 // 记录要删除的联系人信息在切片中的下标。
	fmt.Println("请输入要删除的联系人姓名:")
	fmt.Scan(&name)
	// 2: 判断切片中是否存储了要删除的联系人信息。
	for i := 0; i < len(personList); i++ {
		if personList[i].userName == name {
			index = i
			break
		}
	}
	// 3: 记录要删除的联系人信息在切片中的位置(下标)
	// 4: 删除操作
	// index = 3  //   5,6,7,9,10,11,12
	//8,
	if index != -1 {
		personList = append(personList[0:index], personList[index+1:]...) // append函数第二个参数如果是切片后面要给三个点。
	}
	showPersonList()
}

2.4 改

// 编辑联系人信息
func editPerson() {
	// 1: 查找到要编辑的联系人信息
	var name string // 存储新的联系人姓名
	var p *Person
	var num int                  // 存储修改的数据的类型
	var menu = make([]string, 0) // 保存电话类型,方便后面修改
	var pNum int                 // 编辑的电话类型编号
	var phone string             // 新的电话号码
	p = findPerson()
	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:
				// 编辑联系电话
				// 1: 展示联系人所有的电话信息
				var j int
				for key, value := range p.addressPhone {
					fmt.Println("编辑(", key, ")", value, "请按:", j)
					menu = append(menu, key)
					j++
				}
				// menu 公司,学校
				//       0    1
				fmt.Println("请输入编辑号码的类型:")
				fmt.Scan(&pNum) //1
				// 2: 完成修改
				for index, v := range menu {
					if index == pNum {
						fmt.Println("请输入新的电话号码:")
						fmt.Scan(&phone)
						p.addressPhone[v] = phone
					}
				}
			}
			if num == 7 {
				break
			}

		}

	} else {
		fmt.Println("没有找到要编辑的联系人信息")
	}
	// 2: 进行编辑
}

2.5 查

// 查找联系人信息
func findPerson() *Person {
	// 1: 输入要查询的联系人姓名
	var name string
	var index int = -1 // 记录找到的联系人信息在切片中的下标
	fmt.Println("请输入要查询的联系人姓名:")
	fmt.Scan(&name)
	// 2: 根据输入的联系人姓名,查找对应的联系信息
	for k, value := range personList {
		if value.userName == name {
			index = k
			fmt.Println("联系人姓名:", value.userName)
			for key, v := range value.addressPhone {
				fmt.Printf("%s:%s\n", key, v)
			}
		}
	}
	// 3: 打印输出结果
	if index == -1 {
		fmt.Println("没有找到联系人信息")
		return nil

	} else {
		return &personList[index]
	}

}
// 展示切片中存储的联系人信息。
func showPersonList() {
	// 1: 判断一下切片中是否有数据。
	if len(personList) == 0 {
		fmt.Println("暂时没有联系人信息")
	} else {
		// 2;可以通过循环的方式打印切片中的数据。
		for _, value := range personList {
			fmt.Println("姓名:", value.userName)
			for k, v := range value.addressPhone {
				fmt.Println("电话类型:", k)
				fmt.Println("电话号码:", v)
			}

		}
	}

}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。