python+银行管理系统

,本文利Python写了一个管理系统完整版如下

  1. 开户功能:用户在ATM机上根据提示“请输入姓名:”、“请输入身份证号:”、“请输入手机号:”依次输入姓名、身份证号、手机号、预存金额、密码等信息,如果开户成功,系统随机生成一个不重复的6位数字卡号。
  2. 查询功能:根据用户输入的卡号、密码查询卡中余额,如果连续3次输入错误密码,该卡号会被锁定。
  3. 取款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定;然后接收用户输入的取款金额,如果取款金额大于卡中余额或取款金额小于0,系统进行提示并返回功能页面。
  4. 存款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定,然后接收用户输入的取款金额,如果存款金额小于0,系统进行提示并返回功能页面。
  5. 转账功能:用户需要分别输入转出卡号与转入卡号,如果连续3次输入错误密码,卡号会被锁定。当输入转账金额后,需要用户再次确认是否执行转账功能;如果确定执行转账功能,转出卡与转入卡做相应金额计算;如果取消转账功能,则回退之前操作。
  6. 锁定功能:根据输入的卡号密码执行锁定功能,锁定之后该卡不能执行查询、取款、存款、转账等操作。
  7. 解锁功能:根据输入的卡号密码执行解锁功能,解锁后能对该卡执行查询、取款、存款、转账等操作。
  8. 存盘功能:执行存盘功能后,程序执行的数据会写入本地文件中。
  9. 退出功能:执行退出功能时,需要输入管理员的账户密码,如果输入的账号密码错误,则返回功能页面,如果输入的账号密码正确,则执行存盘并退出系统。
  10. 菜单功能
  11. 本人纯手写,学生作品,水平有限,已经过多轮测试,如果出现问题请自行百度
  • -----------------------------------------------------------------------------------------------------------
  • 开户功能:用户在ATM机上根据提示“请输入姓名:”、“请输入身份证号:”、“请输入手机号:”依次输入姓名、身份证号、手机号、预存金额、密码等信息,如果开户成功,系统随机生成一个不重复的6位数字卡号。
  • #注意此代码必须在python3.3版本以上运行
    bank_data = {}
    def generate_card_number():
        #无限循环,它会持续运行,直到找到一个不重复的卡号。
        while True:
    #使用 random.choices 函数从字符串 '0123456789' 中随机选择6个字符(即0-9之间的数字)。
    # k=6 指定了要选择的字符数量。random.choices 会返回一个列表,
    # 但由于我们只需要一个字符串,所以使用 join 方法将列表中的字符连接成一个字符串。
            card_number = ''.join(random.choices('0123456789', k=6))
            if card_number not in bank_data:
                return card_number
            # 开户功能
  • def open_account():
        name = input("请输入姓名: ")
        id_card = input("请输入身份证号: ")
        phone = input("请输入手机号: ")
        balance = float(input("请输入预存金额: "))
        password = input("请输入密码: ")
        #生成随机卡号
        card_number = generate_card_number()
        bank_data = {
            'card_number':card_number,
            'name': name,
            'id_card': id_card,
            'phone': phone,
            'balance': balance,
            'password': password,
            'locked': False
        }
        print(f"开户成功,您的卡号是: {card_number}")
        # 更改当前工作目录
        os.chdir('E:\\')
        # 打开文件进行写入:
        with open('E:\\chapter06\\D.txt', 'a+', encoding='utf-8') as f:
            json.dump()
            # 函数将bank_data(一个Python对象,如字典或列表)序列化为JSON格式,并将结果写入之前打开的文件f中
            json.dump(bank_data, f)
            # 这行代码在文件末尾添加一个换行符
            f.write('\n')
            print(f"开户成功")

    查询功能:根据用户输入的卡号、密码查询卡中余额,如果连续3次输入错误密码,该卡号会被锁定。

  • 
    def verify_password():
        os.chdir('E:\\')  # 切换到指定路径,通常建议使用完整路径而非改变当前工作目录
    
        card_found = False  # 初始化卡号是否找到的标志
    
        with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f:
            card_number = input('请输入账号:')  # 获取用户输入的卡号
            password = input('请输入密码:')  # 获取用户输入的密码
    
            for line in f:
                data = json.loads(line)  # 解析每行的JSON对象
    
                if data['card_number'] == card_number:  # 如果找到输入的卡号
                    card_found = True  # 将卡号找到的标志设为True
    
                    if data['password'] == password:  # 如果密码匹配
                        print(f'密码正确,余额为{data["balance"]}')
                        # 这里可以添加逻辑来锁定或解锁卡片,但不应在验证密码后立即锁定
                        return
    
                    if data['password'] != password:  # 如果密码不匹配
                        print(f"卡号{card_number}输入错误1次")
    
                        for i in range(2):  # 最多允许再次输入密码2次
                            repassword = input("请再次输入密码:")
    
                            if data['password'] != repassword:  # 如果再次输入的密码不正确
                                print(f"你已经输入错误{i+2}次")
                                continue
    
                            elif data['password'] == repassword:  # 如果再次输入的密码正确
                                print(f'密码正确,余额为{data["balance"]}')
                                return
    
                        if i == 1:  # 如果连续输入密码错误达到3次
                            print(f"{card_number}输入密码错误3次,已经锁定")
    
                            with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
                                    open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
                                for line in f_read:
                                    data = json.loads(line)
    
                                    if data['card_number'] == card_number:
                                        # 复制数据并添加锁定标志
                                        locked_data = data.copy()
                                        locked_data['locked'] = True
                                        json.dump(locked_data, f_write)
                                        f_write.write('\
    ')
    
                                    else:
                                        # 如果不是目标卡片,则直接写入临时文件
                                        f_write.write(line)
    
                            break
    
                elif data['card_number'] != card_number:
                    continue
    
        if not card_found:
            print('卡号不存在')
    
        os.replace('E:\\chapter06\\D_temp.txt', 'E:\\chapter06\\D.txt')  # 替换原始数据文件为更新后的临时文件
    

    取款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定;然后接收用户输入的取款金额,如果取款金额大于卡中余额或取款金额小于0,系统进行提示并返回功能页面。

  • 
    def withdraw_money():
        os.chdir('E:\\')  # 切换到指定路径,通常建议使用完整路径而非改变当前工作目录
    
        card_found = False  # 初始化卡号是否找到的标志
    
        with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f:
            card_number = input('请输入账号:')  # 获取用户输入的卡号
            password = input('请输入密码:')  # 获取用户输入的密码
            Withdrawal_amount = float(input('请输入取款金额:'))  # 获取用户输入的取款金额
    
            for line in f:
                data = json.loads(line)  # 解析每行的JSON对象
    
                if data['card_number'] == card_number:  # 如果找到输入的卡号
                    card_found = True  # 将卡号找到的标志设为True
    
                    if data['password'] == password:  # 如果密码匹配
                        print(f'密码正确,余额为{data["balance"]}')
    
                        if data['locked'] == False:  # 如果卡片未锁定
                            print('可以取款')
                            print('请根据显示的余额按需取款')
    
                            if Withdrawal_amount > data['balance']:  # 如果取款金额大于余额
                                print('取款金额大于存款,请重新输入')
                                return
                            else:
                                print('开始取款')
                                with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
                                        open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
                                    for line in f_read:
                                        data = json.loads(line)
    
                                        if data['card_number'] == card_number:
                                            # 复制数据并更新余额
                                            locked_data = data.copy()
                                            locked_data['balance'] -= Withdrawal_amount
                                            json.dump(locked_data, f_write)
                                            f_write.write('\
    ')
                                        else:
                                            # 如果不是目标卡片,则直接写入临时文件
                                            f_write.write(line)
    
                                break
    
                        elif data['locked'] != False:  # 如果卡片被锁定
                            print('被锁定,不可以取款')
                            return
    
                    if data['password'] != password:  # 如果密码不匹配
                        print(f"卡号{card_number}输入错误1次")
    
                        for i in range(2):  # 最多允许再次输入密码2次
                            repassword = input("请再次输入密码:")
    
                            if data['password'] != repassword:  # 如果再次输入的密码不正确
                                print(f"你已经输入错误{i+2}次")
                                continue
    
                            elif data['password'] == repassword:  # 如果再次输入的密码正确
                                print(f'密码正确,余额为{data["balance"]}')
                                return
    
                        if i == 1:  # 如果连续输入密码错误达到3次
                            print(f"{card_number}输入密码错误3次,已经锁定")
    
                            with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
                                    open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
                                for line in f_read:
                                    data = json.loads(line)
    
                                    if data['card_number'] == card_number:
                                        # 复制数据并添加锁定标志
                                        locked_data = data.copy()
                                        locked_data['locked'] = True
                                        json.dump(locked_data, f_write)
                                        f_write.write('\
    ')
                                    else:
                                        # 如果不是目标卡片,则直接写入临时文件
                                        f_write.write(line)
    
                            break
    
                elif data['card_number'] != card_number:
                    continue
    
        if not card_found:
            print('卡号不存在')
    
        os.replace('E:\\chapter06\\D_temp.txt', 'E:\\chapter06\\D.txt')  # 替换原始数据文件为更新后的临时文件
    
    存款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定,然后接收用户输入的取款金额,如果存款金额小于0,系统进行提示并返回功能页面。
  • def count_money():
        os.chdir('E:\\')  # 切换到指定路径,通常建议使用完整路径而非改变当前工作目录
    
        card_found = False  # 初始化卡号是否找到的标志
    
        # 打开存储卡片信息的文件,读取卡片数据
        with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f:
            card_number = input('请输入账号:')  # 获取用户输入的卡号
            password = input('请输入密码:')  # 获取用户输入的密码
            Withdrawal_amount = float(input('请输入存款金额:'))  # 获取用户输入的存款金额并转换为浮点数
    
            for line in f:
                data = json.loads(line)  # 解析每行的JSON对象
                
                # 检查输入的卡号是否与当前行的卡号匹配
                if data['card_number'] == card_number:
                    card_found = True  # 将卡号找到的标志设为True
    
                    # 检查输入的密码是否正确
                    if data['password'] == password:
                        print(f'密码正确,余额为{data["balance"]}')  # 显示正确的密码和当前余额
    
                        # 检查卡片是否未被锁定
                        if data['locked'] == False:
                            print('可以存款')  # 提示用户可以进行存款操作
                            print('请根据显示的余额按需存款')
    
                            # 打开文件进行读写操作,将数据更新到临时文件中
                            with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
                                    open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
                                for line in f_read:
                                    data = json.loads(line)  # 解析每行的JSON对象
    
                                    # 检查是否是当前卡号的数据
                                    if data['card_number'] == card_number:
                                        # 复制数据并更新余额
                                        updated_data = data.copy()  # 复制当前数据
                                        updated_data['balance'] += Withdrawal_amount  # 增加存款金额
                                        json.dump(updated_data, f_write)  # 将更新后的数据写入临时文件
                                        f_write.write('\
    ')  # 写入换行符
                                    else:
                                        # 如果不是当前卡号的数据,直接写入临时文件
                                        f_write.write(line)
    
                        elif data['locked'] != False:  # 如果卡片被锁定
                            print('被锁定,不可以存款')  # 提示用户卡片被锁定
                            return  # 结束函数执行
    
                    if data['password'] != password:  # 如果密码不匹配
                        print(f"卡号{card_number}输入错误1次")  # 提示用户密码错误
                        for i in range(2):  # 最多允许再次输入密码2次
                            repassword = input("请再次输入密码")  # 获取用户再次输入的密码
    
                            if data['password'] != repassword:  # 如果再次输入的密码不正确
                                print(f"你已经输入错误{i + 2}次")  # 提示用户错误次数
                                continue  # 继续循环请求密码
    
                            elif data['password'] == repassword:  # 如果再次输入的密码正确
                                print(f'密码正确,余额为{data["balance"]}')  # 显示正确的密码和当前余额
                                return  # 结束函数执行
    
                        if i == 1:  # 如果连续输入密码错误达到3次
                            print(f"{card_number}输入密码错误3次,已经锁定")  # 提示用户卡片已锁定
    
                            # 打开文件进行读写操作,将数据更新到临时文件中
                            with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
                                    open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
                                for line in f_read:
                                    data = json.loads(line)
    
                                    # 检查是否是当前卡号的数据
                                    if data['card_number'] == card_number:
                                        # 复制数据并添加锁定标志
                                        locked_data = data.copy()  # 复制当前数据
                                        locked_data['locked'] = True  # 设置锁定标志
                                        json.dump(locked_data, f_write)  # 将更新后的数据写入临时文件
                                        f_write.write('\
    ')  # 写入换行符
                                    else:
                                        # 如果不是当前卡号的数据,直接写入临时文件
                                        f_write.write(line)
    
                            break  # 结束循环,完成锁定操作
    
                elif data['card_number'] != card_number:
                    continue  # 如果卡号不匹配,继续处理下一行数据
    
        if card_found == False:  # 如果没有找到卡号
            print('卡号不存在')  # 提示用户卡号不存在
    
        # 替换原始数据文件为更新后的临时文件
        os.replace('E:\\chapter06\\D_temp.txt', 'E:\\chapter06\\D.txt')
    转账功能:用户需要分别输入转出卡号与转入卡号,如果连续3次输入错误密码,卡号会被锁定。
    当输入转账金额后,需要用户再次确认是否执行转账功能;如果确定执行转账功能,转出卡与转入卡做相应金额计算;如果取消转账功能,则回退之前操作。
  • def transfer_accounts():
        in_card = input('请输入转入卡号:')  # 获取用户输入的转入卡号
        on_card = input('请输入转出卡号:')  # 获取用户输入的转出卡号
        on_password = input('请输入转出卡号的密码:')  # 获取用户输入的转出卡号密码
    
        card_found = False  # 初始化转入卡号是否找到的标志
        card_found1 = False  # 初始化转出卡号是否找到的标志
    
        os.chdir('E:\\')  # 切换到指定路径,通常建议使用完整路径而非改变当前工作目录
    
        with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f:
            for line in f:
                data = json.loads(line)  # 解析每行的JSON对象
    
                if data['card_number'] == in_card:  # 如果找到转入卡号
                    card_found = True  # 将转入卡号找到的标志设为True
                    print('找到转入卡号')
    
                    with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f:
                        for line in f:
                            data = json.loads(line)  # 解析每行的JSON对象
    
                            if data['card_number'] == on_card:  # 如果找到转出卡号
                                card_found1 = True  # 将转出卡号找到的标志设为True
                                print('找到转出卡号')
    
                                # 检查转出卡号的密码是否正确
                                if data['password'] == on_password:
                                    # 检查转出卡号是否被冻结
                                    if data['locked'] == True:
                                        print('此卡已被冻结,无法操作')
                                    elif data['locked'] != True:
                                        print('状态正常,即将进入转账页面')
                                        on_balance = float(input('请输入转出金额:'))  # 获取用户输入的转出金额并转换为浮点数
    
                                        with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
                                                open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
                                            print('开始转出')
                                            for line in f_read:
                                                data = json.loads(line)
    
                                                if data['card_number'] == on_card:
                                                    # 复制数据并更新余额
                                                    locked_data = data.copy()
                                                    locked_data['balance'] = locked_data['balance'] - on_balance
                                                    json.dump(locked_data, f_write)
                                                    f_write.write('\n')
                                                else:
                                                    # 如果不是目标卡片,则直接写入临时文件
                                                    f_write.write(line)
    
                                        with open('E:\\chapter06\\D_temp.txt', 'r', encoding='utf-8') as f_read, \
                                                open('E:\\chapter06\\D.txt', 'w', encoding='utf-8') as f_write:
                                            print("开始转入")
                                            for line in f_read:
                                                data = json.loads(line)
    
                                                if data['card_number'] == in_card:
                                                    # 复制数据并更新余额
                                                    locked_data = data.copy()
                                                    locked_data['balance'] = locked_data['balance'] + on_balance
                                                    json.dump(locked_data, f_write)
                                                    f_write.write('\n')
                                                else:
                                                    # 如果不是目标卡片,则直接写入临时文件
                                                    f_write.write(line)
    
                                        print('转账成功')
                                        break
    
                                elif data['password'] != on_password:  # 如果转出卡号的密码不正确
                                    print(f"卡号{on_card}输入错误1次")
    
                                    for i in range(2):  # 最多允许再次输入密码2次
                                        repassword = input("请再次输入密码")  # 获取用户再次输入的密码
    
                                        if data['password'] != repassword:  # 如果再次输入的密码不正确
                                            print(f"你已经输入错误{i + 2}次")  # 提示用户错误次数
                                            continue  # 继续循环请求密码
    
                                        elif data['password'] == repassword:  # 如果再次输入的密码正确
                                            print(f'密码正确,请记住你的密码,即将回到初始页面')
                                            transfer_accounts()  # 重新调用函数进入初始页面
    
                                    if i == 1:  # 如果连续输入密码错误达到3次
                                        print(f"{on_card}输入密码错误3次,已经锁定")
    
                                        with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
                                                open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
                                            for line in f_read:
                                                data = json.loads(line)
                                                if data['card_number'] == on_card:
                                                    # 复制数据并添加锁定标志
                                                    locked_data = data.copy()
                                                    locked_data['locked'] = True
                                                    json.dump(locked_data, f_write)
                                                    f_write.write('\n')
                                                else:
                                                    # 如果不是目标卡片,则直接写入临时文件
                                                    f_write.write(line)
                                        break
    
                            elif data['card_number'] != on_card:
                                continue
    
                        if card_found1 == False:  # 如果没有找到转出卡号
                            print('转出卡号不存在')
    
                elif data['card_number'] != in_card:
                    continue
    
            if card_found == False:  # 如果没有找到转入卡号
                print('转入卡号不存在')
    
        os.remove('E:\\chapter06\\D_temp.txt')  # 删除临时文件
    锁定功能:根据输入的卡号密码执行锁定功能,锁定之后该卡不能执行查询、取款、存款、转账等操作。
  • def lock_account(card_number, password):
        with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
                open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
            for line in f_read:
                data = json.loads(line)
    
                if data['card_number'] == card_number and data['password'] == password:
                    # 复制数据并添加锁定标志
                    locked_data = data.copy()
                    locked_data['locked'] = True
                    json.dump(locked_data, f_write)
                    f_write.write('\n')
    
                elif data['card_number'] == card_number and data['password'] != password:
                    print('密码错误')
                    return
    
                else:
                    # 如果不是目标卡片,则直接写入临时文件
                    f_write.write(line)
    
        # 替换原始文件
        os.replace('E:\\chapter06\\D_temp.txt', 'E:\\chapter06\\D.txt')

解锁功能:根据输入的卡号密码执行解锁功能,解锁后能对该卡执行查询、取款、存款、转账等操作
def unlock_account(card_number, password):
    with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
            open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
        for line in f_read:
            data = json.loads(line)

            if data['card_number'] == card_number and data['password'] == password:
                # 复制数据并添加锁定标志
                locked_data = data.copy()
                locked_data['locked'] = False
                json.dump(locked_data, f_write)
                f_write.write('\n')

            elif data['card_number'] == card_number and data['password'] != password:
                print('密码错误')
                return

            else:
                # 如果不是目标卡片,则直接写入临时文件
                f_write.write(line)

    # 替换原始文件
    os.replace('E:\\chapter06\\D_temp.txt', 'E:\\chapter06\\D.txt')

菜单

def new_menu():
    print('************************************')
    print('***                              ***')
    print('***                              ***')
    print('***      欢迎登录银行管理系统        ***')
    print('***                              ***')
    print('***                              ***')
    print('***                              ***')
    print('************************************')
    input_card=input('请输入管理员账号:')
    if input_card=='lzl':
        print('账号正确,进入菜单')
        menu()
    else:
        print('账号错误')
        return
#10、菜单
def menu():
    while True:
        print('请确保python版本高于python3.3')
        print("""  
            1. 开户  
            2. 查询余额  
            3. 取款  
            4. 存款  
            5. 转账  
            6. 锁定账户  
            7. 解锁账户  
            8. 退出系统  
        """)
        choice = input("请选择功能编号:")
            # 1.开户
        if choice == '1':
            print('存储路径E:\\chapter06\\D.txt')
            open_account()
               #2. 查询余额
        elif choice == '2':
            verify_password()
                # 3. 取款
        elif choice == '3':
            withdraw_money()
                # 4. 存款
        elif choice == '4':
            count_money()
            # 5. 转账
        elif choice == '5':
            transfer_accounts()
            # 6. 锁定账户
        elif choice == '6':
            card_number = input('请输入账号:')
            password = input('请输入密码:')
            lock_account(card_number,password)
            # 7. 解锁账户
        elif choice == '7':
            card_number = input('请输入账号:')
            password = input('请输入密码:')
            unlock_account(card_number,password)
            #8.退出系统
            # 8.退出系统
        elif choice == '8':
            n = str(input('请输管理员账号:'))
            p = int(input('请输入管理员密码:'))
            if n == 'lzl' and p == 2022131206:
                print('账号密码正确')
                print('所有数据已经保存完毕,即将退出系统')
                return
            else:
                print('账号密码错误')
                menu()
        else:
            print("无效的编号,请重新输入!")
            menu()
new_menu()

---------------------------------------------------------------------------------------------------------------------------------第二个版本

# 全局变量
card_info = {}  # 存储卡号及相关信息的字典
locked_cards = {}  # 存储被锁定的卡号
# 生成随机不重复的 6 位数字卡号
def generate_card_number():
    while True:
        card_number = random.randint(100000, 999999)
        if card_number not in card_info:
            return card_number
# 从文件中读取卡号信息
def read_card_info_from_file():
    try:
        with open('bank_data.json', 'r') as f:
            data = json.load(f)
            global card_info
            card_info = data
    except FileNotFoundError:
        # 如果文件不存在,不做任何处理
        pass
# 开户功能
def open_account():
    name = input("请输入姓名:")
    id_card = input("请输入身份证号:")
    phone_number = input("请输入手机号:")
    deposit_amount = float(input("请输入预存金额:"))
    password = input("请输入密码:")
    card_number = generate_card_number()
    card_info[card_number] = {
        "name": name,
        "id_card": id_card,
        "phone_number": phone_number,
        "balance": deposit_amount,
        "password": password,
        "locked": False  # 初始未锁定
    }
    print(f"开户成功!您的卡号为{card_number}")

# 查询功能
def query():
    card_number = int(input("请输入卡号:"))
    if card_number not in card_info:
        print("卡号不存在,请重新输入!")
        return
    password = input("请输入密码:")
    incorrect_count = 0
    while card_info[card_number]["password"]!= password:
        incorrect_count += 1
        if incorrect_count == 3:
            print("密码连续输入错误 3 次,卡号已被锁定!")
            locked_cards[card_number] = True
            card_info[card_number]["locked"] = True
            return
        password = input("密码错误,请重新输入:")
    print(f"卡中余额为: {card_info[card_number]['balance']} 元")
# 取款功能
def withdraw():
    card_number = int(input("请输入卡号:"))
    if card_number not in card_info or card_info[card_number]["locked"]:
        print("卡号不存在或已被锁定,请重新输入!")
        return
    password = input("请输入密码:")
    incorrect_count = 0
    while card_info[card_number]["password"]!= password:
        incorrect_count += 1
        if incorrect_count == 3:
            print("密码连续输入错误 3 次,卡号已被锁定!")
            locked_cards[card_number] = True
            card_info[card_number]["locked"] = True
            return
        password = input("密码错误,请重新输入:")
    balance = card_info[card_number]["balance"]
    withdraw_amount = float(input("请输入取款金额:"))
    if withdraw_amount > balance or withdraw_amount < 0:
        print("取款金额错误,请重新输入!")
        return
    card_info[card_number]["balance"] -= withdraw_amount
    print(f"取款成功,卡中余额为: {card_info[card_number]['balance']} 元")

# 存款功能
def deposit():
    card_number = int(input("请输入卡号:"))
    if card_number not in card_info or card_info[card_number]["locked"]:
        print("卡号不存在或已被锁定,请重新输入!")
        return
    password = input("请输入密码:")
    incorrect_count = 0
    while card_info[card_number]["password"]!= password:
        incorrect_count += 1
        if incorrect_count == 3:
            print("密码连续输入错误 3 次,卡号已被锁定!")
            locked_cards[card_number] = True
            card_info[card_number]["locked"] = True
            return
        password = input("密码错误,请重新输入:")
    deposit_amount = float(input("请输入存款金额:"))
    if deposit_amount < 0:
        print("存款金额错误,请重新输入!")
        return
    card_info[card_number]["balance"] += deposit_amount
    print(f"存款成功,卡中余额为: {card_info[card_number]['balance']} 元")
# 转账功能
def transfer():
    transfer_card_number = int(input("请输入转出卡号:"))
    if transfer_card_number not in card_info or card_info[transfer_card_number]["locked"]:
        print("转出卡号不存在或已被锁定,请重新输入!")
        return
    password = input("请输入转出卡密码:")
    incorrect_count = 0
    while card_info[transfer_card_number]["password"]!= password:
        incorrect_count += 1
        if incorrect_count == 3:
            print("密码连续输入错误 3 次,卡号已被锁定!")
            locked_cards[transfer_card_number] = True
            card_info[transfer_card_number]["locked"] = True
            return
        password = input("密码错误,请重新输入:")
    receive_card_number = int(input("请输入转入卡号:"))
    if receive_card_number not in card_info:
        print("转入卡号不存在,请重新输入!")
        return
    transfer_amount = float(input("请输入转账金额:"))
    confirm = input("是否确认转账(y/n)")
    if confirm.lower() == 'y':
        card_info[transfer_card_number]["balance"] -= transfer_amount
        card_info[receive_card_number]["balance"] += transfer_amount
        print("转账成功!")
    else:
        print("取消转账操作。")

# 锁定功能
def lock_card():
    card_number = int(input("请输入卡号:"))
    password = input("请输入密码:")
    if card_info[card_number]["password"] == password:
        locked_cards[card_number] = True
        card_info[card_number]["locked"] = True
        print("卡号锁定成功!")
    else:
        print("密码错误,锁定失败!")
# 解锁功能
def unlock_card():
    card_number = int(input("请输入卡号:"))
    password = input("请输入密码:")
    if card_info[card_number]["password"] == password:
        if card_number in locked_cards:
            del locked_cards[card_number]
            card_info[card_number]["locked"] = False
            print("卡号解锁成功!")
        else:
            print("该卡未被锁定,无需解锁!")
    else:
        print("密码错误,解锁失败!")

# 存盘功能
def save_to_file():
    with open('bank_data.json', 'w') as f:
        json.dump(card_info, f)
    print("数据已成功保存到本地文件!")

# 退出功能
def exit_system(name, student_id):
    name = ''
    student_id = ''
    error_count = 0  # 新增:记录错误次数
    while True:
        admin_name = input("请输入管理员账户(您的姓名):")
        admin_password = input("请输入密码(您的学号):")
        if admin_name == name and admin_password == student_id:
            save_to_file()
            print("存盘并退出成功!")
            break  # 输入正确,退出循环
        else:
            error_count += 1  # 错误次数加 1
            if error_count >= 3:  # 达到最大错误次数
                print("输入错误次数过多,退出程序。")
                exit()  # 直接退出程序
            print("账号或密码错误,请重新输入!")

# 主界面
def main_menu():
    print("*" * 40)
    print("*" * 40)
    print(
        "***      1.开户        2.查询        ***\n***                                  ***   \n***      3.取款        4.存款        ***")
    print(
        "***                                  ***\n***      5.转账        6.锁定        ***\n***                                  ***   \n***      7.解锁        存盘(C)        ***")
    print(
        "***                                  ***\n***      退出(Q)                    ***\n***                                  ***   ")
    print("*" * 40)
    print("*" * 40)

    choice = input("请输入您的操作: ")  # 改为接收字符串输入

    if choice == '1':
        open_account()
    elif choice == '2':
        query()
    elif choice == '3':
        withdraw()
    elif choice == '4':
        deposit()
    elif choice == '5':
        transfer()
    elif choice == '6':
        lock_card()
    elif choice == '7':
        unlock_card()
    elif choice.upper() == 'C':  # 处理大写的 'C'
        save_to_file()
    elif choice.upper() == 'Q':  # 处理大写的 'Q'
        print("*" * 40)
        print("*" * 40)
        print("***                                  ***")
        print("***                                  ***")
        print("***           欢迎登录银行系统          ***")
        print("***                                  ***")
        print("***                                  ***")
        print("*" * 40)
        print("*" * 40)
        exit_system("您的姓名", "您的学号")
    else:
        print("无效的选择,请重新输入!")

# 主程序
if __name__ == "__main__":
    read_card_info_from_file()  # 在程序开始时读取卡号信息
    while True:
        main_menu()

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于Tkinter+Python的可视化银行管理系统可以实现开户、查询、取款、存款、转账、销户、改密等功能。以下是一个简单的实现示例: ```python import tkinter as tk class BankSystem: def __init__(self, master): self.master = master self.master.title("银行管理系统") self.master.geometry("400x300") self.label = tk.Label(self.master, text="欢迎使用银行管理系统", font=("Arial", 16)) self.label.pack(pady=20) self.button1 = tk.Button(self.master, text="开户", width=10, command=self.open_account) self.button1.pack(pady=10) self.button2 = tk.Button(self.master, text="查询", width=10, command=self.check_account) self.button2.pack(pady=10) self.button3 = tk.Button(self.master, text="取款", width=10, command=self.withdraw) self.button3.pack(pady=10) self.button4 = tk.Button(self.master, text="存款", width=10, command=self.deposit) self.button4.pack(pady=10) self.button5 = tk.Button(self.master, text="转账", width=10, command=self.transfer) self.button5.pack(pady=10) self.button6 = tk.Button(self.master, text="销户", width=10, command=self.close_account) self.button6.pack(pady=10) self.button7 = tk.Button(self.master, text="改密", width=10, command=self.change_password) self.button7.pack(pady=10) def open_account(self): # 实现开户功能 pass def check_account(self): # 实现查询功能 pass def withdraw(self): # 实现取款功能 pass def deposit(self): # 实现存款功能 pass def transfer(self): # 实现转账功能 pass def close_account(self): # 实现销户功能 pass def change_password(self): # 实现改密功能 pass root = tk.Tk() bank_system = BankSystem(root) root.mainloop() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值