Menu
CoddyTech

Buku dan Anggota

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 50 dari 57.

Dalam proyek ini, kamu membangun inti dari sistem library. Sebuah class Library menerima perintah, satu per baris, lalu membalas setiap perintah. Dalam lima langkah, sistem ini belajar menambahkan buku dan anggota, meminjam dan mengembalikan buku, mencari katalog, serta mencetak laporan:

ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORT

Model data menggunakan hal-hal yang diajarkan di bagian ini. Book dan Member masing-masing berada di file tersendiri. borrower milik sebuah buku dapat dibaca di mana saja, tetapi hanya berubah melalui lendTo dan giveBack, dan sebuah member menampilkan id pinjamannya sebagai List hanya-baca. Library menyimpan keduanya dalam map privat, jadi hanya method miliknya sendiri yang dapat mengubahnya:

class Book(val id: Int, val title: String) {
    var borrower: String? = null
        private set
    val isAvailable: Boolean
        get() = borrower == null
    fun lendTo(name: String) { borrower = name }
}

Di dalam main:

val books = mutableMapOf<Int, Book>()
books[1] = Book(1, "Dune")
books.getValue(1).lendTo("ada")
println("${books.getValue(1).isAvailable} ${books.getValue(1).borrower}")

Output:

false ada

handle(line) memisahkan perintah dan menggunakan when pada kata pertamanya. Setiap cabang mengembalikan balasannya sebagai List<String>, sehingga perintah seperti REPORT dapat membalas dengan beberapa baris, dan return lebih awal mengembalikan penolakan. Judul buku dapat berisi spasi, jadi judulnya mencakup semua teks setelah id:

Di dalam main:

val p = "ADD_BOOK 7 The Hobbit".split(" ")
val id = p[1].toInt()
val title = p.drop(2).joinToString(" ")
println("$id: $title")

Output:

7: The Hobbit
challenge icon

Tantangan

Mudah

Lengkapi Library.handle(line) untuk dua perintah pertama:

  • ADD_BOOK <id> <title>: simpan buku baru yang tersedia dan berikan balasan added book 1: Dune; jika id sudah digunakan, berikan balasan book 1 exists.
  • JOIN <name>: tambahkan anggota dan berikan balasan welcome ada; jika nama sudah ada, berikan balasan ada is already a member.

Kode yang disediakan meneruskan setiap baris input ke library.handle(line) dan mencetak setiap balasan yang dikembalikan pada barisnya sendiri. Nama anggota berupa satu kata dengan huruf kecil, id buku berupa bilangan bulat, dan input hanya berisi perintah yang telah dijelaskan sejauh ini. Perintah lain apa pun akan memberikan balasan unknown command.

Tulis kodemu di Book.kt, Member.kt, dan Library.kt. Main.kt berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

fun main() {
    // Kode input/output yang disediakan: biarkan apa adanya
    val input = generateSequence(::readLine).toList()
    val library = Library()
    for (line in input) {
        for (reply in library.handle(line)) println(reply)
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Kotlin