Menu
Coddy logo textTech

Récapitulatif – Annuaire du personnel

Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 21 sur 57.

challenge icon

Défi

Moyen

Construisez un annuaire du personnel sous forme de hiérarchie de classes.

  • Person(name) est abstraite. Elle déclare role() comme abstraite et implémente card(), qui renvoie Ada (staff in sales) et ne peut pas être redéfinie.
  • Staff(name, department) est ouverte ; son rôle est staff in sales.
  • Manager(name, department) étend Staff et conserve une équipe privée. hire(member) renvoie true et ajoute le membre lorsque celui-ci travaille dans le même service, n’est pas le manager et ne fait pas encore partie de l’équipe, et renvoie false dans les autres cas. Son rôle est le rôle de Staff suivi de , 2 reports (utilisez super).
  • Contractor(name, days) étend Person ; son rôle est contractor for 30 days.

Le code fourni lit les commandes staff Ada sales, manager Bo sales, contractor Cy 30 ou hire Bo Ada (il affiche hired ou refused, également lorsqu’un nom est inconnu), puis affiche la fiche de chaque personne dans l’ordre où elles ont été ajoutées.

Votre code doit se trouver dans Person.kt, Staff.kt, Manager.kt et Contractor.kt. Main.kt contient le code d’entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

fun main() {
    // Code d'entrée/sortie fourni : le garder tel quel
    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())
}

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Playground Kotlin