銀行システム
CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 108/110。
チャレンジ
簡単このコースで習得したOOP(オブジェクト指向プログラミング)の原則を使用して、現実世界の金融業務をモデル化した銀行システムを構築しましょう。異なるルールを持つアカウントを作成し、取引を追跡し、顧客を管理します。これらすべてを複数のファイルに整理して作成します。
銀行システムは、以下の6つのファイルで構成されます。
transaction.dart: 金融操作の不変の記録を表すTransactionクラスを作成します。各トランザクションには、type(String - "deposit"、"withdrawal"、または "transfer")、amount(double)、およびtimestamp(DateTime)のfinalフィールドを持たせます。toString()をオーバーライドして、[type] $amountを返すようにします。account.dart: 抽象クラスAccountを作成します。プライベートな_balance(double)、finalの口座番号(accountNumber- String)、および取引履歴を保存するためのList<Transaction>を持たせます。残高のゲッター、他のファイルのサブクラスが残高を更新できるようにするためのプロテクトセッターset balance(double value)、サブクラスが実装する抽象メソッドbool canWithdraw(double amount)、および以下の具体的なメソッドを含めます。deposit(double amount)- 残高に追加し、取引を記録し、Deposited $amount. Balance: $balanceと出力します。withdraw(double amount)-canWithdraw()が true を返す場合、残高から差し引き、取引を記録し、Withdrew $amount. Balance: $balanceと出力します。それ以外の場合はWithdrawal deniedと出力します。getTransactionCount()- 取引の数を返します。
savings_account.dart:Accountを継承するSavingsAccountを作成します。普通預金口座(Savings account)には引き出し制限があり、1回の取引で $500 を超えて引き出すことはできません。このルールを適用するためにcanWithdraw()を実装します(十分な残高があることも確認してください)。balanceのゲッターとセッターを使用して、指定されたパーセンテージ率で残高を増やすapplyInterest(double rate)メソッドを追加し、Interest applied. Balance: $balanceと出力します。checking_account.dart:Accountを継承するCheckingAccountを作成します。当座預金口座(Checking account)には $100 までの当座貸越保護があり、残高がマイナスになっても -$100 を下回らなければ許容されます。結果の残高が -$100 以上に保たれる限り引き出しを許可するようにcanWithdraw()を実装します。customer.dart:id(String)、name(String)、および所有する口座のList<Account>を持つCustomerクラスを作成します。口座を追加するaddAccount(Account account)メソッドと、すべての口座残高の合計を返すgetTotalBalance()メソッドを含めます。toString()をオーバーライドして、Customer: name (X accounts)を返すようにします。main.dart: 銀行システムのデモンストレーションを行います。顧客(C001,John Smith)を作成します。SavingsAccount(SAV001、開始残高 $1000)とCheckingAccount(CHK001、開始残高 $500)を作成します。両方の口座を顧客に追加し、顧客情報を出力します。 次に、以下の操作を実行します。- 普通預金口座に $200 を預け入れる
- 普通預金口座から $300 を引き出す(成功するはずです)
- 普通預金口座から $600 を引き出そうとする(制限を超えるため、拒否されるはずです)
- 普通預金口座に 5% の利息を適用する
- 当座預金口座から $550 を引き出す(当座貸越を使用して成功するはずです)
- 当座預金口座からさらに $100 を引き出そうとする(当座貸越限度額を超えるため、拒否されるはずです)
Savings transactions: XとTotal balance: $Y(小数点以下2桁にフォーマット)を出力します。
期待される出力:
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.0自分で試してみよう
import 'transaction.dart';
import 'account.dart';
import 'savings_account.dart';
import 'checking_account.dart';
import 'customer.dart';
void main() {
// TODO: id が "C001"、name が "John Smith" の顧客を作成する
// TODO: accountNumber が "SAV001"、開始残高が $1000 の SavingsAccount を作成する
// TODO: accountNumber が "CHK001"、開始残高が $500 の CheckingAccount を作成する
// TODO: 両方のアカウントを顧客に追加する
// TODO: 顧客情報を出力する
// TODO: 以下の操作を実行する:
// 1. 普通預金口座(savings account)に $200 を預け入れる
// 2. 普通預金口座から $300 を引き出す(成功するはずです)
// 3. 普通預金口座から $600 の引き出しを試みる(限度額を超えるため、拒否されるはずです)
// 4. 普通預金口座に 5% の利息を適用する
// 5. 当座預金口座(checking account)から $550 を引き出す(オーバードラフトを使用して成功するはずです)
// 6. 当座預金口座からさらに $100 の引き出しを試みる(オーバードラフトの限度額を超えるため、拒否されるはずです)
// TODO: "Savings transactions: X" と出力する(X は取引数)
// TODO: "Total balance: \$Y" と出力する(Y は小数点以下2桁にフォーマットする)
}
オブジェクト指向プログラミングのすべてのレッスン
4Null Safety
Null Safety 入門Nullable と Non-Nullable? 演算子と ! 演算子late キーワードと Null SafetyNull-Aware 演算子クラスにおける Null Safetyまとめ:ユーザープロフィールシステム10コレクションとジェネリクス
List, Set, Map の概要型安全なコレクションジェネリッククラスジェネリックメソッドジェネリクスの制約Iterable と Iteratorまとめ:ジェネリックなストレージ