Menu
Coddy logo textTech

Bibliothekskatalog

Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 60 von 61.

challenge icon

Aufgabe

Einfach

Erstelle ein Bibliothekskatalogsystem, das zeigt, wie Traits verschiedene Typen unter einer gemeinsamen Schnittstelle vereinen! Du erstellst einen Katalog, in dem Bücher und Zeitschriften trotz ihrer unterschiedlichen Eigenschaften sich alle durch einen gemeinsamen Trait beschreiben können.

Du organisierst deinen Code über drei Dateien:

  • catalog.rs: Definiere den CatalogItem-Trait mit einer einzelnen Methode description, die einen String zurückgibt. Dieser Trait legt den Vertrag fest, den alle Bibliothekselemente erfüllen müssen.
  • items.rs: Erstelle zwei Strukturen, die deinen Trait implementieren. Ein Book hat einen title und einen author (beides Strings), während ein Magazine einen name (String) und eine issue-Nummer (u32) hat. Jede Struktur soll CatalogItem mit ihrem eigenen, einzigartigen Beschreibungsformat implementieren.
  • main.rs: Binde beide Module ein und erstelle mithilfe der bereitgestellten Eingaben Instanzen von Book und Magazine. Rufe für jedes Element die Methode description auf und gib die Ergebnisse aus.

Die Beschreibung von Book soll diesem Format folgen:

Book: {title} by {author}

Die Beschreibung von Magazine soll diesem Format folgen:

Magazine: {name}, Issue {issue}

Bei den Eingaben 1984, George Orwell, Nature und 42 lautet das Ergebnis beispielsweise:

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

Bei den Eingaben The Rust Book, Steve Klabnik, Science Weekly und 156 lautet das Ergebnis:

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

Du erhältst vier Eingaben: Buchtitel, Buchautor, Zeitschriftenname und Zeitschriftennummer (parse die letzte als u32).

Probier es selbst

mod catalog;
mod items;

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

fn main() {
    // Eingaben lesen
    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: Erstelle eine Book-Instanz mit book_title und book_author

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

    // TODO: Rufe description() für jedes Element auf und gib die Ergebnisse aus
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Rust-Compiler