Menu
CoddyTech

Libri e iscritti

Fa parte della sezione Programmazione orientata agli oggetti del percorso Ruby di Coddy. Lezione 50 di 57.

In questo progetto costruirai il nucleo di un sistema bibliotecario. Un oggetto Library riceve comandi, uno per riga, e risponde a ciascuno di essi. In cinque passaggi imparerà ad aggiungere libri e membri, prestare e riprendere i libri, cercare nel catalogo e stampare un rapporto.

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

Il modello dei dati usa ciò che hai imparato in questa sezione. Book espone id e title in sola lettura e borrower tramite un accessor, con il predicato available?. Member conserva gli ID dei suoi prestiti in un array. Ogni classe si trova nel proprio file, book.rb, member.rb e library.rb, e la biblioteca conserva entrambi i tipi di oggetti in hash che vengono modificati solo dai suoi metodi:

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) divide il comando e dirama in base alla sua prima parola con case. Ogni ramo restituisce le proprie risposte come array, quindi un comando come REPORT può rispondere con più righe, mentre return esce in anticipo restituendo una risposta di errore. Il titolo di un libro può contenere spazi, quindi corrisponde a tutto ciò che viene dopo 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

Sfida

Facile

Completa Library#handle per i primi due comandi:

  • ADD_BOOK id title: memorizza un nuovo libro disponibile e rispondi added book 1: Dune; se l'id è già occupato, rispondi book 1 exists.
  • JOIN name: aggiungi un membro e rispondi welcome ada; se il nome esiste già, rispondi ada is already a member.

Il codice fornito passa ogni riga di input a library.handle(line) e stampa ogni risposta restituita su una riga distinta. I nomi dei membri sono parole minuscole singole, gli id dei libri sono numeri interi e l'input contiene solo i comandi descritti finora. Qualsiasi altro comando restituisce unknown command.

Il tuo codice va inserito in book.rb, member.rb e library.rb. main.rb contiene il codice fornito per l'input/output e non può essere modificato.

Provalo tu

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

# Codice di input/output fornito: lascialo così com'è
input = []
while (line = gets)
  input << line.chomp
end
library = Library.new
input.each do |line|
  library.handle(line).each { |reply| puts reply }
end
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Ruby online