Menu
Coddy logo textTech

Catalogue de bibliothèque

Fait partie de la section Object Oriented Programming 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 démontre comment les traits unifient différents types sous une interface commune ! Vous allez créer un catalogue où les livres et les magazines — bien qu'ayant des propriétés différentes — peuvent tous se décrire via un trait partagé.

Vous organiserez votre code sur trois fichiers :

  • catalog.rs : Définissez le trait CatalogItem avec une seule méthode description qui retourne un String. Ce trait établit le contrat que tous les articles de la bibliothèque doivent remplir.
  • items.rs : Créez deux structs qui implémentent votre trait. Un Book possède un title et un author (tous deux des Strings), tandis qu'un Magazine possède un name (String) et un numéro d'issue (u32). Chaque struct doit implémenter CatalogItem avec son propre format de description unique.
  • main.rs : Importez les deux modules et créez des instances de Book et Magazine en utilisant les entrées fournies. Appelez la méthode description sur chaque élément et affichez les résultats.

Votre description de Book doit suivre ce format :

Book: {title} by {author}

Votre description de Magazine doit suivre ce format :

Magazine: {name}, Issue {issue}

Par exemple, avec les entrées 1984, George Orwell, Nature, et 42 :

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

Et avec les entrées The Rust Book, Steve Klabnik, Science Weekly, et 156 :

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

Vous recevrez quatre entrées : le titre du livre, l'auteur du livre, le nom du magazine et le numéro de l'édition du magazine (analysez ce 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: Créer une instance de Magazine en utilisant magazine_name et magazine_issue

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

Toutes les leçons de Object Oriented Programming