Menu
Coddy logo textTech

Kütüphane Kataloğu

Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 60 / 61.

challenge icon

Görev

Kolay

Trait'lerin farklı türleri ortak bir arayüz altında nasıl birleştirdiğini gösteren bir kütüphane katalog sistemi oluşturalım! Farklı özelliklere sahip olmalarına rağmen kitapların ve dergilerin ortak bir trait aracılığıyla kendilerini tanımlayabildikleri bir katalog oluşturacaksınız.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • catalog.rs: Bir String döndüren tek bir description metoduna sahip CatalogItem trait'ini tanımlayın. Bu trait, tüm kütüphane öğelerinin yerine getirmesi gereken sözleşmeyi belirler.
  • items.rs: Trait'inizi uygulayan iki struct oluşturun. Bir Book, title ve author (her ikisi de String) alanlarına sahipken, bir Magazine, name (String) ve issue numarasına (u32) sahiptir. Her struct, CatalogItem trait'ini kendi benzersiz açıklama formatıyla uygulamalıdır.
  • main.rs: Her iki modülü de dahil edin ve sağlanan girdileri kullanarak Book ve Magazine örnekleri oluşturun. Her öğe üzerinde description metodunu çağırın ve sonuçları yazdırın.

Book açıklamanız şu formatı takip etmelidir:

Book: {title} by {author}

Magazine açıklamanız şu formatı takip etmelidir:

Magazine: {name}, Issue {issue}

Örneğin, 1984, George Orwell, Nature ve 42 girdileriyle:

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

Ve The Rust Book, Steve Klabnik, Science Weekly ve 156 girdileriyle:

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

Dört girdi alacaksınız: kitap başlığı, kitap yazarı, dergi adı ve dergi sayı numarası (sonuncusunu u32 olarak ayrıştırın).

Kendin dene

mod catalog;
mod items;

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

fn main() {
    // Girdileri oku
    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: book_title ve book_author kullanarak bir Book örneği oluşturun

    // TODO: magazine_name ve magazine_issue kullanarak bir Magazine örneği oluşturun

    // TODO: Her öğe üzerinde description() metodunu çağırın ve sonuçları yazdırın
}

Object Oriented Programming bölümündeki tüm dersler