Escribir sencillo programa de ATM

Para lograr las siguientes funciones:

 1, la recarga: cantidad de recarga de dinero al usuario que introduzca el número de cuenta para completar las modificaciones en db.txt dinero

 2, la función de transferencia: el usuario A a las transferencias de usuario B miembros que 1000, db.txt completó Guardar cuenta de dinero del usuario A, el usuario B para agregar cuenta de dinero

 3, función de caja: el usuario introduce la cantidad de retiros, la cuenta para reducir la cantidad de dinero en db.txt

 4, saldos de Control de funcionamiento: entrar en la consulta de saldo de cuenta

 5, los datos del archivo db.txt (ABM están todos en el mismo archivo entre)

 Elegido como el elegido para hacer: función Log

  Después de que el usuario inicie sesión correctamente, registrar la memoria de este estado, las funciones anteriores a cualquier estado conectado en ese momento, debe estar conectado a la operación

Código es el siguiente:

login_name = None  #选做中的选做重点

# 操作系统相关操作功能

def move_fuc():
    import os
    os.remove(r'{}'.format('db.txt'))
    os.rename(r'{}.swap'.format('db.txt'), r'{}'.format('db.txt'))

# 登录功能

def login_func():
    name_user = input('请输入您的账号:').strip()
    name_pwd = input('请输入您的密码:').strip()
    global login_name
    if not login_name:
        with open('db.txt','r',encoding='utf-8') as f:
            for line in f:
                x, y, *_ = line.strip().split(':')
                if x == name_user and y == name_pwd:
                    print('登陆成功')
                    login_name = name_user
                    return login_name
            else:
                print('账号密码错误')

    else:
        print('您已经登录了,请勿重复登录')

# 充值功能

def recharge_fuc():
    global login_name
    while True:
        if login_name:
            money = input('输入您想充值的金额:')
            with open(r'db.txt', 'rb') as rf, \
                    open(r'db.txt.swap', 'wb') as wf:
                while True:
                    user_msg = rf.readline().decode('utf-8')
                    *_, z = user_msg.strip().split(':')
                    if login_name in user_msg:
                        money = int(z) + int(money)
                        data = user_msg.replace('{}'.format(z), '{}'.format(money))
                        wf.write(data.encode('utf-8'))
                    else:
                        wf.write('{}'.format(user_msg).encode('utf-8'))
                    if len(user_msg) == 0:
                        break
            move_fuc()
            print('充值成功,现有金额为{}元'.format(money))
            return '充值成功'
        else:
            print('还没有登录,请登录后再操作,输入P登录或者输入任意键退出')
            inp_N = input('请输入符号:>>')
            if inp_N == 'P':
                login_func()
            else:
                print('退出')
                break


# 转账功能

def take_fuc():
    global login_name
    tag = 0
    while True:
        if login_name:
            name = input('输入您想转账的人:')
            with open(r'db.txt', 'rb') as f, \
                    open(r'db.txt.swap', 'wb') as wf:
                while True:
                    take_msg = f.readline().decode('utf-8')
                    x, *_= take_msg.strip().split(':')
                    if name == x:
                        tag = 1
                        break
                    elif not len(take_msg):
                        print('本银行没有该账号,玩呢?')
                        return
                f.seek(0, 0)
                money = input('输入您想转账的金额:')
                while tag:
                    take_msg = f.readline().decode('utf-8')
                    *_, z = take_msg.strip().split(':')
                    if name in take_msg:
                        money1 = int(z) + int(money)
                        data = take_msg.replace('{}'.format(z), '{}'.format(money1))
                        wf.write(data.encode('utf-8'))
                    elif login_name in take_msg:
                        if int(z) > int(money):
                            money2 = int(z) - int(money)
                            data = take_msg.replace('{}'.format(z), '{}'.format(money2))
                            wf.write(data.encode('utf-8'))
                            continue
                        else:
                            print('转账现金已经超过余额')
                            return '转账现金已经超过余额'
                    else:
                        wf.write('{}'.format(take_msg).encode('utf-8'))
                    if len(take_msg) == 0:
                        print('转账成功')
                        query_fuc()
                        break
            move_fuc()
            break
        else:
            print('还没有登录,请登录后再操作,输入P登录或者输入任意键退出')
            inp_N = input('请输入符号:>>')
            if inp_N == 'P':
                login_func()
            else:
                print('退出')
                break


# 查询余额功能

def query_fuc():
    global login_name
    while True:
        if login_name:
            with open(r'db.txt','rb') as f:
                while True:
                    query_msg = f.readline().decode('utf-8')
                    if login_name in query_msg:
                        *_ , z = query_msg.strip().split(':')
                        print('{}的账号余额为{}元'.format(login_name,z))
                        return z
        else:
            print('还没有登录,请登录后再操作,输入P登录或者输入任意键退出')
            inp_N = input('请输入符号:>>')
            if inp_N == 'P':
                login_func()
            else:
                print('退出')
                break


# 提现功能

def cash_func():
    global login_name
    while True:
        if login_name:
            money_cash = input('请输入您的提现金额:>>').strip()
            with open(r'db.txt', 'rb') as f, \
                    open(r'db.txt.swap', 'wb') as wf:
                while True:
                    cash_msg = f.readline().decode('utf-8')
                    if login_name in cash_msg:
                        *_ , z = cash_msg.strip().split(':')
                        if int(z) > int(money_cash):
                            money1 = int(z) - int(money_cash)
                            data = cash_msg.replace('{}'.format(z), '{}'.format(money1))
                            wf.write(data.encode('utf-8'))
                        else:
                            print('余额不足,提现失败')
                            return '余额不足,提现失败'
                    else:
                        wf.write('{}'.format(cash_msg).encode('utf-8'))
                    if len(cash_msg) == 0:
                        break
            move_fuc()
            print('提现成功')
            query_fuc()
            return '提现成功'
        else:
            print('还没有登录,请登录后再操作,输入P登录或者输入任意键退出')
        inp_N = input('请输入符号:>>')
        if inp_N == 'P':
            login_func()
        else:
            print('退出')
            break


# 主函数体

def main_func():
    contests_atm = {
        '1':login_func,
        '2':recharge_fuc,
        '3':take_fuc,
        '4':cash_func,
        '5':query_fuc,
        '6':'6'
    }
    while True:
        print("""
        ==============ATM====================
            '1':登录
            '2':充值
            '3':转账
            '4':提现
            '5':余额
            '6':退出
        ==============END====================     
        """)
        cmd = input('请输入命令编号>>: ').strip()
        if not cmd.isdigit():
            print('必须输入命令编号的数字,傻叉')
            continue
        if cmd not in contests_atm:
            print('输入的命令不存在')
            continue
        if cmd == '6':
            print('已成功退出!')
            break
        contests_atm[cmd]()


main_func()

problema:

1, mientras que bucle cuando la extracción de la asignación sólo puede tomar de una a dos o más será dado, para la circulación pero no hay problema.

2, cuando la definición del diccionario de la función después, valor de nuevo no puede agregar (), de lo contrario, se ejecutará directamente, no sé por qué.

3, puntos de reflexión, cuando el archivo de lectura y las operaciones de escritura en el modo B, la posición del puntero debe siempre prestar atención!

Supongo que te gusta

Origin www.cnblogs.com/Lance-WJ/p/12528924.html
Recomendado
Clasificación