目录:
1、程序功能
2、程序流程图
3、程序思路
4、程序源代码
5、程序不足
1、程序功能
1.1 注册功能用户可进行注册,每个注册成功的用户会自动添加一个lock_flag,这个参数初始为0,每登录密码错误一次加1,
当lock_flag=3时,锁定该用户。把用户名、密码与对应的lock_flag存于 userdata.txt 中。
1.2 登录功能
用户在注册之后可进行登录
情况1:登录名不存在。显示“找不到该用户,请重新输入”
情况2:登录名与登录密码正确,则显示“登录成功!”,然后把用户lock_flag清零
情况3:登录名正确,密码错误,显示“第 n 次密码输入错误,连续输入密码错误超过3次该用户将被锁定”(n = lock_flag),同时该用户lock_flag+1
情况4:若lock_flag已经等于3,则直接显示“抱歉,该用户已被锁定”
1.3 锁定功能
登录的时候,先查询用户对应的lock_flag值,若已经等于3,则锁定用户,即使此时输入密码正确也不允许登录。
2、程序流程图
3、程序思路
3.1 注册功能新建一个 userdata.txt 文件,按“用户名,密码,lock_flag”的格式存储,一行即是一个用户信息
3.2 登录功能
先把userdata.txt信息读入内存,然后查询是否有对应用户名存在,若无,则是情况1;
若存在则先查询用户名对应 lock_flag 是否为3,为3则是情况4;
若lock_flag小于3则继续查询对应密码与用户输入密码是否一致,若一致,则是情况2
若密码不一致,则是情况3.
3.3 锁定功能
准确来说,这是一个用来更新lock_flag的功能,把userdata.txt读入data列表中,查询对应的用户名与对应的lock_flag,
更新lock_flag参数后,把整个data列表重新写入userdata.txt。
4、程序源代码
# Author:李捷豪 # Time:2018.3.25 # Version:Python3.6 # Tools :Pycharm 2017.3.2 # 注册函数 def sign_up(): userdata = open("userdata.txt",'a+') username = input("请设定您的用户名:") password = input("请设定您的密码:") userdata.writelines(username+','+password+',0\n') # 这里的0就是lock_flag userdata.close() print(username,password) print("恭喜你完成了注册!\n") # 锁定函数(更新lock_flag函数) def lock(username,lock_flag): f = open("userdata.txt","r") lines = f.readlines() # 先把数据文件用自读形式读入内存,存于 lines 列表中 f.close() f_w = open("userdata.txt","w") # 把数据文件用只写形式打开,这样子等一下写入时会先清空原文件再重新写入 n = 0 # 索引变量 for line in lines: # 查找出对应的用户名在lines列表中的索引 dataline = line.split(",") if username == dataline[0]: n = lines.index(line) break name = dataline[0] password = dataline[1] flag = lock_flag new = name+","+password+","+str(flag)+"\n" lines[n] = new #把该元素更新 for i in lines: f_w.writelines(i) #把lines列表重新写入userdata.txt文件中 f_w.close() # 登录验证 函数 def sign_in(name, password): userdata = [] f = open("userdata.txt",'r') readlines = f.readlines() for userline in readlines: userdata = userline.split(",") username = userdata[0] userpassword = userdata[1] lock_flag = int(userdata[2].strip("\n")) if name == username: # 情况4:用户已被锁定 if lock_flag >= 3: return [-1,lock_flag] if password == userpassword: # 情况2:登录成功 lock_flag = 0 lock(name, lock_flag) return [1,lock_flag] elif password != userpassword: # 情况3:密码输入错误 lock_flag += 1 lock(name,lock_flag) return [2,lock_flag] else: # 情况1:找不到该用户 return [0] f.close() # 主程序 while True: print("程序选项如下") print("1.注册 2.登录 3.退出程序") i = input("请输入想做的事情对应的序号:") if i == '1': # 程序选项1:注册 sign_up() elif i == '2': # 程序选项2:登录 username = input("请输入您的用户名:") password = input("请输入您的密码:") flag = sign_in(username, password) if flag[0] == 0: print("找不到该用户,请重新输入\n") elif flag[0] == 1: print("恭喜你,登录成功!\n") elif flag[0] == 2: print("第"+ str(flag[1])+"次密码输入错误,连续输入密码错误超过3次该用户将被锁定\n") elif flag[0] == -1: print("抱歉,该用户已被锁定\n") elif i == '3': # 程序选项3:退出程序 print("已退出程序,谢谢\n") exit() else: print("输入错误,请重新输入\n")
github : https://github.com/better-king/sign_in-interface
5、程序不足
5.1 可注册同名用户5.2 锁定功能因为是每一次都完全重新写全部信息,因此若数据量很大,则效率会很低
5.3 注册时没有让用户再次输入密码确定,存在用户设定密码时误输入的风险
5.4 没有制作GUI