Menu
Coddy logo textTech

Tekrar - Personel Dizini

Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 21 / 57.

challenge icon

Görev

Orta

Bir sınıf hiyerarşisi olarak bir personel dizini oluşturun.

  • Person(name) soyuttur. Soyut role() işlevini bildirir ve card() işlevini uygular; bu işlev Ada (staff in sales) değerini döndürür ve üzerine yazılamaz.
  • Staff(name, department) open'dır; rolü staff in sales şeklindedir.
  • Manager(name, department), Staff sınıfını genişletir ve özel bir ekip tutar. hire(member), üye aynı departmanda çalışıyorsa, yönetici değilse ve henüz ekipte değilse true döndürür ve üyeyi ekler; diğer durumlarda false döndürür. Rolü, Staff rolünün ardından gelen , 2 reports ifadesidir (super kullanın).
  • Contractor(name, days), Person sınıfını genişletir; rolü contractor for 30 days şeklindedir.

Sağlanan kod, staff Ada sales, manager Bo sales, contractor Cy 30 veya hire Bo Ada komutlarını okur (hired ya da refused yazdırır; bir ad bilinmiyorsa da aynı şekilde davranır), ardından her kişinin kartını eklenme sırasına göre yazdırır.

Kodunuz Person.kt, Staff.kt, Manager.kt ve Contractor.kt dosyalarına yazılmalıdır. Main.kt, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

fun main() {
    // Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
    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())
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Kotlin playground