From 4a7048aef407999c3a5351f38728d32c913b4166 Mon Sep 17 00:00:00 2001 From: medina5 Date: Thu, 20 Nov 2025 18:46:25 +0100 Subject: [PATCH] Correction TD 6 --- Home.md | 2 +- build/Debug/outDebug | Bin 0 -> 43104 bytes build/Debug/td3.o | Bin 0 -> 60952 bytes td5.md | 6 +++ td6.correction.md | 97 +++++++++++++++++++++++++++++++++++++++++++ td6.md | 86 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 190 insertions(+), 1 deletion(-) create mode 100755 build/Debug/outDebug create mode 100644 build/Debug/td3.o create mode 100644 td6.correction.md diff --git a/Home.md b/Home.md index 16d80e4..ca4f833 100644 --- a/Home.md +++ b/Home.md @@ -72,7 +72,7 @@ Sa syntaxe de base a inspiré de nombreux langages plus récents dont C++, Java - [Travaux dirigés 3](td3) : Calculer la moyenne et la variance d'une série de données contenues dans un fichier. - [Travaux dirigés 4](td4) : Prendre un fichier en entrée et le séparer en plusieurs fichiers. - [Travaux dirigés 5](td5) : -- [Travaux dirigés 6](td6) : +- [Travaux dirigés 6](td6) : Application bancaire en C (fichiers binaires) ### Remarques diff --git a/build/Debug/outDebug b/build/Debug/outDebug new file mode 100755 index 0000000000000000000000000000000000000000..0d881f0c3b3604cd750ca060b4917a30b8866a92 GIT binary patch literal 43104 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 literal 0 HcmV?d00001 diff --git a/td5.md b/td5.md index cee1e95..1ef6e7f 100644 --- a/td5.md +++ b/td5.md @@ -28,3 +28,9 @@ Ajouter plus de ligne pour voir la diff entre float et int float plus de capacité mais moins précis Structure pour stat Fonctions avec pointeur +### Reprise du TD 4 pour le rendre dynamique + +Le format n'est pas connu à l'avance il va falloir lire caractères par caractères pour trouver le nombre de colonnes. + + +### Reprise du TD 3 pour spécifier le nom du fichier en entrée. diff --git a/td6.correction.md b/td6.correction.md new file mode 100644 index 0000000..765132b --- /dev/null +++ b/td6.correction.md @@ -0,0 +1,97 @@ +💾 **Structure suggérée :** + +```c +typedef struct { + int id; // identifiant unique + char nom[30]; + char prenom[30]; + char date_naissance[11]; // "JJ/MM/AAAA" + double solde; +} Compte; +``` + +```c +typedef struct { + int compte_id; // lien avec le compte + char type; // 'D' ou 'R' + double montant; + char date[20]; // horodatage ou saisie manuelle +} Operation; +``` + +## Contraintes techniques + +* Le programme doit être en **langage C standard (C99 ou C11)**. +* Utiliser des **structures** et des **fichiers binaires** (`fwrite`, `fread`). +* Le menu doit être **interactif** : + + * Vous pouvez utiliser **ncurses** ou simplement des entrées clavier avec `scanf` et `printf`. +* Une attention particulière sera portée à : + + * la **gestion des erreurs** (fichiers, saisie utilisateur, doublons), + * la **lisibilité du code** (fonctions, indentation, commentaires), + * la **persistance des données** entre deux exécutions. + +--- + +## Étapes suggérées + +| Étape | Objectif | +| ----- | ----------------------------------------------------- | +| 1 | Créer les structures `Compte` et `Operation` | +| 2 | Lire et écrire des comptes dans un fichier binaire | +| 3 | Ajouter la gestion du menu principal | +| 4 | Implémenter la création de compte | +| 5 | Implémenter l’ajout d’opérations (dépôt/retrait) | +| 6 | Implémenter la consultation des soldes et historiques | +| 7 | Améliorer l’interface (clear screen, couleurs, etc.) | + +--- + +## Pistes d’amélioration (pour les plus avancés) + +* Trier les comptes par solde ou par nom. +* Afficher la date/heure automatique des opérations (via `time.h`). +* Implémenter un menu navigable avec **ncurses**. +* Exporter les comptes vers un fichier texte CSV pour visualisation externe. + +--- + +## Livrables + +* Fichier source : `banque.c` +* Fichiers de données : `comptes.dat`, `operations.dat` +* Rapport ou README décrivant : + + * les structures utilisées, + * les fonctions principales, + * les choix d’implémentation. + +--- + +## 🔧 Critères d’évaluation + +| Critère | Points | +| ------------------------------------------------------ | ------- | +| Compilation sans erreur | 2 | +| Respect de la consigne et fonctionnalités principales | 6 | +| Qualité du code (lisibilité, modularité, commentaires) | 4 | +| Gestion des erreurs et cohérence des données | 3 | +| Interface utilisateur claire et fonctionnelle | 3 | +| Total | **/18** | + +--- + +Souhaite-t-il que je rédige aussi un **squelette de code de départ** (avec les menus et la structure générale du programme) que les étudiants pourront compléter ? Cela permettrait de démarrer le TP plus facilement. + + +``` +sudo apt install libncurses5-dev libncursesw5-dev +``` + + +Compilation d’un programme utilisant ncurses + +```shell +$ gcc main.c -lncurses -o banque +``` diff --git a/td6.md b/td6.md index 8b34996..2b15ef5 100644 --- a/td6.md +++ b/td6.md @@ -32,6 +32,56 @@ Au lancement, l’application affiche un **menu textuel** similaire à celui-ci Votre choix : _ ``` +Utilisation de `ncurses` qui est une bibliothèque qui donne un peu plus de contôle sur l'affichage que le simple `printf`. + +```c +#include +#include + +int main() { + + initscr(); // Initialise ncurses + noecho(); // Masque la saisie clavier + curs_set(FALSE); // Cache le curseur + + // boucle infinie + for(;;) { + menu_principal(); + + int choix; + choix = getch(); // Attend une touche + + if (choix == '4') { + break; // sortir de la boucle infinie + } + } + + endwin(); + return 0; +} +``` + +```c +void menu_principal() { + + clear(); + mvprintw(0, 0, "===================================="); + mvprintw(1, 0, " Application Bancaire (Votre Nom) "); + mvprintw(2, 0, "===================================="); + mvprintw(3, 0, "1. Créer un compte"); + mvprintw(4, 0, "2. Enregistrer une opération"); + mvprintw(5, 0, "3. Lister les comptes"); + mvprintw(6, 0, "4. Quitter"); + mvprintw(7, 0, "------------------------------------"); + mvprintw(8, 0, "Votre choix : _"); + +} +``` + +- `mvprintw` : move print, le curseur à ligne et à la colonne indiquées et écrit du texte à la manière de `printf`. A la différence que `printf` écrit à la suite et ne permet pas de contrôler le positionnement. +- `clear` : efface complètement l'écran. + + ### Création de compte * Le programme demande : @@ -58,6 +108,42 @@ Date de naissance : ------------------------------------ ``` +Afficher + +```c +void menu_creationcompte() { + + mvprintw(3, 0, "Nom : "); clrtoeol(); + mvprintw(4, 0, "Prenom : "); clrtoeol(); + mvprintw(5, 0, "Date de naissance : "); clrtoeol(); + move(6, 0); clrtoeol(); + + echo(); + curs_set(TRUE); + + move(3, 6); + getstr(compte.nom); + + move(4, 9); + getstr(compte.prenom); + + do { + move(5, 20); clrtoeol(); + getstr(compte.naissance); + + } while (verif_date(compte.naissance) == 0); + + if (verif_compte(compte.nom, compte.prenom) == 1) { + FILE *fichier = fopen("comptes.dat", "ab"); + fwrite(&compte, sizeof(Compte), 1, fichier); + fclose(fichier); + } else { + mvprintw(10, 0, "Cette personne existe deja"); + getch(); + } +} +``` + ### Enregistrement d’opération * L’utilisateur choisit un compte existant.