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 C++ của Coddy. Bài học 33 trên 104.

challenge icon

Thử thách

Dễ

Hãy cùng xây dựng một chương trình 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: thành viên private cùng hàm getter và setter, hàm thành viên const, thành viên mutable, biến và phương thức static, cùng hàm friend.

Bạn sẽ tạo hai tệp để sắp xếp code:

  • BankAccount.h: Định nghĩa lớp BankAccount để quản lý dữ liệu tài khoản với tính đóng gói phù hợp. Lớp của bạn cần có:
    • Các thành viên private: accountNumber (chuỗi), ownerName (chuỗi), balance (số thực kiểu double) và mutable int queryCount để theo dõi số lần số dư được kiểm tra
    • Một thành viên static private totalAccounts để theo dõi số tài khoản hiện có
    • Một hàm khởi tạo nhận số tài khoản, tên chủ tài khoản và số dư ban đầu. Hàm này cần khởi tạo queryCount bằng 0 và tăng totalAccounts
    • Các hàm getter const: getAccountNumber(), getOwnerName() và getBalance(): hàm getter số dư cần tăng queryCount mỗi lần được gọi
    • Một hàm getter const getQueryCount() trả về số lần số dư được kiểm tra
    • Một phương thức deposit(double amount) chỉ cộng vào số dư khi số tiền dương
    • Một phương thức withdraw(double amount) chỉ trừ vào số dư khi số tiền dương và không vượt quá số dư hiện tại
    • Một phương thức static getTotalAccounts() trả về tổng số tài khoản đã tạo
    • Khai báo hàm friend transfer(BankAccount& from, BankAccount& to, double amount) để chuyển tiền giữa các tài khoản. Hàm này chỉ chuyển tiền khi số tiền dương và tài khoản nguồn có đủ tiền

    Định nghĩa thành viên static và hàm friend sau phần định nghĩa lớp.

  • main.cpp: Minh họa cách tất cả các tính năng này hoạt động cùng nhau. Đọc hai tên chủ tài khoản và hai số dư ban đầu từ đầu vào (tổng cộng bốn dòng: name1, balance1, name2, balance2), sau đó:
    • Tạo hai đối tượng BankAccount với số tài khoản "ACC001" và "ACC002"
    • In ra "Total accounts: <count>"
    • In ra "<name>: $<balance>" cho tài khoản thứ nhất
    • In ra "<name>: $<balance>" cho tài khoản thứ hai
    • Nạp 500.0 vào tài khoản thứ nhất
    • In ra "After deposit - <name>: $<balance>" cho tài khoản thứ nhất
    • Chuyển 300.0 từ tài khoản thứ nhất sang tài khoản thứ hai bằng hàm friend
    • In ra "After transfer:"
    • In ra " <name>: $<balance>" cho tài khoản thứ nhất
    • In ra " <name>: $<balance>" cho tài khoản thứ hai
    • In ra "Query count for <name>: <count>" cho tài khoản thứ nhất

Định dạng tất cả các giá trị số dư với hai chữ số thập phân bằng std::fixed và std::setprecision(2) từ <iomanip>. Chuyển các giá trị số dư đầu vào từ chuỗi sang số thực bằng std::stod().

Đừng quên thêm header guard vào tệp header và đưa <string> cùng <iostream> vào ở những nơi cần thiết.

Tự làm thử

#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"

int main() {
    // Đọc đầu vào
    std::string name1, name2;
    std::string balance1Str, balance2Str;
    
    std::getline(std::cin, name1);
    std::getline(std::cin, balance1Str);
    std::getline(std::cin, name2);
    std::getline(std::cin, balance2Str);
    
    double balance1 = std::stod(balance1Str);
    double balance2 = std::stod(balance2Str);
    
    // Định dạng đầu ra với 2 chữ số thập phân
    std::cout << std::fixed << std::setprecision(2);
    
    // TODO: Tạo hai đối tượng BankAccount có số tài khoản "ACC001" và "ACC002"
    
    // TODO: In ra "Total accounts: <count>"
    
    // TODO: In ra "<name>: $<balance>" cho tài khoản thứ nhất
    
    // TODO: In ra "<name>: $<balance>" cho tài khoản thứ hai
    
    // TODO: Nạp 500.0 vào tài khoản thứ nhất
    
    // TODO: In ra "After deposit - <name>: $<balance>" cho tài khoản thứ nhất
    
    // TODO: Chuyển 300.0 từ tài khoản thứ nhất sang tài khoản thứ hai bằng hàm friend
    
    // TODO: In ra "After transfer:"
    
    // TODO: In ra "  <name>: $<balance>" cho tài khoản thứ nhất (lưu ý thụt lề 2 dấu cách)
    
    // TODO: In ra "  <name>: $<balance>" cho tài khoản thứ hai (lưu ý thụt lề 2 dấu cách)
    
    // TODO: In ra "Query count for <name>: <count>" cho tài khoản đầu tiên
    
    return 0;
}

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 C++ online