use std::fs; use std::io; struct Task { name: String, priority: usize, description: String, done: bool, } impl Task { fn new(name: String, priority: usize, description: String) -> Task { Task { name, priority, description, done: false, } } fn display(&self) { println!( "Tâche: {}. Priorité: {} Description: {}", self.name, self.priority, self.description ) } fn task_done(&mut self) { if !self.done { println!("La tâche {} à été effectué, bravo !", self.name); self.done = true; } else { println!("La tâche {} à déjà été effectué.", self.name); } } } struct TodoList { list_tasks: Vec, } impl TodoList { fn new() -> TodoList { TodoList { list_tasks: Vec::new(), } } fn create_task(&mut self, name: String, priority: usize, description: String) { let task = Task::new(name, priority, description); self.list_tasks.push(task); } fn delete(&mut self, number: usize) { self.list_tasks.remove(number); } fn list(&self) { for (i, task) in self.list_tasks.iter().enumerate() { println!("{}: {} - Priorité: {}", i, task.name, task.priority); } } fn save(&self) { let mut output = String::new(); for (i, task) in self.list_tasks.iter().enumerate() { output.push_str(&format!( "{},{},{},{}\n", task.name, task.priority, task.description, task.done )); } fs::write("tasks.txt", output).expect("Could not save"); } fn load() -> TodoList { match fs::read_to_string("tasks.txt") { Ok(content) => { let mut list = TodoList::new(); for line in content.lines() { let parts: Vec<&str> = line.split(',').collect(); if parts.len() == 4 { let name = parts[0].to_string(); let priority: usize = parts[1].parse().expect("Bad priority"); let description = parts[2].to_string(); let done: bool = parts[3].parse().expect("Bad done value"); let mut task = Task::new(name, priority, description); task.done = done; list.list_tasks.push(task); } } list } Err(_) => TodoList::new(), } } } fn main() { println!("Bienvenue dans le menu de la ToDoList APP !"); let mut s1 = TodoList::load(); loop { println!("\n--- ToDoList APP ---"); println!("Voici la liste des tâches"); s1.list(); println!( "Vous pouvez; \n Pressez 1 pour créer une tâche.\n Pressez 2 pour supprimer une tâche \n Pressez 3 pour revoir la liste de tâche.\n Et écrire quit pour quitter l'application" ); let mut input = String::new(); io::stdin().read_line(&mut input).expect("Failed to read"); let input = input.trim(); if input == "1" { let mut input2 = String::new(); println!("Créons une tâche, veuillez entrer: Le nom de la tâche"); io::stdin().read_line(&mut input2).expect("Failed to read"); let input2 = input2.trim(); let TacheName = input2; println!( "Créons une tâche, veuillez entrer: la priorité de cette dernière (chiffre de 1 à 5)" ); let mut input3 = String::new(); io::stdin().read_line(&mut input3).expect("Failed to read"); let input3 = input3.trim(); let priority = input3; println!("Créons une tâche, veuillez entrer: Une petite description"); let mut input4 = String::new(); io::stdin().read_line(&mut input4).expect("Failed to read"); let input4 = input4.trim(); let description = input4; s1.create_task( TacheName.to_string(), priority.trim().parse().expect("Not a number!"), description.to_string(), ); println!("La tâche à bien été crée !"); s1.list(); } if input == "2" { s1.list(); println!("Veuillez choisir une tâche à supprimer"); let mut input = String::new(); io::stdin().read_line(&mut input).expect("Failed to read"); let input = input.trim(); s1.delete(input.trim().parse().expect("Not a number !")); } if input == "3" { s1.list(); } if input == "quit" { s1.save(); break; } } }