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(); } // se debarasser du \n scanner.nextLine(); return choix; } /** * Méthode auxiliaire de main permettant à un client * d'acheter un médicament */ static void achat(Client[] clients, Medicament[] medicaments) { Client client = lireClient(clients); Medicament medicament = lireMedicament(medicaments); double paiement = lirePaiement(); int quantite = lireQuantite(); if (quantite <= medicament.getStock()) { medicament.diminuerStock(quantite); client.augmenterCredit((medicament.getPrix() * quantite) - paiement); } else System.out.println("Achat Impossible. Quantité insuffisante"); } /** * Méthode auxiliaire de main permettant d'augmenter le * stock d'un médicament */ static void approvisionnement(Medicament[] medicaments) { Medicament medicament = lireMedicament(medicaments); System.out.println("Donner la Quantité : "); int quantite = scanner.nextInt(); // se debarasser du \n scanner.nextLine(); medicament.augmenterStock(quantite); } /** * Méthode auxiliaire de main permettant d'afficher les * données stockées dans les tableaux clients et medicaments */ static void affichage(Client[] clients, Medicament[] medicaments) { System.out.println("Affichage des stocks"); for (int i = 0; i < medicaments.length; i++) { System.out.println("Stock du médicament " + medicaments[i].getNom() + " :" + medicaments[i].getStock()); } System.out.println("Affichage des crédits"); for (int i = 0; i < clients.length; i++) { System.out.println("Crédit du client " + clients[i].getNom() + " :" + clients[i].getCredit()); } } /** * Retourne l'objet Client associé à un nom (String) * Le nom est lu et redemandé tant qu'il ne correspond * pas au nom d'un client contenu dans le tableau clients */ static Client lireClient(Client[] clients) { String nom; boolean trouve = false; Client c = null; System.out.println("Nom du client?:"); do { nom = scanner.nextLine(); for (int i = 0; (!trouve && i < clients.length); i++) { if ((clients[i].getNom()).equals(nom)) { trouve = true; c = clients[i]; } } if (!trouve) { System.out.println("Client inconnu. Veuilliez recommencer"); } } while (!trouve); return c; } /** * Retourne l'objet Medicament associé à un nom (String) * Le nom est lu et redemandé tant qu'il ne correspond * pas au nom d'un médicament contenu dans le tableau medicaments */ static Medicament lireMedicament(Medicament[] medicaments) { String nom; boolean trouve = false; Medicament m = null; System.out.println("Nom du medicament?:"); do { nom = scanner.nextLine(); for (int i = 0; (!trouve && i < medicaments.length); i++) { if ((medicaments[i].getNom()).equals(nom)) { trouve = true; m = medicaments[i]; } } if (!trouve) { System.out.println("Medicament inconnu. Veuilliez recommencer"); } } while (!trouve); return m; } static double lirePaiement() { double paiement; System.out.println("quel est le montant du paiement?"); paiement = scanner.nextDouble(); scanner.nextLine(); return paiement; } static int lireQuantite() { int quantite; System.out.println("quelle est la quantité achetée?"); quantite = scanner.nextInt(); scanner.nextLine(); return quantite; } static void quitter() { System.out.println("Programme terminé!"); } } // Les classes d'objets class Client { // Un client est caractérisé par son nom et un crédit. private String nom = ""; private double credit = 0.0; public Client(String nom, double credit) { this.nom = nom; this.credit = credit; } public void augmenterCredit(double montant) { credit = credit + montant; } public void diminuerCredit(double montant) { credit = credit - montant; } public double getCredit() { return credit; } public String getNom() { return nom; } } class Medicament { // un médicament a un nom, un prix et une quantité en stock private String nom; private double prix; private int stock; public Medicament(String nom, double prix, int stock) { this.nom = nom; this.prix = prix; this.stock = stock; } public void augmenterStock(int quantite) { stock = stock + quantite; } public void diminuerStock(int quantite) { stock = stock - quantite; } public int getStock() { return stock; } public double getPrix() { return prix; } public String getNom() { return nom; } }
Amélioration du code objet:
import java.util.Scanner; class GestionPharmacie { protected static Scanner scanner = new Scanner(System.in); /** * Le programme principal crée un objet Pharmacie * sur lequel les opérations suivantes peuvent être effectuées: * - achat (d'un médicament par un client), * - approvisionnement (ajout d'un médicament au stock) * - affichage (des données relatives à la pharmacie */ 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); Pharmacie1 p = new Pharmacie1(clients, medicaments); int choix; do { choix = menu(); switch (choix) { case 1: p.achat(); break; case 2: p.approvisionnement(); break; case 3: p.affichage(); break; case 4: quitter(); break; } } 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; } static void quitter() { System.out.println("Programme terminé!"); } } // Les classes d'objets class Pharmacie1 { // une pharmacie c'est une liste de client et // une liste de médicaments private Client[] clients;; private Medicament[] medicaments; public Pharmacie1(Client[] cs, Medicament[] ms) { clients = cs; medicaments = ms; } public Client[] getClients() { return this.clients; } public Medicament[] getMedicaments() { return this.medicaments; } /** * Permet à un client d'acheter un médicament. * si le client est connu de la pharmacie, son crédit * va diminuer en fonction de son paiement. * Le stock associé au médicament va diminuer */ public void achat() { Client client = this.lireClient(); Medicament medicament = this.lireMedicament(); double paiement = lirePaiement(); int quantite = lireQuantite(); if (quantite <= medicament.getStock()) { medicament.diminuerStock(quantite); client.augmenterCredit((medicament.getPrix() * quantite) - paiement); } else { System.out.println("Achat Impossible. Quantité insuffisante"); } } /** * Permet à la pharmacie de s'approvisionner en un * médicament connu. */ public void approvisionnement() { Medicament medicament = this.lireMedicament(); System.out.println("Donner la Quantité : "); int quantite = GestionPharmacie.scanner.nextInt(); medicament.augmenterStock(quantite); } /** * Affichage des stocks et des crédits de la pharmacie */ public void affichage() { System.out.println("Affichage des stocks"); for (int i = 0; i < medicaments.length; i++) { System.out.println("Stock du médicament " + medicaments[i].getNom() + " :" + medicaments[i].getStock()); } System.out.println("Affichage des crédits"); for (int i = 0; i < clients.length; i++) { System.out.println("Crédit du client " + clients[i].getNom() + " :" + clients[i].getCredit()); } } /** * Retourne l'objet Client associé à un nom (String) * Le nom est lu et redemandé tant qu'il ne correspond * pas au nom d'un client connu de la pharmacie */ public Client lireClient() { String nom; boolean trouve = false; Client c = null; System.out.println("Nom du client?:"); do { nom = GestionPharmacie.scanner.nextLine(); for (int i = 0; (!trouve && i < clients.length); i++) { if ((clients[i].getNom()).equals(nom)) { trouve = true; c = clients[i]; } } if (!trouve) { System.out.println("Client inconnu. Veuilliez recommencer"); } } while (!trouve); return c; } /** * Retourne l'objet Medicament associé à un nom (String) * Le nom est lu et redemandé tant qu'il ne correspond * pas au nom d'un médicament connu de la pharmacie */ public Medicament lireMedicament() { String nom; boolean trouve = false; Medicament m = null; System.out.println("Nom du medicament?:"); do { nom = GestionPharmacie.scanner.nextLine(); for (int i = 0; (!trouve && i < medicaments.length); i++) { if ((medicaments[i].getNom()).equals(nom)) { trouve = true; m = medicaments[i]; } } if (!trouve) { System.out.println("Médicament inconnu. Veuilliez recommencer"); } } while (!trouve); return m; } static double lirePaiement() { System.out.println("quel est le montant du paiement?"); return GestionPharmacie.scanner.nextDouble(); } static int lireQuantite() { System.out.println("quelle est la quantité achetée?"); return GestionPharmacie.scanner.nextInt(); } } class Client { // Un client est caractérisé par son nom et un crédit. private String nom = ""; private double credit = 0.0; public Client(String nom, double credit) { this.nom = nom; this.credit = credit; } public void augmenterCredit(double montant) { credit = credit + montant; } public void diminuerCredit(double montant) { credit = credit - montant; } public double getCredit() { return credit; } public String getNom() { return nom; } } class Medicament { // un médicament a un nom, un prix et une quantité en stock private String nom; private double prix; private int stock; public Medicament(String nom, double prix, int stock) { this.nom = nom; this.prix = prix; this.stock = stock; } public void augmenterStock(int quantite) { stock = stock + quantite; } public void diminuerStock(int quantite) { stock = stock - quantite; } public int getStock() { return stock; } public double getPrix() { return prix; } public String getNom() { return nom; } }