accountNumber = $accountNumber; $this->ownerName = $ownerName; $this->balance = max(0, $initialBalance); } public function deposit(float $amount): array { if ($amount <= 0) { return ['success' => false, 'message' => 'Số tiền nạp vào phải lớn hơn 0 VNĐ!']; } $this->balance += $amount; return [ 'success' => true, 'message' => 'Nạp thành công +' . number_format($amount, 0, ',', '.') . ' VNĐ vào tài khoản.' ]; } public function withdraw(float $amount): array { if ($amount <= 0) { return ['success' => false, 'message' => 'Số tiền cần rút phải lớn hơn 0 VNĐ!']; } if ($amount > $this->balance) { return [ 'success' => false, 'message' => 'Giao dịch thất bại: Số dư không đủ để rút ' . number_format($amount, 0, ',', '.') . ' VNĐ!' ]; } $this->balance -= $amount; return [ 'success' => true, 'message' => 'Rút thành công -' . number_format($amount, 0, ',', '.') . ' VNĐ khỏi tài khoản.' ]; } public function getBalanceInfo(): array { return [ 'accountNumber' => $this->accountNumber, 'ownerName' => $this->ownerName, 'balance' => $this->balance, 'formattedBalance' => number_format($this->balance, 0, ',', '.') . ' VNĐ' ]; } } // Khởi tạo dữ liệu mặc định trong Session nếu chưa có if (!isset($_SESSION['lab02_bank'])) { $_SESSION['lab02_bank'] = [ 'accountNumber' => '190388996868', 'ownerName' => 'HOANG VU', 'balance' => 5000000, 'history' => [ ['time' => date('H:i:s d/m/Y'), 'type' => 'INIT', 'msg' => 'Khởi tạo tài khoản với số dư ban đầu 5.000.000 VNĐ'] ] ]; } $bankData = &$_SESSION['lab02_bank']; $account = new BankAccount($bankData['accountNumber'], $bankData['ownerName'], (float)$bankData['balance']); $feedback = null; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; $amount = (float)($_POST['amount'] ?? 0); if ($action === 'deposit') { $feedback = $account->deposit($amount); if ($feedback['success']) { $bankData['balance'] = $account->getBalanceInfo()['balance']; array_unshift($bankData['history'], [ 'time' => date('H:i:s d/m/Y'), 'type' => 'DEPOSIT', 'msg' => $feedback['message'] ]); } } elseif ($action === 'withdraw') { $feedback = $account->withdraw($amount); if ($feedback['success']) { $bankData['balance'] = $account->getBalanceInfo()['balance']; array_unshift($bankData['history'], [ 'time' => date('H:i:s d/m/Y'), 'type' => 'WITHDRAW', 'msg' => $feedback['message'] ]); } } elseif ($action === 'reset') { unset($_SESSION['lab02_bank']); header('Location: index.php'); exit; } } $info = $account->getBalanceInfo(); ?>
BankAccount (Nạp tiền, Rút tiền & Kiểm tra số dư)Thực hành đóng gói dữ liệu tài khoản và kiểm tra ràng buộc số dư hợp lệ
getBalanceInfo())
STK: = htmlspecialchars($info['accountNumber']) ?>