TP1 Gestionnaire d'Inventaire Personnel (IOU)
Description
Ce projet consiste à développer un gestionnaire d'inventaire personnel (IOU - "I Owe You") pour organiser et suivre vos biens. Vous devrez définir et implémenter au moins trois catégories d'objets (par exemple: outils, livres, jeux, meubles) avec des attributs spécifiques à chaque catégorie.
Fonctionnalités Principales
- Gestion de fichiers multiples : Possibilité de créer et gérer plusieurs fichiers d'inventaire distincts.
- Catégories d'objets personnalisées : Définition d'au moins trois types d'objets avec leurs propres caractéristiques.
- Attributs communs pour chaque type d'objet :
- Nom ou Titre (Boîte de texte)
- Prix (Float ou décimal)
- Date d'achat (Calendrier)
- Description : Générée dynamiquement en fonction du type d'objet via une méthode toString() personnalisée.
- Facture (Path) : Sélection via FileChooser, image copiée dans le sous-répertoire "images/" et affichée (ImageView) uniquement dans les vues de création et de modification.
- Emplacement (ComboBox éditable) : "Moi" par défaut, possibilité d'ajouter des noms de personnes.
- État (Enum) : En ma possession, Prêté, Perdu, Vendu, Volé, Doné.
- Attributs spécifiques aux catégories :
- Chaque catégorie d'objet aura des attributs supplémentaires pertinents:
- auteur et éditeur pour les livres,
- marque et modèle pour les outils,
- âge recommandé et nombre de joueurs pour les jeux.
- Les interfaces d'ajout et de modification s'adapteront aux attributs de chaque catégorie en fonction du choix. Lors de la création d'un item, l'utilisateur doit choisir entre les 3 catégories avant l'insertion. Une fois inséré, le type d'objet est immuable (ne peut plus changer)
- Utilisation de divers composants d'interface : Chaînes de caractères, nombres (entiers et flottants), sélecteurs de date, listes déroulantes, listes.
- Chaque catégorie d'objet aura des attributs supplémentaires pertinents:
- Recherche : Recherche par mot-clé dans la description générale et/ou parmi les attributs spécifiques des objets.
- Filtres :
- Type d'objet (utilisation d'Enum).
- Date d'achat : range (utilisation de deux DatePicker pour date min et date max).
- Prix : range (prix minimum et prix maximum).
- État (utilisation d'Enum).
Menu Fichier
- Nouveau : Création d'un nouveau fichier .dat vide.
- Ouvrir : Ouverture d'un fichier .dat existant avec gestion des erreurs d'importation.
- Sauvegarder : Sauvegarde des modifications dans le fichier .dat actuel (sérialisation Java native).
- Sauvegarder sous : Sauvegarde dans un nouveau fichier .dat avec confirmation en cas d'écrasement.
- Exporter : Exportation des données au format JSON (.txt).
- Gestion des images de factures : Stockage des images dans un sous-répertoire "images/" du répertoire du fichier .dat.
Menu Édition
- Nouveau : Ajouter un nouvel objet à l'inventaire.
- Modifier : Modifier l'objet sélectionné.
- Supprimer : Supprimer l'objet sélectionné (avec confirmation).
Note : Ces actions doivent aussi être accessibles via des boutons dans l'interface principale.
Précisions techniques
Interface principale
- Affichage de la liste : Utiliser une TableView avec les colonnes suivantes : Type, Nom, Prix, Date d'achat, État.
- Organisation :
- Liste des objets à gauche ou en haut
- Panneau d'ajout/modification à droite ou en bas (dans le même écran)
- Filtres et recherche visibles dans l'interface
- État au démarrage : L'application charge automatiquement le dernier fichier ouvert (si applicable).
Actions utilisateur
- Ajout/Modification/Suppression :
- Accessible via des boutons dans l'interface (Nouveau, Modifier, Supprimer)
- Accessible via le menu Édition (Nouveau, Modifier, Supprimer)
- Ajout et modification : Se font dans le même écran avec un panneau dédié qui s'affiche.
- Suppression : Toujours demander une confirmation via une Alert avant de supprimer un objet.
Validation des données
- Champs obligatoires : Empêcher la validation si des champs sont vides.
- Validation :
- Prix : ne peut pas être négatif
- Date : vérification de format valide
- Afficher des messages d'erreur clairs en cas de saisie invalide
Gestion des erreurs
- Image de facture introuvable : Afficher une image par défaut (placeholder) si le fichier image n'existe plus au chargement.
- Erreur d'importation : Afficher un message d'erreur clair si le fichier .dat est corrompu ou incompatible.
Export JSON
- Le fichier .txt exporté doit contenir un tableau JSON avec tous les objets de l'inventaire.
- Structure libre, mais doit inclure tous les attributs de chaque objet.
Caractéristiques personnalisables
-
Identification différente et vues dédiées :
- Chaque type d'objet (livre, outil, jeu, etc.) aura ses propres attributs spécifiques.
- L'interface d'affichage, d'insertion et de modification de chaque type d'objet sera gérée par une classe "View" dédiée (par exemple,
BookView,ToolView,GameView). - Ces classes "View" seront des classes instanciables (pas de méthodes statiques) qui construisent l'interface selon un mode de fonctionnement.
- Utilisation :
- Lecture seule :
new BookView(existingBook, ViewMode.READ) - Création :
new BookView(null, ViewMode.CREATE) - Modification :
new BookView(existingBook, ViewMode.EDIT)
- Lecture seule :
- Vous devez au minimum avoir des Strings, Nombres (entier ou flottant), DatePicker, des ComboBox, des ListView dans votre interface parmi les propriétés intégrées ou ajoutées.
-
Séparation des préoccupations :
- Les classes Modèles (par exemple,
Book,Tool,Game) contiendront uniquement les données et la logique métier. - Les classes Vues contiendront uniquement la logique d'affichage et de saisie.
- Les classes Modèles (par exemple,
-
Respect des normes de programmation :
- Noms de variables et de méthodes significatifs.
- Commentaires pour expliquer les décisions de conception et les fonctionnalités.
- Gestion des erreurs et des exceptions.
- https://github.com/Singcaster-CRLJ/CLJ/blob/main/Documents/Normes.md
Obligation
- Je ne veux pas d'ArrayList pour l'inventaire. Vous en aurez peut-être quelquefois besoin dans certains emplacements de votre code.
- Vous devez utiliser des array [] pour votre programmation, je veux que les tableaux s'agrandissent à la hauteur de 10 espaces à la fois. Je veux que ce soit invisible pour l'utilisateur autant que possible : l'interface ne doit pas afficher de lignes vides dans la ListView.
- Si vous supprimez des éléments ça ne réduit pas l'array, mais ça retire l'élément et décale les autres. On ne garde pas d'élément vide dans le tableau.
- Il n'y a pas de tri dans l'application, cependant certains éléments d'interface de JavaFX peuvent vous permettre de trier les éléments, je ne validerai pas cette fonctionnalité, mais lâchez-vous lousse si vous avez envie.
- La sauvegarde est optimisée, ne sauvegarde pas d'array avec des lignes vides.
- On crée nos interfaces nous mêmes sans l'utilisation de FXML.
- Gestion des images : Lorsqu'une facture (image) est sélectionnée via FileChooser, le fichier doit être copié dans le sous-répertoire
images/du dossier contenant le fichier .dat. Stockez uniquement le nom du fichier (pas le chemin complet) dans l'objet.
Suggestion pour la livraison du projet:
Gestion des données
Tel que dit en classe, je suggère que vous commenciez en codant TOUTES les méthodes nécessaires pour la gestion de l'inventaire.
Tests unitaires des données
Tester toute la logique de votre application avec vos tests unitaires :
- Opérations CRUD sur l'array :
- Ajout d'objets (vérifier l'agrandissement de l'array par blocs de 10)
- Lecture/recherche d'objets
- Modification d'objets existants
- Suppression d'objets (vérifier le décalage sans laisser d'éléments vides)
- N'hésitez pas à tester avec 10, 100, 1000, 10000 objets pour valider la robustesse.
- Sérialisation :
- Sauvegarde et chargement d'un fichier .dat
- Vérifier que les tableaux sauvegardés ne contiennent pas d'éléments vides
- Filtres et recherche :
- Filtrer par type, prix, date, état
- Recherche par mot-clé
Connexion interface graphique
Quand vous êtes certains que votre backend est parfait, vous vous concentrerez sur la connexion (par l'entremise des méthodes que vous avez créées) à votre frontend.
Donc en étape:
1- Classe Inventaire 2- Tests unitaires 3- Interface JavaFX
Exemples d'interface
Voici des captures d'écran d'une application fonctionnelle pour vous guider :
Écran principal

Ajout d'objets




Modification

Évaluation
| Critère | Valeur |
|---|---|
| Affichage des données | 10 |
| Personnalisation des objets | 10 |
| Gestion de l'inventaire (CRUD) | 10 |
| Filtres, recherche | 10 |
| Sérialisation et gestion de fichiers | 10 |
| Qualité de l'interface utilisateur | 10 |
| Respect des normes de programmation | 10 |
| Tests unitaires | 5 |
| Total | 75 |
Vidéo
Vous devrez réaliser une vidéo d'environ 5 minutes qui montre le fonctionnement de votre application :
- Ajout pour chaque type d'objet (points d'arrêt pour voir l'array et les éléments insérés)
- Montrer la recherche
- Montrer les filtres (tous les types de filtres)
- Modification des trois objets précédemment entrés (points d'arrêt pour les éléments modifiés)
- Montrer le changement dans les filtres
- Démonstration de la sauvegarde et du chargement d'un fichier .dat
- Démonstration de l'export JSON
Format : MP4
Livrables
Vous devez remettre les éléments suivants :
- Code source complet : Projet avec tous les fichiers sources (.java)
- Vidéo de démonstration : Format MP4, environ 5 minutes
- Tests unitaires : Classes de tests avec toutes les méthodes de test
- Fichier .dat d'exemple : Contenant au moins 10 objets de types variés
- Images d'exemple : Quelques images de factures dans le dossier images/
Date de remise : 20 mars 2026