Objectif
Mettre les listes chaînées, la manipulation de fichiers et la conception modulaire du cours dans un scénario métier réaliste, et vérifier si ces fondamentaux peuvent réellement porter un système complet.
Un système de gestion en ligne de commande écrit en C++11 qui n'utilise aucun conteneur de la bibliothèque standard : véhicules, clients et locations sont tous organisés en listes simplement chaînées, les données sont persistées dans des fichiers binaires, et le programme offre des synthèses statistiques, des histogrammes ASCII et un journal des opérations.
Le système s'articule autour de sept modules — informations sur les véhicules, clients, location et retour, requêtes, statistiques et paramètres système. Chaque structure de données est une liste simplement chaînée écrite à la main ; aucun vector ni map n'est utilisé. Les données sont écrites sur disque dans un format binaire personnalisé qui se restaure intégralement après redémarrage.
Mettre les listes chaînées, la manipulation de fichiers et la conception modulaire du cours dans un scénario métier réaliste, et vérifier si ces fondamentaux peuvent réellement porter un système complet.
Le programme s'articule autour de car_rent.cpp, qui rassemble toutes les constantes, structures, opérations sur listes et logique métier, tandis que sept modules de menu fournissent les points d'entrée. Les sous-modules sont inclus via #include, si bien que la compilation ne traite que main.cpp comme unité de traduction.
C++11 avec constexpr et nullptr, dépendant uniquement de cstdio, cstdlib, cstring et ctime ; les builds Make et CMake sont pris en charge ; l'interface et les commentaires sont en chinois, encodés en UTF-8.
Il s'agit d'un projet de cours en ligne de commande, et les données résident dans des fichiers locaux plutôt que dans une base de données. L'accès concurrent et les scénarios multi-utilisateurs sortent de son périmètre.
De la maintenance des données aux transactions métier, en passant par les statistiques et l'administration, les modules sont reliés par des données de liste partagées.
Créer, modifier, supprimer et consulter les fiches de véhicules, en tenant à jour les données de base des voitures louables.
Tenir à jour les informations des locataires, auxquelles les opérations de location et de retour se réfèrent ensuite.
Traiter les opérations de location et de retour, en validant l'état du véhicule et en mettant à jour les deux côtés de l'enregistrement.
Les requêtes catégorielles et la recherche floue localisent rapidement les enregistrements par véhicule, client ou critère de transaction.
Grouper et synthétiser par dimension, restitué en histogrammes ASCII pour que la distribution des données saute aux yeux.
Gestion du mot de passe et de la connexion, export de rapports, journal des opérations et effacement des données complètent l'administration.
Le projet fait des compromis réfléchis sur les structures de données et la persistance.
Chaque nœud est alloué avec new et libéré avec delete ; l'insertion, la suppression et le parcours sont écrits à la main, ce qui constitue un exercice complet sur les listes et les pointeurs.
Les données sont écrites dans un agencement binaire personnalisé et restaurées selon le même agencement à la lecture, ce qui évite le coût et l'ambiguïté de l'analyse textuelle.
Les dates, identifiants et enregistrements en double sont vérifiés, afin qu'une saisie invalide ne puisse corrompre la structure de liste ni les statistiques.
La logique centrale tient dans un seul fichier cpp, les sous-modules étant inclus par #include, ce qui facilite une lecture ligne à ligne lors de l'évaluation du cours.
Les histogrammes sont dessinés avec de simples caractères plutôt qu'avec une bibliothèque graphique, si bien que les statistiques s'affichent même en environnement purement textuel.
Les actions clés laissent une trace, ce qui facilite la traçabilité des modifications de données.