Menu
Coddy logo textTech

Wiederholung – Sicherer Tresor

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

challenge icon

Aufgabe

Einfach

Bauen wir ein sicheres Schließfachsystem, das alles zusammenführt, was du über Kapselung gelernt hast! Dein Schließfach schützt seinen Inhalt hinter einem Geheimcode: Nur jemand, der den Code kennt, kann sehen, was sich darin befindet.

Du erstellst zwei Dateien, um deinen Code zu organisieren:

  • locker.rs: Definiere eine Locker-Struktur mit zwei privaten Feldern: code (u32) und contents (String). Die Struktur sollte öffentlich sein, aber beide Felder müssen privat bleiben, um die Sicherheit des Schließfachs zu gewährleisten. Implementiere:
    • einen new-Konstruktor, der einen initialen Code und Inhalt entgegennimmt
    • eine set_code-Methode, die das Ändern des Codes des Schließfachs ermöglicht
    • eine get_contents-Methode, die einen versuchten Code entgegennimmt; wenn er mit dem Code des Schließfachs übereinstimmt, gib den Inhalt zurück, andernfalls gib "Access denied" zurück
  • main.rs: Binde dein Schließfachmodul ein, erstelle ein Schließfach und demonstriere seine Sicherheitsfunktionen, indem du versuchst, mit korrekten und inkorrekten Codes auf den Inhalt zuzugreifen.

Die get_contents-Methode sollte einen String zurückgeben: entweder den tatsächlichen Inhalt, wenn der Code korrekt ist, oder die Ablehnungsnachricht, wenn er falsch ist. Dies ist dein bedingter Getter, der den Zugriff überprüft, bevor er private Daten offenlegt.

Deine Ausgabe sollte genau diesem Format entsprechen:

Attempt with {code}: {result}
Code changed
Attempt with {code}: {result}

Wenn du beispielsweise ein Schließfach mit dem Code 1234 und dem Inhalt "Gold coins" erstellst, dann den Code 0000 ausprobierst, den Code in 5678 änderst und 5678 ausprobierst, wäre die Ausgabe:

Attempt with 0000: Access denied
Code changed
Attempt with 5678: Gold coins

Du erhältst fünf Eingaben: den initialen Code, den Inhalt, den ersten versuchten Code, den neuen zu setzenden Code und den zweiten versuchten Code.

Probier es selbst

mod locker;

use locker::Locker;

fn main() {
    // Eingaben lesen
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let initial_code: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let contents = input.trim().to_string();

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let first_attempt: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let new_code: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let second_attempt: u32 = input.trim().parse().expect("Invalid number");

    // TODO: Erstelle einen neuen Locker mit initial_code und contents

    // TODO: Versuche, contents mit first_attempt-Code zu holen
    // Ausgeben: "Attempt with {code}: {result}"

    // TODO: Ändere den Locker-Code zu new_code
    // Print: "Code changed"

    // TODO: Versuche, contents mit second_attempt-Code zu holen
    // Ausgeben: "Attempt with {code}: {result}"
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Rust-Compiler