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("指令錯誤")
		}

	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章