Menu
Coddy logo textTech

Bankingsystem

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

challenge icon

Aufgabe

Einfach

Erstellen wir ein Bankensystem, das reale Finanzoperationen mithilfe der OOP-Prinzipien modelliert, die du im Laufe dieses Kurses gemeistert hast. Du wirst Konten mit unterschiedlichen Regeln erstellen, Transaktionen verfolgen und Kunden verwalten – alles organisiert über mehrere Dateien.

Dein Bankensystem wird auf sechs Dateien verteilt:

  • transaction.dart: Erstelle eine Transaction-Klasse, die einen unveränderlichen Datensatz einer Finanzoperation darstellt. Jede Transaktion besitzt final-Felder für type (String – "deposit", "withdrawal" oder "transfer"), amount (double) und timestamp (DateTime). Überschreibe toString(), sodass [type] $amount zurückgegeben wird.
  • account.dart: Erstelle eine abstrakte Account-Klasse mit einem privaten _balance (double), einer final-Kontonummer (accountNumber – String) und einer List<Transaction> zum Speichern des Transaktionsverlaufs. Füge einen Getter für den Kontostand, einen geschützten Setter set balance(double value) hinzu, damit Unterklassen in anderen Dateien den Kontostand aktualisieren können, sowie eine abstrakte Methode bool canWithdraw(double amount), die von Unterklassen implementiert wird, und diese konkreten Methoden:
    • deposit(double amount) – addiert den Betrag zum 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: Erstelle ein SavingsAccount, das Account erweitert. Sparkonten haben ein Auszahlungslimit – sie können in einer einzelnen Transaktion nicht mehr als 500 $ abheben. Implementiere canWithdraw(), um diese Regel durchzusetzen (stelle außerdem sicher, dass der Kontostand ausreicht). Füge eine Methode applyInterest(double rate) hinzu, die den Kontostand mithilfe des balance-Getters und -Setters um den angegebenen Prozentsatz erhöht und anschließend Interest applied. Balance: $balance ausgibt.
  • checking_account.dart: Erstelle ein CheckingAccount, das Account erweitert. Girokonten verfügen über einen Überziehungsschutz bis zu 100 $ – sie können ins Minus gehen, aber nicht unter -100 $. Implementiere canWithdraw(), sodass Auszahlungen erlaubt werden, solange der resultierende Kontostand mindestens -100 $ beträgt.
  • customer.dart: Erstelle eine Customer-Klasse mit einer id (String), einem name (String) und einer List<Account> für die Konten des Kunden. Füge die Methode addAccount(Account account) zum Hinzufügen eines Kontos sowie getTotalBalance() hinzu, die die Summe aller Kontostände zurückgibt. Überschreibe toString(), sodass Customer: name (X accounts) zurückgegeben wird.
  • main.dart: Veranschauliche dein Bankensystem. Erstelle einen Kunden (C001, John Smith). Erstelle ein SavingsAccount (SAV001, Anfangssaldo 1000 $) und ein CheckingAccount (CHK001, Anfangssaldo 500 $). Füge beide Konten dem Kunden hinzu und gib den Kunden aus. Führe anschließend diese 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 mithilfe des Überziehungsschutzes erfolgreich sein)
    6. Versuche, weitere 100 $ vom Girokonto abzuheben (sollte abgelehnt werden – würde das Überziehungslimit überschreiten)
    Gib schließlich Savings transactions: X und Total balance: $Y aus (auf 2 Nachkommastellen formatiert).

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.00

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 das Überziehungslimit ü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

Übe selbstständig: Online-Dart-Compiler