Added save and load option
This commit is contained in:
119
src/main.rs
119
src/main.rs
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user