Menu
Coddy logo textTech

Wiederholung – Sicherer Tresor

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein sicheres Schließfachsystem bauen, das alles zusammenbringt, was Sie über Kapselung gelernt haben! Ihr Schließfach wird seinen Inhalt hinter einem Geheimcode schützen – nur jemand, der den Code kennt, kann sehen, was sich darin befindet.

Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:

  • locker.rs: Definieren Sie ein Locker-Struct mit zwei privaten Feldern: code (u32) und contents (String). Das Struct sollte öffentlich sein, aber beide Felder müssen privat bleiben, um die Sicherheit des Schließfachs zu gewährleisten. Implementieren Sie:
    • Einen new-Konstruktor, der einen initialen Code und Inhalt entgegennimmt
    • Eine set_code-Methode, die es ermöglicht, den Code des Schließfachs zu ändern
    • Eine get_contents-Methode, die einen versuchten Code entgegennimmt – wenn dieser mit dem Code des Schließfachs übereinstimmt, geben Sie den Inhalt zurück; andernfalls geben Sie "Access denied" zurück
  • main.rs: Binden Sie Ihr Schließfach-Modul ein, erstellen Sie ein Schließfach und demonstrieren Sie seine Sicherheitsfunktionen, indem Sie versuchen, 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 Ihr bedingter Getter, der den Zugriff validiert, bevor private Daten preisgegeben werden.

Ihre Ausgabe sollte genau diesem Format folgen:

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

Wenn Sie beispielsweise ein Schließfach mit dem Code 1234 und dem Inhalt "Gold coins" erstellen, dann den Code 0000 versuchen, den Code in 5678 ändern und 5678 versuchen, würde die Ausgabe wie folgt aussehen:

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

Sie erhalten fünf Eingaben: den initialen Code, den Inhalt, den ersten Versuchs-Code, den neu zu setzenden Code und den zweiten Versuchs-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, den Inhalt mit dem first_attempt Code abzurufen
    // Ausgabe: "Attempt with {code}: {result}"

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

    // TODO: Versuche, den Inhalt mit dem second_attempt Code abzurufen
    // Ausgabe: "Attempt with {code}: {result}"
}

Alle Lektionen in Object Oriented Programming