Menu
Coddy logo textTech

Catalogue de bibliothèque

Fait partie de la section Programmation Orientée Objet du Journey Rust de Coddy. Leçon 60 sur 61.

challenge icon

Défi

Facile

Construisons un système de catalogue de bibliothèque qui montre comment les traits unifient différents types au sein d’une interface commune ! Tu vas créer un catalogue dans lequel les livres et les magazines, malgré leurs propriétés différentes, peuvent tous se décrire באמצעות un trait partagé.

Tu organiseras ton code sur trois fichiers :

  • catalog.rs : définis le trait CatalogItem avec une seule méthode description qui renvoie une String. Ce trait établit le contrat que tous les éléments de la bibliothèque doivent respecter.
  • items.rs : crée deux structures qui implémentent ton trait. Un Book possède un title et un author (tous deux de type String), tandis qu’un Magazine possède un name (de type String) et un numéro d’édition issue (de type u32). Chaque structure doit implémenter CatalogItem avec son propre format de description unique.
  • main.rs : importe les deux modules et crée des instances de Book et de Magazine à l’aide des valeurs fournies. Appelle la méthode description sur chaque élément et affiche les résultats.

La description de ton Book doit suivre ce format :

Book: {title} by {author}

La description de ton Magazine doit suivre ce format :

Magazine: {name}, Issue {issue}

Par exemple, avec les valeurs 1984, George Orwell, Nature et 42 :

Book: 1984 by George Orwell
Magazine: Nature, Issue 42

Et avec les valeurs The Rust Book, Steve Klabnik, Science Weekly et 156 :

Book: The Rust Book by Steve Klabnik
Magazine: Science Weekly, Issue 156

Tu recevras quatre valeurs : le titre du livre, l’auteur du livre, le nom du magazine et le numéro d’édition du magazine (analyse le dernier comme un u32).

Essayez vous-même

mod catalog;
mod items;

use catalog::CatalogItem;
use items::{Book, Magazine};

fn main() {
    // Lire les entrées
    let mut book_title = String::new();
    std::io::stdin().read_line(&mut book_title).expect("Failed to read line");
    let book_title = book_title.trim().to_string();

    let mut book_author = String::new();
    std::io::stdin().read_line(&mut book_author).expect("Failed to read line");
    let book_author = book_author.trim().to_string();

    let mut magazine_name = String::new();
    std::io::stdin().read_line(&mut magazine_name).expect("Failed to read line");
    let magazine_name = magazine_name.trim().to_string();

    let mut issue_input = String::new();
    std::io::stdin().read_line(&mut issue_input).expect("Failed to read line");
    let magazine_issue: u32 = issue_input.trim().parse().expect("Failed to parse issue number");

    // TODO: Créer une instance de Book en utilisant book_title et book_author

    // TODO: Create a Magazine instance using magazine_name and magazine_issue

    // TODO: Appeler description() sur chaque élément et afficher les résultats
}

Toutes les leçons de Programmation Orientée Objet

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