当前位置: 首页 > news >正文

银行账户管理系统01

  1. 账户管理

    • 开户:创建新账户(账户名+密码)

    • 查询:查看账户余额和状态

    • 取款/存款:资金操作

    • 转账:账户间资金转移

    • 锁定/解锁:控制账户状态

  2. 数据持久化

    • 使用pickle模块将账户数据保存到文件

    • 程序启动时自动加载历史数据

    • 退出时自动保存数据

  3. 账户安全

    • 密码显示保护(显示为星号)

    • 账户锁定状态检查

    • 余额不足验证

二、代码结构分析

  1. Account类:封装账户核心属性

    • 初始化方法:__init__设置账户初始状态

    • 字符串表示:__str__格式化输出账户信息

  2. Bank类:业务逻辑核心

    • 账户操作:创建/查询/存取款/转账等

    • 状态管理:锁定/解锁账户

    • 数据持久化:save()/load()方法

  3. 主程序流程

三、代码亮点

  1. 面向对象设计

    • 高内聚:账户操作集中在Bank类

    • 低耦合:账户与业务逻辑分离

  2. 数据持久化

    • 使用pickle简化对象存储

    • 自动加载/保存机制

  3. 用户体验

    • 清晰的菜单界面

    • 操作结果即时反馈

    • 密码隐私保护

四、代码块

1. 整体结构
# coding=utf-8  # 指定文件编码为UTF-8
import os  # 操作系统接口模块
import pickle  # 对象序列化模块# 定义账户类
class Account:...# 定义银行类
class Bank:...# 创建银行实例
bank = Bank()# 主程序入口
def main():...# 程序启动点
if __name__ == '__main__':main()
2. Account类 - 账户模型
class Account:def __init__(self, name, password, balance=0, status="normal"):self.name = name  # 账户名self.password = password  # 密码self.balance = balance  # 余额,默认0self.status = status  # 状态,默认"normal"(正常)def __str__(self):# 格式化输出账户信息,密码显示为星号return "--- Account Info ---\n" \"账户: {}\n" \"密码: {}\n" \"余额: {}\n" \"账户: {}".format(self.name, '*' * len(self.password), self.balance, self.status)
3. Bank类 - 银行业务逻辑
class Bank:def __init__(self):self.accounts = {}  # 存储所有账户的字典self.filename = "bank.txt"  # 数据存储文件名# 验证账户密码def verify(self, name, password):...# 创建新账户def create_account(self, name, password):...# 查询账户信息def query_account(self, name):...# 取款操作def withdraw(self, name, amount):...# 存款操作def deposit(self, name, amount):...# 转账操作def transfer(self, name1, name2, amount):...# 锁定账户def lock_account(self, name):...# 解锁账户def unlock_account(self, name):...# 保存数据到文件def save(self):with open(self.filename, 'wb') as file:pickle.dump(self.accounts, file)  # 序列化存储# 从文件加载数据def load(self):if os.path.exists(self.filename):  # 检查文件是否存在with open(self.filename, 'rb') as file:self.accounts = pickle.load(file)  # 反序列化加载
4. 主程序流程
def main():bank.load()  # 启动时加载数据while True:  # 主循环# 显示菜单print("--- 银行管理系统 ---")print("1. 开户")print("2. 查询")print("3. 取款")print("4. 存款")print("5. 转账")print("6. 锁定")print("7. 解锁")print("8. 保存")print("9. 退出")choice = input("请选择您要办理的业务: ")  # 获取用户选择# 根据选择执行相应操作if choice == "1":  # 开户...elif choice == "2":  # 查询...# ... 其他选项处理 ...elif choice == "9":  # 退出bank.save()  # 保存数据print("再见")break  # 退出循环else:print("您的输入有误!!!")
5. 功能总结
功能描述实现方法
开户创建新账户create_account()
查询查看账户信息query_account()
取款从账户提取资金withdraw()
存款向账户存入资金deposit()
转账账户间转移资金transfer()
锁定禁止账户操作lock_account()
解锁恢复账户操作unlock_account()
保存持久化存储数据save()
加载启动时恢复数据load()
6. 关键特点
  1. 面向对象设计:使用类封装账户和银行逻辑

  2. 数据持久化:使用pickle模块保存/加载账户数据

  3. 交互式菜单:命令行界面提供用户友好的操作

  4. 账户状态管理:支持正常/锁定两种状态

  5. 基本验证:检查账户存在性、状态和余额

7. 代码执行流程
  1. 程序启动时创建Bank实例

  2. 加载之前保存的账户数据(如果有)

  3. 显示主菜单供用户选择操作

  4. 根据用户选择执行相应银行业务

  5. 退出时自动保存数据

五、完整代码

# coding=utf-8
import os
import pickle  # 可以让字典序列化# 定义账户类
class Account:def __init__(self, name, password, balance=0, status="normal"):  # 账号,密码,余额,状态self.name = nameself.password = passwordself.balance = balanceself.status = status# 定义显示函数,显示账户基本信息def __str__(self):return "--- Account Info ---\n" \"账户: {}\n" \"密码: {}\n" \"余额: {}\n" \"账户: {}".format(self.name, '*' * len(self.password), self.balance, self.status)# 定义银行类
class Bank:def __init__(self):self.accounts = {}  # 存放所有账户信息的字典self.filename = "bank.txt"  # 存档文件名def verify(self, name, password):  # 判断账户和密码是否正确,如果true进入功能列表if name in self.accounts and self.accounts[name].password == password:return Trueelse:return Falsedef create_account(self, name, password):  # 定义开户if name in self.accounts:return "账户已存在"else:self.accounts[name] = Account(name, password)return "账户创建成功"def query_account(self, name):  # 定义查询if name in self.accounts:return str(self.accounts[name])else:return "账户不存在"def withdraw(self, name, amount):  # 定义取款if name in self.accounts:if self.accounts[name].status == "normal":if self.accounts[name].balance >= amount:self.accounts[name].balance -= amountreturn "取款成功"else:return "余额不足"else:return "账户已被锁定"else:return "账户不存在"def deposit(self, name, amount):  # 定义存款if name in self.accounts:if self.accounts[name].status == "normal":self.accounts[name].balance += amountreturn "存款成功"else:return "账户已被锁定"else:return "账户不存在"def transfer(self, name1, name2, amount):  # 定义转账if name1 in self.accounts and name2 in self.accounts:if self.accounts[name1].status == "normal" and self.accounts[name2].status == "normal":if self.accounts[name1].balance >= amount:self.accounts[name1].balance -= amountself.accounts[name2].balance += amountreturn "转账成功"else:return "您的余额不足"else:return "账户已被锁定"else:return "账户不存在"def lock_account(self, name):  # 定义锁定if name in self.accounts:self.accounts[name].status = "locked"return "账户已锁定"else:return "账户不存在"def unlock_account(self, name):  # 定义解锁if name in self.accounts:self.accounts[name].status = "normal"return "账户已解锁"else:return "账户不存在"def save(self):  # 定义保存with open(self.filename, 'wb') as file:pickle.dump(self.accounts, file)def load(self):  # 定义退出if os.path.exists(self.filename):  # 判断对应文件或目录是否存在with open(self.filename, 'rb') as file:self.accounts = pickle.load(file)bank = Bank()def main():bank.load()while True:print("--- 银行管理系统 ---")print("1. 开户")print("2. 查询")print("3. 取款")print("4. 存款")print("5. 转账")print("6. 锁定")print("7. 解锁")print("8. 保存")print("9. 退出")choice = input("请选择您要办理的业务: ")if choice == "1":name = input("请输入您的账号: ")password = input("请输入您的密码: ")print(bank.create_account(name, password))elif choice == "2":name = input("请输入您的账号: ")print(bank.query_account(name))elif choice == "3":name = input("请输入您的账号: ")amount = float(input("请输入您要取款金额: "))print(bank.withdraw(name, amount))elif choice == "4":name = input("请输入您的账号: ")amount = float(input("请输入您要存款金额: "))print(bank.deposit(name, amount))elif choice == "5":name1 = input("请输入您的账号: ")name2 = input("请输入要转账的账号 ")amount = float(input("请输入您要转账金额: "))print(bank.transfer(name1, name2, amount))elif choice == "6":name = input("请输入您的账号: ")print(bank.lock_account(name))elif choice == "7":name = input("请输入您的账号: ")print(bank.unlock_account(name))elif choice == "8":bank.save()print("已保存")elif choice == "9":bank.save()print("再见")breakelse:print("您的输入有误!!!")if __name__ == '__main__':main()

相关文章:

  • 图解Git中Rebase与Merge的区别
  • Linux中《动/静态库原理》
  • WireShark网络取证分析第一集到第五集和dvwa靶场环境分析漏洞
  • C++并发编程-5.C++ 线程安全的单例模式演变
  • 暑假复习篇之五子棋①
  • MongoDB06 - MongoDB 地理空间
  • Cursor 教程:用 Cursor 创建第一个 Java 项目
  • Blood-Cat 公網網路攝像機泄露收集器:查看指定國家地區攝像
  • 左神算法之螺旋打印
  • Docker 镜像构建 - Aliyun
  • 深入探索 GORM:Go 语言中的强大 ORM 工具
  • 熟悉 PyCharm
  • 常识科普:去杠杆通常分为四个步骤
  • Spring Cloud:分布式事务管理与数据一致性解决方案
  • KPL战队近五年热度指数
  • springboot小区物业管理系统
  • CppCon 2017 学习:Undefined Behavior in 2017
  • Redis 持久化之 AOF 策略
  • (LeetCode 面试经典 150 题 ) 134. 加油站 (贪心)
  • RedisVL Schema 官方手册详读