当前位置:网站首页>【愚公系列】2022年07月 Go教学课程 028-函数小结案例(通讯录)
【愚公系列】2022年07月 Go教学课程 028-函数小结案例(通讯录)
2022-08-04 15:33:00 【愚公搬代码】
一、通讯录
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)
}
}
}
}
边栏推荐
猜你喜欢

使用百度EasyDL实现森林火灾预警识别

图解 SQL,这也太形象了吧!

Online Excel based on Next.js

如何防止重复下单?

性能提升400倍丨外汇掉期估值计算优化案例

leetcode: 255 Verify preorder traversal sequence binary search tree

浅谈一下跨端技术方案

What are the useful IT asset management platforms?

Legal education combined with VR panorama, intuitively feel and learn the spirit of the rule of law

QT笔记——Q_INVOKABLE了解
随机推荐
Li Mu's deep learning notes are here!
【已解决】allure无法生成json文件和AttributeError: module ‘allure‘ has no attribute ‘severity_level‘
Go 事,如何成为一个Gopher ,并在7天找到 Go 语言相关工作,第1篇
Many merchants mall system function and dismantling 24 - ping the strength distribution of members
2022年7月国产数据库大事记-墨天轮
解决dataset.mnist无法加载进去的情况
H5 之 文件流转base64下载
《电磁兼容防护EMC》学习笔记
【北亚数据恢复】IBM System Storage存储lvm信息丢失,卷访问不了的数据恢复方案
PHP 图片转PDF
MVCC实现过程
Byte、Short、Integer、Long内部缓存类的对比与源码分析
不需要服务器,教你仅用30行代码搞定实时健康码识别
365天挑战LeetCode1000题——Day 049 非递增顺序的最小子序列 贪心
初学爬虫笔记(收集数据)
qt 复杂界面信号槽设计
实战:10 种实现延迟任务的方法,附代码!
C语言写简单三子棋
第三章 Scala运算符
如何防止重复下单?