Menu
Coddy logo textTech

Bibliothekskatalog

Teil des Abschnitts Object Oriented Programming der Rust-Journey von Coddy — Lektion 60 von 61.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Bibliothekskatalogsystem erstellen, das zeigt, wie Traits verschiedene Typen unter einer gemeinsamen Schnittstelle vereinen! Sie werden einen Katalog erstellen, in dem Bücher und Zeitschriften – obwohl sie unterschiedliche Eigenschaften haben – sich alle über einen gemeinsamen Trait selbst beschreiben können.

Sie werden Ihren Code über drei Dateien organisieren:

  • catalog.rs: Definieren Sie den CatalogItem Trait mit einer einzigen Methode description, die einen String zurückgibt. Dieser Trait legt den Vertrag fest, den alle Bibliothekselemente erfüllen müssen.
  • items.rs: Erstellen Sie zwei Structs, die Ihren 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. Jedes Struct sollte CatalogItem mit seinem eigenen, einzigartigen Beschreibungsformat implementieren.
  • main.rs: Binden Sie beide Module ein und erstellen Sie Instanzen von Book und Magazine unter Verwendung der bereitgestellten Eingaben. Rufen Sie die Methode description für jedes Element auf und geben Sie die Ergebnisse aus.

Ihre Book Beschreibung sollte diesem Format folgen:

Book: {title} by {author}

Ihre Magazine Beschreibung sollte diesem Format folgen:

Magazine: {name}, Issue {issue}

Zum Beispiel mit den Eingaben 1984, George Orwell, Nature und 42:

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

Und mit den Eingaben The Rust Book, Steve Klabnik, Science Weekly und 156:

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

Sie erhalten vier Eingaben: Buchtitel, Buchautor, Name der Zeitschrift und Ausgabennummer der Zeitschrift (parsen Sie 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 unter Verwendung von book_title und book_author

    // TODO: Erstelle eine Magazine-Instanz unter Verwendung von magazine_name und magazine_issue

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

Alle Lektionen in Object Oriented Programming