1. 用户管理功能

定义全局变量
users := []map[string]string{}
每个元素

  • ID
  • 名称
  • 联系方式
  • 通信地址

4个go程序,每个程序写一个功能

1. 增加

  • add 函数
  • 从命令行分别输入名称、联系方式、通信地址
  • 生产ID => 查找 users 中最大的id+1(无元素id=1)
  • 放入 users
  • fmt.println(users)

    2. 删除

  • del 函数

  • 从命令行中输入要删除的用户ID
  • 验证ID是否存在,如果存在,打印需要删除用户信息
  • 并让用户输入y/n确认是否删除
  • 输入y删除用户信息

3. 修改

  • modify 函数
  • 从命令行输入要修改的用户ID
  • 验证ID是否存在,如果存在,打印所需要删除用户信息
  • 并让用户输入y/n确认是否修改
  • 输入y修改用户信息,继续让从命令行分别输入
  • 用户名,联系方式,地址 进行更新

4. 查找

  • query函数
  • 从命令行输入要查询的字符串
  • 遍历比较用户的名称,地址,联系方式,包含要查找的字符进行 ```go package main

import ( “crypto/md5” “fmt” “strconv” “strings” )

var users []map[string]string var passwd = “E10ADC3949BA59ABBE56E057F20F883E”

// init 信息初始化 func init() { for i := 1; i <= 3; i++ { users = append(users, map[string]string{ “id”: fmt.Sprintf(“%d”, i), “name”: fmt.Sprintf(“name%d”, i), “addr”: fmt.Sprintf(“addr%d”, i), “tel”: fmt.Sprintf(“tel_%d”, i), }) } }

func input(base string) string { fmt.Print(base) fmt.Scan(&base) return base }

// GetId 获取id序号 func GetId() string { // []int 最大的元素 id := 0 for _, user := range users { if uid, err := strconv.Atoi(user[“id”]); err == nil { if uid > id { id = uid } } } return strconv.Itoa(id + 1) }

// AddUser 用户添加模块 func AddUser() { user := map[string]string{ “id”: GetId(), “name”: input(“请输入名称:”), “addr”: input(“请输入地址:”), “tel”: input(“请输入联系方式:”), } users = append(users, user) fmt.Println(users) }

// filter 遍历字符串进行包含查找 func filter(user map[string]string, q string) bool { return strings.Contains(user[“id”], q) || strings.Contains(user[“name”], q) || strings.Contains(user[“addr”], q) || strings.Contains(user[“tel”], q) }

// PrintUsers 打印格式 func PrintUsers(user map[string]string) { fmt.Println(user) }

// QueryUser 信息查询模块 func QueryUser() { q := input(“请输入查询的信息:”) for _, user := range users { if filter(user, q) { PrintUsers(user) } } }

// FindUserByid 查找删除的ID func FindUserByid(id string) map[string]string { for _, user := range users { if user[“id”] == id { return user } } return nil }

// DeleteUserByid 删除不需要的id func DeleteUserByid(id string) { // 方法1: // 把不需要删除 => 定义新的切片 => users tempUsers := make([]map[string]string, 0, len(users)-1) for _, user := range users { if user[“id”] != id { tempUsers = append(tempUsers, user) } } users = tempUsers

}

// DeleteUser 删除模块 func DeleteUser() { id := input(“请输入需要删除的ID:”) user := FindUserByid(id) if user == nil { fmt.Println(“用户不存在”) } else { fmt.Println(“您将要删除的用户信息如下:”) fmt.Println(user) confirm := input(“是否需要删除以上用户?(Y/N):”) if strings.ToLower(confirm) == “y” || strings.ToLower(confirm) == “yes” { DeleteUserByid(id) // 方法2: // index => append([:n],[n+1:]) // copy } } }

func modifyUserById(user map[string]string, id string) { for idx, tuser := range users { if tuser[“id”] == id { users[idx] = user break } } }

// ModifyUser 修改用户模块 func ModifyUser() { id := input(“请输入需要修改的ID:”) user := FindUserByid(id) if user == nil { fmt.Println(“用户不存在”) } else { fmt.Println(“您将要修改的用户信息如下:”) fmt.Println(user) confirm := input(“确认修改用户?(Y/N):”) if strings.ToLower(confirm) == “y” || strings.ToLower(confirm) == “yes” { user := map[string]string{ “id”: id, “name”: input(“请输入new名称:”), “addr”: input(“请输入new地址:”), “tel”: input(“请输入new联系方式:”), } modifyUserById(user, id) } } }

func testmd5(text string) string { return fmt.Sprintf(“%X”, md5.Sum([]byte(text))) }

func auth() bool { for i := 2; i >= 0; i— { if testmd5(input(“请输入您的密码:”)) == passwd { return true }else { fmt.Println(“输入密码错误,请重新输入(剩余”,i,”次机会)”) } } return false }

func main() { // 定义存储用户的切片 // 每个元素为一个用户 // 用户包含多个属性,用户使用映射存储 // key string,value string if !auth() { fmt.Println(“密码输入错误,退出程序”) return } operates := map[string]func(){ “add”: AddUser, “modify”: ModifyUser, “query”: QueryUser, “delete”: DeleteUser, } for { text := input(“请输入指令:”) if text == “exit” { fmt.Println(“退出”) break } if op, ok := operates[text]; ok { op() } else { fmt.Println(“指令错误”) } }

  1. //AddUser()
  2. //QueryUser()
  3. //ModifyUser()
  4. //DeleteUser()
  5. //fmt.Println(users)

}

  1. <a name="DjTqL"></a>
  2. # 2. 菜单写法
  3. <a name="y6Tl2"></a>
  4. ## 1. switch写法
  5. ```go
  6. exit:
  7. for {
  8. i := input("请输入您需要进行的操作:")
  9. switch i {
  10. case "add":
  11. fmt.Println("添加")
  12. case "modify":
  13. fmt.Println("执行修改")
  14. case "delete":
  15. fmt.Println("删除")
  16. case "query":
  17. fmt.Println("查询")
  18. case "exit":
  19. fmt.Println("退出")
  20. break exit
  21. default:
  22. fmt.Println("输入指令错误")
  23. }
  24. }

2. 映射写法

  1. operates := map[string]func(){
  2. "add": AddUser,
  3. "modify": ModifyUser,
  4. "query": QueryUser,
  5. "delete": DeleteUser,
  6. }
  7. for {
  8. text:= input("请输入指令:")
  9. if text == "exit"{
  10. fmt.Println("退出")
  11. break
  12. }
  13. if op,ok:=operates[text];ok{
  14. op()
  15. }else {
  16. fmt.Println("指令错误")
  17. }
  18. }