[Précédent]
[Index] | [Enoncé] | [Version imprimable]
[Prochain]

7.7
  Supermarché - Corrigé
Niveau 2
 
 
Fichiers:
  Supermarche.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
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();
    }
}

 


[Précédent]
[Index] | [Enoncé] | [Version imprimable]
[Prochain]