//一個用戶管理系統
/*需要提供的功能
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("指令錯誤")
}
}
}
Go練習題(3)——第二種方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.