TODO Manager — Docs

1. Introduction

1.1 Description générale

Cette application est un gestionnaire de tâches (TODO) en ligne de commande écrit en C++. Elle permet de créer, lire, mettre à jour, supprimer, rechercher et basculer le statut « terminé » des tâches, en stockant les données dans un fichier JSON (output.json).

1.2 Caractéristiques principales

Fonctionnalité Description
Création de tâche Ajoute une tâche avec un ID auto-incrémenté.
Lecture (read) Affiche toutes les tâches présentes dans le JSON.
Mise à jour (update) Modifie le titre d’une tâche donnée son ID.
Suppression (delete) Supprime la tâche ayant l’ID spécifié.
Toggle (check) Inverse l’état “Completed” d’une tâche.
Recherche (search) Affiche les détails d’une tâche selon son ID.

1.3 Technologies utilisées

Composant Détails
Langage C++
Bibliothèque JSON nlohmann/json
Stockage output.json

2. Installation

2.1 Prérequis système

Composant Requis Notes
Compilateur C++ g++ (GNU) Version ≥ 7 recommandée pour support C++11
Bibliothèque JSON nlohmann/json Installer via gestionnaire ou manuellement
Système Linux / macOS / Windows (WSL) Testé sur Linux/macOS

2.2 Installation de nlohmann/json

Ubuntu (via apt)

sudo apt update
sudo apt install nlohmann-json3-dev

macOS (Homebrew)

brew install nlohmann-json

Installation manuelle (single header)

# Télécharger depuis GitHub 
# Copier include/nlohmann/json.hpp dans votre dossier include

3. Compilation

3.1 Compilation de base

g++ -std=c++11 main.cpp -o todo

3.2 Compilation avec optimisations

g++ -std=c++11 -O2 -Wall main.cpp -o todo

3.3 Options de compilation

Option Description
-std=c++11 Active le standard C++11 requis
-O2 Optimisations pour les performances
-Wall Active les avertissements
-o <nom> Définit le nom du binaire

4. Utilisation générale

4.1 Syntaxe générale

./todo <commande> [arguments]

4.2 Liste des commandes

Commande Description
create <title>Crée une nouvelle tâche.
readAffiche tout le contenu JSON.
update <id> <nouveau_titre>Met à jour le titre d’une tâche.
delete <id>Supprime une tâche.
check <id>Bascule l’état Completed.
search <id>Affiche les détails d’une tâche.

5. Commande create

5.1 Description

La commande create ajoute une nouvelle tâche. L’identifiant est obtenu via la fonction getLastItemID() pour éviter les collisions.

5.2 Syntaxe

./todo create "Titre de la tâche"

5.3 Paramètres

Paramètre Type Description
title string Titre de la nouvelle tâche

5.4 Exemple d’utilisation (sortie)

$ ./todo create "Acheter du lait"
✓ Task created successfully!
  ID: 3
  Title: Acheter du lait

5.5 Valeur de retour

CodeSignification
0Succès
1Erreur (arguments manquants ou autre)

5.6 Fonction interne associée

La fonction utilisée est void Create(const Item &task, json &j).

// Create(const Item &task, json &j)
// Ajoute un élément JSON “Id”, “Title”, “Completed” et affiche confirmation

6. Commande read

6.1 Description

La commande read affiche le contenu du fichier JSON formaté, pour visualiser toutes les tâches existantes.

6.2 Syntaxe

./todo read

6.3 Paramètres

Aucun paramètre requis.

6.4 Exemple d'utilisation

$ ./todo read
════════════════════════════════
    JSON File Content
════════════════════════════════

[
    {
        "Id": 1,
        "Title": "Acheter du pain",
        "Completed": false
    },
    {
        "Id": 2,
        "Title": "Appeler le dentiste",
        "Completed": true
    }
]

6.5 Fonction interne associée

Fonction : void Read(json &j).

7. Commande update

7.1 Description

La commande update modifie le titre d’une tâche existante identifiée par son ID.

7.2 Syntaxe

./todo update <ID> "Nouveau titre"

7.3 Paramètres

Paramètre Type
idint
nouveau_titrestring

7.4 Exemple d'utilisation

$ ./todo update 1 "Acheter du pain complet"
✓ Task with ID 1 was updated successfully
  New content: Acheter du pain complet

7.5 Valeur de retour

0 si succès, 1 si erreur (ex : ID non trouvé ou arguments manquants).

7.6 Fonction interne associée

Fonction : void Update(json &j, int id, string content).

8. Commande delete

8.1 Description

La commande delete supprime la tâche ayant l’ID fourni.

8.2 Syntaxe

./todo delete <ID>

8.3 Paramètres

ParamètreType
idint

8.4 Exemple d'utilisation

$ ./todo delete 2
✓ Task with ID 2 was deleted successfully

8.5 Valeur de retour

0 si succès, 1 si erreur.

8.6 Fonction interne associée

Fonction : void Delete(json &j, int id).

9. Commande check

9.1 Description

La commande check bascule le statut Completed d’une tâche (vrai ↔ faux).

9.2 Syntaxe

./todo check <ID>

9.3 Paramètres

id : entier identifiant la tâche.

9.4 Exemple d'utilisation

$ ./todo check 1
✓ Task with ID 1 marked as Completed

$ ./todo check 1
✓ Task with ID 1 marked as Not Completed

9.5 Fonction interne associée

Fonction : void check(json &j, int id).

11. Structure des données

11.1 Structure Item (C++)

struct Item {
    int id;
    string title;
    bool completed;
    Item() : id(0), title(""), completed(false) {}
    Item(int i, const string &t, bool c) : id(i), title(t), completed(c) {}
};

11.2 Format JSON

[
  {
    "Id": 1,
    "Title": "Acheter du pain",
    "Completed": false
  },
  {
    "Id": 2,
    "Title": "Appeler le dentiste",
    "Completed": true
  }
]

11.3 Champs de données

Champ Type Description
IdintIdentifiant unique
TitlestringTitre de la tâche
CompletedboolStatut de complétion

12. Fonctions internes

Voici une table récapitulative de toutes les fonctions présentes :

Nom Description Paramètres Retour
getLastItemID() Retourne le dernier Id dans JSON (0 si vide) const json & j int
Create() Ajoute une tâche et affiche confirmation const Item & task, json & j void
Read() Affiche le JSON formaté json & j void
Update() Modifie le Title d’une tâche json & j, int id, string content void
Delete() Supprime une tâche par ID json & j, int id void
check() Bascule l’état Completed json & j, int id void
Search() Recherche et affiche tâche par ID json & j, int id void
addTask() Crée un Item & appelle Create() json & j, vector & tasks, const string & title void

13. Système de stockage

13.1 Fichier de données

Le fichier principal est output.json. Il contient un tableau JSON d’objets tâche.

13.2 Lecture au démarrage

Au démarrage, le programme tente d’ouvrir output.json. Si le fichier existe et contient un tableau, on le parse ; sinon, on initialise un tableau JSON vide.

13.3 Écriture après chaque opération

Après une commande modifiant les données (create, update, delete, check), le programme réécrit le contenu JSON via j.dump(4) dans le fichier output.json.

13.4 Gestion des erreurs

Si le fichier n'existe pas, on commence avec un tableau vide. Si l’ouverture en écriture échoue (permissions, disque plein), une erreur est affichée et le programme retourne code 1.

14. Exemples d’utilisation

14.1 Workflow complet

# 1. Compiler
g++ -std=c++11 main.cpp -o todo

# 2. Créer deux tâches
./todo create "Acheter du pain"
./todo create "Appeler le dentiste"

# 3. Lister tout
./todo read

# 4. Rechercher une tâche
./todo search 1

# 5. Mettre à jour une tâche
./todo update 1 "Acheter du pain complet"

# 6. Bascule completed
./todo check 1

# 7. Supprimer une tâche
./todo delete 2

# 8. Vérifier le fichier JSON final
./todo read
      

15. Codes d’erreur

CodeSignification
0Succès
1Erreur générale (commande inconnue, arguments manquants, échec écriture)

16. Dépannage

ProblèmeCause possibleSolution
Aucune commande fournieLancement sans argumentUtiliser une commande valide, par ex. ./todo read
Impossible d’ouvrir output.json en écriturePermissions insuffisantes ou disque pleinVérifier les permissions, exécuter avec privilèges appropriés
ID introuvableID non présent dans JSONVérifier via ./todo read et utiliser un ID valide