目录
1、题目概述
每个注册用户的名字都是唯一的,要存储的内容包括:姓名、性别、登陆密码、年龄等信息,系统有注册和登录两个选项:注册时要验证用户是否注册过了,登录时要验证用户是否注册了。按q退出系统。
2、知识点与代码概述
Go语言中的map是一种无序的键值对集合,它可以用于存储和检索键值对。Map的键必须是唯一的,而值可以是任意类型,map反映的是一种映射关系。
在Go语言中,map是一种引用类型,类似于其他编程语言中的字典或哈希表。Map的底层实现是使用哈希表来存储键值对,因此它的插入、查找和删除操作的时间复杂度通常是O(1)。
1、要声明一个map变量,需要使用make
函数创建一个空的map,然后使用键值对赋值给map的键。
对于这个题目,因为用户的名字是唯一的,所以我们可以用用户的名字作为key索引,其他值作为value,构建一个map嵌套map的类型:
//定义类型
register := make(map[string]map[string]string)
2、将已有用户设置好后,写一个for死循环,当用户输入q时退出,键入其他字母时接着循环;
3、打印业务清单:提醒用户输入1注册,输入2登录:
注册的时候要确认是否已经注册过,已经注册过不能重复注册;登陆的时候却确认是否注册,没有注册不能登录。
注册:验证用户没有注册过之后,把用户的名字存入register中
if choice == 1 {
re_user := ""
re_passwd := ""
fmt.Println("请输入注册的用户名和密码>>>")
fmt.Scan(&re_user, &re_passwd)
flag := 0
for k, _ := range register {
if re_user == k && re_passwd == register[k]["passwd"] {
fmt.Println("该用户已注册过了")
flag = 1
}
}
if flag == 0 {
fmt.Println("请完善您的个人信息>>>")
re_sex := ""
re_age := ""
fmt.Println("请输入注册用户的性别,年龄>>>")
fmt.Scan(&re_sex, &re_age)
register[re_user] = map[string]string{
"passwd": re_passwd, "sex": re_sex, "age": re_age,
}
fmt.Println(register)
fmt.Println("注册成功!请登录")
}
登录:验证用户已经注册之后,打印登陆成功
if choice == 2 {
user := ""
user_passwd := ""
fmt.Println("请输入用户名和密码>>>")
fmt.Scan(&user, &user_passwd)
flag := 0
for k, _ := range register {
if user == k && user_passwd == register[k]["passwd"] {
fmt.Println("登陆成功")
flag = 1
}
}
if flag == 0 {
fmt.Println("登陆失败,您没有注册")
}
} else {
fmt.Println("您的选择有误,请重新输入>>>")
}
3、代码总结
package main
import "fmt"
func main() {
//定义类型
register := make(map[string]map[string]string)
//已有用户
register["root"] = map[string]string{
"passwd": "123456", "sex": "female", "age": "18"}
register["admin"] = map[string]string{
"passwd": "admin123", "sex": "male", "age": "19"}
for {
input := ""
fmt.Println("欢迎注册登录,按任意键进入,按q退出")
fmt.Scan(&input)
if input == "q" {
break
} else {
fmt.Println("已进入注册登录系统")
menu() //打印选择菜单
choice := 0
fmt.Scan(&choice)
//注册
if choice == 1 {
re_user := ""
re_passwd := ""
fmt.Println("请输入注册的用户名和密码>>>")
fmt.Scan(&re_user, &re_passwd)
flag := 0
for k, _ := range register {
if re_user == k && re_passwd == register[k]["passwd"] {
fmt.Println("该用户已注册过了")
flag = 1
}
}
if flag == 0 {
fmt.Println("请完善您的个人信息>>>")
re_sex := ""
re_age := ""
fmt.Println("请输入注册用户的性别,年龄>>>")
fmt.Scan(&re_sex, &re_age)
register[re_user] = map[string]string{
"passwd": re_passwd, "sex": re_sex, "age": re_age,
}
fmt.Println(register)
fmt.Println("注册成功!请登录")
}
}
//登录
if choice == 2 {
user := ""
user_passwd := ""
fmt.Println("请输入用户名和密码>>>")
fmt.Scan(&user, &user_passwd)
flag := 0
for k, _ := range register {
if user == k && user_passwd == register[k]["passwd"] {
fmt.Println("登陆成功")
flag = 1
}
}
if flag == 0 {
fmt.Println("登陆失败,您没有注册")
}
} else {
fmt.Println("您的选择有误,请重新输入>>>")
}
}
}
}
func menu() {
fmt.Println("------按1注册用户-------")
fmt.Println("------按2登录用户-------")
}
运行的结果如图:
今天有关map的分享到此结束,如有问题欢迎评论区留言或私信。