第一次用pycharm写一个登陆程序很简单
# 2018/2/28 # 一个登陆程序,账号输入三次错误之后永久锁定,登陆成功错误数目清零 # 账号名为文件名,密码尝试次数为第一行,密码为第二行
主体函数
整个主体,还有功能的实现和函数(方法)会在下面分别贴出来
Flag = 1 # 首先使欢迎界面循环 while Flag: # 登录成功或者主动退出时置0 InputNumber = int(input(message)) # 等待用户输入,并将用户输入的数字变为int if InputNumber == 1: # 如果输入为1,进入登录界面 LoginFlag = 1 # 开放登录界面,退出时登录置0 while LoginFlag: UserName = input("请输入用户名:") # 缓存用户输入的用户名 if judgeusername(UserName): # 用函数判断用户名是否存在,存在返回1 State = judgetimes(UserName) # 返回用户登录状态 if State == 1: # 1.登录成功,退出系统 Flag = 0 LoginFlag = 0 elif State == 2: # 2.登录失败,要求继续登录回到登录界面 continue elif State == 3: # 3.用户已被锁定,退出登录 LoginFlag = 0 else: print("返回值错误!!!") # 防止BUG,返回值错误时的提示 else: # 用户名不存在 i2 = input("用户名不存在,请输入数字\n1.继续登录\n0.退出登录\n") if i2 == '0': # 退出登录 Flag = 1 LoginFlag = 0 elif i2 == '1': # 回到登录界面 continue else: # 输入错误,退出登录 print("输入错误已返回欢迎界面.") LoginFlag = 0 elif InputNumber == 2: # 进入注册界面 RegisterFlag = 1 # 退出注册时置0 while RegisterFlag: UserName = input("请输入想要创建的用户名:") # 缓存用户的注册名 if not judgeusername(UserName): # 检测用户名是否存在,存在返回1 Password = input("请输入密码:") # 用户名不存在让用户设置密码 adduser(UserName, Password) # 创建用户文件 print("创建成功,现在可以使用创建的用户登陆") # 提示用户可以登录 RegisterFlag = 0 # 退出注册 else: i3 = input("用户名已存在,请输入数字\n1.继续注册\n0.退出注册\n") if i3 == '1': continue # 继续注册 elif i3 == '0': RegisterFlag = 0 # 退出注册 else: print("输入错误已返回欢迎界面.") RegisterFlag = 0 # 退出注册 elif InputNumber == 3: print("欢迎使用本系统,欢迎下次使用.") Flag = 0 # 退出系统 else: print("输入错误情从新输入") # 输入错误时继续
1 欢迎界面实现代码
message = ''' 欢迎使用本系统,请输入数字: 1.登陆 2.注册 3.退出 ''' Flag = 1 # 首先使欢迎界面循环 while Flag: # 登录成功或者主动退出时置0 InputNumber = int(input(message)) # 等待用户输入,并将用户输入的数字变为int
1.1控制台显示情况
欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
2 注册界面实现代码
elif InputNumber == 2: # 进入注册界面 RegisterFlag = 1 # 退出注册时置0 while RegisterFlag: UserName = input("请输入想要创建的用户名:") # 缓存用户的注册名 if not judgeusername(UserName): # 检测用户名是否存在,存在返回1 Password = input("请输入密码:") # 用户名不存在让用户设置密码 adduser(UserName, Password) # 创建用户文件 print("创建成功,现在可以使用创建的用户登陆") # 提示用户可以登录 RegisterFlag = 0 # 退出注册 else: i3 = input("用户名已存在,请输入数字\n1.继续注册\n0.退出注册\n") if i3 == '1': continue # 继续注册 elif i3 == '0': RegisterFlag = 0 # 退出注册 else: print("输入错误已返回欢迎界面.") RegisterFlag = 0 # 退出注册
2.1查询用户名是否存在的函数
在整个程序运行之前需要先创建一个总用户名的txt文件(所有的用户的用户名都逐行存储在该文件中)
在注册时需要逐条查询用户名是否存在
def judgeusername(username): # 测试用户名是否存在 flag1 = 0 # 返回值先置0 fileobj = open("UserName.txt", "r") # 打开用户名文件UserName.txt for line in fileobj: # 逐行查找用户名是否存在 s = readline(line) # 缓存用户名 if username == s: # 对比成功将返回值置1 flag1 = 1 break # 退出循环 fileobj.close() # 文件关闭时还未查找到flag1为0 return flag1
2.2 读行函数(去换行符)
缓存用户名时用到一个自己写的读函数,因为读的是文件中一行一行的字符串,所以结尾会有一个换行符,对比时会出错,所以需要去掉换行符
def readline(str1): # 读函数,传过来的是字符串 sl = list(str1) # 字符串转列表 sl = sl[:-1] # 切片去掉换行符 sl = ''.join(sl) # 重新组合为没有换行符的字符串 return sl
2.3 创建用户个人文件
当注册成功时,新建用户个人文件1.以用户名命名文件名2.保存用户密码3.用户尝试登录次数
def adduser(name, password): fw = open("UserName.txt", "a") # 打开总用户名文件 fw.write(name+'\n') # 将新建用户加入该文件中 fw.close() # 关闭总用户名文件 filename = name+".txt" # 得到用户个人文件名 fnw = open(filename, "w") # 新建用户个人文件 fnw.write("0\n"+password) # 写入尝试登录次数以及密码 fnw.close() # 关闭用户个人文件
2.4 控制台
2.4.1 注册成功时
欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
2
请输入想要创建的用户名:ChaoMingzhi
请输入密码:chriszzz1
创建成功,现在可以使用创建的用户登陆
欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
2.4.2 注册失败时
欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
2
请输入想要创建的用户名:ChaoMingzhi
用户名已存在,请输入数字
1.继续注册
0.退出注册
1
请输入想要创建的用户名:ChaoMingzhi
用户名已存在,请输入数字
1.继续注册
0.退出注册
0
欢迎使用本系统,请输入数字:
1.登录
2.注册
3.退出
3 登录界面实现代码
if InputNumber == 1: # 如果输入为1,进入登录界面 LoginFlag = 1 # 开放登录界面,退出时登录置0 while LoginFlag: UserName = input("请输入用户名:") # 缓存用户输入的用户名 if judgeusername(UserName): # 用函数判断用户名是否存在,存在返回1 State = judgetimes(UserName) # 返回用户登录状态 if State == 1: # 1.登录成功,退出系统 Flag = 0 LoginFlag = 0 elif State == 2: # 2.登录失败,要求继续登录回到登录界面 continue elif State == 3: # 3.用户已被锁定,退出登录 LoginFlag = 0 else: print("返回值错误!!!") # 防止BUG,返回值错误时的提示 else: # 用户名不存在 i2 = input("用户名不存在,请输入数字\n1.继续登录\n0.退出登录\n") if i2 == '0': # 退出登录 Flag = 1 LoginFlag = 0 elif i2 == '1': # 回到登录界面 continue else: # 输入错误,退出登录 print("输入错误已返回欢迎界面.") LoginFlag = 0
3.1 判断用户名是否存在
上面已经贴过了,一样的原理
3.2 判断用户尝试登录次数
def judgetimes(username): site = username+".txt" # 得到用户个人文件名 f = open(site, "r") # 打开用户个人文件 ft = f.readlines() # 用列表缓存用户个人资料 f.close() times = int(ft[0][0]) # 第一行第一个字符为用户尝试登录数 if times < 3: # 012可以继续登录 password = input("请输入密码:") # 缓存用户输入密码 if password == ft[1]: # 密码对比成功 print("用户登陆成功,即将进入,请稍后.") changechar(ft, 0, 0, '0') # 用函数**将列表ft中尝试登录次数改为0 writefile(ft, site) # 用函数**将ft写入个用户个人文中 return 1 # 成功登录,退出所有循环 else: # 密码对比失败 times += 1 # 尝试登录次数+1 wtimes = chr(times+48) # 数字和字符的更改 数字1的ASCⅡ码为49 changechar(ft, 0, 0, wtimes) # 同上 writefile(ft, site) # 同上 if times < 3: # 尝试登录次数小于3 print("密码输入错误"+wtimes+"次,输入错误达到三次将被锁定\n") i1 = input("请输入数字:\n1.继续登录\n0.退出登录\n") if i1 == '0': return 3 # 接刚才的主函数中的state elif i1 == '1': return 2 else: print("输入错误,已回到欢迎界面") return 3 else: print("密码输入错误已达3次,该账户已被锁定,请联系管理员.") return 3 else: print("该账户已被锁定,请联系管理员.") return 3
3.2.1 更改列表中的某个字符
def changechar(l, m, n, a): # 将l表中的第m行,第n个字符,换为字符a ltemp = list(l[m]) # 将列表中的第m行变为列表 ltemp[n] = a # 更改第n个字符为a ltemp = ''.join(ltemp) # 重新拼接 l[m] = ltemp
3.2.2 更改用户个人文件
def writefile(l, site): # 将列表l的内容写入路径为site的文件 fw = open(site, 'w+') # 打开用户个人文件 for line in l: # 逐行写入 fw.write(line) fw.close() # 关闭文件
3.3 控制台
3.3.1 登录成功
欢迎使用本系统,请输入数字: 1.登录 2.注册 3.退出 1 请输入用户名:ChaoMingzhi 请输入密码:chriszzz1 用户登陆成功,即将进入,请稍后.
3.3.2 登录失败
欢迎使用本系统,请输入数字: 1.登录 2.注册 3.退出 1 请输入用户名:ChaoMingzhi 请输入密码:1 密码输入错误1次,输入错误达到三次将被锁定 请输入数字: 1.继续登录 0.退出登录 1 请输入用户名:ChaoMingzhi 请输入密码:1 密码输入错误2次,输入错误达到三次将被锁定 请输入数字: 1.继续登录 0.退出登录 0 欢迎使用本系统,请输入数字: 1.登录 2.注册 3.退出 1 请输入用户名:ChaoMingzhi 请输入密码:1 密码输入错误已达3次,该账户已被锁定,请联系管理员. 欢迎使用本系统,请输入数字: 1.登录 2.注册 3.退出 1 请输入用户名:ChaoMingzhi 该账户已被锁定,请联系管理员. 欢迎使用本系统,请输入数字: 1.登录 2.注册 3.退出
4 退出界面
4.1 退出界面实现代码
elif InputNumber == 3: print("欢迎使用本系统,欢迎下次使用.") Flag = 0 # 退出系统
4.2 控制台
欢迎使用本系统,请输入数字: 1.登录 2.注册 3.退出 3 欢迎使用本系统,欢迎下次使用.
5 欢迎界面输入错误
5.1 实现代码
else: print("输入错误情从新输入") # 输入错误时继续
5.2 控制台
欢迎使用本系统,请输入数字: 1.登录 2.注册 3.退出 4 输入错误情从新输入 欢迎使用本系统,请输入数字: 1.登录 2.注册 3.退出
第一次写博客,堪比写论文,文笔也很服气,如果大神有空帮我
看下哪些地方有什么可以改进的,小弟感激不尽