Menu
Coddy logo textTech

Podsumowanie – katalog pracowników

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

challenge icon

Wyzwanie

Średni

Utwórz katalog pracowników jako hierarchię klas.

  • Person(name) jest abstrakcyjna. Deklaruje abstrakcyjną metodę role() i implementuje card(), która zwraca Ada (staff in sales) i nie może zostać przesłonięta.
  • Staff(name, department) jest otwarta; jej rola to staff in sales.
  • Manager(name, department) rozszerza Staff i przechowuje prywatny zespół. hire(member) zwraca true i dodaje członka, gdy pracuje on w tym samym dziale, nie jest menedżerem i nie należy jeszcze do zespołu; w przeciwnym razie zwraca false. Jego rola to rola Staff, po której następuje , 2 reports (użyj super).
  • Contractor(name, days) rozszerza Person; jego rola to contractor for 30 days.

Dostarczony kod odczytuje polecenia staff Ada sales, manager Bo sales, contractor Cy 30 lub hire Bo Ada (wypisuje hired lub refused, również gdy nazwa jest nieznana), a następnie wypisuje wizytówkę każdej osoby w kolejności, w jakiej zostały dodane.

Twój kod umieść w plikach Person.kt, Staff.kt, Manager.kt i Contractor.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()
    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())
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Edytor online Kotlin