Untitled

 avatar
user_4005203546
rust
2 years ago
3.0 kB
1
Indexable
Never
use std::collections::{HashMap, BTreeMap};
use std::io;

fn main() {
    println!("Bienvenue dans le programme de gestion");

    let mut table: HashMap<String, Vec<String>> = HashMap::new();
    loop {
        println!("Quelle action souhaitez vous faire ?");
        println!("1: Listez tout les employée");
        println!("2: Ajoutez un employés à un département");
        println!("3: Listez tout  les employée d'un département");

        let mut choice = String::new();

        io::stdin()
        .read_line(&mut choice)
        .expect("Erreur");


        println!("Number {}", &choice);
        let choice: u32 = match choice.trim().parse() {
            Ok(number) => number,
            Err(_) => {
                println!("Veuillez spécifier un numéro");
                continue;
            }
        };

        match choice {
            1 => {
                list_employee(&table);
            },
            2 => {
                add_employee(&mut table);
            },
            3 => {
                list_employee_by_departement(&table)
            },
            _ => {
                println!("Veuillez spécifier un numéro entre 1 et 3");
                continue;
            }
        };

    }
}


fn list_employee_by_departement(table: &HashMap<String, Vec<String>>) {
    println!("Veuillez spécifier le département");

    let mut departement = String::new();

    io::stdin()
        .read_line(&mut departement)
        .expect("Erreur");

    let departement = String::from(departement.trim());

    match table.get(&departement) {
        Some(vec) => {
            println!("Voici la liste des employee pour le departement {}", departement);
            for i in vec {
                println!("{}", i);
            }
        },
        None => {
            println!("Departement innconnue");
        }
    };
}

fn list_employee(table: &HashMap<String, Vec<String>>) {
    println!("Voici la liste de tout les employée:");

    let ordered: BTreeMap<&String, &Vec<String>> = table.iter().collect();
    for (departement, vector) in ordered {
        println!("Département {} :", departement);
        for i in vector {
            println!("{}", i);
        }
    }
    println!();
}

fn add_employee(table: &mut HashMap<String, Vec<String>>) {
    let mut departement = String::new();
    println!("Veuillez spécifier un département: ");

    io::stdin()
        .read_line(&mut departement)
        .expect("Erreur");

    let departement = String::from(departement.trim());

    let vec = table.entry(departement).or_insert(Vec::<String>::new());

    let mut employee_name = String::new();

    println!("Veuillez spécifier le nom de l'employée a ajouter");
    io::stdin()
        .read_line(&mut employee_name)
        .expect("Erreur");

    let employee_name = String::from(employee_name.trim());

    (*vec).push(employee_name);
    (*vec).sort();

}