ATM机小程序

Posted shiguanggege

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ATM机小程序相关的知识,希望对你有一定的参考价值。

技术图片
用规范化项目录的格式模拟一个ATM系统。

项目功能:

登录(可支持多个账户(非同时)登录)
注册
查看余额
存钱
转账(给其他用户转钱)
查看账户流水
退出
提供的思路:ATM直译就是取款机,但是咱们是模拟一个取款机,此取款机可以完成实现存钱,转账,查看余额,以及查看账户流水等功能。

要求以及分值分配:

利用装饰器完成登录验证功能(3,4,5,6功能需要验证)。

登录功能要求:用户名、密码(密码需要md5加密)从文件中读取,进行三次验证,验证不成功则退出整个程序。

注册功能要求:

用户名要求:只能含有字母数字不能含有特殊字符并且要确保唯一性。
密码的要求:长度在6与14个字符之间,密文存储。
初始钱数:money: 0.
注意:每个用户的以上信息通过字典以及json模块,以用户名.json的形式存储,用户的json文件存储在db文件夹中。
查看余额功能要求:

用户登录成功之后,选择此功能即可显示账户余额,并且将每次查看记录通过日志的方式记录到用户日志中(用户日志文件建议为:用户名.log)。

存钱功能要求:

用户通过输入存储的钱数,然后将存储的钱累加到用户名.json那个json文件的字典中,并且将每次存钱记录通过日志的方式记录到用户日志中(用户日志文件建议为:用户名.log)。

转账功能要求:

用户通过输入对方用户名以及转账钱数完成给对方转账功能。

要检测输入的对方用户账户是否存在。
要检测你账户余额是否够用。
将每次转账记录通过日志的方式记录到用户日志中(用户日志文件建议为:用户名.log)。
查看流水要求:

用户通过选择此功能将用户专属的log打印出来。

整个项目完成流畅,逻辑清楚,极少bug。

采用软件开发规范进行书写

start:

import sys

sys.path.append(r‘C:\\Users\\zhoujinghua\\PycharmProjects\\project-nlp‘)
from qiche.ATM.core.src import start
start()

common:

from qiche.ATM.core import src
def warpper(f):
def func():
if src.dic1[‘state‘]==True:
f()
else:
print(‘请先登陆‘)
src.login()
f()
return func

src:

import json
import os
import hashlib
import re
import time
from ..conf import setting
from qiche.ATM.lib.common import warpper
def login():
count=2
while 3>0:
user= input(‘user:‘)
if os.path.exists(os.path.join(setting.NAM,f‘user.json‘)):
pwd =input(‘pwd:‘)
md5 = hashlib.md5()
md5.update(pwd.encode(‘utf-8‘))
md5.hexdigest()
if md5.hexdigest()==json.load(open(os.path.join(setting.NAM,f‘user.json‘),‘r‘,encoding=‘utf-8‘))[user]:
print(‘登陆成功‘)
dic1[‘state‘]=True
dic1[‘user‘]=user
return
else:
print(‘账号或密码错误‘)
count-=1
else:
print(‘用户不存在‘)
return exit()

def register():
dic2=
user=input(‘请输入注册用户名:‘)
if re.findall(‘[^a-zA-Z0-9]‘,user)==[] and os.path.exists(os.path.join(setting.NAM,f‘user.json‘))==False:
pwd=input(‘请输入注册密码:‘)
if 14>len(pwd)>6:
md5 = hashlib.md5()
md5.update(pwd.encode(‘utf-8‘))
md5.hexdigest()
dic2.setdefault(user,md5.hexdigest())
dic2.setdefault(‘money‘,0)

        json.dump(dic2,open(os.path.join(setting.NAM,f'user.json'),'a',encoding='utf-8'))
        print('注册成功')
    else:
        print('密码长度不符,请输入6-14字符')
else:
    print('用户名格式不对(只能是字母和数字)或用户已存在')

@warpper
def balance():
mo=json.load(open(os.path.join(setting.NAM,f"dic1[‘user‘].json"),‘r‘,encoding=‘utf-8‘))[‘money‘]
print(f‘账户余额mo‘)
dic3=
dic3.setdefault(time.strftime(("%Y-%m-%d %H:%M:%S",time.localtime(time.time)))),f‘查询一次余额,当前余额mo‘
json.dump(dic3,open(os.path.join(setting.RIJI,f"dic1[‘user‘].log."),‘a‘,encoding=‘utf-8‘))
@warpper
def Save():
moneys=input(‘请输入存钱的金额:‘)
se=json.load(open(os.path.join(setting.NAM, f"dic1[‘user‘].json"), ‘r‘, encoding=‘utf-8‘))
mone=se[‘money‘]+int(moneys)
se[‘money‘]=mone
json.dump(se,open(os.path.join(setting.NAM, f"dic1[‘user‘].json"), ‘w‘, encoding=‘utf-8‘))
with open(os.path.join(setting.RIJI, f"dic1[‘user‘].log"), "a", encoding="utf-8") as f:
f.write(f"time.strftime(‘%Y-%m-%d %H:%M:%S‘,time.localtime(time.time()))--dic1[‘user‘]--存款--存入moneys--余额为mone\\n")
print(f‘存款成功,余额mone‘)
@warpper
def Transfer():
user1=input(‘请输入转账用户‘)
if os.path.exists(os.path.join(setting.NAM,f‘user1.json‘))==True:
num=input(‘请输入转账金额:‘)
dic4=json.load(open(os.path.join(setting.NAM, f"dic1[‘user‘].json"), ‘r‘, encoding=‘utf-8‘))
if dic4[‘money‘]>int(num):
dic4[‘money‘]=dic4[‘money‘]-int(num)
json.dump(dic4, open(os.path.join(setting.NAM, f"dic1[‘user‘].json."), ‘w‘, encoding=‘utf-8‘))
with open(os.path.join(setting.RIJI, f"dic1[‘user‘].log"), "a", encoding="utf-8") as f:
f.write(f"time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(time.time())), dic1[‘user‘]向user1转账num元账户余额dic4[‘money‘]")
dic5 = json.load(open(os.path.join(setting.NAM, f"user1.json"), ‘r‘, encoding=‘utf-8‘))
dic5[‘money‘] = dic5[‘money‘] + int(num)
json.dump(dic5, open(os.path.join(setting.NAM, f"user1.json."), ‘w‘, encoding=‘utf-8‘))
with open(os.path.join(setting.RIJI, f"user1.log"), "a", encoding="utf-8") as f:
f.write(f"time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(time.time())), dic1[‘user‘]向user1转账num元账户余额dic5[‘money‘]")
print(‘转行成功‘)
else:
print(‘您的余额不足‘)

else:
    print('对方用户不存在')

@warpper
def streaming():
f=open(os.path.join(setting.RIJI, f"dic1[‘user‘].log"), "r", encoding="utf-8")
for i in f:
print(i)

msg="""
1.登录(可支持多个账户(非同时)登录)
2.注册
3.查看余额
4.存钱
5.转账(给其他用户转钱)
6.查看账户流水
7.退出
"""
dic=‘1‘:login,‘2‘:register,‘3‘:balance,‘4‘:Save,‘5‘:Transfer ,‘6‘:streaming,‘7‘:exit
dic1=‘user‘:‘‘,‘state‘:False
def start():
while 1:
print(msg)
Serial= input(‘请选择序号:‘)
if Serial in dic:
dicSerial
else:
print(‘输入有误,请重新输入‘)

setting:

NAM=R‘C:\\Users\\zhoujinghua\\PycharmProjects\\project-nlp\\qiche\\ATM\\db‘
RIJI=r‘C:\\Users\\zhoujinghua\\PycharmProjects\\project-nlp\\qiche\\ATM\\log‘

以上是关于ATM机小程序的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 小程序之ATM

Day22 小程序Credit Card(ATM),购物程序调用信用卡程序接口支付

ATM小程序

ATM小程序 v1

fastboot刷机小脚本

常见堡垒机小知识汇总-行云管家