importosimporthashlibimportjsonfrom conf importsettingsfrom lib importcommon#登录状态

status_dic ={'username': None,'status': False

}

flag=True

li=os.listdir(settings.user_path)#登录函数

deflogin():

count=0while count < 3:

username= input("请输入姓名:").strip()

password= input("请输入密码:").strip()

ret=hashlib.md5()

ret.update(password.encode("utf-8"))

pwd=ret.hexdigest()

with open(settings.user_path+'\\'+username +".json",encoding="utf-8") as f:

s=json.loads(f.readline())if username+'.json' in li and s[username] ==pwd:

status_dic["username"] =username

status_dic['status'] = True #状态改为True

print("登陆成功")returnTrueelse:print("账号或密码错误,请重新登录")

count+= 1

#注册函数

defregister():

count=0while count < 3:

username= input("请输入新账号:").strip()

password= input("请输新入密码:").strip()if username in li: #判断用户是否在文件中存在

print("用户名已存在,请重新输入")continue

elif not username.isalnum(): #判断用户是否是字母或数字组成

print("账号含有非法字符,请重新输入")continue

elif 5 < len(password) < 15: #限制密码在6-14位之间

dic ={}

md5=hashlib.md5()

md5.update(password.encode("utf-8"))

pwd=md5.hexdigest()

with open(settings.user_path+'\\'+username +".json", encoding="utf-8", mode="w") as f1:

dic[username]=pwd

dic.setdefault("money",0)

s=json.dumps(dic)

f1.write(s+"\n")print("恭喜!注册成功")returnTrueelse:print("密码不合规范,请重新输入")

count+= 1@common.authdeflook_money():print("您已进入查看余额功能")

with open(settings.user_path+ '\\' + status_dic["username"] + '.json', encoding="utf-8", mode="r") as f:

ret=json.loads(f.read())print(f'余额为:{ret["money"]}')

@common.authdefmoney():print("您已进入存钱功能")

c_money= input("请输入要存储的金额:").strip()

cq_money=int(c_money)

with open(settings.user_path+'\\'+status_dic["username"] +'.json',encoding="utf-8",mode="r") as f3,\

open(settings.user_path+'\\'+status_dic["username"] +'.bak',encoding="utf-8",mode="w") as f4:

ret=json.loads(f3.readline())

ret["money"] +=cq_money

s=json.dumps(ret)

f4.write(s)

os.remove(settings.user_path+'\\'+status_dic["username"] +'.json')

os.rename(settings.user_path+'\\'+status_dic["username"] +'.bak',settings.user_path+'\\'+status_dic["username"] +'.json')print(f"恭喜存钱成功")

@common.authdefzq_money():print("您已进入转账功能")

zz_user= input("请输入对方账户:").strip()

zz_money= int(input("请输入要转的金额:").strip())

zz_user1= zz_user + ".json"

if zz_user1 not in li: #判断用户是否在文件中存在

print("用户名不存在")else:

with open(settings.user_path+ '\\' + status_dic["username"] + '.json', encoding="utf-8", mode="r") as f1, \

open(settings.user_path+ '\\' + status_dic["username"] + '.bak', encoding="utf-8", mode="w") as f2:

ret=json.loads(f1.readline())

ret["money"] -=zz_money

s=json.dumps(ret)

f2.write(s)

os.remove(settings.user_path+ '\\' + status_dic["username"] + '.json')

os.rename(settings.user_path+ '\\' + status_dic["username"] + '.bak',

settings.user_path+ '\\' + status_dic["username"] + '.json')

with open(settings.user_path+ '\\' + zz_user1, encoding="utf-8", mode="r") as f2, \

open(settings.user_path+ '\\' + zz_user1+".bak", encoding="utf-8", mode="w") as f3:

ret=json.loads(f2.readline())

ret["money"] +=zz_money

s=json.dumps(ret)

f3.write(s)

os.remove(settings.user_path+ '\\' +zz_user1)

os.rename(settings.user_path+ '\\' + zz_user1+".bak",

settings.user_path+ '\\' +zz_user1)print("转账交易成功")

@common.authdefch_user():print("您已进入查看账户流水功能")

logger=common.record_logger()

logger.info(f'status_dic["username"]进行了流水操作')#退出程序

defexit_program():globalflag

flag=Falsereturnflagdefrun():

choice_dict={1: login,2: register,3: look_money,4: money,5: zq_money,6: ch_user,7: exit_program,

}whileflag:print('''欢迎来到ATM系统

1:请登录

2:请注册

3:查看余额

4:存钱

5:转账

6:查看账户流水

7:退出程序''')

choice= input('请输入您选择的序号:').strip()ifchoice.isdigit():

choice=int(choice)if 0 < choice <=len(choice_dict):

choice_dict[choice]()else:print("您输入的超出范围")else:print("输入不合规范,重新输入")

python作业atm_python完成ATM(分目录)相关推荐

  1. python atm作业详解_python完成ATM(分目录)

    模块跳转: 项目需求: 用**规范化项目目录**的格式模拟一个ATM系统. 项目功能: 1. 登录(可支持多个账户(非同时)登录). 2. 注册. 3. 查看余额. 4. 存钱. 5. 转账(给其他用 ...

  2. python算法完整教程专栏完整目录

    python算法完整教程专栏完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:python算法完整教程 数量:692篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加上去 ...

  3. github标星11600+:最全的吴恩达机器学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!)...

    吴恩达老师的机器学习课程,可以说是机器学习入门的第一课和最热门课程,我在github开源了吴恩达机器学习个人笔记,用python复现了课程作业,成为热门项目,star数达到11671+,曾经有相关报道 ...

  4. python作业爬取xxx大学排行

    python作业爬取xxx大学排名榜单,python-selenium爬虫解决(本文章仅学习,网站数据也是公开的) 文章目录 前言 一.分析网页 二.需要实现过程 三.代码实现 1.引入库 2.全部代 ...

  5. HIT暑假python作业三《超级画板》

    HIT暑假python作业三<超级画板> 作业上交版代码 编译版 程序运行效果**(运行时确保同目录下有文件夹img,里面有pen,eraser,plus,minus四个png图象,如果没 ...

  6. 模式识别与机器学习(Python实现):决策树分男女

    模式识别与机器学习(Python实现):决策树分男女 欢迎大家来到安静到无声的<模式识别与人工智能(程序与算法)>,如果对所写内容感兴趣请看模式识别与人工智能(程序与算法)系列讲解 - 总 ...

  7. 使用Python批量删除windows下特定目录的N天前的旧文件实战:Windows下批量删除旧文件、清除缓存文件、解救C盘、拒绝C盘爆炸

    使用Python批量删除windows下特定目录的N天前的旧文件实战:Windows下批量删除旧文件.清除缓存文件.解救C盘.拒绝C盘爆炸 目录

  8. Python中import导入上一级目录模块及循环import问题的解决

    Python中import导入上一级目录模块及循环import问题的解决 参考文章: (1)Python中import导入上一级目录模块及循环import问题的解决 (2)https://www.cn ...

  9. python打开指定文件-python打包压缩、读取指定目录下的指定类型文件

    下面通过代码给大家介绍python打包压缩指定目录下的指定类型文件,具体代码如下所示: import os import datetime import tarfile import fnmatch ...

最新文章

  1. 多模态人物识别技术及其在视频场景中的应用 | CSDN技术公开课
  2. 联想服务器 重装系统u盘启动,联想_Lenovo BIOS Setup Utility 设置U盘启动教程
  3. caffe读书笔记1 CIFAR-10在caffe上进行训练与学习
  4. pycharm解决pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool
  5. Mac是大脑,iPad是四肢 如何实现的呢?右键而已
  6. Android 程序打包及签名
  7. concat特征融合_深度特征融合---理解add和concat之多层特征融合
  8. 使用Nginx+uWSGI部署Django项目
  9. 深入谈一谈iOS模块独立运行
  10. 基于TCP协议的网络摄像头的设计与实现
  11. java获取文件大小_Java获取文件大小
  12. 学以致用二十四-----shell脚本中的列表及space
  13. 立创开源|PCIE X1转PCIE X16
  14. composer 换国内镜像
  15. 全球与中国多模连续光纤激光器市场现状及未来发展趋势
  16. 水晶报表中如何创建自定义的纸张大小格式?
  17. Android Gatekeeper梳理
  18. OLTP vs OLAP 区别和联系
  19. 果园篱笆c语言算法,凸包问题(果园篱笆)
  20. php视频转音频文件怎么打开,视频怎么转音频格式 MP4格式怎样转MP3格式

热门文章

  1. 创建表的时候要添加目标语句use
  2. 人民大学的《统计学》
  3. Python通过正则表达式去除(过滤)HTML标签,提取文字
  4. 使用mybatis插入数据(insert)时返回主键的问题
  5. day17 appium环境搭建
  6. 【剑指Offer学习】【面试题66:矩阵中的路径】
  7. Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明
  8. 【转载】100多个很有用的JavaScript函数以及基础写法大集合
  9. leetcode. Intersection of Two Linked Lists
  10. 游戏里的---Change