Bonjour,
L’objectif de cet exercice est de créer une application java qui simule un distributeur de boissons.
1. créer deux classes principales ClientLocal et DistribLocal qui vont agir respectivement comme client et comme serveur (en local, donc ”communication” par appel direct de méthodes).
2. Créer une classe Boisson, représentant une boisson, munie des trois champs String name, le nom de la boisson, int prix, le prix de la boisson et int nbStock, le nombre d’unités restantes en stock.
3. Le stock du distributeur est représenté par un tableau contenant la liste des boissons à vendre par le distributeur.
En plus de ce tableau, nommé Boissons, la classe DistribLocal a quatre autres champs :
(a) int solde, représentant le montant résultant des ventes depuis le dernier chargement.
(b) int montant, représentant le montant courant introduit par le client.
(c) String clef, représentant un mot de passe introduit par un employé afin de vider la caisse du distributeur et remplir ses compartiments.
(d) boolean occupe, indiquant si une boissons est en cours de préparation ou non.
4. Créer une sous-classe DistException qui hérite de la classe Exception et qui ne définit qu’un seul constructeur (et aucune autre méthode) DistException(String) qui appelle le constructeur de la classe mère. Cette exception servira pour des cas tels que ”Boisson non disponible” ou ”Montant introduit insuffisant”.
5. Prévoir les opérations suivantes comme méthodes de DistribLocal :
- public static int DeposerPiece(int somme) throws DistException :
L’unique argument de cette méthode représenté la valeur de la pièce introduite par le client. La méthode teste si une vente est en cours ou que le montant cumule dépasse un seuil prédéfini, auquel cas elle lève une exception de type DistException et retourne la somme introduite. Dans le cas contraire, la fonction incrémente le montant introduit pour l’achat en cours. - public int select(String name) throws DistException :
Si le produit de nom name n’est pas disponible (en le cherchant dans Boissons et en testant le nombre d’unités restantes) ou si le montant introduit est inferieur à son prix, la méthode génère une exception de type DistException. Sinon, elle prépare la boisson demandée (simulation avec un écoulement de temps), met à jour les informations concernant la quantité en stock et le solde du distributeur et renvoie la monnaie restante (s’il y en a). - public int annuler(String name) :
Elle annule l’achat en cours, s’il y en a, et retourne la monnaie introduite par le client. - public int charger(String clef, int qte) throws DistException : Permet à un employé de récupérer le solde du distributeur et de charger tous ses compartiments. Dans le cas où l’argument donné ne correspond pas à la clef du distributeur, la méthode lève une exception de type DistException. Nous supposons que le nombre maximum d’unités est le même pour tous les types de boissons du distributeur et vaut qte.
– La méthode main(...) se trouvera dans ClientLocal et proposera à l’utilisateur un menu textuel afin qu’il puisse acheter une boisson. Les entrées seront effectuées avec des appels à readLine() sur une référence.
DistribLocal.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
| package theme3;
import java.util.Scanner;
/*import java.util.Timer;
import java.util.TimerTask;
*/
public class DistribLocal {
private static int solde;
// représente le montant résultant des ventes depuis le dernier chargement
private static int montant;
// représente le montant courant introduit par le client
private Scanner sc = new Scanner(System.in);
/* repréentente la variable uttilisée pour recupérer les données entrées par
* l'employé dans ce contexte
*/
private String clef;
/*
* représente un mot de passe introduit par un employé afin de vider la
* caisse du distributeur et remplir ses compartiments
*/
private static boolean occupe;
// indique si la boisson est en cours de préparation ou nom
// représente la somme d'argent maximale qu'un client puisse entrer
private static Boisson[] Boissons;
public DistribLocal(int solde, String clef, boolean occupe,Boisson[] Boissons, int montant) {
super();
DistribLocal.solde = solde;
this.clef = clef;
DistribLocal.montant=montant;
DistribLocal.occupe = false;
DistribLocal.Boissons = Boissons;
}
public static int getSolde() {
return solde;
}
public static void setSolde(int solde) {
DistribLocal.solde = solde;
}
public static int getMontant() {
return montant;
}
public static void setMontant(int montant) {
DistribLocal.montant = montant;
}
public String getClef() {
return clef;
}
public void setClef(String clef) {
this.clef = clef;
}
public boolean getOccupe() {
return occupe;
}
public static void setOccupe(boolean occupe) {
DistribLocal.occupe = false;
}
public static Boisson[] getBoissons() {
return Boissons;
}
public static void setBoissons(Boisson[] Boissons) {
DistribLocal.Boissons = Boissons;
}
public static int DeposerPiece(int montant) throws DistException {
int reste=0;
if (occupe == true) {
throw new DistException(
"veillez attendre il y'a deja une vente en cours");
}
for (int i = 0; i < Boissons.length;){
if (montant > getSolde()+Boissons[i].getPrix()) {
throw new DistException("somme introduite trop grande");
}
else {
setOccupe(true);
Boissons[i].setNbStock(Boissons[i].getNbStock()-1);
reste = montant - Boissons[i].getPrix();
setSolde(getSolde()+Boissons[i].getPrix());
}
}
return reste;
}
/*
public void DistException(int nbStock) {
if (nbStock == 0) {
System.out.println("Cette boisson n'est plus disponible en stock");
}
}*/
public int select(String name) throws DistException, InterruptedException {
/*Boisson boisson = null;*/
int i;
for (i = 0; i < Boissons.length;) {
if (Boissons[i].getNbStock() <= 0 || montant<Boissons[i].getPrix()) {
throw new DistException(
"La boisson demandée n'est pas disponible pour "
+ "le moment; il est également possible que " +
"la somme introduite soit insuffisante");
} else {
setOccupe(true);
Thread.sleep(2000);
Boissons[i].setNbStock(Boissons[i].getNbStock() - 1);
setSolde(getSolde()+Boissons[i].getPrix());
}
}
return montant - Boissons[i].getPrix();
/*
if (boisson == null) {
return 0;
}
for (int i = 0; i < Boissons.length; i++) {
if (Boissons[i].getName().equals(name)) {
}
}
*/
}
public int annuler(String name) {
setOccupe(false);
return montant;
}
public int charger(String clef, int qte) throws DistException {
System.out.println("entrez la clef du distributeur");
String clef_entrée = sc.next();
if (clef_entrée != getClef()) {
System.out.println("la clé entrée est eronnée");
}
return qte;
}
} |
ClientLocal.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
| package theme3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ClientLocal {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String Avengers = null;
Boisson[] Boissons = new Boisson[4];
int montant = 0;
DistribLocal DistribTest = new DistribLocal(0, Avengers, false, Boissons, montant);
Boisson coca = new Boisson("coca",3000, 10);
Boisson fanta = new Boisson("fanta",2000, 10);
Boisson redlabell = new Boisson("redlabell",800, 10);
Boisson jackdanielle = new Boisson("jackdanielle",2000, 10);
Boissons[0]=coca;
Boissons[1]=fanta;
Boissons[2]=redlabell;
Boissons[3]=jackdanielle;
int choix;
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("" +
"saisissez le numero de la boisson que vous voulez\n" +
"1.coca\n" +
"2.fanta\n" +
"3.redlabell\n" +
"4.jackdanielle\n");
choix=stdin.hashCode();
switch(choix){
case 1:
System.out.println("il coute"+coca.getPrix()+" et il " +
"en reste "+coca.getNbStock() );
System.out.println("veillez inserer la somme adequat" );
DistribTest.setMontant(stdin.hashCode());
try {
System.out.println("Patienter svp.......");
System.out.println("Votre reste est " +
"de " + DistribLocal.DeposerPiece(DistribLocal.getMontant())+" francs");
} catch (DistException e) {
e.printStackTrace();
}
try{
System.out.println("Votre reste est " +
"de " +DistribTest.select(coca.getName()) +" francs");
}catch(DistException e){
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 2:
System.out.println("il coute"+fanta.getPrix()+" et il " +
"en reste "+fanta.getNbStock() );
System.out.println("veillez inserer la somme adequat" );
DistribTest.setMontant(stdin.hashCode());
try {
System.out.println("Patienter svp.......");
System.out.println("Votre reste est " +
"de " + DistribLocal.DeposerPiece(DistribLocal.getMontant())+" francs");
} catch (DistException e) {
e.printStackTrace();
}
try{
System.out.println("Votre reste est " +
"de " +DistribTest.select(fanta.getName()) +" francs");
}catch(DistException e){
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 3:
System.out.println("il coute"+redlabell.getPrix()+" et il " +
"en reste "+redlabell.getNbStock() );
System.out.println("veillez inserer la somme adequat" );
DistribTest.setMontant(stdin.hashCode());
try {
System.out.println("Patienter svp.......");
System.out.println("Votre reste est " +
"de " + DistribLocal.DeposerPiece(DistribLocal.getMontant())+" francs");
} catch (DistException e) {
e.printStackTrace();
}
try{
System.out.println("Votre reste est " +
"de " +DistribTest.select(redlabell.getName()) +" francs");
}catch(DistException e){
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 4:
System.out.println("il coute"+jackdanielle.getPrix()+" et il " +
"en reste "+jackdanielle.getNbStock() );
System.out.println("veillez inserer la somme adequat" );
DistribTest.setMontant(stdin.hashCode());
try {
System.out.println("Patienter svp.......");
System.out.println("Votre reste est " +
"de " + DistribLocal.DeposerPiece(DistribLocal.getMontant())+" francs");
} catch (DistException e) {
e.printStackTrace();
}
try{
System.out.println("Votre reste est " +
"de " +DistribTest.select(jackdanielle.getName()) +" francs");
}catch(DistException e){
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
default:
System.out.println("choix invalide" );
}
stdin.close();
}
} |
DistException.java
1 2 3 4 5 6 7 8
| package theme3;
@SuppressWarnings("serial")
public class DistException extends Exception {
public DistException(String message){
super(message);
}
} |
Boisson.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| package theme3;
public class Boisson {
// nom de la boisson
private String name;
// price of the drink
private int prix;
//nombre d'unités restantes en stock
private int nbStock;
public Boisson(String name, int prix,int nbStock) {
super();
this.name = name;
this.prix = prix;
this.nbStock =nbStock;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrix() {
return prix;
}
public void setPrix(int prix) {
this.prix = prix;
}
public int getNbStock() {
return nbStock;
}
public void setNbStock(int nbStock) {
this.nbStock = nbStock;
}
public String toString() {
return "Boisson [name=" + name + ", prix=" + prix + ", nbStock=" + nbStock
+ "]";
}
} |
Merci.
Partager