Hệ thống 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 108 trên 110.
Thử thách
DễHãy xây dựng một Hệ thống ngân hàng mô phỏng các hoạt động tài chính trong thực tế bằng cách áp dụng các nguyên tắc OOP bạn đã nắm vững trong khóa học này. Bạn sẽ tạo các tài khoản với những quy tắc khác nhau, theo dõi giao dịch và quản lý khách hàng, tất cả được tổ chức trong nhiều tệp.
Hệ thống ngân hàng của bạn sẽ được tổ chức trong sáu tệp:
transaction.dart: Tạo lớpTransactionđại diện cho một bản ghi bất biến về hoạt động tài chính. Mỗi giao dịch có các trườngfinalchotype(String, "deposit", "withdrawal" hoặc "transfer"),amount(double) vàtimestamp(DateTime). Ghi đètoString()để trả về[type] $amount.account.dart: Tạo lớp trừu tượngAccountvới_balanceriêng tư (double), số tài khoảnfinal(accountNumber, String) và mộtList<Transaction>để lưu lịch sử giao dịch. Thêm getter cho số dư, setter được bảo vệset balance(double value)để các lớp con trong những tệp khác có thể cập nhật số dư, phương thức trừu tượngbool canWithdraw(double amount)để các lớp con triển khai, cùng các phương thức cụ thể sau:deposit(double amount): cộng vào số dư, ghi lại một giao dịch và in raDeposited $amount. Balance: $balancewithdraw(double amount): nếucanWithdraw()trả về true, trừ khỏi số dư, ghi lại một giao dịch và in raWithdrew $amount. Balance: $balance. Nếu không, in raWithdrawal denied.getTransactionCount(): trả về số lượng giao dịch
savings_account.dart: Tạo mộtSavingsAccountkế thừaAccount. Tài khoản tiết kiệm có giới hạn rút tiền: không thể rút quá $500 trong một giao dịch. Triển khaicanWithdraw()để áp dụng quy tắc này, đồng thời bảo đảm số dư đủ. Thêm phương thứcapplyInterest(double rate)để tăng số dư theo tỷ lệ phần trăm đã cho bằng getter và setterbalance, sau đó in raInterest applied. Balance: $balance.checking_account.dart: Tạo mộtCheckingAccountkế thừaAccount. Tài khoản thanh toán có hạn mức thấu chi $100, tức là số dư có thể âm nhưng không thấp hơn -$100. Triển khaicanWithdraw()để cho phép rút tiền miễn là số dư sau giao dịch bằng hoặc lớn hơn -$100.customer.dart: Tạo lớpCustomervớiid(String),name(String) và mộtList<Account>chứa các tài khoản của khách hàng. Thêm phương thứcaddAccount(Account account)để thêm tài khoản vàgetTotalBalance()để trả về tổng số dư của tất cả tài khoản. Ghi đètoString()để trả vềCustomer: name (X accounts).main.dart: Minh họa hệ thống ngân hàng của bạn. Tạo một khách hàng (C001,John Smith). Tạo mộtSavingsAccount(SAV001, số dư ban đầu $1000) và mộtCheckingAccount(CHK001, số dư ban đầu $500). Thêm cả hai tài khoản vào khách hàng rồi in thông tin khách hàng. Sau đó thực hiện các thao tác sau:- Nạp $200 vào tài khoản tiết kiệm
- Rút $300 từ tài khoản tiết kiệm (sẽ thành công)
- Thử rút $600 từ tài khoản tiết kiệm (sẽ bị từ chối vì vượt quá hạn mức)
- Áp dụng lãi suất 5% cho tài khoản tiết kiệm
- Rút $550 từ tài khoản thanh toán (sẽ thành công nhờ hạn mức thấu chi)
- Thử rút thêm $100 từ tài khoản thanh toán (sẽ bị từ chối vì vượt quá hạn mức thấu chi)
Savings transactions: XvàTotal balance: $Y(định dạng với 2 chữ số thập phân).
Đầu ra dự kiến:
Customer: John Smith (2 accounts)
Deposited $200.0. Balance: $1200.0
Withdrew $300.0. Balance: $900.0
Withdrawal denied
Interest applied. Balance: $945.0
Withdrew $550.0. Balance: $-50.0
Withdrawal denied
Savings transactions: 3
Total balance: $895.00Tự làm thử
import 'transaction.dart';
import 'account.dart';
import 'savings_account.dart';
import 'checking_account.dart';
import 'customer.dart';
void main() {
// TODO: Tạo một khách hàng có id "C001" và tên "John Smith"
// TODO: Tạo một SavingsAccount có accountNumber "SAV001" và số dư ban đầu $1000
// TODO: Tạo một CheckingAccount có accountNumber "CHK001" và số dư ban đầu $500
// TODO: Thêm cả hai tài khoản vào khách hàng
// TODO: In ra thông tin khách hàng
// TODO: Thực hiện các thao tác sau:
// 1. Gửi $200 vào tài khoản tiết kiệm
// 2. Rút $300 từ tài khoản tiết kiệm (giao dịch sẽ thành công)
// 3. Thử rút $600 từ tài khoản tiết kiệm (giao dịch sẽ bị từ chối vì vượt hạn mức)
// 4. Áp dụng lãi suất 5% cho tài khoản tiết kiệm
// 5. Rút $550 từ tài khoản thanh toán (giao dịch sẽ thành công nhờ khoản thấu chi)
// 6. Thử rút thêm $100 từ tài khoản thanh toán (giao dịch sẽ bị từ chối vì vượt hạn mức thấu chi)
// TODO: In ra "Savings transactions: X", trong đó X là số lượng giao dịch
// TODO: In ra "Total balance: \$Y", trong đó Y được định dạng với 2 chữ số thập phân
}
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ật11Phương thức đặc biệt
Ghi đè toString()Ghi đè hashCode và ==Giao diện ComparablePhương thức call()Ghi đè noSuchMethodÔn tập: bộ sưu tập tùy chỉnh17Thử thách cuối cùng
Nền tảng học trực tuyếnHệ thống ngân hàngHệ thống nhân vật trò chơiDịch vụ cho thuê phương tiện3Thuộ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