Labor – Einfacher Ticket-Automat

Kopiere Klasse TicketMachine aus dem Muster-Projekt Lab-06—​Muster_naive-ticket-machine.zip ins eigene Projekt.

Ticketmachineprice: intbalance: inttotal: intTicketmachine(int ticketCost)insertMoney(int amount): voidgetPrice(): intgetBalance(): intprintTicket(): voidPreis eines Tickets in Centbisher eingeworfene Centsbei Ticketverkauf eingenommenKonstruktor, setzt Verkaufspreis TicketEinwurf von GeldPreis eines Tickets in Cent(für Zusatzaufgabe anzupassen!)bisher eingeworfene CentsTicket ausdrucken, 'balance' und 'total'anpassen; (Änderungen f. Zusatzaufgabe!)
Abbildung 1. UML-Diagramm

Dieser einfache Automat enthält noch einige Fehler. Teste den Automaten und notiere alle erkannten Fehler (z.B. als Kommentar oder in der README.txt des BlueJ-Projekts):

  • Aufruf von getPrice(), um den Preis einer Fahrkarte zu ermitteln

  • Aufruf von getBalance(), um festzustellen wieviel Geld schon eingeworfen wurde

  • Aufruf von insertMoney(), um Geld einzuwerfen

  • nochmal getBalance() aufrufen

  • Aufruf von printTicket(), um eine Fahrkarte zu drucken (was passiert mit balance und total)

  • …​

Beachte auch die Möglichkeit negativer Übergabewerte!

  • Verbessere den Automaten

  • Erweitere ihn um folgende Methoden:

    • refundBalance(): int, welche das noch übrige eingeworfene Geld wieder zurückgibt, dabei balance auf 0 setzt

    • empty(): int, liefert das gesamte vom Automaten eingenommene Geld als Rückgabewert und setzt Attribut total wieder auf 0.

Extraaufgabe für jene, die früher fertig sind:

Erweitere den Automaten um die Attribute child und bike samt Settern dazu. Beide haben Typ boolean.

Es sind keine weiteren Attribute erforderlich (Tipp: lokale Variablen, Hilfsmethoden).

Wenn child true ist, soll der Preis der Fahrkarte halbiert werden.
Wenn bike true ist, soll der Preis der Normal-Fahrkarte verdoppelt werden (also quasi ein eigenes Normal-Ticket für das Fahrrad dazu.
Ein Kind mit Bike kostet also insgesamt den 1,5 fachen Normalpreis.

  • Es soll eine Methode setChild(…​) geben, mit der statt eines normalen Tickets auf eine Kinderfahrkarte zum halben Preis umgestellt werden kann.

  • Es soll eine Methode setBike(…​) geben mit der das Ticket für die zusätzliche Mitnahme eines Fahrrades gekauft werden kann. Dieses Ticket kostet das Doppelte eines normalen Tickets.

Wichtig: Das Attribut price soll immer den vollen Ticketpreis enthalten! D.h. es sind die Methoden getPrice() und printTicket() entsprechend anzupassen.

Muster-Projekt: Siehe Moodle oder