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

مراجعة - شباك التذاكر

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

challenge icon

التحدي

متوسط

أنشئ مكتب تذاكر صغيرًا باستخدام ثلاثة أنواع من التعريفات.

  • يحتوي Ticket على مُنشئ خاص يأخذ number وshow وseat. ويحتوي الكائن المرافق له على const val SEATS = 3، وعداد خاص، والمصنع issue(show, seat)، الذي يمنح التذاكر الأرقام 1 و2 و3 ...؛ أما issued فهو عدد التذاكر التي أُصدرت حتى الآن. تُرجع label() القيمة #1 Hamlet seat 2.
  • إن BoxOffice كائن. يرد sell(show, seat) بالقيمة no seat 4 عندما يكون المقعد خارج النطاق من 1 إلى Ticket.SEATS، وبالقيمة seat 2 taken عندما يكون قد بيع لهذا العرض، وإلا فإنه يُصدر تذكرة ويرد بوسمها. تحرر refund(number) مقعد التذكرة المباعة وترد بالقيمة refunded #1، أو no ticket #9. يرد report() بالقيمة Hamlet 2/3, Cats 1/3 مع ترتيب العروض أبجديًا، أو بالقيمة nothing sold.

يقرأ الكود المقدم الأوامر sell Hamlet 2 أو refund 1 أو report، ويطبع كل رد، ثم يطبع أخيرًا tickets issued: متبوعًا بالعدد. لا يُعاد استخدام الأرقام بعد استرداد التذكرة.

ضع كودك في Ticket.kt وBoxOffice.kt. يحتوي Main.kt على كود الإدخال/الإخراج المقدم، ولا يمكن تعديله.

جرّب بنفسك

fun main() {
    // كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
    val input = generateSequence(::readLine).toList()
    for (cmd in input) {
        val p = cmd.split(" ")
        when (p[0]) {
            "sell" -> println(BoxOffice.sell(p[1], p[2].toInt()))
            "refund" -> println(BoxOffice.refund(p[1].toInt()))
            else -> println(BoxOffice.report())
        }
    }
    println("tickets issued: ${Ticket.issued}")
}

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

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