Menu
Coddy logo textTech

Powtórzenie — kasa biletowa

Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 16 z 57.

challenge icon

Wyzwanie

Średni

Zbuduj małą kasę biletową, używając trzech rodzajów deklaracji.

  • Ticket ma prywatny konstruktor przyjmujący number, show i seat. Jego obiekt towarzyszący zawiera const val SEATS = 3, prywatny licznik oraz fabrykę issue(show, seat), która nadaje biletom numery 1, 2, 3, ...; issued to liczba dotychczas wydanych biletów. label() zwraca #1 Hamlet seat 2.
  • BoxOffice jest obiektem. sell(show, seat) zwraca no seat 4, gdy miejsce znajduje się poza zakresem od 1 do Ticket.SEATS, seat 2 taken, gdy jest już sprzedane na ten seans, a w pozostałych przypadkach wystawia bilet i zwraca jego etykietę. refund(number) zwalnia miejsce zajmowane przez sprzedany bilet i zwraca refunded #1 albo no ticket #9. report() zwraca Hamlet 2/3, Cats 1/3, z seansami w kolejności alfabetycznej, albo nothing sold.

Dostarczony kod odczytuje polecenia sell Hamlet 2, refund 1 lub report, wyświetla odpowiedź na każde z nich, a na końcu tickets issued: wraz z liczbą. Numery nie są nigdy ponownie używane po zwrocie biletu.

Twój kod umieść w plikach Ticket.kt i BoxOffice.kt. Main.kt zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

fun main() {
    // Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
    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}")
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Edytor online Kotlin