银行账户管理系统01
-
账户管理
-
开户:创建新账户(账户名+密码)
-
查询:查看账户余额和状态
-
取款/存款:资金操作
-
转账:账户间资金转移
-
锁定/解锁:控制账户状态
-
-
数据持久化
-
使用
pickle
模块将账户数据保存到文件 -
程序启动时自动加载历史数据
-
退出时自动保存数据
-
-
账户安全
-
密码显示保护(显示为星号)
-
账户锁定状态检查
-
余额不足验证
-
二、代码结构分析
-
Account类:封装账户核心属性
-
初始化方法:
__init__
设置账户初始状态 -
字符串表示:
__str__
格式化输出账户信息
-
-
Bank类:业务逻辑核心
-
账户操作:创建/查询/存取款/转账等
-
状态管理:锁定/解锁账户
-
数据持久化:save()/load()方法
-
-
主程序流程
三、代码亮点
-
面向对象设计
-
高内聚:账户操作集中在Bank类
-
低耦合:账户与业务逻辑分离
-
-
数据持久化
-
使用pickle简化对象存储
-
自动加载/保存机制
-
-
用户体验
-
清晰的菜单界面
-
操作结果即时反馈
-
密码隐私保护
-
四、代码块
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. 关键特点
-
面向对象设计:使用类封装账户和银行逻辑
-
数据持久化:使用pickle模块保存/加载账户数据
-
交互式菜单:命令行界面提供用户友好的操作
-
账户状态管理:支持正常/锁定两种状态
-
基本验证:检查账户存在性、状态和余额
7. 代码执行流程
-
程序启动时创建Bank实例
-
加载之前保存的账户数据(如果有)
-
显示主菜单供用户选择操作
-
根据用户选择执行相应银行业务
-
退出时自动保存数据
五、完整代码
# 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()