Menu
CoddyTech

复习:银行账户管理器

本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 20 课,共 91 课。

challenge icon

挑战

简单

让我们构建一个完整的银行账户管理系统,综合运用你在本章学过的所有类属性概念。你将创建一个 BankAccount 类,妥善封装账户数据,同时跟踪整个银行的统计数据。

你将把代码分为两个文件:

  • BankAccount.php:定义一个 BankAccount 类,用于管理单个账户并跟踪银行的整体统计数据。这个类应包含:
    • 一个设为 100 的常量 MINIMUM_BALANCE
    • 一个公开的只读属性 string $accountId,创建后不能更改
    • 一个公开属性 $holderName,用于存储账户持有人的姓名
    • 一个私有属性 $balance,用于保护账户余额
    • 一个初始值为 0 的私有静态属性 $totalAccounts
    • 一个初始值为 0 的私有静态属性 $totalDeposits
    构造函数应接收账户 ID、持有人姓名和初始余额。它应设置所有实例属性,并增加账户总数。 包含以下方法:
    • getBalance():返回当前余额
    • deposit($amount):增加余额并更新存款总额统计,返回新余额
    • withdraw($amount):仅当剩余余额不低于最低余额常量时才扣除相应金额,返回新余额(如果不允许取款,则返回未改变的余额)
    • 一个静态方法 getTotalAccounts():返回创建的账户总数
    • 一个静态方法 getTotalDeposits():返回所有账户的存款总额
  • main.php:引入 BankAccount 类文件。你将收到 4 个输入:第一个账户 ID、第一个持有人姓名、第二个账户 ID 和第二个持有人姓名。创建两个账户,初始余额都为 500。 对于第一个账户:存入 200,然后取出 100。按照以下格式,在一行中输出账户 ID、持有人姓名和余额:"[accountId]: [holderName] - $[balance]" 对于第二个账户:存入 300,然后尝试取出 800(由于最低余额限制,取款应失败)。按照相同格式输出此账户的信息。 最后,分别在单独的行中输出账户总数和存款总额:
    • "Total Accounts: [count]"
    • "Total Deposits: $[amount]"

这个挑战综合运用了只读属性来存储不可变标识符、带有 getter 方法的私有属性来保护数据、常量来设定固定规则,以及静态属性和静态方法来统计整个银行的数据。

亲手试试

<?php

require_once 'BankAccount.php';

// 读取输入
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));

// TODO:创建第一个账户,初始余额为 500

// TODO:创建第二个账户,初始余额为 500

// TODO:第一个账户先存入 200,再取出 100

// TODO:输出第一个账户的信息:“[accountId]: [holderName] - $[balance]”

// TODO:第二个账户先存入 300,再尝试取出 800

// TODO:输出第二个账户的信息:“[accountId]: [holderName] - $[balance]”

// TODO:输出“Total Accounts: [count]”

// TODO:输出“Total Deposits: $[amount]”

?>

面向对象编程中的所有课

自己练习: PHP 在线编译器