#yyds干货盘点#愚公系列2022年08月 Go教学课程 028-函数小结案例(通讯录)

Posted 愚公搬代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#愚公系列2022年08月 Go教学课程 028-函数小结案例(通讯录)相关的知识,希望对你有一定的参考价值。

一、通讯录

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, PersonuserName: 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)
            

        
    

以上是关于#yyds干货盘点#愚公系列2022年08月 Go教学课程 028-函数小结案例(通讯录)的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#愚公系列2022年08月 Go教学课程 021-Go容器之切片操作

#yyds干货盘点#愚公系列2022年08月 Go教学课程 002-Go语言环境安装

#yyds干货盘点#愚公系列2022年08月 Go教学课程 031-结构体方法

#yyds干货盘点#愚公系列2022年08月 Go教学课程 035-接口和继承和转换与空接口

#yyds干货盘点#愚公系列2022年08月 Go教学课程 032-结构体方法继承

#yyds干货盘点#愚公系列2022年08月 Go教学课程 027-深拷贝和浅拷贝