Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - دليل الموظفين

جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 21 من 57.

challenge icon

التحدي

متوسط

أنشئ دليلًا للموظفين باعتباره تسلسلًا هرميًا من الفئات.

  • Person(name) فئة مجردة. تصرّح بالدالة المجردة role() وتنفّذ card()، التي تُرجع Ada (staff in sales) ولا يمكن تجاوزها.
  • Staff(name, department) فئة open؛ ودورها هو 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())
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Kotlin