Added save and load option

This commit is contained in:
Dek
2026-04-15 00:26:21 +02:00
parent 3251fc436b
commit 8571ce326b
2 changed files with 111 additions and 67 deletions

View File

@@ -1,78 +1,114 @@
use std::vec; use std::fs;
use std::io; use std::io;
struct Task{ struct Task {
name: String, name: String,
priority: usize, priority: usize,
description: String, description: String,
done: bool, done: bool,
} }
impl Task{ impl Task {
fn new(name: String, priority: usize, description: String)-> Task{ fn new(name: String, priority: usize, description: String) -> Task {
Task{name,priority,description, done: false} Task {
name,
priority,
description,
done: false,
} }
fn display(&self){ }
println!("Tâche: {}. fn display(&self) {
println!(
"Tâche: {}.
Priorité: {} Priorité: {}
Description: {}", self.name, self.priority,self.description) Description: {}",
self.name, self.priority, self.description
)
} }
fn task_done(&mut self){ fn task_done(&mut self) {
if !self.done{ if !self.done {
println!("La tâche {} à été effectué, bravo !", self.name); println!("La tâche {} à été effectué, bravo !", self.name);
self.done = true; self.done = true;
} } else {
else{
println!("La tâche {} à déjà été effectué.", self.name); println!("La tâche {} à déjà été effectué.", self.name);
} }
} }
} }
struct TodoList{ struct TodoList {
list_tasks: Vec<Task>, list_tasks: Vec<Task>,
} }
impl TodoList{ impl TodoList {
fn new()->TodoList{ fn new() -> TodoList {
TodoList { list_tasks: Vec::new() } TodoList {
list_tasks: Vec::new(),
} }
fn create_task(&mut self,name: String, priority: usize, description: String){ }
fn create_task(&mut self, name: String, priority: usize, description: String) {
let task = Task::new(name, priority, description); let task = Task::new(name, priority, description);
self.list_tasks.push(task); self.list_tasks.push(task);
} }
fn add(&mut self, task: Task){ fn delete(&mut self, number: usize) {
self.list_tasks.push(task);
}
fn delete(&mut self, number: usize){
self.list_tasks.remove(number); self.list_tasks.remove(number);
} }
fn list(&self){ fn list(&self) {
for (i,task) in self.list_tasks.iter().enumerate(){ for (i, task) in self.list_tasks.iter().enumerate() {
println!("{}: {} - Priorité: {}", i, task.name, task.priority); 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() { fn main() {
println!("Bienvenue dans le menu de la ToDoList APP !"); println!("Bienvenue dans le menu de la ToDoList APP !");
let mut s1 = TodoList::new(); let mut s1 = TodoList::load();
loop{ loop {
println!("\n--- ToDoList APP ---"); println!("\n--- ToDoList APP ---");
println!("Voici la liste des tâches"); println!("Voici la liste des tâches");
s1.list(); 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"); 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(); let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read"); io::stdin().read_line(&mut input).expect("Failed to read");
let input = input.trim(); let input = input.trim();
if(input=="1") { if input == "1" {
let mut input2 = String::new(); let mut input2 = String::new();
println!("Créons une tâche, veuillez entrer: Le nom de la tâche"); println!("Créons une tâche, veuillez entrer: Le nom de la tâche");
io::stdin().read_line(&mut input2).expect("Failed to read"); io::stdin().read_line(&mut input2).expect("Failed to read");
let input2 = input2.trim(); let input2 = input2.trim();
let TacheName = input2; let TacheName = input2;
println!("Créons une tâche, veuillez entrer: la priorité de cette dernière (chiffre de 1 à 5)"); println!(
"Créons une tâche, veuillez entrer: la priorité de cette dernière (chiffre de 1 à 5)"
);
let mut input3 = String::new(); let mut input3 = String::new();
io::stdin().read_line(&mut input3).expect("Failed to read"); io::stdin().read_line(&mut input3).expect("Failed to read");
let input3 = input3.trim(); let input3 = input3.trim();
@@ -82,11 +118,15 @@ fn main() {
io::stdin().read_line(&mut input4).expect("Failed to read"); io::stdin().read_line(&mut input4).expect("Failed to read");
let input4 = input4.trim(); let input4 = input4.trim();
let description = input4; let description = input4;
s1.create_task(TacheName.to_string(), priority.trim().parse().expect("Not a number!"), description.to_string()); s1.create_task(
TacheName.to_string(),
priority.trim().parse().expect("Not a number!"),
description.to_string(),
);
println!("La tâche à bien été crée !"); println!("La tâche à bien été crée !");
s1.list(); s1.list();
} }
if(input=="2"){ if input == "2" {
s1.list(); s1.list();
println!("Veuillez choisir une tâche à supprimer"); println!("Veuillez choisir une tâche à supprimer");
let mut input = String::new(); let mut input = String::new();
@@ -94,9 +134,12 @@ fn main() {
let input = input.trim(); let input = input.trim();
s1.delete(input.trim().parse().expect("Not a number !")); s1.delete(input.trim().parse().expect("Not a number !"));
} }
if(input =="3"){ if input == "3" {
s1.list(); s1.list();
} }
if input == "quit" {
} s1.save();
break;
}
}
} }

1
tasks.txt Normal file
View File

@@ -0,0 +1 @@
EHEHEH,1,EHHEHEHEH,false