[go语言]用map类型写一个简单的登陆注册系统

目录

1、题目概述

2、知识点与代码概述

3、代码总结


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的分享到此结束,如有问题欢迎评论区留言或私信。

相关推荐

  1. C语言利用strcmp简单数组存储登录+注册程序

    2024-01-27 14:02:01       34 阅读
  2. 深入探讨 Go 语言 Map 类型

    2024-01-27 14:02:01       31 阅读
  3. 深入探讨 Go 语言 Map 类型(续)

    2024-01-27 14:02:01       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 14:02:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 14:02:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 14:02:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 14:02:01       20 阅读

热门阅读

  1. SASS简介及使用方法

    2024-01-27 14:02:01       29 阅读
  2. 【办公自动化】Python中的BeautifulSoup

    2024-01-27 14:02:01       36 阅读
  3. PHP AES加解密:用代码为数据加上保护的盾牌

    2024-01-27 14:02:01       37 阅读
  4. 图像处理工具包Pillow的使用分享

    2024-01-27 14:02:01       36 阅读
  5. P2024 [NOI2001] 食物链 带权(种类)并查集整理

    2024-01-27 14:02:01       41 阅读
  6. MIT-Missing Semester_Topic 1: The Shell 练习题

    2024-01-27 14:02:01       29 阅读
  7. SpringBoot参数校验

    2024-01-27 14:02:01       34 阅读
  8. mysql数据库备份命令

    2024-01-27 14:02:01       41 阅读
  9. adb知识讲解

    2024-01-27 14:02:01       40 阅读