1. 用户管理功能
定义全局变量users := []map[string]string{}
每个元素
- ID
- 名称
- 联系方式
- 通信地址
1. 增加
add函数- 从命令行分别输入名称、联系方式、通信地址
- 生产ID => 查找
users中最大的id+1(无元素id=1) - 放入
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(“指令错误”) } }
//AddUser()//QueryUser()//ModifyUser()//DeleteUser()//fmt.Println(users)
}
<a name="DjTqL"></a># 2. 菜单写法<a name="y6Tl2"></a>## 1. switch写法```goexit:for {i := input("请输入您需要进行的操作:")switch i {case "add":fmt.Println("添加")case "modify":fmt.Println("执行修改")case "delete":fmt.Println("删除")case "query":fmt.Println("查询")case "exit":fmt.Println("退出")break exitdefault:fmt.Println("输入指令错误")}}
2. 映射写法
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("指令错误")}}
