Menu
Coddy logo textTech

Catalogo della biblioteca

Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 60 di 61.

challenge icon

Sfida

Facile

Costruiamo un sistema di catalogo bibliotecario che dimostri come i trait unificano tipi diversi tramite un’interfaccia comune! Creerai un catalogo in cui libri e riviste, pur avendo proprietà diverse, possono descriversi tramite un trait condiviso.

Organizzerai il codice in tre file:

  • catalog.rs: Definisci il trait CatalogItem con un solo metodo, description, che restituisce una String. Questo trait stabilisce il contratto che tutti gli elementi della biblioteca devono rispettare.
  • items.rs: Crea due struct che implementano il tuo trait. Un Book ha un title e un author (entrambi di tipo String), mentre un Magazine ha un name (di tipo String) e un numero di issue (u32). Ogni struct deve implementare CatalogItem con un formato di descrizione specifico.
  • main.rs: Importa entrambi i moduli e crea istanze di Book e Magazine usando gli input forniti. Chiama il metodo description per ciascun elemento e stampa i risultati.

La descrizione di Book deve seguire questo formato:

Book: {title} by {author}

La descrizione di Magazine deve seguire questo formato:

Magazine: {name}, Issue {issue}

Ad esempio, con gli input 1984, George Orwell, Nature e 42:

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

E con gli input The Rust Book, Steve Klabnik, Science Weekly e 156:

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

Riceverai quattro input: il titolo del libro, l’autore del libro, il nome della rivista e il numero del fascicolo della rivista (analizza l’ultimo come u32).

Provalo tu

mod catalog;
mod items;

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

fn main() {
    // Leggi i dati in input
    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: Crea un'istanza di Book usando book_title e book_author

    // TODO: Crea un'istanza di Magazine usando magazine_name e magazine_issue

    // TODO: Chiama description() su ciascun elemento e stampa i risultati
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Rust online