Menu
CoddyTech

Ôn tập: Trình quản lý tài khoản ngân hàng

Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 20 trên 91.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống quản lý tài khoản ngân hàng hoàn chỉnh, kết hợp tất cả các khái niệm về thuộc tính lớp mà bạn đã học trong chương này. Bạn sẽ tạo một lớp BankAccount để đóng gói dữ liệu tài khoản đúng cách, đồng thời theo dõi số liệu thống kê trên toàn ngân hàng.

Bạn sẽ sắp xếp code trong hai tệp:

  • BankAccount.php: Định nghĩa lớp BankAccount để quản lý từng tài khoản và theo dõi số liệu thống kê tổng thể của ngân hàng. Lớp này cần có:
    • Một hằng số MINIMUM_BALANCE được đặt thành 100
    • Một thuộc tính public readonly string $accountId không thể thay đổi sau khi tạo
    • Một thuộc tính public $holderName lưu tên chủ tài khoản
    • Một thuộc tính private $balance để bảo vệ số dư tài khoản
    • Một thuộc tính static private $totalAccounts có giá trị ban đầu là 0
    • Một thuộc tính static private $totalDeposits có giá trị ban đầu là 0
    Hàm khởi tạo cần nhận mã tài khoản, tên chủ tài khoản và số dư ban đầu. Hàm này cần thiết lập tất cả thuộc tính của instance và tăng tổng số tài khoản lên một. Thêm các phương thức sau:
    • getBalance(): trả về số dư hiện tại
    • deposit($amount): cộng vào số dư và cập nhật bộ theo dõi tổng tiền gửi, sau đó trả về số dư mới
    • withdraw($amount): trừ tiền khỏi số dư chỉ khi số dư còn lại bằng hoặc cao hơn hằng số số dư tối thiểu, sau đó trả về số dư mới (hoặc số dư không đổi nếu không thể rút tiền)
    • Một phương thức static getTotalAccounts(): trả về tổng số tài khoản đã tạo
    • Một phương thức static getTotalDeposits(): trả về tổng số tiền đã gửi vào tất cả tài khoản
  • main.php: Thêm tệp lớp BankAccount. Bạn sẽ nhận bốn đầu vào: mã tài khoản thứ nhất, tên chủ tài khoản thứ nhất, mã tài khoản thứ hai và tên chủ tài khoản thứ hai. Tạo hai tài khoản, mỗi tài khoản có số dư ban đầu là 500. Với tài khoản thứ nhất: gửi 200, sau đó rút 100. In mã tài khoản, tên chủ tài khoản và số dư trên một dòng theo định dạng: "[accountId]: [holderName] - $[balance]" Với tài khoản thứ hai: gửi 300, sau đó thử rút 800 (thao tác này sẽ thất bại vì số dư tối thiểu). In thông tin tài khoản theo cùng định dạng. Cuối cùng, in tổng số tài khoản và tổng số tiền gửi trên các dòng riêng:
    • "Total Accounts: [count]"
    • "Total Deposits: $[amount]"

Thử thách này kết hợp thuộc tính readonly để tạo mã định danh không thể thay đổi, thuộc tính private cùng phương thức getter để bảo vệ dữ liệu, hằng số cho các quy tắc cố định, và thuộc tính static cùng phương thức static để theo dõi số liệu thống kê trên toàn ngân hàng.

Tự làm thử

<?php

require_once 'BankAccount.php';

// Đọc dữ liệu đầu vào
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));

// TODO: Tạo tài khoản thứ nhất với số dư ban đầu là 500

// TODO: Tạo tài khoản thứ hai với số dư ban đầu là 500

// TODO: Tài khoản thứ nhất: gửi 200, sau đó rút 100

// TODO: In ra thông tin tài khoản thứ nhất: "[accountId]: [holderName] - $[balance]"

// TODO: Tài khoản thứ hai: gửi 300, sau đó thử rút 800

// TODO: In ra thông tin tài khoản thứ hai: "[accountId]: [holderName] - $[balance]"

// TODO: In ra "Total Accounts: [count]"

// TODO: In ra "Total Deposits: $[amount]"

?>

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch PHP online