Mini-Projet Java Vending Machine Simulator http://www. ukonline. be/programmation/java/ Description Ce mini-projet s’intéresse à l’écriture d’un simulateur de distributeur automatique. Un distributeur automatique vend un certain nombre de produits et accepte certaines pièces. La première étape consiste à introduire un certain nombre de pièces dans la machine, on choisit ensuite le produit désiré.
Plusieurs cas sont ensuite à envisager : le produit demandé n’est plus disponible, l’utilisate assez d’argent, il n’y rendre la monnaie, demander à la machi annuler la transactio s or 11 Sni* to View nextÇEge la machine pour t introduit et donc On va écrire un programme en deux parties. La première partie consiste à écrire des classes pour modéliser le distributeur automatique, et ensuite on va écrire une interface graphique (exemple figure 1) que ron va greffer sur le modèle. On va donc écrire un programme modulaire et adaptable. Figure 1.
Interface graphique du simulateur de distributeur automatique GenericVendingMachine interface VendingMachine class Drink class Product class VendingMachineSimulator class DrinksVendingMachine enum EuroCoin Figure 2. Diagramme de classe du mini-projet Le programme que l’on va écrire doit faire des calculs financiers. On va devoir faire des calculs précis pour rendre la monnaie exacte par exemple. On ne peut donc pas utiliser le type primitif double pour représenter 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 : 2 PAG » 1 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[l] se trouvant dans la machine. Mini-projet Java Si vous regardez rextrait de classe donné en annexe, vous verrez qu’on y retrouve un certain ombre 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 ? utillser pour rendre la monnaie vous est laissé : le mons 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 ne 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 GenericVendin Machine ui prennent un objet de type Product en paramètr PAGF30F11 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 mains 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 Putilisateur 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 lasse de testJUnit 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 JIJnit de la classe DrinksVendingMachine sous Eclipse PAGFd0F11 la machine. 4 6 7 8 10 public class DrinksVendingMachine extends Gene ricVen dingM achine private static final Product C] soldProducts = { new Product ( » Coca – Cola » , new BigDecimal ( » 0. » ) ) , new Product ( » Fanta » , new BigDecimal( » » ) ) , new Product ( » Canada Dry » , new BigDecimal ( » O. » ) ) , new Product ( » Nestea , new BigDecimaI ( » » ) ) , new Product ( » Schweppes Agrum » , new BigDecimal ( » 0. 8 » ) ) private static final Coin [l acceptedCoins – EuroCoin . values () ; // À compléter 12 13 5. La seconde partie du programme consiste à écrire une interface graphique qui permet de simuler n’importe quel distributeu Voici le squelette de la PAGFSOFII machine et de choisir un produit. Veillez à afficher un message clair à l’utilisateur en cas e problème (dans un JLabel par exemple). our 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. Annexes // Coin . java import java . math . BigDecimal ; * Interface representing a monetary coin * @author Sébastien Combéfis * @version 2009 -01 -02 public interface Coin * Cet the value of this coin ‘k @pre * @post The returned value contains the value of this coin public BieDecimal getVaIu 1 public enum EuroCoin implements Coin // Enumeration ONECENT ( new BigDecimal( » 0. 1 » ) ) , TWOCENTS ( new BigDecimal ( 0,02 ‘i ) ) , FIVECEN S ( new BigDecimal( » 0. 05 » ) ) , TENCENTS ( new Bigoecimal ( » o. l TWENTYCENTS ( new BigDecimal( » 0. 2 » , FIFTYCENTS ( new ( » O. S » ) ) , ONEEURO ( new BigDecimal( 1 MOEUROS( new BigDeamaI ( » 2 // Instance variables private final BigDecimal value ; * Constructor * @pre v ! = null * @post An instance ofthis is created representing a coin With the specififed value private EuroCoin ( BigDecimal v ) assert v null . ompareT0 ( Bigoetimal . ZERO ) O; value —v ; Coin O public BigDecimal getValue () return value ; PAGF70F11 enough money was inserted into the machine @version 2009 -01 -02 @Supp ressWarnings ( » serial i’ ) public class No t En ou gh M on ey Ex c ep ti on extends Exception * @pre * @post An instance of this is created public N ot En o ug hM on e YE xc e pt io n () super ( » Not enough money to give back change » ) // VendingMachine . ava * Interface representing a vending machine ‘k @author Sébastien Combéfis public interface VendineM in the machine and false otherwise public boolean remains ( Product p ) ; Test whether it remains some coins in the machine * @pre c null , ca coin accepted by the machine * @post The returned value contains true if it remains some coin public boolean remains ( Com c ) ; ‘k Get the quantity of a product in the machine * @pre p null , pa product sold by the machine * @post The returned value contains the number of the specified product available in the machine public int getQuantity ( Product p) ; ‘k Get the quantity of a coin in the machine coin available in the machine public int getQuantity ( Coin c) ; public Coin O giveBackMoney ; Get the value of all inserted money * @pre * @post The returned value contains the value of the money inserted into the machine public BigDecimal insertedMoney () ; * Fill the machine With a product ‘k @pre p null , pa product sold by the machine * @post The machine is filled With q times the specified product public void fill ( Product p , int q) ; * Fill the machine With some coins * @pre c null * @post The machine is filled With q times the specified coin public void fillCoin ( Coin c , intq ) ; http://wvm. ukonline. be/programmation/java/ 9 Vending Machine Simulat 11