用任意一种语言实现登陆接口
作者:尹正杰
版权声明:
本篇博客仅仅用于交流学习使用,对一些小功能的实现,来练习对代码的熟练度。同时,本篇博客允许转载,用于互相交流学习,转载必须在博客声明原链接!
练习一:
功能需求:
1>.输入用户名密码;
2>.认证成功后显示欢迎信息;
3>.输错三次后锁定;
1 yinzhengjie
1 yinzhengjie 123 2 bingan 123 3 mazhixing 123 4 xulei 123 5 baoge 123 6 xiaoran 123 7 wuchuanfang 123 8 luojiyin 123 9 songjiang 123 10 wangsheng 123 11 wangzhiqiang 123 12 chenchao 123 13 chenkun 123 14 zhaoyuanhai 123 15 xuezhaomeng 123 16 zhenyansheng 123 17 fangheyi 123 18 wudonghang 123
golang代码实现效果如下:
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie 5 EMAIL:y1053419035@qq.com 6 */ 7 8 package main 9 10 import ( 11 "fmt" 12 "bufio" 13 "os" 14 "strings" 15 "log" 16 "io" 17 ) 18 19 var ( 20 user string 21 passwd string 22 line string 23 filepath string 24 lockpath string 25 retry int 26 user_locked bool = false 27 user_presence bool = false 28 validation_success bool = false 29 ) 30 31 func GetLoginInfo() (user,passwd string) { 32 f := bufio.NewReader(os.Stdin) 33 for { 34 fmt.Print("请输入用户名:") 35 line,_ = f.ReadString('\n') 36 if len(line) == 1 { 37 continue 38 } 39 line = strings.TrimSpace(line) 40 fmt.Sscan(line,&user) 41 fmt.Print("请输入密 码:") 42 line,_ = f.ReadString('\n') 43 if len(line) == 1 { 44 continue 45 } 46 line = strings.TrimSpace(line) 47 fmt.Sscan(line,&passwd) 48 //fmt.Printf("用户名是:%s,密码是%s\n",user,passwd) 49 return user,passwd 50 } 51 } 52 53 func GetFileInfo(filepath string)(res []string){ 54 var fileds []string 55 f,err := os.Open(filepath) 56 defer f.Close() 57 if err != nil { 58 log.Fatal(err) 59 } 60 r := bufio.NewReader(f) 61 for { 62 line,err := r.ReadString('\n') 63 if err == io.EOF { 64 break 65 } 66 line = strings.TrimSpace(line) 67 fileds = append(fileds, line) 68 //fmt.Println(line) 69 } 70 return fileds 71 } 72 73 func UserCounts(user string) map[string]int { 74 var res map[string]int 75 res = make(map[string]int) 76 res[user] = retry + 1 77 return res 78 } 79 80 func main() { 81 var res map[string]int 82 lockpath = "E:\\Code\\Golang\\Golang环境\\yinzhengjie\\Golang作业\\Day1\\lock.info" 83 filepath = "E:\\Code\\Golang\\Golang环境\\yinzhengjie\\Golang作业\\Day1\\student.info" 84 user,passwd = GetLoginInfo() 85 res = UserCounts(user) 86 for { 87 lock_res := GetFileInfo(lockpath) 88 for _,member := range lock_res{ //判断用户是否被锁! 89 if user == member{ 90 user_locked = true 91 } 92 } 93 if user_locked == true { 94 fmt.Println("该用户已经被锁定!") 95 break 96 } 97 98 login_res := GetFileInfo(filepath) //验证用户密码是否正确 99 for _,v := range login_res{ 100 if user == strings.Fields(v)[0] { 101 user_presence = true 102 if passwd == strings.Fields(v)[1] { 103 validation_success = true 104 break 105 } 106 } 107 } 108 if user_presence == true && validation_success == true{ 109 fmt.Println("恭喜你,登陆成功哟!") 110 break 111 } 112 if user_presence == true && validation_success == false{ 113 res[user] += 1 114 fmt.Println("用户名或密码错误!") 115 user,passwd = GetLoginInfo() 116 if res[user] > 2 { 117 fmt.Printf("重试次数上限!该用户`%v`已被锁定\n",user) 118 break 119 } 120 } 121 if user_presence == false && validation_success == false { 122 fmt.Println("输入的用户不存在!") 123 user,passwd = GetLoginInfo() 124 } 125 } 126 }
python代码实现效果如下:
1 yinzhengjie|123|3 2 yzj|666|2
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ 5 #EMAIL:y1053419035@qq.com 6 7 f1 = open('UserAuthenticationFile.txt','r') #以只读的方式打开文件 8 data = f1.read() #读取文件的内容 9 f1.close() #关闭文件句柄 10 11 user_info_list = [] 12 user_str_list = data.split('\n') #按照换行符将读取出来的数据进行第一次切割 13 for item in user_str_list: 14 temp = item.split('|') #将第一次切割后的每个元素再次进行切割 15 info = { 16 'name' : temp[0].strip(), #将切割后的每一个元素分别赋值 17 'passwd': temp[1].strip(), 18 'retry':temp[2].strip() 19 } 20 user_info_list.append(info) 21 22 VerifySuccess = False #用于判断是否验证成功的标志位,默认为false。 23 UserLocked = False #用于判断用户是否被锁定,默认为false。 24 retry = 1 #定义用户尝试登陆的次数。 25 26 while retry < 4: #用来确定循环次数 27 username = input("请输入您的用户名>>>") 28 password = input("请输入您的密 码>>>") 29 for user_info in user_info_list: 30 if username == user_info["name"] and password == user_info["passwd"]: 31 if int(user_info["retry"]) < 3: 32 print("登陆成功!") 33 VerifySuccess = True #我这里定义了一个标志位,当验证登陆成功后,将flag的值改为Ture并终止当前的for循环。 34 user_info["retry"] = 0 #验证登陆成功之后,需要把尝试登陆成次数清空。 35 break 36 else: 37 print("您的账户已经被冻结,请联系管理员解封!") 38 UserLocked = True 39 break 40 if VerifySuccess == True: 41 break 42 elif UserLocked == True: 43 UserLocked == False 44 retry += 1 45 continue 46 else: 47 print("用户名或密码错误!") 48 retry += 1 49 50 print(user_info_list) 51 f2 = open('UserAuthenticationFile.txt',"w") #这种方式是以清空的方式打开。 52 for i in user_info_list: 53 f2.write(i["name"]+"|"+i["passwd"]+"|"+str(i["retry"])) 54 f2.write("\n") 55 f2.close()
shell代码实现效果如下:
c++代码实现效果如下:
JAVA代码实现效果如下:
JS代码实现效果如下:
PHP代码实现效果如下: