Abschließender Bank-Test
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 25 von 70.
Aufgabe
EinfachHerzlichen Glückwunsch zum Aufbau eines vollständigen Digital-Bank-Systems! Deine Account-Klasse verarbeitet jetzt Einzahlungen, Abhebungen, Kontostandsabfragen, Kontokennungen und Überweisungen zwischen Konten. Lass uns alles mit einem realistischen Bankenszenario mit mehreren Konten testen.
In dieser letzten Herausforderung simulierst du eine kleine Bank mit drei Kunden, die verschiedene Transaktionen durchführen. Dadurch wird überprüft, ob alle deine Methoden korrekt zusammenarbeiten und ob die Konten tatsächlich einen unabhängigen Zustand beibehalten.
Deine zwei Dateien:
Account.lua: Deine vollständige Account-Klasse mit allen Funktionen, die du im Verlauf dieses Projekts erstellt hast (Konstruktor mit ID, deposit, withdraw, getBalance, __tostring und transfer).main.lua: Ein Simulationsskript, das mehrere Konten erstellt und eine Reihe von Transaktionen zwischen ihnen ausführt.
Du erhältst sechs Eingaben:
- ID von Konto 1
- ID von Konto 2
- ID von Konto 3
- Anfängliche Einzahlung für Konto 1
- Anfängliche Einzahlung für Konto 2
- Anfängliche Einzahlung für Konto 3
Simuliere in deiner Hauptdatei den folgenden Banktag:
- Erstelle drei Konten mit den angegebenen IDs
- Zahle die anfänglichen Beträge auf die jeweiligen Konten ein
- Konto 1 überweist 100 an Konto 2
- Konto 2 überweist 150 an Konto 3
- Konto 3 überweist 50 an Konto 1
- Konto 1 versucht, 1000 an Konto 3 zu überweisen (dies sollte fehlschlagen)
- Gib alle drei Konten in der richtigen Reihenfolge aus (Konto 1, dann 2, dann 3)
Wenn die Eingaben beispielsweise A001, A002, A003, 500, 300 und 200 lauten, sollte die Ausgabe wie folgt aussehen:
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300Gehen wir den Ablauf nach: Konto 1 beginnt mit 500 und überweist 100 an Konto 2 (jetzt 400). Anschließend erhält es 50 von Konto 3 (jetzt 450). Konto 2 beginnt mit 300, erhält 100 (jetzt 400) und überweist 150 an Konto 3 (jetzt 250). Konto 3 beginnt mit 200, erhält 150 (jetzt 350) und überweist 50 an Konto 1 (jetzt 300). Die abschließende Überweisung von 1000 schlägt fehl, weil Konto 1 nur 450 hat.
Probier es selbst
-- Erfordert das Account-Modul
local Account = require('Account')
-- Die sechs Eingaben lesen
local id1 = io.read()
local id2 = io.read()
local id3 = io.read()
local initialDeposit1 = tonumber(io.read())
local initialDeposit2 = tonumber(io.read())
local initialDeposit3 = tonumber(io.read())
-- Drei Konten mit IDs erstellen
-- TODO: account1, account2, account3 mit Account:new() erstellen
-- Die Anfangsbeträge auf die jeweiligen Konten einzahlen
-- TODO: initialDeposit1 auf account1, initialDeposit2 auf account2, initialDeposit3 auf account3 einzahlen
-- Konto 1 überweist 100 an Konto 2
-- TODO: account1:transfer(account2, 100)
-- Konto 2 überweist 150 an Konto 3
-- TODO: account2:transfer(account3, 150)
-- Konto 3 überweist 50 an Konto 1
-- TODO: account3:transfer(account1, 50)
-- Konto 1 versucht, 1000 an Konto 3 zu überweisen (dies sollte fehlschlagen)
-- TODO: account1:transfer(account3, 1000)
-- Alle drei Konten in der richtigen Reihenfolge ausgeben
-- TODO: account1, account2, account3 ausgeben
Alle Lektionen in Objektorientierte Programmierung
1Das 'self'-Konzept
Tabellen mit FunktionenExplizites 'self'Die Doppelpunkt-SyntaxPunkt vs. DoppelpunktZusammenfassung – Beweglicher Punkt4Projekt: Digitale Bank
Projekt-SetupEinzahlungsmethode7Polymorphie & Überschreiben
Methoden überschreibenElternmethoden aufrufenDuck TypingGemeinsames InterfaceTyp prüfenRückblick - Mitarbeiterrollen10Projekt: Formen-Manager
Projekt-SetupRechteck-KlasseKreis-KlasseUmfang-MethodeFormen-SammlungGesamtflächeFormen filtern2Klassen-Prototyp-Muster
Das Prototyp-KonzeptVerknüpfung mit __indexDer :new()-KonstruktorAttribute initialisierenUnabhängige InstanzenZusammenfassung – Autofabrik5Operatorüberladung in OOP
Objekte addierenObjekte subtrahierenObjekte verkettenObjekte vergleichen (<, >)Rückblick – Wallet-Mathematik3Objektzustand und -verhalten
InstanzvariablenGetter-MethodenSetter-MethodenBerechnete EigenschaftenStrings formatierenGleichheitsprüfungenZusammenfassung – Studentennote6Grundlagen der Vererbung
Das Vererbungs-SetupMethoden vererbenDen Konstruktor erweiternChild-Methoden hinzufügenGemeinsam vs. EinzigartigZusammenfassung - Formen-Hierarchie9Komposition & Mixins
Has-A-BeziehungDelegationEinfache MixinsAnwendung mehrerer MixinsMixins vs. VererbungZusammenfassung – Roboter-Montage12Abschluss-Herausforderungen
Wiederholung - InventarsystemWiederholung - BenutzerverwaltungWiederholung - Score-TrackerFinaler OOP-CheckÜbe selbstständig: Online-Lua-Compiler