Menu
Coddy logo textTech

Banksystem

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 108 von 110.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Bankensystem bauen, das reale Finanzoperationen unter Verwendung der OOP-Prinzipien modelliert, die Sie in diesem Kurs gemeistert haben. Sie werden Konten mit unterschiedlichen Regeln erstellen, Transaktionen verfolgen und Kunden verwalten – alles organisiert über mehrere Dateien hinweg.

Ihr Bankensystem wird in sechs Dateien organisiert sein:

  • transaction.dart: Erstellen Sie eine Transaction-Klasse, die einen unveränderlichen Datensatz einer Finanzoperation darstellt. Jede Transaktion hat final-Felder für type (String - "deposit", "withdrawal" oder "transfer"), amount (double) und timestamp (DateTime). Überschreiben Sie toString(), um [type] $amount zurückzugeben.
  • account.dart: Erstellen Sie eine abstrakte Account-Klasse mit einem privaten _balance (double), einer final Kontonummer (accountNumber - String) und einer List<Transaction>, um den Transaktionsverlauf zu speichern. Fügen Sie einen Getter für den Kontostand hinzu, einen geschützten Setter set balance(double value), damit Unterklassen in anderen Dateien den Kontostand aktualisieren können, eine abstrakte Methode bool canWithdraw(double amount), die von Unterklassen implementiert wird, und diese konkreten Methoden:
    • deposit(double amount) - erhöht den Kontostand, zeichnet eine Transaktion auf und gibt Deposited $amount. Balance: $balance aus.
    • withdraw(double amount) - wenn canWithdraw() true zurückgibt, wird der Betrag vom Kontostand abgezogen, eine Transaktion aufgezeichnet und Withdrew $amount. Balance: $balance ausgegeben. Andernfalls wird Withdrawal denied ausgegeben.
    • getTransactionCount() - gibt die Anzahl der Transaktionen zurück.
  • savings_account.dart: Erstellen Sie ein SavingsAccount, das Account erweitert. Sparkonten haben ein Auszahlungslimit – es können nicht mehr als $500 in einer einzelnen Transaktion abgehoben werden. Implementieren Sie canWithdraw(), um diese Regel durchzusetzen (stellen Sie auch ein ausreichendes Guthaben sicher). Fügen Sie eine Methode applyInterest(double rate) hinzu, die den Kontostand um den angegebenen Prozentsatz unter Verwendung des balance Getters und Setters erhöht und dann Interest applied. Balance: $balance ausgibt.
  • checking_account.dart: Erstellen Sie ein CheckingAccount, das Account erweitert. Girokonten haben einen Überziehungsschutz bis zu $100 – sie können ins Minus gehen, aber nicht unter -$100. Implementieren Sie canWithdraw(), um Auszahlungen zu ermöglichen, solange der resultierende Kontostand bei oder über -$100 bleibt.
  • customer.dart: Erstellen Sie eine Customer-Klasse mit einer id (String), einem name (String) und einer List<Account> für deren Konten. Fügen Sie die Methoden addAccount(Account account) zum Hinzufügen eines Kontos und getTotalBalance() hinzu, die die Summe aller Kontostände zurückgibt. Überschreiben Sie toString(), um Customer: name (X accounts) zurückzugeben.
  • main.dart: Demonstrieren Sie Ihr Bankensystem. Erstellen Sie einen Kunden (C001, John Smith). Erstellen Sie ein SavingsAccount (SAV001, Startguthaben $1000) und ein CheckingAccount (CHK001, Startguthaben $500). Fügen Sie beide Konten dem Kunden hinzu und geben Sie den Kunden aus. Führen Sie dann diese Operationen aus:
    1. Zahlen Sie $200 auf das Sparkonto ein
    2. Heben Sie $300 vom Sparkonto ab (sollte erfolgreich sein)
    3. Versuchen Sie, $600 vom Sparkonto abzuheben (sollte abgelehnt werden – überschreitet das Limit)
    4. Wenden Sie 5% Zinsen auf das Sparkonto an
    5. Heben Sie $550 vom Girokonto ab (sollte unter Nutzung des Überziehungsschutzes erfolgreich sein)
    6. Versuchen Sie, weitere $100 vom Girokonto abzuheben (sollte abgelehnt werden – würde das Überziehungslimit überschreiten)
    Geben Sie abschließend Savings transactions: X und Total balance: $Y aus (formatiert auf 2 Dezimalstellen).

Erwartete Ausgabe:

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

Probier es selbst

import 'transaction.dart';
import 'account.dart';
import 'savings_account.dart';
import 'checking_account.dart';
import 'customer.dart';

void main() {
  // TODO: Erstelle einen Kunden mit der id "C001" und dem Namen "John Smith"
  
  // TODO: Erstelle ein SavingsAccount mit der accountNumber "SAV001" und einem Startguthaben von $1000
  
  // TODO: Erstelle ein CheckingAccount mit der accountNumber "CHK001" und einem Startguthaben von $500
  
  // TODO: Füge beide Konten dem Kunden hinzu
  
  // TODO: Gib den Kunden aus
  
  // TODO: Führe die folgenden Operationen aus:
  // 1. Zahle $200 auf das Sparkonto ein
  // 2. Hebe $300 vom Sparkonto ab (sollte erfolgreich sein)
  // 3. Versuche $600 vom Sparkonto abzuheben (sollte abgelehnt werden - überschreitet das Limit)
  // 4. Wende 5% Zinsen auf das Sparkonto an
  // 5. Hebe $550 vom Girokonto ab (sollte unter Nutzung des Überziehungsrahmens erfolgreich sein)
  // 6. Versuche weitere $100 vom Girokonto abzuheben (sollte abgelehnt werden - würde den Überziehungsrahmen überschreiten)
  
  // TODO: Gib "Savings transactions: X" aus, wobei X die Anzahl der Transaktionen ist
  
  // TODO: Gib "Total balance: \$Y" aus, wobei Y auf 2 Dezimalstellen formatiert ist
}

Alle Lektionen in Objektorientierte Programmierung