Menu
Coddy logo textTech

Katalog biblioteczny

Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 60 z 61.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system katalogu bibliotecznego, który pokazuje, jak cechy łączą różne typy we wspólnym interfejsie! Utworzysz katalog, w którym książki i czasopisma, mimo różnych właściwości, mogą opisywać się za pomocą wspólnej cechy.

Uporządkujesz kod w trzech plikach:

  • catalog.rs: Zdefiniuj cechę CatalogItem z jedną metodą description, która zwraca wartość typu String. Ta cecha określa wymagania, które muszą spełniać wszystkie pozycje biblioteczne.
  • items.rs: Utwórz dwie struktury implementujące tę cechę. Book ma pola title i author (oba typu String), natomiast Magazine ma pole name (typu String) oraz numer issue (typu u32). Każda struktura powinna implementować CatalogItem i mieć własny, unikalny format opisu.
  • main.rs: Zaimportuj oba moduły i utwórz instancje Book i Magazine, używając podanych danych wejściowych. Wywołaj metodę description dla każdej pozycji i wypisz wyniki.

Opis obiektu Book powinien mieć następujący format:

Book: {title} by {author}

Opis obiektu Magazine powinien mieć następujący format:

Magazine: {name}, Issue {issue}

Na przykład dla danych wejściowych 1984, George Orwell, Nature i 42:

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

A dla danych wejściowych The Rust Book, Steve Klabnik, Science Weekly i 156:

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

Otrzymasz cztery dane wejściowe: tytuł książki, autora książki, nazwę czasopisma i numer wydania czasopisma (ostatnią wartość sparsuj jako u32).

Spróbuj swoich sił

mod catalog;
mod items;

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

fn main() {
    // Wczytaj dane wejściowe
    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: Utwórz instancję Book, używając book_title i book_author

    // TODO: Utwórz instancję Magazine, używając magazine_name i magazine_issue

    // TODO: Wywołaj description() dla każdego elementu i wypisz wyniki
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Rust online