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. |
read | Affiche 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
Code | Signification |
---|---|
0 | Succès |
1 | Erreur (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 |
---|---|
id | int |
nouveau_titre | string |
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ètre | Type |
---|---|
id | int |
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)
.
10. Commande search
10.1 Description
La commande search
recherche une tâche par ID et affiche ses détails.
10.2 Syntaxe
./todo search <ID>
10.3 Paramètres
id : entier identifiant la tâche.
10.4 Exemple d'utilisation
$ ./todo search 2 ═══ Task Details ═══ ID: 2 Title: Appeler le dentiste Status: ✓ Completed ═══════════════════
10.5 Fonction interne associée
Fonction : void Search(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 |
---|---|---|
Id | int | Identifiant unique |
Title | string | Titre de la tâche |
Completed | bool | Statut 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 |
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
Code | Signification |
---|---|
0 | Succès |
1 | Erreur générale (commande inconnue, arguments manquants, échec écriture) |
16. Dépannage
Problème | Cause possible | Solution |
---|---|---|
Aucune commande fournie | Lancement sans argument | Utiliser une commande valide, par ex. ./todo read |
Impossible d’ouvrir output.json en écriture | Permissions insuffisantes ou disque plein | Vérifier les permissions, exécuter avec privilèges appropriés |
ID introuvable | ID non présent dans JSON | Vérifier via ./todo read et utiliser un ID valide |