第三周周末作业

第三周周末作业

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

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

def register():
    tage = True
    while tage:
        print('<<注册账号>>')
        user = input('请输入账号: ').strip()
        pwd = input('请输入密码: ').strip()
        if not pwd.isdigit():
            print('密码必须输入数字!')
            continue
        pwd1 = input('请确认密码: ').strip()
        if pwd1 == pwd:
            print('注册成功')   
            with open('db.txt', mode='at', encoding='utf-8') as f:
                f.write(f'{user}:{pwd}\n')
                return
register()

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

import time
import os

user_info = {'user': None}


def login(username):
    while True:
        count = 0
        dic = {}
        with open('db.txt', mode='rt', encoding='utf-8') as f1:
            for line in f1:
                user, pwd = line.strip().split(':')
                dic[user] = pwd
        if username not in dic:
            print(f'账户{username}未注册,请先注册')
            register()
            continue
        elif os.path.exists(f'{username}.txt'):
            print(f'当前账户{username}已被锁定,五分钟后解锁')
            time.sleep(3)
            os.remove(f'{username}.txt')

            print(f'当前账户{username}解锁成功')
        elif user_info.get('user') == username:
            print(f'当前账户{username}也登录')
            return
        else:
            print(f'当前账户{username}还未登录,请先输入密码登录')
            while count < 3:
                pwd = input('请输入密码: ').strip()
                if not pwd.isdigit():
                    print('密码必须输入数字!')
                    continue
                elif pwd == dic.get(username):
                    print(f'{username}登录成功!')
                    user_info['user'] = username
                    break
                else:
                    count += 1
                    print(f'当前用户{username}密码错误!')
            else:
                with open(f'{username}.txt', mode='wt', encoding='utf-8') as f:
                    pass
                print(f'当前用户{username}已锁定')


# 文件db.txt内容:
# tom:111
# egon:222
# tank:333
login('tom')

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

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

# 文件db1.txt内容:
# tom:1
# egon:100
# tank:1000
user_info = {'uesr': None}
def pay_money(username, money):
    '''

    :param username: 充值账户
    :param money: 充值金额
    :return:
    '''
    if user_info.get('user') != username:
        print(f'当前账户{username}未登录,请先登录!')
        login(username)
    else:
        dic = {}
        with open('db1.txt', mode='rt', encoding='utf-8') as f:
            for line in f:
                user, principal = line.strip().split(':')
                principal = int(principal)
                dic[user] = principal
        dic[username] += money
        with open('db1.txt', mode='wt', encoding='utf-8') as f:
            for key, value in dic.items():
                f.write(f'{key}:{value}\n')

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

user_info = {'uesr': None}
def transfer(username):
    '''

    :param userA: 转账用户
    :return:
    '''
    if user_info.get('user') != username:
        print(f'当前账户{username}未登录,请先登录!')
        login(username)
    else:
        while True:
            username1=input('输入收款账户:').strip()
            money=input('输入转账金额:').strip()
            dic = {}
            with open('db1.txt', mode='rt', encoding='utf-8') as f:
                for line in f:
                    user, principal = line.strip().split(':')
                    principal = int(principal)
                    dic[user] = principal
            if username1 not in dic:
                print('收款账户不存在!')
                continue
            if not money.isdigit():
                print('转账金额必须输入整数!')
                continue
            else:
                money=int(money)
                if dic[username]>money or dic[username]==money:
                    dic[username] -= money
                    dic[username1] += money
                    with open('db1.txt', mode='wt', encoding='utf-8') as f:
                        for key, value in dic.items():
                            f.write(f'{key}:{value}\n')
                        return
                else:
                    print(f'用户{username},余额不足{money}')

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

user_info = {'uesr': None}
def withdraw(username):
    '''

    :param userA: 提现用户
    :return:
    '''
    if user_info.get('user') != username:
        print(f'当前账户{username}未登录,请先登录!')
        login(username)
    else:
        while True:
            money = input('提现金额:').strip()
            dic = {}
            with open('db1.txt', mode='rt', encoding='utf-8') as f:
                for line in f:
                    user, principal = line.strip().split(':')
                    principal = int(principal)
                    dic[user] = principal
            if not money.isdigit():
                print('转账金额必须输入整数!')
                continue
            else:
                money = int(money)
                if dic[username] > money or dic[username] == money:
                    dic[username] -= money
                    res = dic[username]
                    print(f'用户{username},体现{money},余额{res}')
                    with open('db1.txt', mode='wt', encoding='utf-8') as f:
                        for key, value in dic.items():
                            f.write(f'{key}:{value}\n')
                        return
                else:
                    print(f'用户{username},余额不足{money}')

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

user_info = {'uesr': None}


def check_money(username):
    '''

    :param username: 查询账户
    :return:
    '''
    if user_info.get('user') != username:
        print(f'当前账户{username}未登录,请先登录!')
        login(username)
    else:
        dic = {}
        while True:
            with open('db1.txt', mode='rt', encoding='utf-8') as f:
                for line in f:
                    user, principal = line.strip().split(':')
                    principal = int(principal)
                    dic[user] = principal
                res = dic[username]
                print(f'当前账户{username}余额为{res}')
                return
posted @ 2020-03-22 20:59  风起千寻  阅读(179)  评论(0编辑  收藏  举报