【愚公系列】2022 年 10 月 Go 教学课程 028- 函数小结案例(通讯录)
 作者:愚公搬代码
- 2022-10-14  福建
- 本文字数:2709 字 - 阅读完需:约 1 分钟 
一、通讯录
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)      }
    }  }
}
复制代码
 划线
评论
复制
发布于: 刚刚阅读数: 3
版权声明: 本文为 InfoQ 作者【愚公搬代码】的原创文章。
原文链接:【http://xie.infoq.cn/article/37d9a82e5dd91b5760759c9f7】。文章转载请联系作者。

愚公搬代码
关注
还未添加个人签名 2022-03-01 加入
该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。










 
    
评论