Menu
Coddy logo textTech

Повторение — каталог сотрудников

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

challenge icon

Задание

Средне

Создайте каталог сотрудников в виде иерархии классов.

  • Person(name) является абстрактным. Он объявляет абстрактный role() и реализует card(), который возвращает Ada (staff in sales) и не может быть переопределён.
  • Staff(name, department) является открытым; его роль — staff in sales.
  • Manager(name, department) расширяет Staff и хранит приватную команду. hire(member) возвращает true и добавляет участника, если участник работает в том же отделе, не является менеджером и ещё не входит в команду, а во всех остальных случаях возвращает false. Его роль — это роль Staff, за которой следует , 2 reports (используйте super).
  • Contractor(name, days) расширяет Person; его роль — contractor for 30 days.

Предоставленный код считывает команды staff Ada sales, manager Bo sales, contractor Cy 30 или hire Bo Ada (он выводит hired или refused, в том числе если имя неизвестно), а затем выводит карточку каждого человека в порядке их добавления.

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

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

fun main() {
    // Предоставленный код ввода/вывода: оставьте его как есть
    val input = generateSequence(::readLine).toList()
    val people = mutableListOf<Person>()
    val staff = mutableMapOf<String, Staff>()
    val managers = mutableMapOf<String, Manager>()
    for (cmd in input) {
        val p = cmd.split(" ")
        when (p[0]) {
            "staff" -> Staff(p[1], p[2]).also { people.add(it); staff[it.name] = it }
            "manager" -> Manager(p[1], p[2]).also { people.add(it); staff[it.name] = it; managers[it.name] = it }
            "contractor" -> people.add(Contractor(p[1], p[2].toInt()))
            "hire" -> {
                val boss = managers[p[1]]
                val worker = staff[p[2]]
                println(if (boss != null && worker != null && boss.hire(worker)) "hired" else "refused")
            }
        }
    }
    for (person in people) println(person.card())
}

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

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