Ô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 Dart của Coddy. Bài học 22 trên 110.
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, kết hợp tất cả các khái niệm về thuộc tính lớp (class property) bạn đã học trong chương này. Bạn sẽ tạo một hệ thống theo dõi dữ liệu của từng tài khoản, đồng thời duy trì số liệu thống kê trên toàn ngân hàng.
Bạn sẽ sắp xếp code thành hai tệp:
bank_account.dart: Định nghĩa lớpBankAccountđể quản lý từng tài khoản và theo dõi số liệu thống kê chung của ngân hàng. Lớp của bạn cần có:- Một
final String accountNumberkhông thể thay đổi sau khi tạo - Một
String holderNamelưu tên chủ tài khoản - Một trường riêng tư
double _balancecó giá trị ban đầu là0.0 - Một
static int totalAccountscó giá trị ban đầu là0để theo dõi số lượng tài khoản hiện có - Một
static double totalDepositscó giá trị ban đầu là0.0để theo dõi tất cả khoản tiền gửi trong ngân hàng - Một hàm khởi tạo nhận
accountNumbervàholderName, rồi tăngtotalAccounts - Một getter
balancetrả về số dư hiện tại - Một phương thức
deposit(double amount)chỉ cộng vào số dư nếu số tiền dương, đồng thời cộng vàototalDepositskhi gửi tiền thành công - Một phương thức
withdraw(double amount)chỉ trừ số tiền khỏi số dư nếu số tiền dương và không vượt quá số dư hiện tại - Một phương thức
displayInfo()in thông tin tài khoản - Một phương thức tĩnh
getBankStats()trả về chuỗi chứa số liệu thống kê chung của ngân hàng
- Một
main.dart: Nhập lớp tài khoản ngân hàng và minh họa cách hoạt động của hệ thống:- Tạo một tài khoản có số
'ACC001'cho'Alice' - Tạo một tài khoản có số
'ACC002'cho'Bob' - Gửi
500.0vào tài khoản của Alice - Gửi
300.0vào tài khoản của Bob - Rút
150.0từ tài khoản của Alice - Thử rút
1000.0từ tài khoản của Bob (sẽ bị bỏ qua vì không đủ tiền) - Thử gửi
-50.0vào tài khoản của Alice (sẽ bị bỏ qua vì số tiền âm) - Gọi
displayInfo()trên tài khoản của Alice, rồi đến tài khoản của Bob - In số liệu thống kê của ngân hàng bằng
BankAccount.getBankStats()
- Tạo một tài khoản có số
Phương thức displayInfo() sẽ in theo định dạng sau:
Account [accountNumber] | Holder: [holderName] | Balance: $[balance]Phương thức getBankStats() sẽ trả về:
Bank Stats - Total Accounts: [totalAccounts] | Total Deposits: $[totalDeposits]Đầu ra dự kiến:
Account ACC001 | Holder: Alice | Balance: $350.0
Account ACC002 | Holder: Bob | Balance: $300.0
Bank Stats - Total Accounts: 2 | Total Deposits: $800.0Tự làm thử
import 'bank_account.dart';
void main() {
// TODO: Tạo tài khoản số 'ACC001' cho 'Alice'
// TODO: Tạo tài khoản số 'ACC002' cho 'Bob'
// TODO: Nạp 500.0 vào tài khoản của Alice
// TODO: Nạp 300.0 vào tài khoản của Bob
// TODO: Rút 150.0 từ tài khoản của Alice
// TODO: Thử rút 1000.0 từ tài khoản của Bob (thao tác này sẽ bị bỏ qua)
// TODO: Thử nạp -50.0 vào tài khoản của Alice (thao tác này sẽ bị bỏ qua)
// TODO: Gọi displayInfo() trên tài khoản của Alice
// TODO: Gọi displayInfo() trên tài khoản của Bob
// TODO: In ra số liệu thống kê của ngân hàng bằng BankAccount.getBankStats()
}
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiThư viện và câu lệnh importGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcBiến thể hiệnKiến thức cơ bản về hàm khởi tạoÔn tập: Máy tính đơn giản4An toàn với giá trị null
Giới thiệu về an toàn với giá trị nullCó thể null và không thể nullToán tử ? và !Từ khóa late và an toàn với giá trị nullToán tử xử lý nullAn toàn với giá trị null trong lớpÔn tập: hệ thống hồ sơ người dùng7Lớp trừu tượng và interface
Lớp trừu tượngPhương thức trừu tượngInterface trong DartInterface ngầm địnhTriển khai và kế thừaNhiều interfaceÔn tập: Máy tính hình10Bộ sưu tập và kiểu tổng quát
Tổng quan về List, Set và MapBộ sưu tập an toàn về kiểuLớp tổng quátPhương thức tổng quátRàng buộc kiểu tổng quátIterable và IteratorÔn tập: Lưu trữ tổng quát2Hàm khởi tạo trong Dart
Hàm khởi tạo mặc địnhHàm khởi tạo có tênDanh sách khởi tạoHàm khởi tạo hằng sốHàm khởi tạo nhà máyHàm khởi tạo chuyển hướngÔn tập: Trình tạo hình dạng5Đóng gói
Thành viên công khai và riêng tưQuy ước tiền tố _Tính riêng tư ở cấp thư việnTìm hiểu sâu về getter và setterChe giấu thông tinÔn tập: hồ sơ học sinh8Mixin
Giới thiệu về MixinTạo MixinSử dụng nhiều MixinTừ khóa on trong MixinMixin và kế thừaMixin và giao diệnÔn tập: hệ thống động vật3Thuộc tính của lớp
Thành viên instance và thành viên tĩnhTrường final và constBiến latePhương thức và trường tĩnhGetter và setterÔn tập: trình quản lý tài khoản ngân hàng6Kế thừa
Kế thừa cơ bảnTừ khóa superGhi đè phương thứcChú thích @overrideTừ khóa lớp finalHàm khởi tạo và kế thừaÔn tập: phân cấp nhân viên9Đa hình
Khái niệm cơ bản về đa hìnhĐa hình qua giao diệnKiểm tra kiểu lúc chạyToán tử is và asTừ khóa hiệp biếnÔn tập: Bộ xử lý thanh toánTự luyện tập: Trình biên dịch Dart online