Menu
CoddyTech

Buku dan Anggota

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

Dalam proyek ini, kamu membangun inti sistem library. Object Library menerima perintah, satu per baris, lalu membalas setiap perintah. Dalam lima langkah, sistem ini akan 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 ini menggunakan hal-hal yang diajarkan di bagian ini. Book menyediakan id dan title hanya-baca, serta borrower melalui accessor, dengan predikat available?. Member menyimpan id pinjamannya dalam sebuah array. Setiap class berada di file tersendiri, book.rb, member.rb, dan library.rb, dan library menyimpan kedua jenis object dalam hash yang hanya diakses oleh method miliknya sendiri:

class Book
  attr_reader :id, :title
  attr_accessor :borrower

  def initialize(id, title)
    @id = id
    @title = title
    @borrower = nil
  end

  def available?
    borrower.nil?
  end
end

books = { 1 => Book.new(1, "Dune") }
books[1].borrower = "ada"
puts books[1].available?

Output:

false

handle(line) memisahkan perintah dan memilih percabangan berdasarkan kata pertamanya dengan case. Setiap percabangan mengembalikan balasannya sebagai array, jadi perintah seperti REPORT dapat membalas dengan beberapa baris, dan return keluar lebih awal dengan balasan error. Judul buku dapat berisi spasi, jadi judulnya adalah semua teks setelah id:

parts = "ADD_BOOK 7 The Hobbit".split
id = parts[1].to_i
title = parts[2..].join(" ")
puts "#{id}: #{title}"

Output:

7: The Hobbit
challenge icon

Tantangan

Mudah

Lengkapi Library#handle 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 baris tersendiri. Nama anggota berupa satu kata dengan huruf kecil, id buku berupa bilangan bulat, dan input hanya berisi perintah yang telah dijelaskan sejauh ini. Perintah lainnya akan memberikan balasan unknown command.

Tulis kodemu di book.rb, member.rb, dan library.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

require_relative 'book'
require_relative 'member'
require_relative 'library'

# Kode input/output yang disediakan: biarkan apa adanya
input = []
while (line = gets)
  input << line.chomp
end
library = Library.new
input.each do |line|
  library.handle(line).each { |reply| puts reply }
end
quiz iconUji dirimu

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

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Ruby online