Menu
Coddy logo textTech

Rückblick – Fahrkartenschalter

Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 16 von 57.

challenge icon

Aufgabe

Mittel

Erstelle ein kleines Kartenbüro aus drei Arten von Deklarationen.

  • Ticket besitzt einen privaten Konstruktor, der number, show und seat entgegennimmt. Sein Companion enthält const val SEATS = 3, einen privaten Zähler und die Factory issue(show, seat), die den Tickets die Nummern 1, 2, 3, ... zuweist; issued ist die Anzahl der bisher ausgegebenen Tickets. label() gibt #1 Hamlet seat 2 zurück.
  • BoxOffice ist ein Objekt. sell(show, seat) antwortet mit no seat 4, wenn der Sitz außerhalb von 1 bis Ticket.SEATS liegt, mit seat 2 taken, wenn er für diese Vorstellung bereits verkauft wurde, und gibt andernfalls ein Ticket aus und antwortet mit dessen Bezeichnung. refund(number) gibt den Sitz eines verkauften Tickets frei und antwortet mit refunded #1 oder no ticket #9. report() antwortet mit Hamlet 2/3, Cats 1/3, wobei die Vorstellungen alphabetisch sortiert sind, oder mit nothing sold.

Der bereitgestellte Code liest die Befehle sell Hamlet 2, refund 1 oder report, gibt jede Antwort aus und schließlich tickets issued: zusammen mit der Anzahl. Nummern werden nach einer Rückerstattung niemals wiederverwendet.

Dein Code gehört in Ticket.kt und BoxOffice.kt. Main.kt enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

fun main() {
    // Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
    val input = generateSequence(::readLine).toList()
    for (cmd in input) {
        val p = cmd.split(" ")
        when (p[0]) {
            "sell" -> println(BoxOffice.sell(p[1], p[2].toInt()))
            "refund" -> println(BoxOffice.refund(p[1].toInt()))
            else -> println(BoxOffice.report())
        }
    }
    println("tickets issued: ${Ticket.issued}")
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Kotlin-Playground