Auszahlungsmethode
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 21 von 70.
Aufgabe
EinfachDeine Digitalbank wächst! Konten können jetzt Einzahlungen erhalten, aber eine echte Bank muss Kundinnen und Kunden auch ermöglichen, Geld abzuheben. Fügen wir eine :withdraw(amount)-Methode hinzu, jedoch mit einer wichtigen Sicherheitsprüfung.
Im Gegensatz zu Einzahlungen können Abhebungen fehlschlagen. Wenn eine Kundin oder ein Kunde versucht, mehr Geld abzuheben, als vorhanden ist, sollte die Bank dies nicht zulassen. Deine withdraw-Methode muss prüfen, ob ausreichendes Guthaben vorhanden ist, bevor sie den Betrag abzieht.
Du arbeitest weiterhin mit deinen zwei Dateien:
Account.lua: Füge deiner vorhandenen Account-Klasse eine:withdraw(amount)-Methode hinzu. Wenn das Konto über ausreichend Guthaben verfügt, ziehe den Betrag ab und gibtruezurück. Wenn nicht genügend Guthaben vorhanden ist, gibInsufficient fundsaus und gibfalsezurück, ohne das Guthaben zu ändern.main.lua: Erstelle ein Konto, zahle Geld ein, damit es über Guthaben verfügt, und versuche anschließend mehrere Abhebungen, um sowohl erfolgreiche als auch fehlgeschlagene Transaktionen zu sehen.
Du erhältst vier Eingaben:
- Anfangsbetrag der Einzahlung
- Betrag der ersten Abhebung
- Betrag der zweiten Abhebung
- Betrag der dritten Abhebung
Erstelle in deiner Hauptdatei ein Konto, zahle den Anfangsbetrag ein und versuche anschließend jede Abhebung in der angegebenen Reihenfolge. Gib nach jedem Abhebungsversuch das aktuelle Guthaben in einer neuen Zeile aus. Denke daran, dass fehlgeschlagene Abhebungen ebenfalls Insufficient funds ausgeben, bevor du das Guthaben ausgibst.
Wenn die Eingaben beispielsweise 100, 30, 50 und 40 lauten, sollte die Ausgabe wie folgt aussehen:
70
20
Insufficient funds
20Das Konto beginnt nach der Einzahlung mit 100. Die erste Abhebung von 30 ist erfolgreich (Guthaben: 70), die zweite Abhebung von 50 ist erfolgreich (Guthaben: 20), aber die dritte Abhebung von 40 schlägt fehl, weil nur noch 20 vorhanden sind. Daher bleibt das Guthaben bei 20.
Probier es selbst
-- Account-Modul einbinden
local Account = require('Account')
-- Die vier Eingaben einlesen
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- Ein einzelnes Konto erstellen
local account = Account:new()
-- Den Anfangsbetrag einzahlen
account:deposit(initialDeposit)
-- Ersten Abhebungsversuch und Kontostand ausgeben
-- TODO: hier account:withdraw(withdrawal1) aufrufen
print(account.balance)
-- Zweiten Abhebungsversuch und Kontostand ausgeben
-- TODO: hier account:withdraw(withdrawal2) aufrufen
print(account.balance)
-- Dritten Abhebungsversuch und Kontostand ausgeben
-- TODO: hier account:withdraw(withdrawal3) aufrufen
print(account.balance)
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