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 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
import java.util.ArrayList; import java.util.Date; import java.text.SimpleDateFormat; class Article { private String nom; private double prix; private boolean action; public Article(String nom, double prix, boolean action) { this.nom = nom; this.prix = prix; this.action = action; } public double getPrix() { return prix; } public String getNom() { return nom; } public boolean estEnAction() { return action; } } class Achat { private Article article; private int quantite; public Achat(Article article, int quantite) { this.article = article; this.quantite = quantite; } public double getPrix() { double rabais = 1.0; if (article.estEnAction()) { rabais = 0.5; } return quantite * article.getPrix() * rabais; } public void affiche() { String nom = article.getNom(); double prixUnite = article.getPrix(); double prixTotal = getPrix(); String rabais = ""; if (article.estEnAction()) { rabais = " (1/2 prix)"; } System.out.println(nom + " : " + prixUnite + " x " + quantite + " = " + prixTotal + " Frs" + rabais); } } class Caisse { private int numero; private double total; public Caisse(int numero, double total) { this.numero = numero; this.total = total; } public void totalCaisse() { // printf permet de formatter l'affichage (par exemple pour avoir // 2 décimale seulement après la virgule) // %c signifie que l'argument 'numero' a pour format d'affichage // celui d'une chaine de caracteres // %.2f signifie que l'argument 'total' a pour format d'affichage // une valeur réelle avec 2 décimales après la virgule // %n signfie: saut de ligne System.out.printf("La caisse numero %c a encaisse %.2f Frs aujourd'hui%n" , numero, total); } public void scanner(Caddie caddie) { System.out.println("========================================="); // Affichage de la date courante Date dateCourante = new Date(); SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/yy"); System.out.println(formatDate.format(dateCourante)); System.out.println("Caisse numéro " + numero); System.out.println(); int nbAchat = caddie.getNbAchats(); double montantTotal = 0; for (int i = 0; i < nbAchat; i++) { Achat achat = caddie.getAchat(i); double prix = achat.getPrix(); achat.affiche(); montantTotal += prix; total += prix; } System.out.println(); System.out.println("Montant a payer : " + montantTotal + " Frs"); System.out.println("========================================="); } } class Caddie { // Ce corrigé vous permet de voir un exemple d'utilisation // des tableaux dynamiques (juste entrevus en cours) // Les tableaux de ce type peuvent avoir une taille qui // augmente ou diminue en cours d'exécution (il n'est pas nécessaire // de fixer une taille à la création du tableau) // listeAchats est un tableau dynamique d'Achats private ArrayList<Achat> listeAchats; public Caddie() { // le constructeur du tableau dynamique est invoqué // pour créer le tableau (qui est vide de contenu au départ) this.listeAchats = new ArrayList<Achat>(); } public void remplir(Article article, int quantite) { Achat achat = new Achat(article, quantite); // la méthode add des ArrayList permet de // leur ajouter dynamiquement des données en cours // d'exécution du programme. // la contrepartie de suppression (remove) existe aussi. listeAchats.add(achat); } public Achat getAchat(int index) { // l'accès au ieme élément d'un tableau // dynamique se fait par la méthode get return listeAchats.get(index); } public int getNbAchats() { // les tableaux dynamiques disposent d'une méthode size // retournant la taille du tableau return listeAchats.size(); } } public class Supermarche { public static void main(String[] args) { // Les articles vendus dans le supermarché Article choufleur = new Article("Chou-fleur extra", 3.50, false); Article roman = new Article("Les malheurs de Sophie", 16.50, true); Article camembert = new Article("Cremeux 100%MG", 5.80, false); Article cdrom = new Article("C++ en trois jours", 48.50, false); Article boisson = new Article("Petit-lait", 2.50, true); Article petitspois = new Article("Pois surgeles", 4.35, false); Article poisson = new Article("Sardines", 6.50, false); Article biscuits = new Article("Cookies de grand-mere", 3.20, false); Article poires = new Article("Poires Williams", 4.80, false); Article cafe = new Article("100% Arabica", 6.90, true); Article pain = new Article("Pain d'epautre", 6.90, false); // Les caddies du supermarché Caddie caddie1 = new Caddie(); Caddie caddie2 = new Caddie(); Caddie caddie3 = new Caddie(); // Les caisses du supermarché // le premier argument est le numero de la caisse // le second argument est le montant initial de la caisse. Caisse caisse1 = new Caisse(1, 0.0); Caisse caisse2 = new Caisse(2, 0.0); // les clients font leurs achats // le second argument de la méthode remplir // correspond à une quantité // remplissage du 1er caddie caddie1.remplir(choufleur, 2); caddie1.remplir(cdrom, 1); caddie1.remplir(biscuits, 4); caddie1.remplir(boisson, 6); caddie1.remplir(poisson, 2); // remplissage du 2eme caddie caddie2.remplir(roman, 1); caddie2.remplir(camembert, 1); caddie2.remplir(petitspois, 2); caddie2.remplir(poires, 2); // remplissage du 3eme caddie caddie3.remplir(cafe, 2); caddie3.remplir(pain, 1); caddie3.remplir(camembert, 2); // Les clients passent à la caisse caisse1.scanner(caddie1); caisse1.scanner(caddie2); caisse2.scanner(caddie3); caisse1.totalCaisse(); caisse2.totalCaisse(); } } |