package plp.gestion; import plp.collection.VecteurInfini; /** * La classe Devise permet de créer des objets représentant la monnaie * d'un pays. * Chaque devise est caractérisée par son nom et possède comme donnée * son taux de change en Euro. La classe fournit également des méthodes * permettant de convertir une somme depuis la monnaie vers l'Euro et * inversement. * Le taux de change en Euro n'est pas fixe. Cette classe peut donc être * utilisée pour des monnaies hors de la zone Euro. * Il est également possible d'obtenir la liste des devises déja créées. */ public class Devise { private static final VecteurInfini DEVISES = new VecteurInfini(); static { String [] nomsDevises = {"Franc", "Mark", "Pesetas", "Escudo", "Lire", "Euro"}; double [] tauxChange = {6.55957, 1.95583, 166.386, 200.482, 1936.270, 1.}; for (int i = 0; i < nomsDevises.length; ++i) new Devise(nomsDevises[i], tauxChange[i]); } private final String nom; private double tauxDeChangeEnEuro; /** * Cree une devise avec un premier taux de change en Euro. Il est * impossible de creer deux devises ayant le même nom. */ public Devise (String nom, double tauxDeChangeEnEuro) { if (existeDevise(nom)) { throw new Error("Devise " + nom + " déja existante"); } this.nom = nom; this.tauxDeChangeEnEuro = tauxDeChangeEnEuro; DEVISES.inserer(this); } public String nom() { return this.nom; } public double tauxDeChangeEnEuro() { return this.tauxDeChangeEnEuro; } public void changerTauxDeChangeEnEuro(double nouveauTaux) { tauxDeChangeEnEuro = nouveauTaux; } public double conversionEnEuro(double somme) { return somme / tauxDeChangeEnEuro; } public double conversion(Devise deviseCible, double somme) { return somme / tauxDeChangeEnEuro * deviseCible.tauxDeChangeEnEuro; } public String toString() { return "Devise " + nom + " (taux de change en Euro = " + tauxDeChangeEnEuro + ")"; } private static Devise chercherDevise (String nom) { for (int i = 0; i < DEVISES.cardinal(); i++) { Devise d = (Devise)DEVISES.element(i); if (d.nom().equals(nom)) { return d; } } return null; } public static Devise devise(String nom) { Devise d = chercherDevise(nom); if (d == null) { throw new Error("Devise " + nom + " inconnue"); } return d; } public static boolean existeDevise (String nom) { return (chercherDevise(nom) != null); } public static Devise [] devisesTraitees () { int n = DEVISES.cardinal(); Devise [] copieDevises = new Devise[n]; for (int i = 0; i < n; ++i) { copieDevises[i] = (Devise)DEVISES.element(i); } return copieDevises; } public static void main(String [] args) { double valeurAConvertir = Double.valueOf(args[0]).doubleValue(); String nomDevise = args[1]; Devise d = devise(nomDevise); Devise [] devises = devisesTraitees(); System.out.println(d); System.out.println(d.conversionEnEuro(valeurAConvertir) + " Euros"); System.out.println("Devises traitees"); for (int i = 0; i < devises.length; ++i) { System.out.println(devises[i]); } } }