python基础之简易ATM的实现

编写ATM程序实现下述功能,数据来源于文件db.txt

0、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt

1、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定,登录成功后记录下登录状态(提示:可以使用全局变量来记录)

下述操作,要求登录后才能操作

1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改

2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱

3、提现功能:用户输入提现金额,db.txt中该账号钱数减少

4、查询余额功能:输入账号查询余额


def user():
    # 用户信息读取
    txt = 'db.txt'
    dict_user = {}

    def read_user():
        with open(txt, 'rb') as f:
            for line in f:
                line = line.decode('utf-8')
                s = line.strip().split(":")
                dict_user[s[0]] = [s[1], s[2], s[3]]
        return dict_user

    return read_user


def w_user(dict_user=None):
    # 用户信息写入
    txt = 'db.txt'

    def write_user():
        with open(txt, 'wb') as f:
            for x in dict_user:
                f.write(f'{x}:{dict_user.get(x)[0]}:{dict_user.get(x)[1]}:'
                        f'{dict_user.get(x)[2]}\n'.encode('utf-8'))
        return dict_user

    return write_user


def register():
    # 注册功能
    dict_user = user()()
    print('注册'.center(50, '='))
    username = input('请输入用户名:').strip()
    if username in dict_user:
        print("用户名存在")
        time.sleep(0.5)
    else:
        password = input('请输入密码:').strip()
        again_pwd = input('请再次输入密码:').strip()
        if password == again_pwd:
            print("注册成功")
            with open('db.txt', 'ab') as f:
                f.write(f'{username}:{password}:{0}:{0}\n'.encode('utf-8'))
            time.sleep(0.5)
        else:
            print('密码输入不一致')


def login():
    # 登录功能
    print('登录'.center(50, '='))
    dict_user = user()()
    if not dict_username['user']:
        username = input("请输入用户名:").strip()
        password = input("请输入密码:").strip()
        if username not in dict_user:
            print("用户名不存在,请注册")
        else:
            in_name = dict_user.get(username)
            if in_name[2] == '3':
                print('账户已经被锁定,无法登录')
            else:
                if password == in_name[0]:
                    print('登录成功!')
                    dict_username['user'] = username
                    print("即将跳转回首页")
                    time.sleep(0.5)
                else:
                    if 2 - int(in_name[2]) == 0:
                        print("账户已锁定")
                    else:
                        print(f"密码错误,你还有{2 - int(in_name[2])}次机会")
                        in_name[2] = int(in_name[2]) + 1
                        w_user(dict_user)()
                        time.sleep(0.5)
    else:
        print("账户已经登录")


def pay_money():
    # 充值功能
    print('充值'.center(50, '='))
    dict_user = user()()
    if not dict_username['user']:
        username = input("请输入要充值的账户").strip()
        if username not in dict_user:
            print("充值的账户不存在")
        else:
            money = input("请输入要充值的金额").strip()
            if not money.isdigit() or int(money) < 0:
                print("请输入正确的金额")
            else:
                print(f"您将为{username}用户,充值{money}元")
                time.sleep(0.5)
                again = input("确认无误请输入Y/y,输入其他返回").strip()
                if again == 'Y' or again == 'y':
                    dict_user[username][1] = int(dict_user[username][1]) + int(money)
                    w_user(dict_user)()
                    print("充值成功!")
                    time.sleep(0.5)
                else:
                    print("充值失败!")
                    time.sleep(0.5)
    else:
        print("账户未登录,请先登录")


def transfer():
    # 转账功能
    print('转账'.center(50, '='))
    dict_user = user()()
    if not dict_username['user']:
        username = input("请输入转账的用户:").strip()
        if not username in dict_user:
            print("用户不存在")
        elif username == dict_username['user']:
            print("不能为自己的账户转账")
        else:
            money = input("请输入要转账的金额:").strip()
            user_money = int(dict_user.get(dict_username['user'])[1])
            # print(user_money)
            if not money.isdigit() or int(money) < 0:
                print("请输入正确的金额")
            elif int(money) > user_money:
                print("账户金额不足")
            else:
                print(f"您将要为{username}账户,转账{money}元")
                time.sleep(0.5)
                again = input("确认无误请输入Y/y,输入其他返回").strip()
                if again == 'Y' or again == 'y':
                    print("转账成功!")
                    dict_user.get(dict_username['user'])[1] = user_money - int(money)
                    dict_user.get(username)[1] = int(dict_user.get(username)[1]) + int(money)
                    w_user(dict_user)()
                    time.sleep(0.5)
                else:
                    print("转账失败!")
    else:
        print("账户未登录,请先登录")


def withdraw():
    # 提现功能
    print('提现'.center(50, '='))
    dict_user = user()()
    if not dict_username['user']:
        money = input("请输入要提现的金额:").strip()
        user_money = int(dict_user.get(dict_username['user'])[1])
        if not money.isdigit() or int(money) < 0:
            print("请输入正确的金额")
        elif int(money) > user_money:
            print("账户金额不足")
        else:
            print(f"您将要为提现{money}元")
            time.sleep(0.5)
            again = input("确认无误请输入Y/y,输入其他返回").strip()
            if again == 'Y' or again == 'y':
                print("提现成功!")
                dict_user.get(dict_username['user'])[1] = user_money - int(money)
                w_user(dict_user)()
                time.sleep(0.5)
            else:
                print("提现失败!")
    else:
        print("账户未登录,请先登录")


def check_money():
    # 查询余额功能
    print('查询'.center(50, '='))
    dict_user = user()()
    if not dict_username['user']:
        print(f'账户名:{dict_username["user"]}')
        print(f'账户余额:{dict_user.get(dict_username["user"])[1]}元')
    else:
        print("账户未登录,请先登录")


dict_func = {
    '0': ['退出', exit],
    '1': ['登录', login],
    '2': ['注册', register],
    '3': ['充值', pay_money],
    '4': ['转账', transfer],
    '5': ['提现', withdraw],
    '6': ['查询', check_money],

}
dict_username = {'user': None}
import time

while 1:
    print(''.center(52, '='))
    print('欢迎来到ATM系统')
    for x in dict_func:
        print(x + ':' + dict_func.get(x)[0])
    in_num = input("请输入对应功能的编号:\n")
    if not in_num.isdigit():
        print("请输入正确的数字编号")
    if in_num in dict_func:
        dict_func.get(in_num)[1]()
    else:
        print("输入的功能编号不存在")

        

猜你喜欢

转载自www.cnblogs.com/Henry121/p/12534442.html
今日推荐