Abschließender Bank-Test
Teil des Abschnitts Object Oriented Programming 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 nun Einzahlungen, Auszahlungen, Kontostandsabfragen, Kontoidentifikationen und Überweisungen zwischen Konten. Lass uns das Ganze mit einem realistischen Bank-Szenario mit mehreren Konten auf die Probe stellen.
In dieser finalen Herausforderung simulierst du eine kleine Bank mit drei Kunden, die verschiedene Transaktionen tätigen. Dies wird bestätigen, dass alle deine Methoden korrekt zusammenarbeiten und dass die Konten tatsächlich einen unabhängigen Status beibehalten.
Deine zwei Dateien:
Account.lua: Deine vollständige Account-Klasse mit allen Funktionen, die du in diesem Projekt aufgebaut 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 wirst sechs Eingaben erhalten:
- ID für Konto 1
- ID für Konto 2
- ID für Konto 3
- Ersteinzahlung für Konto 1
- Ersteinzahlung für Konto 2
- Ersteinzahlung für Konto 3
Simuliere in deiner Hauptdatei den folgenden Bankarbeitstag:
- Erstelle drei Konten mit den angegebenen IDs
- Zahle die Anfangsbeträge auf das jeweilige Konto 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 Reihenfolge aus (Konto 1, dann 2, dann 3)
Wenn die Eingaben beispielsweise A001, A002, A003, 500, 300 und 200 sind, sollte die Ausgabe wie folgt aussehen:
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300Lass uns den Ablauf verfolgen: Konto 1 beginnt mit 500, überweist 100 an Konto 2 (jetzt 400) und erhält dann 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 letzte Überweisung von 1000 schlägt fehl, da 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 Object Oriented Programming
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-Klasse2Klassen-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