ATM程序 2.0

# 编写ATM程序实现下述功能,数据来源于文件db.txt
# 1、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt(验证是否重名)
# 2、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定,
# 登录成功后记录下登录状态(提示:可以使用全局变量来记录)
# 下述操作,要求登录后才能操作
# 1、查询余额功能:输入账号查询余额
# 2、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改
# 3、提现功能:用户输入提现金额,db.txt中该账号钱数减少(验证余额是否足够)
# 4、转账功能:用户A向B转账1000元,db.txt中完成A账号减钱,B账号加钱(验证对方账号是否存在,余额是否足够)

def logon():
    print('======注册账号======')
    while 1:
        logon_name = input('输入注册账号:').strip()
        logon_pwd = input('输入注册密码:').strip()
        logon_money = input('存入初始金额:').strip()
        with open(r'db.txt', mode='rt', encoding='utf-8')as file:
            for check_info in file:
                check_list = check_info.strip().split(':')
                if logon_name == check_list[0]:
                    print('该账号已存在,重新输入')
                    break
            else:
                break
    logon_info = logon_name + ':' + logon_pwd + ':' + logon_money + '\n'
    with open(r'db.txt', mode='at', encoding='utf-8')as file:
        file.write(logon_info)
    print('账号注册成功,以下是注册信息:')
    print('账号:{} 密码:{} 初始金额:{}'.format(logon_name, logon_pwd, logon_money))
    while 1:
        logon_choice = input('是否用此账号立即登录(1:立即登录,进入操作界面 2:用其他账号登录 0:退出程序):')
        if logon_choice == '1':
            logon_return = logon_name
            break
        elif logon_choice == '2':
            logon_return = '2'
            break
        elif logon_choice == '0':
            logon_return = '0'
            break
        else:
            print('指令不合法,重新输入')
    return logon_return


def login():
    print('======登录账号======')
    tag = 1
    miss_list = []
    while tag:
        login_name = input('输入登录账号:').strip()
        login_pwd = input('输入登录密码:').strip()
        with open(r'db.txt', mode='rt', encoding='utf-8')as file:
            for check_info in file:
                check_list = check_info.strip().split(':')
                if login_name == check_list[0] and login_pwd == check_list[1]:
                    print('登录成功,进入操作界面')
                    login_return = login_name
                    tag = 0
                    break
                elif login_name == check_list[0] and login_pwd != check_list[1]:
                    miss_list.append(login_name)
                    miss_count = miss_list.count(login_name)
                    if miss_count < 3:
                        print('密码错误,重新输入(账号{}还可以尝试{}次):'.format(login_name, 3 - miss_count))
                        break
                    else:
                        print('账号{}的密码已输错3次,退出程序'.format(login_name))
                        login_return = 'miss_3'
                        tag = 0
                        break
            else:
                print('账号不存在,重新输入')
    return login_return


def money_see(user_name):
    print('======查询余额======')
    with open(r'db.txt', mode='rt', encoding='utf-8')as file:
        for check_info in file:
            check_list = check_info.strip().split(':')
            if user_name == check_list[0]:
                print('账号{}的余额为:{}'.format(check_list[0], check_list[2]))
                break


def money_add(user_name):
    print('======账号充值======')
    in_money = input('输入充值金额:').strip()
    with open(r'db.txt', mode='rt', encoding='utf-8')as file:
        old_content = file.read()
        file.seek(0, 0)
        for check_info in file:
            check_list = check_info.strip().split(':')
            if user_name == check_list[0]:
                break
    new_money = int(check_list[2]) + int(in_money)
    new_money = str(new_money)
    new_info = check_info.replace(check_list[2], new_money)
    new_content = old_content.replace(check_info, new_info)
    with open(r'db.txt', mode='wt', encoding='utf-8')as file:
        file.write(new_content)
    print('充值成功,账号{}的余额变为:{}'.format(user_name, new_money))


def money_cut(user_name):
    print('======账号提现======')
    tag = 1
    out_money = '0'
    while tag:
        out_money = input('输入提现金额:').strip()
        with open(r'db.txt', mode='rt', encoding='utf-8')as file:
            old_content = file.read()
            file.seek(0, 0)
            for check_info in file:
                check_list = check_info.strip().split(':')
                if user_name == check_list[0] and int(out_money) > int(check_list[2]):
                    print('提现金额超过余额,重新输入')
                    break
                elif user_name == check_list[0]:
                    tag = 0
                    break
    new_money = int(check_list[2]) - int(out_money)
    new_money = str(new_money)
    new_info = check_info.replace(check_list[2], new_money)
    new_content = old_content.replace(check_info, new_info)
    with open(r'db.txt', mode='wt', encoding='utf-8')as file:
        file.write(new_content)
    print('用户{}的余额变为:{}'.format(user_name, new_money))


def money_send(user_name):
    print('======转账其他账号======')
    tag = 1
    tar_name = '0'
    while tag:
        tar_name = input('输入对方账号:').strip()
        with open(r'db.txt', mode='rt', encoding='utf-8')as file:
            old_content = file.read()
            file.seek(0, 0)
            for check_info in file:
                tar_check_list = check_info.strip().split(':')
                if tar_name == tar_check_list[0]:
                    tar_old_info = check_info
                    tag = 0
                    break
            else:
                print('对方账号不存在,重新输入')
    tag = 1
    out_money = '0'
    while tag:
        out_money = input('输入转账金额:').strip()
        with open(r'db.txt', mode='rt', encoding='utf-8')as file:
            for check_info in file:
                user_check_list = check_info.strip().split(':')
                if user_name == user_check_list[0] and int(out_money) > int(user_check_list[2]):
                    print('转账金额超过余额,重新输入')
                    break
                elif user_name == user_check_list[0]:
                    user_old_info = check_info
                    tag = 0
                    break
    tar_new_money = int(tar_check_list[2]) + int(out_money)
    tar_new_money = str(tar_new_money)
    tar_new_info = tar_old_info.replace(tar_check_list[2], tar_new_money)
    user_new_money = int(user_check_list[2]) + int(out_money)
    user_new_money = str(user_new_money)
    user_new_info = user_old_info.replace(user_check_list[2], user_new_money)
    new_content = old_content.replace(user_old_info, user_new_info)
    new_content = new_content.replace(tar_old_info, tar_new_info)
    with open(r'db.txt', mode='wt', encoding='utf-8')as file:
        file.write(new_content)
    print('转账成功')
    print('账号{}的金额变为:{}'.format(user_name, user_new_money))
    print('账号{}的金额变为:{}'.format(tar_name, tar_new_money))


def cmd_check(check_dict):
    cmd = '0'
    while 1:
        for view in check_dict:
            print(view, check_dict[view][0])
        cmd = input('输入操作指令:')
        if cmd not in check_dict:
            print('指令无效,重新输入')
        else:
            break
    return cmd


login_dict = {'1': ['注册', logon],
              '2': ['登录', login]
              }
func_dict = {'1': ['查询', money_see],
             '2': ['充值', money_add],
             '3': ['提现', money_cut],
             '4': ['转账', money_send]
             }
print('======欢迎使用老男孩银行ATM======')
login_cmd = cmd_check(login_dict)
login_choice = login_dict[login_cmd][1]()
if login_choice == '0':
    exit()
elif login_choice == '2':
    login()
user_name = login_choice
print('==========进入操作界面==========')
func_cmd = cmd_check(func_dict)
func_dict[func_cmd][1](user_name)
print('==========是否继续操作==========')

猜你喜欢

转载自www.cnblogs.com/caoyu080202201/p/12547439.html
atm