Golang 实现登录注册小程序


例一

main.go

package main

import (
	"dev_code/user_login/tool"
	"fmt"
)

var (
	n				int
	decision		string
	price			float64
	count			[4]int
	exec			string
	userManagement  = map[string]string{}
	passManagement  = map[string]string{}
	userManagement1 = map[string]string{}
	passManagement1 = map[string]string{}
)

func main() {
	// 注册
Con:
	userManagement,passManagement = tool.Enroll()
	fmt.Println("您的用户名:",userManagement)
	fmt.Println("您的密码:",passManagement)

	// 登录
Format:
	userManagement1,passManagement1 = tool.Login()
	for user := range userManagement {
		for pass := range passManagement {
			value,exec := userManagement[user]
			value1,exec := passManagement[pass]
			if exec {
				if value == userManagement1[user] && value1 == passManagement1[pass] {
					fmt.Println(value)
					fmt.Println(value1)
					fmt.Println("欢迎登录!")
					goto END
				} else if value != userManagement1[user] || value != passManagement1[pass] {
					fmt.Println("用户名不存在,请注册!")
					goto Con
				} else {
					fmt.Println("您输入的格式错误,请重新输入!")
					n++
					goto Format
				}
			}
		}
	END:
		break
	}
}

tool.go

package tool

import (
	"bufio"
	"fmt"
	"os"
)

// 登录界面
func Login() (map[string]string, map[string]string) {
	user := map[string]string{}
	pass := map[string]string{}
	fmt.Println("欢迎登录商城页面!")

	fmt.Println("请输入登录用户名:")
	LoginUser := bufio.NewScanner(os.Stdin)
	if LoginUser.Scan() {
		user["userName"] = LoginUser.Text()
	} else {
		user["userName"] = "您输入错误"
	}

	fmt.Println("请输入登录密码:")
	LoginPassword := bufio.NewScanner(os.Stdin)
	if LoginPassword.Scan() {
		pass["PassWord"] = LoginPassword.Text()
	} else {
		pass["PassWord"] = "您输入错误"
	}
	return user,pass
}

// 注册
func Enroll() (map[string]string, map[string]string) {
	user := map[string]string{}
	pass := map[string]string{}
	fmt.Println("欢迎登录商城页面!")
	fmt.Println("请输入注册用户名:")
	LoginUser := bufio.NewScanner(os.Stdin)
	if LoginUser.Scan() {
		user["userName"] = LoginUser.Text()
	}
	for i:=0;i<3;i++ {
		fmt.Println("请输入注册密码:")
		LoginPassword := bufio.NewScanner(os.Stdin)
		if LoginPassword.Scan() {
			pass["PassWord"] = LoginPassword.Text()
		}
		fmt.Println("请再次输入注册密码:")
		LoginRePassword := bufio.NewScanner(os.Stdin)
		if LoginRePassword.Scan() {
			pass["PassWord"] = LoginRePassword.Text()
		}
		if LoginPassword.Text() == LoginRePassword.Text() {
			fmt.Println("密码输入正确")
			break
		} else {
			fmt.Println("两次密码输入错误,请重新输入!")
			continue
		}
	}
	return user,pass
}

例二

package main

import (
	"fmt"
	"time"
)

//用户注册功能:用户从控制台填写用户名和密码信息,被直接进行记录到 map 中。
//用户登录功能:用户从控制台输入用户名和密码信息,进行身份验证匹配,到 map 中匹配,
//如果输入正确,则登录成功;否则登录失败,请重新登录,登录尝试次数为三次,超过三次程序锁定账号 2 分钟。
//如果检测到用户未注册,则自动跳转用户注册界面。

var (
	// map 中用户名密码分别为 k,v
	// 初始化,空 map 无法增加元素
	names map[string]string = map[string]string{}
)


/* 主函数 */
func main() {
	switch Memu() {
	case 1:
		// 注册功能
		Register(names)
		// 测试语句,查看是否有信息在列表中
		// fmt.Println("测试语句:",names)
	case 2:
		// 登录功能
		if Login() {
			// 登录成功
			fmt.Println("登录成功!")
		} else {
			// 跳转注册页面
			Register(names)
		}
	}
}


/* 项目清单 */
func Memu() int {
	var num int
	fmt.Print("1.用户注册\n2.用户登录\n请输入功能编号:")
	fmt.Scan(&num)
	return num
}


/* 用户注册 */
// map 是引用类型,在函数体中的更改直接影响原 map
func Register(ns map[string]string) {
	var (
		name string		// 用户名
		pwd string		// 密码
	)

HERE:
	// 用户输入注册信息
	fmt.Println("注册界面")
	fmt.Print("用户名:")
	fmt.Scan(&name)
	//fmt.Println()
	fmt.Print("密码:")
	fmt.Scan(&pwd)

	// 判断输入的用户名是否已被注册(k 是否唯一)
        // 下面语句是判断在 ns 集合中是否存在 name 键,存在 exist 值返回 true,不存在返回 false
        // 我们不需要 value 值,用空白标识符隐藏
	_,exist := ns[name]
	if exist {
		// 为 true 表示用户已被注册
		fmt.Println("用户已注册,请重新输入!")
		goto HERE
	} else {
		ns[name] = pwd 	// 添加用户密码到 map 中
		fmt.Printf("用户 %s 注册成功!\n",name)
		// 测试语句:测试成功后是否能登录
		if Login() {
			fmt.Println("登录成功!")
		} else {
			fmt.Println("登录失败!")
		}
	}
}


/* 用户登录 */
func Login() bool {
	var (
		name string
		pwd string
		count int = 0	// 尝试登录次数
	)

TAG:
	// 账号锁机制
	if count >= 3 {
		fmt.Println("输入错误次数过多,锁定两分钟!")
		time.Sleep(time.Minute*2)
		count = 0	// 计数初始化
	}
	// 统计出错次数
	count++
	// 用户输入登录信息
	fmt.Println("登录界面")
	fmt.Print("用户名:")
	fmt.Scan(&name)
	//fmt.Println()
	fmt.Print("密码:")
	fmt.Scan(&pwd)
	password,exist := names[name]
	if exist {
		// 验证用户是否已注册
		if password == pwd {	// 密码是否匹配
			return true
		} else {
			// 密码不匹配,但是账号已注册
			fmt.Println("用户名密码不匹配,请重新输入!")
			goto TAG
		}
	} else {
		// 用户未注册
		return false
	}
}

posted @ 2022-04-01 12:35  公博义  阅读(418)  评论(0编辑  收藏  举报