Menu
CoddyTech

Livres et membres

Fait partie de la section Programmation orientée objet du Journey Ruby de Coddy. Leçon 50 sur 57.

Dans ce projet, tu construis le cœur d’un système de bibliothèque. Un objet Library reçoit des commandes, une par ligne, et répond à chacune. En cinq étapes, il apprend à ajouter des livres et des membres, à prêter et à récupérer des livres, à rechercher dans le catalogue et à imprimer un rapport.

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

Le modèle de données utilise ce que cette section vous a appris. Book expose id et title en lecture seule, ainsi que borrower via un accesseur, avec le prédicat available?. Member conserve les identifiants de ses emprunts dans un tableau. Chaque classe se trouve dans son propre fichier, book.rb, member.rb et library.rb, et la bibliothèque conserve les deux types d’objets dans des tables de hachage auxquelles seules ses propres méthodes accèdent :

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?

Résultat :

false

handle(line) sépare la commande et sélectionne une branche en fonction de son premier mot avec case. Chaque branche renvoie ses réponses sous forme de tableau, ainsi une commande telle que REPORT peut répondre sur plusieurs lignes, et return permet de quitter plus tôt avec une réponse d’erreur. Le titre d’un livre peut contenir des espaces : il correspond donc à tout ce qui suit l’identifiant :

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

Sortie :

7: The Hobbit
challenge icon

Défi

Facile

Complétez Library#handle pour les deux premières commandes :

  • ADD_BOOK id title : stockez un nouveau livre disponible et répondez added book 1: Dune ; si l’identifiant est déjà pris, répondez book 1 exists.
  • JOIN name : ajoutez un membre et répondez welcome ada ; si le nom existe déjà, répondez ada is already a member.

Le code fourni transmet chaque ligne d’entrée à library.handle(line) et affiche chaque réponse renvoyée sur sa propre ligne. Les noms des membres sont des mots uniques en minuscules, les identifiants des livres sont des nombres entiers, et l’entrée ne contient que les commandes décrites jusqu’ici. Toute autre commande renvoie unknown command.

Votre code va dans book.rb, member.rb et library.rb. main.rb contient le code d’entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

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

# Code d'entrée/sortie fourni : conservez-le tel quel
input = []
while (line = gets)
  input << line.chomp
end
library = Library.new
input.each do |line|
  library.handle(line).each { |reply| puts reply }
end
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur Ruby en ligne