目录:
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