Go练习题(3)——第二种方法

//一个用户管理系统
/*需要提供的功能
1.添加用户
2.删除用户
3.修改用户信息
4.查询用户信息
*/
package main

import (
	"fmt"
	"os"
	"strconv"
	"strings"
)

//定义密码输入次数
const (
	password string = "123123"
	maxauth  int    = 3
)

//使用系统前输入密码 超过3次则退出系统
func auth() bool {
	for i := 1; i <= maxauth; i++ {
		user := inputstring("请输入密码:")
		if user == password {
			return true
		} else {
			fmt.Printf("输入错误请重新输入,您还有%d次机会\n", maxauth-i)
		}
	}
	return false
}

//因为需要用户输入的比较多定义一个input函数
func inputstring(input string) string {
	var userinput string
	fmt.Printf(input)
	fmt.Scan(&userinput)
	return userinput
}
func inputuser(id int, userinfo map[int]map[string]string) {
	var (
		name     string
		birthday string
		tel      string
	)
	name = inputstring("请输入名字:")
	birthday = inputstring("请输入生日:")
	tel = inputstring("请输入联系方式:")
	userinfo[id] = map[string]string{
		"name":     name,
		"birthday": birthday,
		"tel":      tel,
	}
}
func getid(userinfo map[int]map[string]string) int {
	var id int
	for k := range userinfo {
		if id < k {
			id = k
		}
	}
	return id + 1
}

//添加用户
func add(userinfo map[int]map[string]string) {
	id := getid(userinfo)
	inputuser(id, userinfo)
	fmt.Println("[+]添加成功")
}

//查询用户
func sel(userinfo map[int]map[string]string) {
	users := inputstring("请输入要查询的信息:")
	fmt.Println(strings.Repeat("-", 20))
	for _, v := range userinfo {
		if strings.Contains(v["name"], users) || strings.Contains(v["birthday"], users) || strings.Contains(v["tel"], users) {
			fmt.Printf("name:%s\nbirthday:%s\ntel:%s\n", v["name"], v["birthday"], v["tel"])
			fmt.Println(strings.Repeat("-", 20))
		}
	}
}

//修改用户
func change(userinfo map[int]map[string]string) {
	if id, err := strconv.Atoi(inputstring("请输入修改的用户id:")); err == nil {
		fmt.Println(strings.Repeat("-", 20))
		if user, ok := userinfo[id]; ok {
			fmt.Printf("name:%s\nbirthday:%s\ntel:%s\n", user["name"], user["birthday"], user["tel"])
			fmt.Println(strings.Repeat("-", 20))
			affirm := inputstring("确认是否修改(Y/N):")
			if affirm == "Y" || affirm == "y" {
				inputuser(id, userinfo)
			}
		} else {
			fmt.Println("用户id不存在")
		}
	} else {
		fmt.Println("输入错误")
	}
}

//删除用户
func del(userinfo map[int]map[string]string) {
	if id, err := strconv.Atoi(inputstring("请输入删除的用户id:")); err == nil {
		fmt.Println(strings.Repeat("-", 20))
		if user, ok := userinfo[id]; ok {
			fmt.Printf("name:%s\nbirthday:%s\ntel:%s\n", user["name"], user["birthday"], user["tel"])
			fmt.Println(strings.Repeat("-", 20))
			affirm := inputstring("确认是否删除(Y/N):")
			if affirm == "Y" || affirm == "y" {
				delete(userinfo, id)
				fmt.Println("[-]删除成功")
			}
		} else {
			fmt.Println("用户id不存在")
		}
	} else {
		fmt.Println("输入错误")
	}
}

func main() {
	var menu string
	userinfo := map[int]map[string]string{}
	//这里吧操作放入map的k,而操作对应的函数存放为v
	//这样当执行某个操作直接用k读取v
	callbacks := map[string]func(map[int]map[string]string){
		"1": add,
		"2": sel,
		"3": change,
		"4": del,
		"5": func(userinfo map[int]map[string]string) {
			os.Exit(0)
		},
	}
	if !auth() {
		fmt.Println("您输入的密码错误,系统退出")
		return
	}
	menu = `====================
欢迎使用用户管理系统
====================
1.添加用户
2.查找用户
3.修改用户
4.删除用户
5.退出程序
====================`
	for {
		//界面打印
		fmt.Println(menu)
		//获取到指令然后赋值给callback 与ok ,ok表示指令是否存在 也就是说指令是否是 callbacks的key中的一个,如果是ok则为true,如果不存在ok则为flase,callback则为对应类型的零值
		if callback, ok := callbacks[inputstring("请输入指令:")]; ok {
			callback(userinfo)
		} else {
			fmt.Println("指令错误")
		}

	}
}
发布了112 篇原创文章 · 获赞 12 · 访问量 6690

猜你喜欢

转载自blog.csdn.net/weixin_45413603/article/details/104787027