Menu
Coddy logo textTech

Повторение — билетная касса

Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 16 из 57.

challenge icon

Задание

Средне

Создайте небольшую билетную кассу, используя три вида объявлений.

  • Ticket имеет приватный конструктор, принимающий number, show и seat. Его сопутствующий объект содержит const val SEATS = 3, приватный счётчик и фабрику issue(show, seat), которая присваивает билетам номера 1, 2, 3, ...; issued — это количество выпущенных на данный момент билетов. label() возвращает #1 Hamlet seat 2.
  • BoxOffice — это объект. sell(show, seat) возвращает no seat 4, если место находится вне диапазона от 1 до Ticket.SEATS, seat 2 taken, если оно уже продано на это представление, а в противном случае выпускает билет и возвращает его метку. refund(number) освобождает место возвращённого билета и возвращает refunded #1 или no ticket #9. report() возвращает Hamlet 2/3, Cats 1/3, располагая представления в алфавитном порядке, или nothing sold.

Предоставленный код считывает команды sell Hamlet 2, refund 1 или report, выводит каждый ответ и в конце tickets issued: с количеством билетов. Номера никогда не используются повторно после возврата билета.

Ваш код должен находиться в Ticket.kt и BoxOffice.kt. В Main.kt находится предоставленный код ввода/вывода, и его нельзя изменять.

Попробуйте сами

fun main() {
    // Предоставленный код ввода/вывода: оставьте его как есть
    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}")
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Песочница Kotlin