在上一个文章中也介绍了整个ATM程序的效果展示,以及各个功能模块是怎样的。那么现在这篇文章就来说说用户登录模块的具体实现是怎么样的。
我们是本着使用最基础的python基础来实现这个ATM程序,所以账号密码我们是以文件的形式存入,当需要使用时,就通过pickle序列化出来。代码中我也有注释,下面我就把代码附上,有需要的也可以敲敲。
以下为程序代码,由于代码存在缩进等格式,所以复制出来的代码缩进显示可能会有问题,所以可以根据截图来调整缩进:
# cat login.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys,pickle,time
import getpass ###密码隐藏输入的模块
def login():
account_file = file('account.pkl','rb')
account_info = pickle.load(account_file) ###将序列化的账号信息反序列化成原来的字典
account_file.close()
count = 0 ###设定密码输入次数初始值为0
global name ###设置name为全局变量,方便后续的case,shopping,repayment,query模块调用name白能量
while True:
name = raw_input('\033[31;1m请输入你的名字:\033[0m').strip()
if account_info.has_key(name): ###先判断账户字典文件中,是否有这个名字
if account_info[name][3] == '0': ###如果这个人的账号是正常状态,正常为0,锁定为1
count = 0
while count < 3: ###如果密码输入错误次数未达到3次
#pwd = raw_input('\033[31;1m请输入你的密码,输错三次密码账户就会被锁定,请谨慎输入:\033[0m').strip()
pwd = getpass.getpass("\033[31;1m请输入你的密码,输错三次密码账户就会被锁定,请谨慎输入:\033[0m").strip()
if pwd == account_info[name][0]: ###如果密码是正确的
now = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) ###记录当时的时间
logfile = file('login.log','a')
logfile.write("[%s] %s 登录ATM系统!\n" % (now,name))
logfile.flush()
logfile.close()
return name ###返回name的值继续给其他函数调用
else:
print "\033[31;1m密码输入错误!请输入正确密码!\033[0m"
count = count + 1
continue
else:
account_info[name][3] = 1 ###密码输入错误3次,账号被锁定
account_file = file('account.pkl','wb')
pickle.dump(account_info,account_file)
now = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) ###记录当时的时间
logfile = file('login.log','a')
logfile.write("[%s] %s 该用户连续输错三次密码,该账号已被锁定!\n" % (now,name))
logfile.flush()
logfile.close()
print "\033[31;1m由于你连续输错了三次密码,你的账号已被锁定,请稍后再试!\033[0m"
sys.exit()
else:
print "\033[31;1m你的账号已被锁定,请稍后再试!\033[0m"
sys.exit()
else:
print "\033[31;1m系统中没有你输入的用户,请确认你输入的账号是否正确!\033[0m"
continue
后话
文章属原创,未经允许,请尊重原创,请勿在其他地方抄袭发表。
写文章不易,我会坚持更新,希望大家多多关注点赞,如果有什么想法,或者想我出什么类型什么内容的文章,可以在文章下方评论,我会尽我所能满足大家的要求,谢谢。