Énoncé du Problème 1
Une entreprise souhaite mettre en place un système de gestion de stock pour faciliter la
gestion de ses produits dans différents magasins. Ce système doit permettre de gérer les
produits, les magasins où ces produits sont disponibles, ainsi que leur catégorie et leur
quantité.
Vous devez concevoir et implémenter les classes nécessaires pour gérer les produits et les
magasins. Le système doit permettre les fonctionnalités suivantes :
1. Classe Produit : Représente un produit dans le système de gestion de stock.
Chaque produit a un nom, une référence unique, un prix, une catégorie et une
quantité disponible.
● Attributs :
● nom (String) : le nom du produit.
● reference (String) : une référence unique pour le produit.
● prix (double) : le prix du produit (doit être positif).
● categorie (String) : la catégorie du produit.
● quantite (int) : la quantité disponible du produit.
● nbProduits (int) : un attribut statique qui compte le nombre total de produits
instanciés.
● Méthodes :
● Un constructeur pour initialiser les attributs, qui s'assure que le prix est positif
; sinon, une exception doit être levée.
● Un constructeur par recopie qui prend un objet Produit en paramètre et copie
ses attributs.
● getReference() : retourne la référence du produit.
● getQuantite() : retourne la quantité du produit.
● decrementerQuantite() : décrémente la quantité de 1.
● afficherNbProduits() : méthode statique qui affiche le nombre total de produits
instanciés.
2. Classe Magasin : Représente un magasin qui vend des produits. Chaque magasin
a un nom, une liste de produits disponibles et une liste des ventes.
● Attributs :
● nom (String) : le nom du magasin.
● produits : une liste de produits disponibles dans le magasin.
● ventes : une liste des produits vendus dans le magasin.
● Méthodes :
● Un constructeur pour initialiser les attributs.
● rechercherProduit(String reference) : recherche un produit par sa référence et
retourne le produit correspondant, ou null si le produit n'est pas trouvé.
● ajouterProduit(Produit p) : recherche un produit par référence et ajoute le
produit à la liste uniquement s'il n'existe pas déjà.
● supprimerProduit(String reference) : recherche un produit par référence et
supprime le produit de la liste s'il existe.
● vendreProduit(String reference) : recherche un produit par référence et
décrémente sa quantité s'il existe et que la quantité est supérieure à zéro. En
cas de vente réussie, ajoute le produit à la liste des ventes.
● afficherProduits() : affiche la liste des produits disponibles dans le magasin,
ainsi que leur quantité.
● afficherProduitsVendus() : affiche la liste des produits qui ont été vendus dans
le magasin.
● getNbProduits() : retourne le nombre de produits dans le magasin.
● getTotalVentes() : retourne le nombre total de produits vendus dans le
magasin.
3. Classe Entrepôt : Représente la gestion globale du stock, incluant plusieurs
magasins. Cette classe permet de gérer les magasins, de comparer leurs produits et
de gérer les ventes.
● Attributs :
● nom (String) : le nom de la gestion de stock.
● magasins (ArrayList<Magasin>) : une liste de magasins gérés.
● Méthodes :
● Un constructeur pour initialiser les attributs.
● ajouterMagasin(Magasin m) : ajoute un magasin à la gestion de stock.
● comparerMagasinsParProduit(Magasin m1, Magasin m2) : comparer deux
magasins en fonction du nombre de produits qu'ils ont disponibles et afficher
celui qui a le plus de produits, ou indiquer s'ils ont le même nombre de
produits.
● comparerMagasinsParVente(Magasin m1, Magasin m2) : comparer deux
magasins en fonction du nombre total de produits vendus et afficher celui qui
a vendu le plus de produits, ou indiquer s'ils ont vendu le même nombre de
produits.
4. Classe TestProgramme : Classe utilisée pour tester les fonctionnalités des autres
classes. Permet de créer des instances de produits et de magasins, d'ajouter,
supprimer ou vendre des produits, et tester les méthodes de recherche.
5. Fonctionnalités
● Créez des instances de produits en utilisant différents types de constructeurs.
● Créez des instances de magasins et essayez d'ajouter, supprimer ou vendre des
produits.
● Créez des instances d’entrepôt et ajoutez-y des magasins.
● Comparez les magasins en utilisant les méthodes comparerMagasinsParProduit et
comparerMagasinsParVente. afficher le résultat de ces comparaisons.
Exigences Techniques
● Respectez le principe d’encapsulation lors de la définition des classes.
● Utilisez des collections pour gérer les listes de produits et de magasins.
● Assurez-vous que le code est bien structuré, commenté et suit les bonnes pratiques
de programmation.
Énoncé du Problème 2
On souhaite créer un système de réservation de vols pour une compagnie aérienne.
1. Créer la classe Passager qui possède trois attributs privés : un nom (String),
un prénom (String) un numéro de passeport (un entier long), un attribut
statique nbPassager (int). Ajouter les méthodes suivantes :
● Un constructeur avec paramètres
● Une méthode getNumP() qui retourne le numéro du passeport
● Une méthode statique pour afficher nombre de passagers instanciés
● Un destructeur
2. Créer la classe Aéroport qui possède deux attributs privés : un code (String), un nom
(String). Ajouter les méthodes suivantes :
● Un constructeur avec paramètres
3. Créer la classe Vol qui possède cinq attributs privés : un numéro (String), un aéroport
de départ (Aeroport), un aéroport d’arrivée (Aeroport), une capacité maximale de
passagers (int) et une liste de passagers (ArrayList). Ajouter à cette classe :
● Un constructeur avec paramètres
● Une méthode getNumVol() qui retourne le numéro du vol
● Une méthode ajouterPassager(Passager p) qui ajoute un passager à un vol.
● Une méthode supprimerPassager(long passport) qui supprime un passager
● Une méthode getPlacesDisponibles() qui retourne le nombre de places disponibles
pour un vol
4. Créer la classe compagnie aérienne qui possède deux attributs privés : un nom
(String) et une liste de vols (ArrayList).
5. Ajouter les méthodes suivantes :
Un constructeur avec paramètre
● Une méthode ajouterVol(Vol v) qui ajoute un vol pour une compagnie
● Une méthode rechercherVol(String numero) qui affiche le nombre de places
disponibles pour le numéro du vol. Sinon elle affiche le message « pas de vol ».
● Une méthode statique comparerCompagnies(…) pour comparer deux compagnies
aériennes. Elle retourne le nom de la compagnie qui a assuré le nombre maximal de
vols. C’est à vous de déterminer les paramètres de cette méthode.
6. Créer une classe de test qui permet :
● Créer deux objets passagers.
● Afficher le nombre de passagers
● Créer deux objets aéroports.
● Créer un objet vol.
● Créer deux compagnies aériennes.
● Ajouter le vol à une compagnie aérienne créée.
● Comparer les deux compagnies créées