编写程序, 如下有三点要求:
自定义用户信息数据结构, 写入文件, 然后读取出内容, 利用json模块进行数据的序列化和反序列化
e.g
{
"egon":{"password":"123",'status':False,'timeout':0},
"alex":{"password":"456",'status':False,'timeout':0},
}
定义用户类,定义方法db,例如 执行obj.db可以拿到用户数据结构
在该类中实现登录、退出方法, 登录成功将状态(status)修改为True, 退出将状态修改为False(退出要判断是否处于登录状态).\
密码输入错误三次将设置锁定时间(下次登录如果和当前时间比较大于10秒即不允许登录)
'''
有bug未及时调整
登出函数有问题
'''
import json
import time
def init_info():
user_if = {
"egon":{"password":"",'status':False,'timeout':0},
"alex":{"password":"",'status':False,'timeout':0},
}
with open('user_info','w',encoding='utf-8') as f:
json.dump(user_if,f) def read_info():
with open('user_info','r+',encoding='utf-8') as f:
print(json.load(f,encoding = 'utf-8')) user_name = ''
class User: def db(self):
'''
db方法:调用时打印当前用户信息和信息存储数据格式
:return:
'''
with open('user_info', 'r+', encoding='utf-8') as f:
user_info = json.load(f, encoding='utf-8')
for k, v in user_info.items():
print('username:%s -' % k, type(k),
'password:',[val for val in v.values()][0], type([val for val in v.values()][0]),
'status:',[val for val in v.values()][1], type([val for val in v.values()][1]),
'timeout:', [val for val in v.values()][2], type([val for val in v.values()][2]),
) def login(self):
'''
登录
登录成功将状态(status)修改为True
密码输入错误三次将设置锁定时间(下次登录如果和当前时间比较大于10秒即不允许登录)[个人理解应该是10秒内不能登录,这里的表述有问题]
:return:
'''
count = 0
while count < 3:
username = input('请输入用户名>>>').strip()
password = input('请输入密码>>>').strip()
with open('user_info', 'r+', encoding='utf-8') as f:
user_info = json.load(f, encoding='utf-8')
user_name_list = []
for k in user_info.keys():
user_name_list.append(k)
if username in user_name_list and password == user_info.get(username)['password']:
if user_info.get(username)['timeout'] - time.time()<0:
user_info.get(username)['status'] = True
print('用户:%s 登陆成功' % username)
user_dict = {username:user_info.get(username)}
user_name = username
with open('user_info','w+',encoding='utf-8') as f:
json.dump(user_info, f)
return user_dict[username]
else:
return '用户账号已锁定!'
elif count == 2:
if username in user_name_list:
user_info.get(username)['timeout'] = time.time()+10
with open('user_info','w+',encoding='utf-8') as f:
json.dump(user_info, f)
return '%s账户已锁定'%username else:
return '用户名不存在!' else:
print('账号或密码错误,还有%s次尝试机会'% (3-(count+1)))
count += 1 def logout(self):
'''
退出将状态修改为False(退出要判断是否处于登录状态)
:return:
'''
with open('user_info', 'r+', encoding='utf-8') as f:
user_info = json.load(f, encoding='utf-8')
user_list = []
for k in user_info.keys():
user_list.append(k)
if user_name in user_list:
print('当前登录账户%s'%user_name)
choice = input('请确认是否退出,是:Y 否:N').strip()
if choice == 'y'.upper() or choice == 'y'.lower():
user_info.get(user_name)['status'] = False
with open('user_info', 'w+', encoding='utf-8') as f:
json.dump(user_info, f)
else:
pass
else:
pass us = User()
# us.db()
u = us.login()
												

最新文章

  1. 怎么把jdk和jRE的Javadoc文档整合到MyEclipse
  2. oracle定时器
  3. Common Issues Which Cause Roles to Recycle
  4. 前端性能利器——dynatrace ajax edition
  5. hdu 1711Number Sequence
  6. Java中String类的方法及说明
  7. LeetCode39 Combination Sum
  8. nginx + lua 构建网站防护waf(一)
  9. 高性能动画!HTML5 Canvas JavaScript框架KineticJS
  10. excel时会弹出向程序发送命令时出现问题的提示框
  11. Sql Server 自定义函数(原创)
  12. SQL查询语句分类
  13. 如何在Microsoft Word里面插入图片作为背景/封面?
  14. LeetCode笔记:140. Word Break II
  15. rosetta mpi编译时出现 MPI has not been declared 错误
  16. Vue小案例 之 商品管理------为之前的页面修改样式
  17. 关于netcore 发布到服务器的准备
  18. 023.Zabbix自定义(邮箱)脚本告警-02
  19. EWD简介
  20. nginx静态资源浏览器缓存

热门文章

  1. Docker:分布式系统的软件工程革命(上)
  2. Iterator和for...of
  3. mybatis入门截图四(订单商品数据模型 一对一,一对多,多对多)
  4. windows无法开机解决方法
  5. CountDownLatch使用方法
  6. SqlHelper——仅仅由于在人群中多看了你一眼
  7. IOS-2-C语言和Objective-C语言衔接学习资料
  8. java基础——transient
  9. Mina airQQ聊天 client篇(三)
  10. 2015.05.12,外语,读书笔记-《Word Power Made Easy》 15 “如何谈论不同人的特点” SESSION 45