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;
}
}Exercice Java corrigé : 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;
}
}Pages: 1 2