Ô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 Java của Coddy. Bài học 14 trên 87.
Thử thách
DễHãy xây dựng một hệ thống BankAccount hoàn chỉnh, kết hợp mọi thứ bạn đã học về tính đóng gói, các phạm vi truy cập, getter, setter và từ khóa final.
Bạn sẽ tạo hai tệp để sắp xếp code:
BankAccount.java: Thiết kế một lớp tài khoản ngân hàng an toàn, bảo vệ dữ liệu tài chính nhạy cảm:- Một số tài khoản bất biến, không thể thay đổi sau khi tạo tài khoản
- Một số dư riêng tư, bắt đầu ở mức 0.0 và chỉ có thể thay đổi thông qua các phương thức được kiểm soát
- Một tên chủ tài khoản riêng tư, có thể truy xuất nhưng không thể thay đổi trực tiếp
- Một hàm khởi tạo nhận số tài khoản và tên chủ tài khoản
- Một getter cho số tài khoản
- Một getter cho tên chủ tài khoản
- Một getter cho số dư
- Một phương thức
deposit(double amount)chỉ cộng vào số dư nếu số tiền dương, trả vềtruenếu thành công hoặcfalsenếu bị từ chối - Một phương thức
withdraw(double amount)chỉ trừ vào số dư nếu số tiền dương VÀ có đủ tiền, trả vềtruenếu thành công hoặcfalsenếu bị từ chối - Một phương thức
getAccountSummary()trả về:"Account [accountNumber] | Owner: [ownerName] | Balance: $[balance]"(số dư được định dạng đến 2 chữ số thập phân)
Main.java: Tạo một BankAccount và thực hiện một loạt giao dịch. Bạn sẽ nhận năm đầu vào: số tài khoản, tên chủ tài khoản, số tiền gửi, số tiền rút lần đầu và số tiền rút lần thứ hai. In ra bốn dòng:- Kết quả gửi tiền:
Deposit: truehoặcDeposit: false - Kết quả rút tiền lần đầu:
Withdraw 1: truehoặcWithdraw 1: false - Kết quả rút tiền lần thứ hai:
Withdraw 2: truehoặcWithdraw 2: false - Tóm tắt tài khoản cuối cùng
- Kết quả gửi tiền:
Bạn sẽ nhận lần lượt năm đầu vào: accountNumber (String), ownerName (String), depositAmount (double), withdrawAmount1 (double), withdrawAmount2 (double).
Để định dạng số dư đến 2 chữ số thập phân, bạn có thể dùng String.format("%.2f", balance).
Tự làm thử
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Đọc dữ liệu đầu vào
String accountNumber = scanner.nextLine();
String ownerName = scanner.nextLine();
double depositAmount = scanner.nextDouble();
double withdrawAmount1 = scanner.nextDouble();
double withdrawAmount2 = scanner.nextDouble();
// TODO: Tạo đối tượng BankAccount với accountNumber và ownerName
// TODO: Nạp tiền và in kết quả là "Deposit: true" hoặc "Deposit: false"
// TODO: Rút tiền lần đầu và in kết quả là "Withdraw 1: true" hoặc "Withdraw 1: false"
// TODO: Rút tiền lần thứ hai và in kết quả là "Withdraw 2: true" hoặc "Withdraw 2: false"
// TODO: In thông tin tóm tắt tài khoản
}
}
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcTrường (thuộc tính)Phương thức khởi tạoNạp chồng phương thức khởi tạoÔn tập: Máy tính đơn giản4Kế thừa
Kế thừa cơ bản (extends)Từ khóa superGhi đè phương thức (@Override)Chuỗi gọi hàm khởi tạoLớp ObjectKế thừa đơn và đa cấpVì sao không hỗ trợ kế thừa nhiều lớpÔn tập: Phân cấp lớp Employee7Phương thức đặc biệt và lớp Object
Phương thức toString()equals() và hashCode()Phương thức clone()compareTo() và ComparableGiao diện ComparatorÔn tập: sắp xếp tùy chỉnh2Bộ điều chỉnh quyền truy cập và đóng gói
Tổng quan về các mức truy cậpPhương thức getter và setterẨn thông tinTừ khóa finalÔn tập: Trình quản lý tài khoản ngân hàng5Tính đa hình
Kiến thức cơ bản về nạp chồng phương thứcGhi đè phương thức (thời gian chạy)Chuyển kiểu lên và chuyển kiểu xuốngToán tử instanceofLớp và phương thức trừu tượngÔn tập: máy tính hình học8Khái niệm OOP nâng cao
Kết hợp và kế thừaKết tập và hợp thànhLớp bên trong, lớp lồng nhau và lớp ẩn danhKiểu enum và phương thức enumBản ghi (Java 16+)Lớp sealed (Java 17+)3Thuộc tính lớp và thành viên tĩnh
Biến của instance và biến tĩnhPhương thức tĩnhKhối tĩnhHằng số (static final)Ôn tập: bộ đếm và tiện ích6Giao diện và lớp trừu tượng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnPhương thức mặc định và tĩnh trong giao diệnLớp trừu tượng và giao diệnGiao diện hàmÔn tập: hệ thống thanh toán9Kiểu tổng quát
Giới thiệu về kiểu tổng quátLớp tổng quátPhương thức tổng quátTham số kiểu có giới hạnKý tự đại diện (?, extends, super)Ôn tập: vùng chứa tổng quát12Mẫu thiết kế, phần 2
Mẫu CommandMẫu AdapterMẫu DecoratorMẫu Template MethodMẫu StateMẫu CompositeMẫu IteratorTự luyện tập: Trình biên dịch Java online