新手练习系统:系统账户系统


#1、登陆账号的校验
def check_account(account_info):
    #flag1 = True
    while True:
        # 获取用户输入账号
        user_input = input("请输入账号:")
        # 判断账号是否存在
        if user_input in account_info:
            # 账号输入正确,退出循环,去输入密码
           # flag1 = False
            return user_input
        # 账号不存在
        else:
            # 提示账号不存在
            print("输入错误,账号未注册")
            # 让用户选择是否重新输入,需要获取用户再次输入
            mark = input("是否重新输入账号: 其他值: 不重新输入 ,1:重新输入:")
            if mark == "1":
                # 重新输入账号
                print("重新输入账号")
                continue
            else:
                print("退出程序")
                exit()
#2、登陆密码校验
def check_passwd(account_info,user_input):
    #flag2 = True
    error_count = 0
    while True:
        # 获取密码输入
        passwd_input = input("请输入密码:")
        if passwd_input == account_info[user_input]["passwd"]:
            # 密码正确,进入服务选择页面
            print("密码:", account_info[user_input]["passwd"])
            # flag2 = False
            # flag0 = False  # 退出一级菜单循环
            return passwd_input
        else:
            error_count += 1
            # 密码输入错误
            # 输错密码的说计数,输错一次计数一次

            if error_count == 3:
                exit()  # 退出程序
            else:
                mark = input("是否重新输入密码:1,重新输入,其他,退出: ")
                if mark == "1":
                    if error_count < 3:
                        continue
                    else:
                        exit()  # 退出程序
                else:
                    exit()  # 退出程序
#3、注册账号校验
def check_account_register(account_info):
    print("2-注册")
    # 账号校验
    # flag3 = True
    while True:
        # 账号校验,用户输入的数据类型是str
        account_input = input("输入注册账号,账号必须是纯数字: ")
        # 纯数字校验
        if account_input.isnumeric():
            # 账号是否注册校验
            if account_input not in account_info:
                # 走校验密码流程
                # flag3 = False
                return account_input
            else:
                mark = input("账号已存在\n请选择是否重新输入,1,重新输入账号,其他值,退出程序:")
                if mark == "1":
                    # 重新输入账号
                    continue
                else:
                    # 退出程序
                    exit()
        else:
            mark = input("账号必须是纯数字\n请选择是否重新输入,1,重新输入账号,其他值,退出程序:")
            if mark == "1":
                # 重新输入账号
                continue
            else:
                # 退出程序
                exit()
# 注册密码校验
def check_passwd_register():
    #flag4 = True
    while True:
        # 获取用户输入
        passwd_input = input("请输入密码,密码必须是6位纯数字:")
        # 密码校验是否为6位纯数字
        if passwd_input.isnumeric() and len(passwd_input) == 6:
            # 密码输入正确,继续校验用户名
            print("密码输入正确")

            #flag4 = False
            return passwd_input
        else:
            print("不是6位纯数字,选择是否重新输入密码")
            mark = input("密码必须是6位纯数字\n请选择是否重新输入,1,重新输入密码,其他值,退出程序:")
            if mark == "1":
                # 重新输入账号
                continue
            else:
                # 退出程序
                exit()
#注册姓名校验
def check_name_register():
    #flag5 = True
    while True:
        name_input = input("请输入开户姓名:")
        if name_input:
            print("开户姓名输入正确")
            #flag5 = False
            return name_input
        else:
            mark = input("开户姓名不能为空\n请选择是否重新输入,1,重新输入开户姓名,其他值,退出程序:")
            if mark == "1":
                # 重新输入账号
                continue
            else:
                # 退出程序
                exit()
#开户金额校验
def check_amount_register():
    #flag6 = True
    while True:
        amount_input = input("请输入开户金额:")
        if amount_input.isnumeric():
            print("开户金额输入正确")
            # flag6 = False
            return amount_input
        else:
            mark = input("开户姓名不能为空\n请选择是否重新输入,1,重新输入开户金额,其他值,退出程序:")
            if mark == "1":
                # 重新输入账号
                continue
            else:
                # 退出程序
                exit()

# 保存注册信息
def save_register(account_info,account_input,passwd_input,name_input,amount_input):
    register_info = {account_input: {"passwd": passwd_input, "name": name_input, "balance": float(amount_input), "bill": []}}
    account_info.update(register_info)

    print(f"用户注册成功,注册信息:{register_info}")
    if account_input in account_info:
        print("信息保存成功")
        print(f"所有用户信息{account_info}")
    else:
        print("信息保存失败")
#1-查询余额
def select(account_info,user_input):
    print("1-查询余额")
    balance = account_info[user_input]["balance"]
    name = account_info[user_input]["name"]
    msg = f"尊敬的 {name} 先生/女士,您的账户余额为: {balance}元"
    print(msg)
#2-取款
def withdraw(account_info,user_input):
    print("2-取款")
    # 取款功能
    while True:
        withdraw_input = input("取款金额必须是纯数字,必须是100的整数倍且必须小于账户余额,单笔小于3000\n请输入取款金额:")
        # 出款账户
        balance = account_info[user_input]["balance"]
        if withdraw_input.isnumeric() and int(withdraw_input) % 100 == 0 and int(withdraw_input) <= 3000 and int(withdraw_input) <= balance:
            print("满足取款条件,可以取款")
            # 更新余额 =  余额 - 取款金额
            account_info[user_input]["balance"] = balance - int(withdraw_input)
            account_info[user_input]["bill"].append(f"取款支出-{withdraw_input}")
            print(f"取款金额:{withdraw_input}")
            print(f"账户余额:{account_info[user_input]['balance']}")
            mark = input("是否继续取款,1,继续取款,其他值,退出程序:")
            if mark == "1":
                # 继续取款
                continue
            else:
                # 退出取款循环
                break
        else:
            mark = input("取款金额必须是纯数字,必须是100的整数倍且必须小于账户余额,单笔小于3000\n请输入取款金额,1,重新输入取款金额,其他值,退出程序:")
            if mark == "1":
                # 重新输入取款金额
                continue
            else:
                #退出取款循环
                break
#3-存款
def deposit(account_info,user_input):
    print("3-存款")
    #flag8 = True

    while True:
        amount_input = input("存款金额必须为纯数字,100的整数倍,且小于1万,请输入存款金额: ")
        balance = account_info[user_input]["balance"]
        if amount_input.isnumeric() and int(amount_input) % 100 == 0 and int(amount_input) <= 10000:
            print("存款金额输入没问题,动账")
            account_info[user_input]['balance'] = balance + int(amount_input)
            account_info[user_input]["bill"].append(f"存款收入+{amount_input}")
            print(f"存款成功,存款金额为{amount_input}")
            print(f"存款成功,账户余额为{account_info[user_input]['balance']}")
            mark = input("是否继续存款,1,继续存款,其他值,退出程序:")
            if mark == "1":
                # 继续存款
                continue
            else:
                # 退出存款循环
                break
        else:
            mark = input("存款金额输入有误,存款金额必须为纯数字,100的整数倍,且小于1万,是否重新输入,1,重新输入,其他值,退出程序:")
            if mark == "1":
                # 继续存款
                continue
            else:
                # 退出存款循环
                break
#4-转账
def transfer(account_info,user_input):
    print("4-转账")
    flag9 = True
    flag10 = True
    while flag9:
        transfer_input = input("只支持同行转账,请输入收款账号: ")
        # 付款账户余额
        pay_account = account_info[user_input]["balance"]
        if transfer_input in account_info and transfer_input != user_input:
            print("收款账号输入正确,继续输入转账金额")
            while flag10:
                amount = input("只能为纯数字,且不能大于账户余额,请输入转账金额: ")
                if amount.isnumeric() and int(amount) <= pay_account:
                    print("转账金额输入正确,动账")
                    # 增加收款账号余额
                    account_info[transfer_input]['balance'] += int(amount)
                    account_info[transfer_input]["bill"].append(f"转账收入+{amount}")
                    # 减少付款账户余额
                    account_info[user_input]["balance"] -= int(amount)
                    account_info[user_input]["bill"].append(f"转账支出-{amount}")
                    print(f"转账金额:{amount}")
                    print(f"收款账户余额: {account_info[transfer_input]['balance']}")
                    print(f"付款账户余额: {account_info[user_input]['balance']}")
                    mark = input("是否继续输入转账金额,1,继续输入转账金额,其他值,退出程序:")
                    if mark == "1":
                        # 继续转账
                        continue
                    else:
                        flag10 = False  # 内存循环
                        flag9 = False  # 外层循环
                else:
                    # print("转账金额输入有误,是否重新输入,1,重新输入,其他值,退出程序")
                    mark = input("是否继续输入转账金额,1,继续输入转账金额,其他值,退出程序:")
                    if mark == "1":
                        # 继续转账
                        continue
                    else:
                        flag10 = False  # 内存循环
                        flag9 = False  # 外层循环
        else:
            print("不支持跨行转账,且收款账号不能与付款账号一致")
            mark = input("是否继续转账,1,继续转账,其他值,退出程序:")
            if mark == "1":
                # 继续转账
                continue
            else:
                flag9 = False
# 5-流水
def bill(user_input):
    print("5-交易流水")
    bill = account_info[user_input]["bill"]
    bill_msg = f"账号:{user_input}的交易流水如下:"
    print(bill_msg)
    for val in bill:
        print(val)
#==============================================================================
# 一级菜单
def first_menu(account_info):
    """
    :param account_info: 账号信息
    :return:
    """
    while True:
        #一级菜单
        print('*************** 欢迎使用蜗牛ATM **************')
        print('************ 1-登录 2-注册 3-退出 ************')
        first_menu = input("请选择服务:")
        if first_menu == "1":
            # 账号校验
            user_input = check_account(account_info)
            # 密码校验
            check_passwd(account_info, user_input)

            #退出一级菜单循环
            return user_input
        elif first_menu == "2":
            # 账号校验
            account_input = check_account_register(account_info)
            print("2-注册")
            # 密码校验
            passwd_input = check_passwd_register()
            # 姓名校验
            name_input = check_name_register()
            # 开户金额校验
            amount_input = check_amount_register()
            #保存注册信息
            save_register(account_info, account_input, passwd_input, name_input, amount_input)
        else:
            print("3-退出")
            exit()
#二级菜单
def second_menu(account_info,user_input):
    while True:
        print("*** 1-查询 2-取款 3-存款 4-转账 5-流水 6-返回 7-退出 ***")
        menu = input("进入二级菜单,请选择服务:")
        if menu == "1":
            # 1-查询
            select(account_info,user_input)
            continue
        elif menu == "2":
            # 2-取款
            withdraw(account_info,user_input)
        elif menu == "3":
            # 3-存款
            deposit(account_info,user_input)
        elif menu == "4":
            #4-转账
            transfer(account_info,user_input)
        elif menu == "5":
            bill(user_input)
        elif menu == "6":
            #返回
            break
        else:
            exit()
#执行入口
def start(account_info):
    try:
        print(name)
    except Exception as e:
        print(e)
        print("报错了但是我不想处理")
    while True:
        #一级菜单
        user_input = first_menu(account_info)
        #二级菜单
        second_menu(account_info,user_input)
if __name__ == '__main__':
    account_info = {
        "1001": {"passwd": "123456", "name": "张三", "balance": 1000, "bill": []},
        "1002": {"passwd": "123456", "name": "李四", "balance": 1000, "bill": []},
        "1003": {"passwd": "123456", "name": "王五", "balance": 1000, "bill": []}
    }
    start(account_info=account_info)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值