Menu
Coddy logo textTech

Récapitulatif - Casier sécurisé

Fait partie de la section Object Oriented Programming du Journey Rust de Coddy — leçon 13 sur 61.

challenge icon

Défi

Facile

Construisons un système de casier sécurisé qui rassemble tout ce que vous avez appris sur l'encapsulation ! Votre casier protégera son contenu derrière un code secret — seule une personne connaissant le code pourra voir ce qu'il y a à l'intérieur.

Vous allez créer deux fichiers pour organiser votre code :

  • locker.rs : Définissez une structure Locker avec deux champs privés : code (u32) et contents (String). La structure doit être publique, mais les deux champs doivent rester privés pour protéger la sécurité du casier. Implémentez :
    • Un constructeur new qui prend un code initial et un contenu
    • Une méthode set_code qui permet de changer le code du casier
    • Une méthode get_contents qui prend un code tenté — s'il correspond au code du casier, retournez le contenu ; sinon, retournez "Access denied"
  • main.rs : Importez votre module locker, créez un casier et démontrez ses fonctionnalités de sécurité en essayant d'accéder au contenu avec des codes corrects et incorrects.

La méthode get_contents doit retourner un String — soit le contenu réel lorsque le code est correct, soit le message de refus lorsqu'il est erroné. C'est votre "getter" conditionnel qui valide l'accès avant de révéler des données privées.

Votre sortie doit suivre exactement ce format :

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

Par exemple, si vous créez un casier avec le code 1234 et le contenu "Gold coins", puis que vous essayez le code 0000, changez le code en 5678, et essayez 5678, la sortie sera :

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

Vous recevrez cinq entrées : le code initial, le contenu, le code de la première tentative, le nouveau code à définir et le code de la seconde tentative.

Essayez vous-même

mod locker;

use locker::Locker;

fn main() {
    // Lire les entrées
    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: Créer un nouveau Locker avec initial_code et contents

    // TODO: Tenter de récupérer le contenu avec le code first_attempt
    // Afficher : "Attempt with {code}: {result}"

    // TODO: Changer le code du casier par new_code
    // Afficher : "Code changed"

    // TODO: Tenter de récupérer le contenu avec le code second_attempt
    // Afficher : "Attempt with {code}: {result}"
}

Toutes les leçons de Object Oriented Programming