Exercice Java base gestion de pharmacie, tutoriel & guide de travaux pratiques en pdf.
Cet exercice a été donné en série notée une des années précédentes. Il constitue donc un bon entraînement ! Il est de niveau 3 si vous débutez avec la POO mais devrait devenir beaucoup plus accessible dès que les concepts de base sont absorbés.
Écrivez un programme orienté objets qui permet de gérer une pharmacie. La classe principale débute comme suit. Il s’agira de la compléter.
import java.util.Scanner; class Pharmacie { private static Scanner scanner = new Scanner(System.in); public static void main (String args[]) { Client[] clients = new Client[2]; Medicament[] medicaments = new Medicament[2]; clients[0] = new Client("Malfichu",0.0); clients[1] = new Client("Palichon",0.0); medicaments[0] = new Medicament("Aspiron", 20.40, 5); medicaments[1] = new Medicament("Rhinoplexil",19.15, 5); int choix; do { choix = menu(); switch (choix) { case 1 : achat(clients, medicaments); break; case 2 : approvisionnement(medicaments); break; case 3 : affichage(clients, medicaments); break; case 4: quitter(); } } while (choix < 4); } // Les méthodes utilitaires static int menu() { int choix = 0; System.out.println(); System.out.println(); System.out.println("1 : Achat de médicament"); System.out.println("2 : Approvisionnement en médicaments"); System.out.println("3 : Etats des stocks et des crédits"); System.out.println("4 : Quitter"); while ((choix != 1) && (choix != 2) && (choix != 3) && (choix != 4)) { choix = scanner.nextInt(); } return choix; } // Méthodes auxiliaires à compléter } // Autres classes à compléter
La pharmacie gère des clients et des médicaments. Un client est caractérisé par un nom et un crédit. Le crédit représente la somme que ce client doit à la pharmacie. Le crédit peut être négatif si le client a versé plus d’argent que le montant. Un médicament est caractérisé par un nom (de type String), un prix (de type double) et un stock (de type int). Les méthodes à compléter auront les caractéristiques suivantes:
- affichage(..) permet d’afficher les clients et leurs crédits respectifs ainsi que les médicaments et leurs stocks respectifs.
- approvisionner(..) permet d’approvisionner le stock d’un médicament. Le nom du médicament à approvisionner ainsi que la quantité à ajouter au stock doivent être lus depuis le terminal. Lorsque le nom du médicament est introduit, il faut vérifier qu’il s’agit bien d’un nom connu dans la liste des médicaments de la pharmacie. Le programme doit boucler jusqu’à introduction d’un nom correct. Cette procédure de vérification sera prise en charge par la méthode lireMedicament(..) décrite plus bas.
- achat(..) permet de traiter un achat fait par un client. l’achat porte sur un médicament donné dans une quantité donnée. Pour cette transaction le client paie un certain prix. Une opération d’achat aura pour effet de déduire la quantité achetée du stock du médicaments correspondant et d’augmenter le crédit du client (d’un montant équivalent au montant de l’achat moins la somme payée).
Les noms du client et du médicament doivent être lus depuis le terminal. Le programme doit boucler jusqu’à introduction de noms connus aussi bien pour les clients que les médicament. Ces procédures de vérification seront prises en charge par les méthodes lireClient et lireMedicament (voir plus bas). La quantité achetée et le montant payé sont aussi lus depuis le terminal. Ils seront supposés corrects. - quitter(..) affiche le message « programme terminé! ».
- Vous définirez une méthode auxiliaire lireClient(..) prenant comme paramètre un tableau de clients. Elle permettra de lire le nom d’un client depuis le terminal et de vérifier si ce client existe dans le tableau des clients. Dans ce cas le client sera retourné. Cette méthode doit boucler jusqu’à ce qu’un client soit trouvé. Elle sera utilisée par la méthode achat(..). Une méthode similaire, lireMedicament(..) sera fournie pour les médicaments. Elle sera utilisée par les méthodes achat(..) et approvisionnement(..).
- Vous êtes libre de définir, en plus de ces méthodes, toutes celles que vous jugerez nécessaires.
Lors de la programmation, il vous est demandé de respecter scrupuleusement les indications suivantes:
- Votre programme doit être bien modularisé à la fois sous forme de méthodes auxiliaires de la méthode main() et sous forme de classes pour les objets du programme. En particulier:
- Chaque variable et méthode doit être déclarée dans la classe la plus adaptée.
- Dans chaque classe liée à un objet, il faut utiliser le mot-clé private autant que possible. En particulier, toutes les variables d’instances seront privées.
- Votre programme doit montrer une utilisation judicieuse de tableaux aux endroits adaptés.
- la comparaison de deux chaines s1 et s2 se fera au moyen de la méthode java equals() (s1.equals(s2) retourne true si s1 et s2 sont identiques).
- Vous pouvez utiliser les méthodes scanner.nextInt(),
scanner.nextDouble() et scanner.nextLine().
Exemple d’exécution:
java Pharmacie 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 2 Nom du medicament?: Aspiron Donner la Quantité : 2 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 3 Affichage des stocks Stock du médicament Aspiron :7 Stock du médicament Rhinoplexil :5 Affichage des crédits Crédit du client Malfichu :0.0 Crédit du client Palichon :0.0 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 1 Nom du client?: Malfichu Nom du medicament?: Aspiron quel est le montant du paiement? 30.0 quelle est la quantité achetée? 3 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 3 Affichage des stocks Stock du médicament Aspiron :4 Stock du médicament Rhinoplexil :5 Affichage des crédits Crédit du client Malfichu :31.199999999999996 Crédit du client Palichon :0.0 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 1 Nom du client?: Palichon Nom du medicament?: Aspiron quel est le montant du paiement? 5 quelle est la quantité achetée? 5 Achat Impossible. Quantité insuffisante 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 3 Affichage des stocks Stock du médicament Aspiron :4 Stock du médicament Rhinoplexil :5 Affichage des crédits Crédit du client Malfichu :31.199999999999996 Crédit du client Palichon :0.0 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 1 Nom du client?: Palichon Nom du medicament?: Rhinoplexil quel est le montant du paiement? 200 quelle est la quantité achetée? 5 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 3 Affichage des stocks Stock du médicament Aspiron :4 Stock du médicament Rhinoplexil :0 Affichage des crédits Crédit du client Malfichu :31.199999999999996 Crédit du client Palichon :-104.25 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 1 Nom du client?: Febril Client inconnu. Veuilliez recommencer Malfichu Nom du medicament?: Placebo Medicament inconnu. Veuilliez recommencer Aspiron quel est le montant du paiement? 2 quelle est la quantité achetée? 1 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 3 Affichage des stocks Stock du médicament Aspiron :3 Stock du médicament Rhinoplexil :0 Affichage des crédits Crédit du client Malfichu :49.599999999999994 Crédit du client Palichon :-104.25 1 : Achat de médicament 2 : Approvisionnement en médicaments 3 : Etats des stocks et des crédits 4 : Quitter 4 Programme terminé!
Amélioration du code objet
Une pharmacie peut être vue comme une classe d’objets ayant pour attribut un tableau de clients et un tableau de médicaments. Copiez votre programme Pharmacie.java dans un fichier GestionPharmacie.java. Renommer la classe Pharmacie dans
GestionPharmacie.java en Pharmacie1. Déplacez la méthode main() pour la placer dans la classe GestionPharmacie.java. Il vous est demandé de
- Modifier la classe Pharmacie1 de sorte à la doter des attributs sus-mentionnés.
- Transformer les méthodes statiques se rapportant uniquement aux attributs de Pharmacie1 en des méthodes d’instances.
Indication: si vous avez respecté les directives de la première question, les méthodes lireClient() et lireMedicament() par exemple, deviennent des méthodes d’instance de la classe Pharmacie1 - Adapter la méthode main() de la classe GestionPharmacie de manière appropriée.
- Placez les méthodes auxiliaires qui n’ont pu être transformées en méthodes d’instance de Pharmacie1 dans GestionPharmacie.
La correction exercice Java (voir page 2 en bas)