Menu
Coddy logo textTech

Rückblick – Mitarbeiterverzeichnis

Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 21 von 57.

challenge icon

Aufgabe

Mittel

Erstelle ein Mitarbeiterverzeichnis als Klassenhierarchie.

  • Person(name) ist abstrakt. Sie deklariert die abstrakte role() und implementiert card(), die Ada (staff in sales) zurückgibt und nicht überschrieben werden kann.
  • Staff(name, department) ist offen; ihre Rolle ist staff in sales.
  • Manager(name, department) erweitert Staff und verwaltet ein privates Team. hire(member) gibt true zurück und fügt das Mitglied hinzu, wenn das Mitglied in derselben Abteilung arbeitet, nicht der Manager ist und noch nicht im Team ist, andernfalls false. Seine Rolle ist die Staff-Rolle gefolgt von , 2 reports (verwende super).
  • Contractor(name, days) erweitert Person; seine Rolle ist contractor for 30 days.

Der bereitgestellte Code liest Befehle wie staff Ada sales, manager Bo sales, contractor Cy 30 oder hire Bo Ada (er gibt hired oder refused aus, auch wenn ein Name unbekannt ist) und gibt anschließend die Karte jeder Person in der Reihenfolge aus, in der sie hinzugefügt wurden.

Dein Code gehört in Person.kt, Staff.kt, Manager.kt und Contractor.kt. Main.kt enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.

Probier es selbst

fun main() {
    // Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
    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())
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Kotlin-Playground