Menu
Coddy logo textTech

Auszahlungslogik

Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 25 von 61.

challenge icon

Aufgabe

Einfach

Ihr Bankkonto wächst! Jetzt fügen wir die Möglichkeit hinzu, Geld abzuheben. Im Gegensatz zu Einzahlungen haben Abhebungen eine zusätzliche Einschränkung – Sie können nicht mehr Geld abheben, als Sie haben. Ihre withdraw-Funktion muss den Kontostand prüfen, bevor sie die Transaktion zulässt.

Aufbauend auf Ihrem bestehenden Bankkonto-Projekt werden Sie das Modul um eine Abhebungsfunktion erweitern. Hier glänzt die Kapselung wirklich – Ihre Funktion kann auf den verborgenen Kontostand zugreifen, um ausreichende Mittel zu verifizieren, etwas, das externer Code niemals direkt tun könnte.

Sie werden mit drei Dateien arbeiten:

  • account.h: Fügen Sie einen neuen Funktionsprototyp hinzu: withdraw. Diese Funktion nimmt einen Account-Pointer und einen double-Betrag entgegen und gibt einen int zurück (1 für Erfolg, 0, wenn die Abhebung fehlschlägt). Behalten Sie alle Ihre bestehenden Deklarationen für create_account, destroy_account und deposit bei.
  • account.c: Implementieren Sie die withdraw-Funktion. Eine Abhebung sollte nur erfolgreich sein, wenn zwei Bedingungen erfüllt sind: Der Betrag muss positiv sein (größer als Null) UND das Konto muss über ausreichende Mittel verfügen (balance >= amount). Wenn beide Bedingungen erfüllt sind, ziehen Sie den Betrag vom Kontostand ab und geben Sie 1 zurück. Andernfalls geben Sie 0 zurück, ohne den Kontostand zu ändern.
  • main.c: Demonstrieren Sie Ihren vollständigen Einzahlungs- und Abhebungs-Workflow. Erstellen Sie ein Konto, tätigen Sie eine Einzahlung, um ein Guthaben aufzubauen, und testen Sie dann Abhebungen – sowohl erfolgreiche als auch nicht erfolgreiche.

Sie erhalten vier Eingaben: die account ID (eine Ganzzahl), einen deposit amount (um ein Anfangsguthaben zu schaffen), einen successful withdrawal amount (kleiner oder gleich dem eingezahlten Betrag) und einen failed withdrawal amount (mehr als das verbleibende Guthaben).

Erstellen Sie in Ihrer Hauptdatei ein Konto und geben Sie eine Bestätigung aus. Zahlen Sie das Anfangsguthaben ein und geben Sie das Ergebnis aus. Führen Sie dann die erfolgreiche Abhebung durch und geben Sie aus, ob sie erfolgreich war. Versuchen Sie schließlich die Abhebung, die fehlschlagen sollte (unzureichendes Guthaben), und geben Sie dieses Ergebnis aus. Zerstören Sie das Konto und bestätigen Sie die Bereinigung.

Geben Sie die Ausgabe in diesem Format aus:

Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyed

Wobei 1001 die Konto-ID ist, 500.00 die Einzahlung, 200.00 die erfolgreiche Abhebung und 400.00 die fehlgeschlagene Abhebung (da nach der ersten Abhebung nur noch 300.00 übrig sind). Formatieren Sie alle Beträge mit zwei Dezimalstellen unter Verwendung von %.2f.

Ihre withdraw-Funktion demonstriert die Macht der Kapselung – sie kann den verborgenen Kontostand intern prüfen, um Entscheidungen zu treffen, während externer Code keine Möglichkeit hat, diese Validierung zu umgehen oder direkt in den Kontostand hineinzuschauen.

Probier es selbst

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double valid_amount;
    scanf("%lf", &valid_amount);
    
    double invalid_amount;
    scanf("%lf", &invalid_amount);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    int result_invalid = deposit(account, invalid_amount);
    printf("Deposit %.2f: %d\n", invalid_amount, result_invalid);
    
    int result_valid = deposit(account, valid_amount);
    printf("Deposit %.2f: %d\n", valid_amount, result_valid);
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

Alle Lektionen in Object Oriented Programming