Programmation Java TD N° 5 A. Un employé est caractérisé par les informations suivantes: un nom, une adresse, un téléphone et une adresse email. Un employé peut être un employé à plein temps ou bien à temps partiel. Dans le cas d'une employé à temps partiel, il faut également stocker le volume horaire travaillé par semaine ainsi que le montant horaire perçu par l'employé. Dans le cas d'un employé à plein temps, son volume horaire étant fixe, on stocke en plus des informations de base d'un employé le salaire mensuel. Vous devez écrire une méthode qui calcule le salaire annuel pour un employé à temps plein. 1. Ecrire les classes nécessaires. 2. Créer un employé à temps partiel : Pierre habitant 5 bd Descartes 77454 Champs sur Marne, dont le téléphone est le 0148484040 et l'email [email protected]. Il travaille 15 heures par semaine à 45 euros de l'heure. 3. Créer un employé à temps plein; Marie qui habite 4 rue de Meaux à 75001 Paris, téléphone 0140404040, email: [email protected]. Son salaire mensuel est de 3000 euros. B. Dans l'optique de créer de nombreux employés, on décide de stocker les employés dans une ArrayList. Vous pouvez vous aider du cours et de la Javadoc à l'adresse : java.sun.com puis API. La classe ArrayList se trouve dans le paquetage java.util. 1. Vous devez créer une liste (type ArrayList) et y stocker les objets associés à Pierre et Marie. 2. Afficher les noms des employés qui sont stockés dans la liste. 3. Afficher les salaires annuels des employés. C. On veut maintenant stocker des informations sur les entreprises qui embauchent ces employés. Une entreprise est caractérisée par un nom, une adresse. 1. Ecrire la classe Entreprise. Créer l'entreprise ABC dont l'adresse est 99 impasse de java 75020 Paris. 2. Une entreprise peut embaucher plusieurs employés mais un employé travaille dans au plus une entreprise. Organiser le lien entre employé et entreprise. Faire en sorte que Pierre et Marie travaillent pour l'entreprise ABC. 3. Afficher les salaires des employés de l'entreprise ABC. 4. Créer une seconde entreprise qui embauchent 2 nouveaux employés (Julie et Michel). Afficher la masse salariale (somme des salaires annuels) de toutes les entreprises. Programmation Java TD N° 6 On veut gérer la gestion d'un caddie virtuel dans une application type "ecommerce". Pour cela, on va gérer des achats d'articles qui sont représentés sous la forme d'objets. Un caddie est caractérisé par un nom client et une liste de couples (article, quantité achetée). Pour le moment, on vous demande de gérer les articles suivants : 1. de la mémoire vive (RAM) dont les caractéristiques sont : une référence (interne au magasin), une marque, un prix unitaire, un type et une capacité de stockage. 2. Des imprimantes dont les caractéristiques sont : une référence, une marque, un prix unitaire, le type d'impression (laser, jet d'encre), la vitesse d'impression et la couleur (booléen). Il faut prendre en compte que le nombre d'articles va croître rapidement dans l'application. 4. Proposer une organisation pour les classes de l'application. Cette organisation permettra-t-elle de faire évoluer facilement la liste des articles proposés ? 5. Implémenter les classes. 6. Réaliser un test simple avec une instance de Caddie, une instance de Imprimante et une instance de Memoire. 7. Implémenter les méthodes qui permettront d'ajouter un article dans un caddie, de supprimer un article d'un caddie, de connaître le montant global d'un caddie. 8. Pour l'achat en grande quantité d'un article, le magasin propose des lots . Ces derniers bénéficient de réductions de : 10% sur le prix unitaire si la quantité est entre 10 et 49, 25% si la quantité est supérieure ou égale à 50. Ajouter une classe Lot permettant de représenter des lots d'articles. Pour ajouter une instance de Lot dans le caddie, vous utiliserez la syntaxe suivante (pour un lot de 10 mémoires): caddie.addArticle(new Lot (new Memoire(...),10); 9. Tester avec des lots. NB: Vous utiliserez une ArrayList pour stocker les articles d'un caddie. Diagramme de classes de l'exercice Caddie virtuel La classe Article (fichier Article.java) public abstract class Article { private String marque; private String ref; private double prixU; public Article(String ref, double prixU, String marque) { this.ref= ref; this.prixU = prixU; this.marque = marque; } /* Constructeur sans parametre qui va servir pour la contrusction d'un Lot */ public Article() { ref = new String("NC"); } protected void setPrixU(double prix) { prixU = prix; } protected void setMarque(String marque) { this.marque = marque; } protected void setRef(String ref) { this.ref = ref; } public String getFiche() { String resultat = new String("Ref = " + ref + " Marque = "+ marque + " prix unitaire = "+ prixU); return resultat; } public double getPrixU() { return prixU; } public String getRef() { return ref; } public String getMarque() { return marque; } } La classe Memoire public class Memoire extends Article { private String type; private String capacite; public Memoire(String type, String capacite, String ref, double prix, String marque) { super(ref, prix, marque); this.capacite = capacite; this.type = type; } public String getFiche() { String resultat = super.getFiche() + " Type = " + type + " Capa = "+capacite; return resultat; } } La classe Imprimante public class Imprimante extends Article { private String typeImp; private String vitesse; private boolean couleur; public Imprimante(String typeImp, String vitesse, boolean couleur, String ref, double prix, String marque) { super(ref, prix, marque); this.vitesse = vitesse; this.typeImp = typeImp; this.couleur = couleur; } public String getFiche() { String resultat = super.getFiche() + " Type impression = " + typeImp + " Couleur = "+couleur + " Vitesse = " + vitesse; return resultat; } } La classe Lot public class Lot extends Article { private Article articleType; private int quantite; public Lot(Article articleAjoute, int quantite) { this.quantite= quantite; articleType = articleAjoute; if (quantite>=10 && quantite<50) setPrixU(articleType.getPrixU()*0.9*quantite); else if (quantite>=50) setPrixU(articleType.getPrixU()*0.75*quantite); else setPrixU(articleType.getPrixU()*quantite); setRef(articleType.getRef()+"-LOT"); setMarque(articleType.getMarque()); } public String getFiche() { String resultat = super.getFiche() + " Lot de " + quantite; return resultat; } } La classe CaddieArrayList import java.util.*; public class CaddieArrayList { private ArrayList listArticle = new ArrayList(); private String client; public CaddieArrayList(String client) { this.client= client; } public String getClient() { return client; } public void setClient(String client) { this.client = client; } public void addArticle(Article articleAjoute) { listArticle.add(articleAjoute); } public void removeArticle(int position) { if (position>=0 && position<listArticle.size()) listArticle.remove(position); else System.out.println("Erreur, position"); } public Article getArticle(int position) { if (listArticle.size()>position) return (Article)listArticle.get(position); return null; } public void getArticles() { Article article; Iterator iterator = listArticle.iterator(); int i=1; while (iterator.hasNext()) { article = (Article) iterator.next(); System.out.println("Article # " + i + " : " + article.getFiche()); i++; } } public void getPrix() { double prixGlobal = 0; Article article; Iterator iterator = listArticle.iterator(); while (iterator.hasNext() ) { article = (Article) iterator.next(); prixGlobal += article.getPrixU(); } System.out.println("Prix total du caddie = " + prixGlobal); } } La classe CaddieALTest public class CaddieALTest { public static void main(String[] args) { CaddieArrayList cadOne = new CaddieArrayList("Toto"); System.out.println("Caddie de " + cadOne.getClient()); System.out.println("Ajouter articles dans CadOne"); cadOne.addArticle(new Memoire("SDRAM","128Mo","SDRAM001",99.90,"BestOne")); cadOne.addArticle(new Imprimante("Laser","10 pages /minute",true,"Canon001",799.00,"Canon")); System.out.println("Ajouter un lot dans CadOne"); cadOne.addArticle(new Lot(new Memoire("SDRAM","256Mo","SDRAM002",199.90,"BestOne"),10)); cadOne.addArticle(new Lot(new Memoire("SDRAM","256Mo","SDRAM002",199.90,"BestOne"),15)); cadOne.getArticles(); System.out.println("Supprime article de CadOne"); cadOne.removeArticle(2); cadOne.getArticles(); cadOne.getPrix(); } } Résultat de l'exécution Caddie de Toto Ajouter articles dans CadOne Ajouter un lot dans CadOne Article # 1 : Ref = SDRAM001 Marque = BestOne prix unitaire = 99.9 Type = SDRAM Capa = 128Mo Article # 2 : Ref = Canon001 Marque = Canon prix unitaire = 799.0 Type impression = Laser Couleur = true Vitesse = 10 pages /minute Article # 3 : Ref = SDRAM002-LOT Marque = BestOne prix unitaire = 1799.1 Lot de 10 Article # 4 : Ref = SDRAM002-LOT Marque = BestOne prix unitaire = 2698.65 Lot de 15 Supprime article de CadOne Article # 1 : Ref = SDRAM001 Marque = BestOne prix unitaire = 99.9 Type = SDRAM Capa = 128Mo Article # 2 : Ref = Canon001 Marque = Canon prix unitaire = 799.0 Type impression = Laser Couleur = true Vitesse = 10 pages /minute Article # 3 : Ref = SDRAM002-LOT Marque = BestOne prix unitaire = 2698.65 Lot de 15 Prix total du caddie = 3597.55 Programmation Java TD N° 7 Vous programmerez en Java, le problème suivant. On considère le problème général consistant à résoudre une équation quelconque. Pour simplifier, n’importe quelle équation sera définie par un nom et par son nombre de solutions et par une méthode permettant de la résoudre. Les paramètres de l’équation dépendent du type de l’équation que l’on traite : par exemple, 2 paramètres pour une équation du premier degré, 3 pour une équation du second degré,… 4. Révision méthode virtuelle : Créer une classe "Equation" décrite par un nom, un nombre de solution et une méthode de résolution virtuelle Solve(). Créer alors deux sous­classes (Equation1D, Equation2D) permettant de traiter les équations du premier degré et les équations du second degré. Vous définirez les attributs propres à ces sous­classes. Ecrire enfin une classe "Calcul" avec une méthode "main().." dans laquelle vous testerez vos développements. Considérons maintenant un cas simple permettant d’aborder les exceptions : la division par 0. 5. Une première approche consiste à laisser Java générer une exception associée à votre division par 0. Dans le cas d’une division entre 2 entiers, Java génére une exception de type "ArithmeticException". Modifier votre Classe "Calcul" en rajoutant les instructions "try.. catch" nécessaires (voir exemple de cours) pour générer vos propres traitements associés à cette exception notamment le fait de décrémenter le nombre de solutions. Ne pas oublier de déclarer les throws Exceptions dans les classes Equation1D, Equation2D. Tester enfin le cas de la division par 0 sur des nombres flottants : Java génére un nombre "Solution Infinity". 6. Une seconde approche consiste alors à "lever" vous­même une exception c’est­à­ dire vous testez les opérations de votre programme susceptibles de générer une division par 0 en créant vous­même une exception via une commande du type "if (condition) through new Exception("Message propre")dans le corps de la méthode posant problème. Les instructions "try.. catch" sont toujours nécessaires dans la classe appelante. Utiliser ces techniques pour toujours décrémenter le nombre de solutions.