cainiaoqianxun

第三周周末作业

编写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

分类:

技术点:

相关文章: