Menu
Coddy logo textTech

Tekrar - Sipariş Takipçisi

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

challenge icon

Görev

Orta

Bu bölümdeki özel sınıflarla siparişleri takip edin.

  • Status enum'u, her birinin bir label'ı (new, paid, ...) bulunan NEW, PAID, SHIPPED, DELIVERED ve CANCELLED sabitlerine ve şu işleve sahiptir: canMoveTo(next): new paid veya cancelled olabilir, paid shipped veya cancelled olabilir, shipped delivered olabilir ve başka hiçbir işleme izin verilmez.
  • Order(id, item, status), durumu NEW olarak başlayan bir veri sınıfıdır.
  • Outcome mühürlü arayüzünün Updated(order) ve Rejected(id, reason) durumları vardır.
  • Tracker.place(item), bir sonraki kimlikle (1, 2, ...) bir sipariş oluşturur ve onu döndürür. move(id, target), no such order veya cannot go from new to delivered ile birlikte Rejected döndürür ya da siparişin değiştirilmiş bir kopyasını kaydeder ve Updated döndürür. summary(), enum'daki sıraya göre her durumdaki siparişlerin sayısını döndürür ve hiç sipariş olmayan durumları dışarıda bırakır: paid 1, cancelled 1 veya no orders.
  • describe(outcome), tüm durumları kapsayan bir when kullanır ve güncellenen siparişin metnini veya rejected 2: no such order döndürür.

Sağlanan kod, place tea veya <status> <id> biçimindeki (örneğin paid 1) komutları okur, yerleştirilen her siparişi ve açıklanan her sonucu yazdırır ve son olarak özeti yazdırır.

Kodunuz Status.kt, Order.kt, Outcome.kt, Updated.kt, Rejected.kt, Tracker.kt ve Functions.kt dosyalarına yerleştirilmelidir. Main.kt, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

fun main() {
    // Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
    val input = generateSequence(::readLine).toList()
    val tracker = Tracker()
    for (cmd in input) {
        val p = cmd.split(" ")
        if (p[0] == "place") {
            println(tracker.place(p[1]))
        } else {
            val target = Status.entries.find { it.label == p[0] }
            if (target == null) println("unknown status ${p[0]}")
            else println(describe(tracker.move(p[1].toInt(), target)))
        }
    }
    println(tracker.summary())
}

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

Kendi başına pratik yap: Kotlin playground