Projekt-Finale: Main Loop
Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 27 von 61.
Aufgabe
EinfachHerzlichen Glückwunsch: Du hast eine vollständige Bankkonto-Bibliothek erstellt! Jetzt ist es an der Zeit, die Rollen zu wechseln. Statt der Ersteller der Bibliothek zu sein, wirst du zum Benutzer der Bibliothek. Deine Aufgabe ist es, ein Hauptprogramm zu schreiben, das dein Account-Modul auf die Probe stellt.
Stell dir vor, ein Kunde betritt eine Bank und führt eine Reihe von Transaktionen durch. Du wirst ein Konto erstellen, Einzahlungen und Abhebungen vornehmen, zwischendurch den Kontostand überprüfen und das Konto schließlich schließen, wenn du fertig bist.
Du wirst mit drei Dateien arbeiten:
account.h: Deine vollständige Header-Datei mit dem opaken TypAccountund allen Funktionsprototypen:create_account,destroy_account,deposit,withdrawundget_balance.account.c: Deine vollständige Implementierung mit der verborgenen Struktur, dieidundbalanceenthält, sowie allen Funktionsimplementierungen, die du im Verlauf dieses Projekts erstellt hast.main.c: Hier kannst du glänzen! Schreibe ein Programm, das den vollständigen Lebenszyklus eines Bankkontos anhand einer realistischen Folge von Transaktionen demonstriert.
Du erhältst fünf Eingaben: die Kontonummer (eine Ganzzahl), eine erste Einzahlung, eine Abhebung, eine zweite Einzahlung und einen versuchten Überziehungsbetrag (eine Abhebung, die wegen unzureichender Deckung fehlschlagen sollte).
Dein Hauptprogramm sollte die Geschichte dieses Kontos erzählen:
- Das Konto erstellen und dies bekannt geben
- Den Anfangssaldo anzeigen
- Die erste Einzahlung vornehmen und den neuen Kontostand anzeigen
- Geld abheben und den aktualisierten Kontostand anzeigen
- Eine weitere Einzahlung vornehmen und den Kontostand anzeigen
- Eine Abhebung versuchen, die den Kontostand übersteigt. Dies sollte fehlschlagen
- Den endgültigen Kontostand anzeigen (nach der fehlgeschlagenen Abhebung unverändert)
- Das Konto schließen
Gib die Ausgabe in diesem Format aus:
Account 2001 created
Balance: 0.00
Deposited 1000.00
Balance: 1000.00
Withdrew 250.00
Balance: 750.00
Deposited 500.00
Balance: 1250.00
Withdrawal failed: insufficient funds
Balance: 1250.00
Account 2001 closedDabei ist 2001 die Kontonummer, und die Beträge entsprechen deinen Eingaben. Formatiere alle Geldbeträge mit zwei Dezimalstellen unter Verwendung von %.2f. Die Meldung über die fehlgeschlagene Abhebung sollte ausgegeben werden, wenn withdraw den Wert 0 zurückgibt.
Dieses Finale demonstriert alles, was du über Kapselung gelernt hast. Dein Hauptprogramm interagiert ausschließlich über seine öffentliche Schnittstelle mit dem Account und greift niemals direkt auf die verborgenen internen Daten zu.
Probier es selbst
#include <stdio.h>
#include "account.h"
int main() {
// TODO: Lies account_id, deposit1, withdraw_amount, deposit2 und overdraft von der Eingabe ein
// TODO: Erstelle das Konto und gib "Account <id> created" aus
// TODO: Gib den Startkontostand aus
// TODO: Führe die erste Einzahlung durch, gib "Deposited <amount>" und den neuen Kontostand aus
// TODO: Hebe Geld ab, gib "Withdrew <amount>" und den aktualisierten Kontostand aus
// TODO: Führe die zweite Einzahlung durch, gib "Deposited <amount>" und den neuen Kontostand aus
// TODO: Attempt the overdraft withdrawal; if it fails, print "Withdrawal failed: insufficient funds"
// TODO: Gib den endgültigen Kontostand aus
// TODO: Gib "Account <id> closed" aus und zerstöre das Konto
return 0;
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der modularen Programmierung
Header-DateienInclude GuardsQuelldateienStatische FunktionenWiederholung: Modularer Taschenrechner4Kapselung
Konzept der Opaque PointersOpaque Structs definierenGetter und SetterValidierung in SetternRückblick: Die geheime Box2Objekte und Methoden
Structs als ObjekteDer 'Self'-PointerConst-CorrectnessPointer vs. WertHilfsmethodenZusammenfassung: Point Manager5Projekt: Einfaches Bankkonto
Projekt-SetupImplementierung des Kontos3Objekt-Lebenszyklus
Konstruktor-MusterDestruktor-MusterStack-InitialisierungTiefe KopieRückblick: String-Wrapper6Vererbung durch Komposition
Struct-EinbettungDie First-Member-RegelZugriff auf Parent-MemberUpcastingRückblick: Formenhierarchie9Projekt: Formen-Zeichner
ProjektübersichtKreis-ImplementierungRechteck-ImplementierungPolymorphe VerwendungShape-ContainerÜbe selbstständig: Online-C-Compiler