使用Python实现银行管理系统

使用Python实现银行管理系统

    • 题目介绍
    • 程序演示
      • 登录
      • 开户
      • 查询
      • 取款
      • 存款
      • 转账
      • 锁定
      • 解锁
      • 存盘
      • 退出
    • 相关代码
      • 开户功能
      • 查询功能
      • 取款功能
      • 存款功能
      • 转账功能
      • 锁定功能
      • 解锁功能
      • 存盘功能
      • 加载存盘的数据
      • 登录/登出功能
      • 主程序
    • 完整代码

在本篇博文中,我们将使用Python编写一个简单的银行管理系统,该系统具有开户、查询、取款、存款、转账、锁定、解锁、存盘和退出等功能。我们将逐步分析每个功能,并提供相应的代码实现。

题目介绍

7.5 实例1: 银行管理系统
从早期的钱庄到现如今的银行,金融行业在不断地变革;随着科技的发展、计算机的普及、计算机技术在金融行业得到了广泛的应用“银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列功能的管理系统。该系统中各功能的介绍如下:
(1)开户功能:用户在ATM 机上根据提示“请输人姓名:”、“请输人身份证号:”、“请输入机号:”依次输人姓名、身份证号、手机号、预存金额、密码等信息,如果开户成功,系统随机生成一个不重复的6位数字卡号。
(2)查询功能:根据用户输人的卡号、密码查询卡中余额,如果连续 3 次输入错误密码,该卡号会被锁定。
(3)取款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续 3 次输人错误密码该卡号会被锁定;然后接收用户输人的取款金额,如果取款金额大于卡中余额或取款金额小于0系统进行提示并返回功能页面。
(4)存款功能:首先根据用户输人的卡号、密码显示卡中余额,如果连续 3 次输入错误密码该卡号会被锁定,然后接收用户输入的存款金额:如果存款金额小于 0,系统进行提示并返回功能页面。
(5)转账功能: 用户需要分别输人转出卡号与转人卡号,如果连续3次输入错误密码,卡号会被锁定。当输人转账金额后,需要用户再次确认是否执行转账功能;如果确定执行转账功能后转出卡与转入卡做相应金额计算;如果取消转账功能,则回退之前操作。
(6)锁定功能:根据输人的卡号、密码执行锁定功能,锁定之后该卡不能执行查询、取款存款、转账等操作。
(7)解锁功能:根据输入的卡号、密码执行解锁功能,解锁后的卡,能够执行查询、取款存款、转账等操作。
(8)存盘功能:执行存盘功能后,程序执行的数据会写入本地文件中
(9)退出功能:执行退出功能时,需要输人管理员的账户密码。如果输入的账号密码错误则返回功能页面;如果输人的账号密码正确,则执行存盘并退出系统。
本实例要求使用python编写程序,实现一个具有上述功能的银行管理系统

程序演示

登录

在这里插入图片描述

开户

在这里插入图片描述

查询

在这里插入图片描述

取款

在这里插入图片描述

存款

在这里插入图片描述

转账

在这里插入图片描述

锁定

在这里插入图片描述

解锁

在这里插入图片描述

存盘

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

退出

在这里插入图片描述

相关代码

开户功能

开户功能允许用户在ATM机上输入个人信息,并生成一个不重复的6位数字卡号。以下是实现开户功能的代码:

# 开户功能
def open_account():name = input("请输入姓名:")id_number = input("请输入身份证号:")phone = input("请输入手机号:")balance = float(input("请输入预存金额:"))password = input("请输入密码:")card_number = generate_card_number()users[card_number] = {"name": name,"id_number": id_number,"phone": phone,"balance": balance,"password": password}print("开户成功!您的卡号是:", card_number)

查询功能

查询功能允许用户通过输入卡号和密码来查询卡中的余额。如果连续3次输入错误密码,该卡号将被锁定。以下是实现查询功能的代码:

# 查询功能
def inquire():card_number = input("请输入卡号:")password = input("请输入密码:")if card_number in locked_cards:print("该卡号已被锁定,请联系银行解锁。")returnuser = users.get(card_number)if user and user["password"] == password:print("您的余额为:", user["balance"])else:print("卡号或密码错误!")if card_number in users:if card_number not in locked_cards:users[card_number].setdefault("wrong_password_count", 0)users[card_number]["wrong_password_count"] += 1if users[card_number]["wrong_password_count"] >= 3:locked_cards.append(card_number)print("连续输错密码已达3次,该卡已被锁定。")

取款功能

取款功能允许用户在输入卡号和密码后显示卡中的余额,并输入取款金额。如果连续3次输入错误密码,卡号将被锁定;如果取款金额大于卡中余额或小于0,系统将提示错误并返回功能页面。以下是实现取款功能的代码:

# 取款功能
def withdraw():card_number = input("请输入卡号:")password = input("请输入密码:")if card_number in locked_cards:print("该卡号已被锁定,请联系银行解锁。")returnuser = users.get(card_number)if user and user["password"] == password:print("您的余额为:", user["balance"])amount = float(input("请输入取款金额:"))if amount > user["balance"] or amount < 0:print("取款金额无效!")else:user["balance"] -= amountprint("取款成功!")print("当前余额为:", user["balance"])else:print("卡号或密码错误!")if card_number in users:if card_number not in locked_cards:users[card_number].setdefault("wrong_password_count", 0)users[card_number]["wrong_password_count"] += 1if users[card_number]["wrong_password_count"] >= 3:locked_cards.append(card_number)print("连续输错密码已达3次,该卡已被锁定。")

存款功能

存款功能允许用户在输入卡号和密码后显示卡中的余额,并输入存款金额。如果连续3次输入错误密码,卡号将被锁定;如果存款金额小于0,系统将提示错误并返回功能页面。以下是实现存款功能的代码:

# 存款功能
def deposit():card_number = input("请输入卡号:")password = input("请输入密码:")if card_number in locked_cards:print("该卡号已被锁定,请联系银行解锁。")returnuser = users.get(card_number)if user and user["password"] == password:print("您的余额为:", user["balance"])amount = float(input("请输入存款金额:"))if amount < 0:print("存款金额无效!")else:user["balance"] += amountprint("存款成功!")print("当前余额为:", user["balance"])else:print("卡号或密码错误!")if card_number in users:if card_number not in locked_cards:users[card_number].setdefault("wrong_password_count", 0)users[card_number]["wrong_password_count"] += 1if users[card_number]["wrong_password_count"] >= 3:locked_cards.append(card_number)print("连续输错密码已达3次,该卡已被锁定。")

转账功能

转账功能允许用户分别输入转出卡号和转入卡号。如果连续3次输入错误密码,卡号将被锁定。在输入转账金额后,用户需要再次确认是否执行转账功能。如果确定执行转账功能,将进行相应的金额计算;如果取消转账功能,则回退之前的操作。以下是实现转账功能的代码:

# 转账功能
def transfer():from_card_number = input("请输入转出卡号:")from_password = input("请输入密码:")if from_card_number in locked_cards:print("该卡号已被锁定,请联系银行解锁。")returnfrom_user = users.get(from_card_number)if from_user and from_user["password"] == from_password:print("您的余额为:", from_user["balance"])to_card_number = input("请输入转入卡号:")to_user = users.get(to_card_number)if to_card_number in locked_cards:print("对方卡号已被锁定,无法转账。")returnif not to_user:print("转入卡号不存在,无法转账。")returnamount = float(input("请输入转账金额:"))if amount > from_user["balance"] or amount < 0:print("转账金额无效!")returnconfirm = input("确认执行转账功能?(Y/N)")if confirm.lower() == "y":from_user["balance"] -= amountto_user["balance"] += amountprint("转账成功!")print("当前余额为:", from_user["balance"])else:print("已取消转账功能。")else:print("卡号或密码错误!")if from_card_number in users:if from_card_number not in locked_cards:users[from_card_number].setdefault("wrong_password_count", 0)users[from_card_number]["wrong_password_count"] += 1if users[from_card_number]["wrong_password_count"] >= 3:locked_cards.append(from_card_number)print("连续输错密码已达3次,该卡已被锁定。")

锁定功能

锁定功能允许用户根据卡号和密码执行锁定功能。锁定后,该卡不能进行查询、取款、存款、转账等操作。以下是实现锁定功能的代码:

# 锁定功能
def lock_card():card_number = input("请输入卡号:")password = input("请输入密码:")if card_number in locked_cards:print("卡号已被锁定,请联系客服解锁。")returnuser = users.get(card_number)if user and user["password"] == password:locked_cards.append(card_number)print("卡号已被锁定。")else:print("卡号或密码错误!")

解锁功能

解锁功能允许用户根据卡号和密码执行解锁功能。解锁后,该卡可以进行查询、取款、存款、转账等操作。以下是实现解锁功能的代码:

# 解锁功能
def unlock_card():card_number = input("请输入卡号:")password = input("请输入密码:")user = users.get(card_number)if user and user["password"] == password:if card_number in locked_cards:locked_cards.remove(card_number)print("卡号已解锁。")else:print("该卡号未被锁定。")else:print("卡号或密码错误!")

存盘功能

存盘功能允许将程序执行的数据写入本地文件中。以下是实现存盘功能的代码:

# 存盘功能
def save_data():with open("bank_data.txt", "w") as file:for card_number, user in users.items():file.write(f"{card_number},{user['name']},{user['id_number']},{user['phone']},{user['balance']},{user['password']}\n")with open("locked_cards.txt", "w") as file:file.write("\n".join(locked_cards))print("数据已保存到本地文件。")

加载存盘的数据

加载存盘的数据功能可以在程序启动时将之前保存的用户数据读取到内存中。以下是实现加载存盘数据功能的代码:

# 加载存盘的数据
def load_data():global users, locked_cardswith open("bank_data.txt", "r") as file:for line in file:card_number, name, id_number, phone, balance, password = line.strip().split(",")users[card_number] = {"name": name,"id_number": id_number,"phone": phone,"balance": float(balance),"password": password}with open("locked_cards.txt", "r") as file:for line in file:locked_cards.append(line.strip())

登录/登出功能

退出功能要求输入管理员账户密码。如果输入的账号密码错误,则返回功能页面;如果输入的账号密码正确,则执行存盘并退出系统。以下是实现退出功能的代码:

# 登录或退出功能
def login_or_out(option):admin_account = "admin"admin_password = "admin123"account = input("请输入管理员账号:")password = input("请输入管理员密码:")if account == admin_account and password == admin_password:if option == 1:load_data()print("登录成功!")# continue with normal operationselif option == 2:save_data()print("已退出系统。")exit()else:print("无效的选项!请传入1或2。")else:print("管理员账号或密码错误!")

主程序

主程序用于提供用户界面和选项选择,根据用户的选择调用相应的功能函数。以下是主程序的代码:

login_or_out(1)
while True:print("=============== 欢迎使用银行管理系统 ===============")print("1. 开户    2. 查询    3. 取款")print("4. 存款    5. 转账    6. 锁定 ")print("7. 解锁    8. 存盘    9. 退出")print("================================================")choice = input("请输入您的选择(数字):")if choice == "1":open_account()elif choice == "2":inquire()elif choice == "3":withdraw()elif choice == "4":deposit()elif choice == "5":transfer()elif choice == "6":lock_card()elif choice == "7":unlock_card()elif choice == "8":save_data()elif choice == "9":login_or_out(2)else:print("无效的选择!")

以上是一个简单的银行管理系统的Python实现,通过以上代码可以实现开户、查询、取款、存款、转账、锁定、解锁、存盘和退出等功能。根据实际需求,你可以在此基础上进一步完善和优化代码。

完整代码

import random# 存储用户信息的字典
users = {}# 锁定的卡号列表
locked_cards = []# 当前登录的用户
current_user = None# 开户功能
def open_account():name = input("请输入姓名:")id_number = input("请输入身份证号:")phone = input("请输入手机号:")balance = float(input("请输入预存金额:"))password = input("请输入密码:")card_number = generate_card_number()users[card_number] = {"name": name,"id_number": id_number,"phone": phone,"balance": balance,"password": password}print("开户成功!您的卡号是:", card_number)# 查询功能
def inquire():card_number = input("请输入卡号:")password = input("请输入密码:")if card_number in locked_cards:print("该卡号已被锁定,请联系银行解锁。")returnuser = users.get(card_number)if user and user["password"] == password:print("您的余额为:", user["balance"])else:print("卡号或密码错误!")if card_number in users:if card_number not in locked_cards:users[card_number].setdefault("wrong_password_count", 0)users[card_number]["wrong_password_count"] += 1if users[card_number]["wrong_password_count"] >= 3:locked_cards.append(card_number)print("连续输错密码已达3次,该卡已被锁定。")# 取款功能
def withdraw():card_number = input("请输入卡号:")password = input("请输入密码:")if card_number in locked_cards:print("该卡号已被锁定,请联系银行解锁。")returnuser = users.get(card_number)if user and user["password"] == password:print("您的余额为:", user["balance"])amount = float(input("请输入取款金额:"))if amount > user["balance"] or amount < 0:print("取款金额无效!")else:user["balance"] -= amountprint("取款成功!")print("当前余额为:", user["balance"])else:print("卡号或密码错误!")if card_number in users:if card_number not in locked_cards:users[card_number].setdefault("wrong_password_count", 0)users[card_number]["wrong_password_count"] += 1if users[card_number]["wrong_password_count"] >= 3:locked_cards.append(card_number)print("连续输错密码已达3次,该卡已被锁定。")# 存款功能
def deposit():card_number = input("请输入卡号:")password = input("请输入密码:")if card_number in locked_cards:print("该卡号已被锁定,请联系银行解锁。")returnuser = users.get(card_number)if user and user["password"] == password:print("您的余额为:", user["balance"])amount = float(input("请输入存款金额:"))if amount < 0:print("存款金额无效!")else:user["balance"] += amountprint("存款成功!")print("当前余额为:", user["balance"])else:print("卡号或密码错误!")if card_number in users:if card_number not in locked_cards:users[card_number].setdefault("wrong_password_count", 0)users[card_number]["wrong_password_count"] += 1if users[card_number]["wrong_password_count"] >= 3:locked_cards.append(card_number)print("连续输错密码已达3次,该卡已被锁定。")# 转账功能
def transfer():from_card_number = input("请输入转出卡号:")from_password = input("请输入密码:")if from_card_number in locked_cards:print("该卡号已被锁定,请联系银行解锁。")returnfrom_user = users.get(from_card_number)if from_user and from_user["password"] == from_password:print("您的余额为:", from_user["balance"])to_card_number = input("请输入转入卡号:")to_user = users.get(to_card_number)if to_card_number in locked_cards:print("对方卡号已被锁定,无法转账。")returnif not to_user:print("转入卡号不存在,无法转账。")returnamount = float(input("请输入转账金额:"))if amount > from_user["balance"] or amount < 0:print("转账金额无效!")returnconfirm = input("确认执行转账功能?(Y/N)")if confirm.lower() == "y":from_user["balance"] -= amountto_user["balance"] += amountprint("转账成功!")print("当前余额为:", from_user["balance"])else:print("已取消转账功能。")else:print("卡号或密码错误!")if from_card_number in users:if from_card_number not in locked_cards:users[from_card_number].setdefault("wrong_password_count", 0)users[from_card_number]["wrong_password_count"] += 1if users[from_card_number]["wrong_password_count"] >= 3:locked_cards.append(from_card_number)print("连续输错密码已达3次,该卡已被锁定。")# 锁定功能
def lock_card():card_number = input("请输入卡号:")password = input("请输入密码:")if card_number in locked_cards:print("卡号已被锁定,请联系客服解锁。")returnuser = users.get(card_number)if user and user["password"] == password:locked_cards.append(card_number)print("卡号已被锁定。")else:print("卡号或密码错误!")# 解锁功能
def unlock_card():card_number = input("请输入卡号:")password = input("请输入密码:")user = users.get(card_number)if user and user["password"] == password:if card_number in locked_cards:locked_cards.remove(card_number)print("卡号已解锁。")else:print("该卡号未被锁定。")else:print("卡号或密码错误!")# 生成不重复的6位数字卡号
def generate_card_number():card_number = str(random.randint(100000, 999999))while card_number in users:card_number = str(random.randint(100000, 999999))return card_number# 存盘功能
def save_data():with open("bank_data.txt", "w") as file:for card_number, user in users.items():file.write(f"{card_number},{user['name']},{user['id_number']},{user['phone']},{user['balance']},{user['password']}\n")with open("locked_cards.txt", "w") as file:file.write("\n".join(locked_cards))print("数据已保存到本地文件。")#加载存盘的数据
def load_data():global users, locked_cardswith open("bank_data.txt", "r") as file:for line in file:card_number, name, id_number, phone, balance, password = line.strip().split(",")users[card_number] = {"name": name,"id_number": id_number,"phone": phone,"balance": float(balance),"password": password}with open("locked_cards.txt", "r") as file:for line in file:locked_cards.append(line.strip())# 退出功能
def login_or_out(option):admin_account = "admin"admin_password = "admin123"account = input("请输入管理员账号:")password = input("请输入管理员密码:")if account == admin_account and password == admin_password:if option == 1:load_data()print("登录成功!")# continue with normal operationselif option == 2:save_data()print("已退出系统。")exit()else:print("无效的选项!请传入1或2。")else:print("管理员账号或密码错误!")# 主程序
login_or_out(1)
while True:print("=============== 欢迎使用银行管理系统 ===============")print("1. 开户    2. 查询    3. 取款")print("4. 存款    5. 转账    6. 锁定 ")print("7. 解锁    8. 存盘    9. 退出")print("================================================")choice = input("请输入您的选择(数字):")if choice == "1":open_account()elif choice == "2":inquire()elif choice == "3":withdraw()elif choice == "4":deposit()elif choice == "5":transfer()elif choice == "6":lock_card()elif choice == "7":unlock_card()elif choice == "8":save_data()elif choice == "9":login_or_out(2)else:print("无效的选择!")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/213267.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 8 配置文件详解与最佳实践

MySQL 8 是一款强大的关系型数据库管理系统&#xff0c;通过适当的配置文件设置&#xff0c;可以充分发挥其性能潜力。在这篇博客中&#xff0c;我们将深入探究 MySQL 8 常用的配置文件&#xff0c;并提供一些建议&#xff0c;帮助您优化数据库性能。 配置文件概览 在 MySQL …

GPT、GPT-2、GPT-3论文精读笔记

视频&#xff1a;GPT&#xff0c;GPT-2&#xff0c;GPT-3 论文精读【论文精读】_哔哩哔哩_bilibili MAE论文&#xff1a;把bert用回计算机视觉领域 CLIP论文&#xff1a;打通文本和图像 GPT 论文&#xff1a;Improving Language Understanding by Generative Pre-Training …

机器学习笔记 - 复杂任务的CNN组合

基础CNN架构可通过多种方式进行组合和扩展,从而解决更多、更复杂的任务。 1. 分类和定位 在分类和定位任务中,你不仅需要说出在图像中找到的物体的类别,而且还需指出物体显现在图像中的边界框坐标。这类任务假设在图像中只有一个物体实例。 这个任务可通过在典型的分类网络…

Java Web 实战 21 - 用 Servlet 实现一个Hello World

用 Servlet 来写一个 Hello World~ 一 . 基本部署方式1.1 创建 Servlet 项目1.2 引入依赖1.3 创建目录1.4 编写代码继承 HttpServlet重写 doGet 方法删除 super 方法加上 WebServlet 注解写业务逻辑 1.5 打包1.6 部署1.7 验证1.8 小结 二 . 更方便的部署方式2.1 Smart Tomcat 的…

【免费】小傅哥 DDD 开发小册

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主小傅哥。 如果在面试的时候&#xff0c;面试官问你DDD是什么&#xff0c;你怎么解释&#xff1…

Windows下安装Anaconda3并使用JupyterNoteBook

下载安装包 Anaconda官网 进官网&#xff0c;点击下载 自动根据当前系统下载对应的包了&#xff0c;安装包大约1G&#xff0c;喝杯Java耐心等待。 安装 很多人安装C盘&#xff0c;我这里放D盘。 注意&#xff1a;你的文件夹目录一定要不能有空格 然后其他的直接默认install即…

代码随想录算法训练营第四十四天【动态规划part06】 | 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 题目链接&#xff1a; 题目页…

马养殖场建设VR模拟实训教学平台具有灵活性和复用性

为保障养殖场生物安全&#xff0c;避免疫病传播&#xff0c;学生出入养殖场受时间和地域的限制&#xff0c; 生产实习多以参观为主&#xff0c;通过畜牧企业技术人员的讲解&#xff0c;学生被动了解生产过程。为了解决畜牧养殖实训难的问题&#xff0c;借助VR技术开展畜牧养殖虚…

【广州华锐互动】VR线上课件制作软件满足数字化教学需求

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在教学领域的应用逐渐成为趋势。其中&#xff0c;广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段&#xff0c;使得VR教学成为可能&#xff0c;极大地丰…

Charles 网络抓包工具详解与实战指南

文章目录 导读软件版本Charles基本原理核心功能下载及安装界面介绍网络包展示 常用场景介绍PC 端网络抓包移动端网络抓包PC 端配置手机端配置 开启 SSL 代理PC 端和移动端 CA 证书安装Charles 直接安装Charles 下载 CA 文件手动安装 常用操作请求重发请求改写、动态改写断点&am…

Linux常用命令——blkid命令

在线Linux命令查询工具 blkid 查看块设备的文件系统类型、LABEL、UUID等信息 补充说明 在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备&#xff08;包括交换分区&#xff09;所使用的文件系统类型、LABEL、UUID等信息进行…

docker国内镜像加速

创建或修改 /etc/docker/daemon.json 文件&#xff0c;修改为如下形式 {"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"] } Docker中国区官方镜像htt…