DissertationsEnLigne.com - Dissertations gratuites, mémoires, discours et notes de recherche
Recherche

Cour Java

Recherche de Documents : Cour Java. Rechercher de 53 000+ Dissertation Gratuites et Mémoires
Page 1 sur 13

les prix et l’argent, on va devoir utiliser des objets de type BigDecimal.

Implémentation

1. L’interface Coin vous est donnée. On vous fournit également différentes classes qui implémentent chacune des pièces d’euro existante. Ces différentes classes sont implémentées sous forme d’un type énuméré (voir EuroCoin en annexe). 2. La première chose qu’on vous demande de faire est de définir une classe Product qui représente un produit. Un produit est caractérisé par un nom (String) et par un prix (BigDecimal). Outre un constructeur, définissez les méthodes dont voici les signatures :

1 2 3 4

public public public public

String getName () ; BigDecimal getPrice () ; String toString () ; boolean equals ( Object o ) ;

// renvoie le nom du produit // renvoie le prix du produit

3. Vous pouvez maintenant vous attaquer à la classe GenericVendingMachine qui représente un distributeur automatique générique. Un tel distributeur vend un certain nombre de produits et accepte un certain nombre de pièces. On vous donne quelques variables d’instance : – soldProducts contient les produits vendus par la machine ; – acceptedCoins contient les pièces acceptées par la machine ; – coinQuantities contient le nombre de pièces dans la machine. Le ie élément de ce tableau contient le nombre de pièces de type acceptedCoins[i] se trouvant dans la machine.

http://www.ukonline.be/programmation/java/

2

Mini-Projet Java

Vending Machine Simulator

Si vous regardez l’extrait de classe donné en annexe, vous verrez qu’on y retrouve un certain nombre de méthodes privées qui vous seront utiles pour implémenter les autres méthodes de la classe : – computeChange permet de calculer les pièces qu’il faut rendre pour atteindre un certain montant. Le choix de la méthode à utiliser pour rendre la monnaie vous est laissé : le moins de pièces possibles, . . . Si la machine ne contient pas assez de pièces pour rendre la somme requise, cette méthode génère une exception. – checkProduct vérifie que le produit est bien un produit vendu par la machine et renvoie le produit sous la forme d’une instance de la classe Drink, ou genère une exception si le produit n’est pas vendu par la machine. La classe Drink est une classe interne qui étend la classe Product en lui ajoutant une variable d’instance représentant la quantité de ce produit présent dans la machine. Toutes les méthodes de la classe GenericVendingMachine qui prennent un objet de type Product en paramètre n’acceptent que des produits vendus par la machine, c’est-à-dire des instances de la classe Drink. Cette classe est interne et privée, et l’utilisateur peut obtenir des instances de cette classe via la méthode soldProducts. On a ici un très bel exemple de polymorphisme. – checkCoin vérifie qu’une pièce est bien acceptée par la machine et renvoie l’indice de la pièce dans le tableau acceptedCoins. Si la pièce n’est pas acceptée, la méthode génère une exception. Parmi les méthodes de l’interface VendingMachine, la méthode buyProduct est sans doute la moins facile à écrire car de nombreux cas sont à gérer. Il faut générer une erreur si le produit n’est plus disponible sur la machine, si l’utilisateur n’a pas introduit suffisamment d’argent pour le produit qu’il souhaite ou enfin s’il n’y a pas assez d’argent dans la machine pour rendre la monnaie. Pour toutes les méthodes de cette classe, on vous demande de lancer une exception de type IllegalArgumentException pour toute précondition non respectée. Dans l’archive ZIP fournie avec ce mini-projet, vous trouverez une classe de test JUnit qui teste les méthodes de la classe GenericVendingMachine. Utilisez cette classe pour tester votre implémentation de GenericVendingMachine pendant que vous complétez la classe. Votre implémentation doit passer tous les tests. Le constructeur n’est pas testé séparement.

Figure 3. Résultats des tests JUnit de la classe DrinksVendingMachine sous Eclipse

http://www.ukonline.be/programmation/java/

3

Mini-Projet Java

Vending Machine Simulator

4. La classe DrinksVendingMachine vend des boissons et accepte des euros. Vous devez compléter la classe partielle qui vous est donnée en annexe. La classe contient deux constantes qui représentent les produits vendus par la machine ainsi que les pièces acceptées par la machine.

1 2 3 4 5 6 7 8 9 10 11 12 13

public class DrinksVendingMachine extends Gene ricVen dingM achine { private static final Product [] soldProducts = { new Product ( " Coca - Cola " , new BigDecimal ( " 0.6 " ) ) , new Product ( " Fanta " , new BigDecimal ( " 0.6 " ) ) , new Product ( " Canada Dry " , new BigDecimal ( " 0.7 " ) ) , new Product ( " Nestea " , new BigDecimal ( " 0.7 " ) ) , new Product ( " Schweppes Agrum " , new BigDecimal ( " 0.8 " ) ) }; private static final Coin [] acceptedCoins = EuroCoin . values () ; // À compléter }

5. La seconde partie du programme consiste à écrire une interface graphique qui permet de simuler n’importe quel distributeur automatique. Voici le squelette de la classe que vous devez écrire :

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

public class Ve n di ng Ma c hi ne Si m ul at o r { // Instance variables private final VendingMachine vdm ; // À compléter /* * * Constructor * * @pre vdm != null * @post An instance of this is created * A frame is opened representing a simulator * for the specified VendingMachine */ public V en di n gM ac h in eS im u la to r ( VendingMachine vdm ) { assert vdm != null ; this . vdm = vdm ; // À compléter } // À compléter public static void main ( String [] args ) { new Ve nd in g Ma ch in e Si mu la t or ( new DrinksVendingMachine () ) ; } }

Votre simulateur doit permettre à l’utilisateur d’insérer des pièces dans la machine et de choisir un produit. Veillez à afficher un message clair à l’utilisateur en cas de problème (dans un JLabel par exemple). Pour pouvoir contrôler l’intérieur de la machine, ce serait également bien d’afficher le nombre de produits restants ainsi que le nombre de chaque pièce contenue dans la machine. Inspirez-vous de la figure 1 en première page pour construire votre interface.

http://www.ukonline.be/programmation/java/

4

Mini-Projet Java

Vending Machine Simulator

Annexes

// Coin . java import java . math . BigDecimal ; /* * * Interface representing a monetary coin * * @author Sébastien Combéfis * @version 2009 -01 -02 */ public interface Coin { /* * * Get the value of this coin * * @pre * @post The returned value contains the value of this coin */ public BigDecimal getValue () ; }

// M i s s ingMo neyExc eptio n . java import java . math . BigDecimal ; /* * * Exception for the case where the machine miss money * * @author Sébastien Combéfis * @version 2009 -01 -02 */ @Supp ressWarnings ( " serial " ) public class M issing Money Except ion extends RuntimeException { // À compléter /* * * Get the missing money * * @pre * @post The returned value contains the missing value */ public BigDecimal getMissingMoney () { // À compléter } }

http://www.ukonline.be/programmation/java/

5

Mini-Projet Java

Vending Machine Simulator

// EuroCoin . java import java . math . BigDecimal ; /* * * Enum representing a monetary euro coin * * @author Sébastien Combéfis * @version 2009 -01 -02 */ public enum EuroCoin implements Coin { // Enumeration ONECENT ( new BigDecimal ( " 0.01 " ) ) , TWOCENTS ( new BigDecimal ( " 0.02 " ) ) , FIVECENTS ( new BigDecimal ( " 0.05 " ) ) , TENCENTS ( new BigDecimal ( " 0.1 " ) ) , TWENTYCENTS ( new BigDecimal ( " 0.2 " ) ) , FIFTYCENTS ( new BigDecimal ( " 0.5 " ) ) , ONEEURO ( new BigDecimal ( " 1 " ) ) , TWOEUROS ( new BigDecimal ( " 2 " ) ) ; // Instance variables private final BigDecimal value ; /* * * Constructor * * @pre v != null , v > 0 * @post An instance of this is created representing a coin * with the specififed value */ private EuroCoin ( BigDecimal v ) { assert v != null && v . compareTo ( BigDecimal . ZERO ) > 0; value = v ; } /* * @see Coin # getValue () */ public BigDecimal getValue () { return value ; } @Override public String toString () { return "e" + value ; } }

http://www.ukonline.be/programmation/java/

6

Mini-Projet Java

Vending Machine

...

Télécharger au format  txt (16.7 Kb)   pdf (167.8 Kb)   docx (10.6 Kb)  
Voir 12 pages de plus »
Uniquement disponible sur DissertationsEnLigne.com