Повторение — билетная касса
Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 16 из 57.
Задание
СреднеСоздайте небольшую билетную кассу, используя три вида объявлений.
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}")
}
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПервичные конструкторыБлоки init и валидацияВторичные конструкторыПовторение — читательский билет4Наследование
Открытые классы и подклассыПереопределение членовsuper и конструкторыАбстрактные классыПовторение — каталог сотрудников7Специальные классы
Классы данныхКлассы перечисленийЗапечатанные иерархииequals, hashCode, toStringПовторение — трекер заказов10Паттерны проектирования. Часть 2
Делегирование с помощью byПаттерн декораторПаттерн строительПаттерн состояние2Свойства и инкапсуляция
Пользовательские аксессорыМодификаторы видимостиПриватные сеттерыlazy и lateinitПовторение — банковский счёт5Интерфейсы
Объявление интерфейсовМетоды по умолчаниюМножественные интерфейсыИнтерфейсы как типыПовторение — способы оплаты8Обобщения
Обобщённые функцииОбобщённые классыОграничения типовВариативность с in и outПовторение — очередь с приоритетом11Проект: Управление библиотекой
Книги и читателиВыдача книг3Объекты и компаньоны
Объявления объектовОбъекты-компаньоныКонстанты с constОбъектные выраженияПовторение — билетная касса6Полиморфизм
Динамическая диспетчеризацияПроверка типов и умные приведения типовwhen с типамиФункции-расширенияПовторение — смотритель зоопарка9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Песочница Kotlin