15分钟学Python 第26天 : Python标准库简易银行系统

Day 26: Python标准库 - 简易银行系统

课程目标

本节课旨在通过构建一个简易银行系统来介绍Python标准库的使用。学生将学习如何使用文件操作、异常处理以及数据结构等来管理银行账户信息,实现基本的银行操作。

学习大纲

  1. 系统需求分析
  2. 设计银行账户类
  3. 实现基本银行操作
  4. 文件操作与数据持久化
  5. 异常处理
  6. 系统测试与验证
  7. 总结与扩展

1. 系统需求分析

我们的简易银行系统需要实现以下功能:

功能描述
创建账户用户可以创建新的银行账户
查询余额用户可以查询账户的余额
存款用户可以向账户存款
取款用户可以从账户取款
账户信息管理存储和读取账户信息

需求分析示例

我们将通过一个Python类 BankAccount 来实现账户功能,每个账户具有一个唯一的账户ID、账户持有人姓名和账户余额。


2. 设计银行账户类

首先我们定义银行账户类的基本结构:

class BankAccount:
    def __init__(self, account_id, owner, balance=0):
        self.account_id = account_id
        self.owner = owner
        self.balance = balance
    
    def deposit(self, amount):
        if amount > 0:
            self.balance += amount
            return self.balance
        else:
            raise ValueError("存款金额必须大于0")

    def withdraw(self, amount):
        if 0 < amount <= self.balance:
            self.balance -= amount
            return self.balance
        else:
            raise ValueError("取款金额无效")

    def get_balance(self):
        return self.balance

    def __str__(self):
        return f"账户ID: {self.account_id}, 持有人: {self.owner}, 余额: {self.balance}"

解释代码

  • __init__ 方法用于初始化账户信息。
  • depositwithdraw 方法用于处理存款和取款操作。
  • get_balance 方法用于查询余额。
  • __str__ 方法用于打印账户信息,方便调试。

3. 实现基本银行操作

我们可以实现一个简单的用户界面来与系统交互。以下是一个示例:

def main():
    accounts = {}
    
    while True:
        action = input("请选择操作: 1. 创建账户 2. 存款 3. 取款 4. 查询余额 5. 退出\n")

        if action == '1':
            account_id = input("请输入账户ID: ")
            owner = input("请输入持有人姓名: ")
            accounts[account_id] = BankAccount(account_id, owner)
            print(f"账户创建成功: {accounts[account_id]}")

        elif action == '2':
            account_id = input("请输入账户ID: ")
            amount = float(input("请输入存款金额: "))
            if account_id in accounts:
                new_balance = accounts[account_id].deposit(amount)
                print(f"存款成功, 新余额: {new_balance}")
            else:
                print("账户不存在")

        elif action == '3':
            account_id = input("请输入账户ID: ")
            amount = float(input("请输入取款金额: "))
            if account_id in accounts:
                try:
                    new_balance = accounts[account_id].withdraw(amount)
                    print(f"取款成功, 新余额: {new_balance}")
                except ValueError as e:
                    print(e)
            else:
                print("账户不存在")

        elif action == '4':
            account_id = input("请输入账户ID: ")
            if account_id in accounts:
                print(f"当前余额: {accounts[account_id].get_balance()}")
            else:
                print("账户不存在")

        elif action == '5':
            print("退出系统")
            break

        else:
            print("无效操作,请重试")

if __name__ == "__main__":
    main()

运行流程图

以下是系统操作的流程图,展示了不同操作的逻辑流程:

┌───────────────┐
│  开始         │
└─────┬─────────┘
      │
      ▼
┌───────────────┐
│  选择操作     │
└─────┬─────────┘
      │
 ┌────┴─────┐
 │          │
 ▼          ▼
创建账户   查询余额
 │          │
 │          ▼
 │       账户存在?
 ▼          │
存款操作   ┌─────┐
 │          │  是 │
 └─────────>│显示│
      │       └─────┘
取款操作      │
      │       ┌─────┐
      │       │  否 │
      │       └─────┘
      │          │ 
 ┌────▼────┐    │
 │获取余额 │<───┘
 └─────────┘
      │
 ┌────▼────┐
 │   退出  │
 └─────────┘

4. 文件操作与数据持久化

为了实现数据的持久化,我们需要将账户信息写入文件。我们可以使用Python的 csv 模块来完成这一功能。

示例代码 - 文件操作

import csv

def save_accounts(accounts):
    with open('accounts.csv', mode='w', newline='') as file:
        writer = csv.writer(file)
        for account in accounts.values():
            writer.writerow([account.account_id, account.owner, account.balance])

def load_accounts():
    accounts = {}
    try:
        with open('accounts.csv', mode='r') as file:
            reader = csv.reader(file)
            for row in reader:
                account_id, owner, balance = row
                accounts[account_id] = BankAccount(account_id, owner, float(balance))
    except FileNotFoundError:
        pass  # 文件不存在时返回空字典
    return accounts

解释代码

  • save_accounts 方法将现有账户信息写入 accounts.csv 文件。
  • load_accounts 方法从文件读取账户信息并重新创建 BankAccount 对象。

在主程序中调用

main 函数开始时,我们可以调用 load_accounts() 加载之前保存的账户数据,在退出前调用 save_accounts(accounts) 保存账户数据。

def main():
    accounts = load_accounts()
    # 其余代码...

5. 异常处理

我们在程序中开设了一些异常处理机制,以确保程序的健壮性。例如,在存款和取款时,我们检查金额的有效性;在读取账户信息时,我们捕获文件未找到的异常。

完善异常处理的示例

def withdraw(self, amount):
    if amount <= 0:
        raise ValueError("取款金额必须大于0")
    if amount > self.balance:
        raise ValueError("余额不足")
    self.balance -= amount
    return self.balance

6. 系统测试与验证

在完成系统的实现后,我们需要进行测试以确保各个功能模块的正确性。测试包括:

  1. 创建账户
  2. 存款和取款操作
  3. 查询余额
  4. 文件读写操作

测试用例示例

测试用例序号测试内容预期结果
1创建新账户账户创建成功
2存款500余额应为500
3取款200余额应为300
4查询余额返回300
5存款-100抛出异常
6取款400抛出异常

7. 总结与扩展

本课小结

本次课程通过构建简易银行系统,深入了解了Python标准库在文件操作、数据结构和异常处理方面的应用。同时也学习了如何实现一个简单的命令行用户交互程序。

扩展思考

未来,我们可以将此系统扩展为一个支持多用户并发操作的应用程序。例如,通过引入数据库(如SQLite)来存储账户信息,或使用Flask等框架构建Web应用,提供更加灵活的用户界面。此外,还可以加入用户身份验证、交易记录等更复杂的功能。

结束语

希望同学们通过本节课的学习能够掌握Python标准库的使用,并能在实际项目中灵活应用这些知识。


练习题

  1. 请扩展银行系统,加入账户信息修改功能。
  2. 请实现账户交易记录功能,记录每次存取款的详细信息。
  3. 尝试将此系统封装为一个模块,以便在其他项目中重用。

怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值