0

0

简单的银行账户系统如何实现 类封装与交易记录管理

P粉602998670

P粉602998670

发布时间:2025-08-16 17:00:02

|

1033人浏览过

|

来源于php中文网

原创

实现一个简单的银行账户系统需要通过类封装账户信息和操作并管理交易记录,具体做法是使用python的类将账户属性和行为封装起来,利用受保护属性防止直接访问余额,通过私有方法自动记录每次交易的类型、金额、时间和余额,确保交易可追溯,同时提供存款、取款、查询余额和交易历史的安全接口,所有操作均在方法内部更新余额和记录,最终实现数据安全与操作统一的面向对象设计。

简单的银行账户系统如何实现 类封装与交易记录管理

实现一个简单的银行账户系统,核心在于使用类封装账户信息和操作,并妥善管理交易记录。下面通过 Python 示例说明如何设计这样一个系统,重点突出类的封装性和交易记录的管理方式。

1. 账户类的基本封装

使用类(Class)将账户的基本属性(如账号、户名、余额)和行为(如存款、取款、查询余额)封装起来,保证数据的安全性和操作的统一性。

class BankAccount:
    def __init__(self, account_number, owner_name, initial_balance=0):
        self.account_number = account_number
        self.owner_name = owner_name
        self._balance = initial_balance  # 使用 _ 表示受保护,不建议直接访问
        self._transaction_history = []   # 存储交易记录
        self._record_transaction("账户创建", initial_balance)
  • __init__
    初始化账户基本信息。
  • _balance
    是受保护的属性,外部不应直接修改。
  • _transaction_history
    用于保存每笔交易的记录,是列表结构,每条记录为字典。

2. 交易记录的管理方式

每次发生资金变动时,都应记录交易类型、金额、时间及余额快照。这样可以实现可追溯的账单功能。

    def _record_transaction(self, transaction_type, amount):
        """私有方法:记录交易"""
        from datetime import datetime
        record = {
            "type": transaction_type,
            "amount": amount,
            "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            "balance": self._balance
        }
        self._transaction_history.append(record)

这个方法被内部调用,确保每次操作都自动记账,避免遗漏。

3. 提供安全的操作接口

通过公开方法实现存款、取款等操作,并在操作中自动更新余额和记录。

知了zKnown
知了zKnown

知了zKnown:致力于信息降噪 / 阅读提效的个人知识助手。

下载
    def deposit(self, amount):
        if amount <= 0:
            print("存款金额必须大于0")
            return False
        self._balance += amount
        self._record_transaction("存款", amount)
        print(f"成功存入 {amount} 元")
        return True

    def withdraw(self, amount):
        if amount <= 0:
            print("取款金额必须大于0")
            return False
        if amount > self._balance:
            print("余额不足")
            return False
        self._balance -= amount
        self._record_transaction("取款", amount)
        print(f"成功取出 {amount} 元")
        return True

    def get_balance(self):
        return self._balance

这些方法对外提供安全的操作入口,内部自动处理余额和记录。

4. 查询交易记录

用户可能需要查看自己的交易历史,系统应提供只读接口。

    def show_transaction_history(self):
        print(f"\n账户 {self.account_number} 的交易记录:")
        for record in self._transaction_history:
            print(f"[{record['timestamp']}] {record['type']} {record['amount']}元 | 余额: {record['balance']}元")

这样用户可以清晰看到每一笔操作的时间和结果。

5. 使用示例

# 创建账户
account = BankAccount("123456", "张三", 1000)

# 操作
account.deposit(500)
account.withdraw(200)
account.withdraw(1500)  # 余额不足

# 查看记录
account.show_transaction_history()

输出示例:

成功存入 500 元
成功取出 200 元
余额不足

账户 123456 的交易记录:
[2025-04-05 10:00:00] 账户创建 1000元 | 余额: 1000元
[2025-04-05 10:00:01] 存款 500元 | 余额: 1500元
[2025-04-05 10:00:02] 取款 200元 | 余额: 1300元
[2025-04-05 10:00:03] 取款 1500元 | 余额: 1300元

小结

  • 类封装保证了数据安全和行为统一。
  • 交易记录用列表存储字典,结构清晰,易于扩展。
  • 所有资金变动都通过方法控制,并自动记账。
  • 私有或受保护属性防止外部直接篡改余额。

基本上就这些,不复杂但能体现面向对象设计的核心思想。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

52

2025.11.27

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1128

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

213

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1673

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

20

2026.01.19

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

469

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

13

2025.12.06

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

0

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
布尔教育燕十八mysql优化视频教程
布尔教育燕十八mysql优化视频教程

共32课时 | 9.2万人学习

VBScript教程
VBScript教程

共10课时 | 6.3万人学习

WordPress中文手册文档
WordPress中文手册文档

共54课时 | 41.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号