632.1 / PROGRAMMATION Travaux pratiques – Série P11 Objectifs • Mettre en œuvre les concepts de la programmation orientée objet. • Parcourir des structures de données en effectuant des traitements de leurs composants. • Implanter des méthodes répondant à un ensemble de spécifications. • Utiliser les classes java.util.Vector et java.util.StringTokenizer de la bibliothèque Java. Énoncé Développer une application de gestion d’un distributeur automatique d’articles (sandwich, chocolat, etc.). Il s’agit d’afficher un rapport sur le contenu d’un distributeur qui vous est fourni sous la forme d’un fichier texte. Le distributeur contient un ensemble de rayons dans lesquels les articles sont déposés. Le client choisit un rayon par son numéro et le premier article du rayon tombe dans le panier. Le remplissage du distributeur dépend des arrivages. Chaque rayon sert un même type d’articles mais ces articles peuvent être différents (le rayon sandwich peut servir des sandwiches au jambon, au salami ou au fromage). Ce quiest demandé : • Mémoriser les données du contenu du distributeur, à partir du fichier texte fourni. • Les données seront mémorisées dans des objets de classes Boisson ou Nourriture selon leur catégorie d’article. Chaque référence d’article est placée dans un rayon (Vector). • Chaque rayon est mémorisé dans des objets de classes Rayon. Chaque référence de rayon est placée dans le distributeur (Vector). • Le rapport doit présenter (voir exemple d’exécution) : Le prix le plus élevé des articles contenu dans le distributeur ; Le bénéfice total possible (somme des prix de « vente – prix de revient » de tous les articles) ; Le nombre d’articles présents par rayon. S’il en reste un ou moins : afficher «À REMPLIR ». • Réfléchir à la manière d’afficher tous les rayons et tous les articles du distributeur (réponse extrêmement simple). Données Le fichier produit par le distributeur liste chaque article (un par ligne). Pour chaque article, en plus des données spécifiques à l’article, sont mentionnés le n° du distributeur et le n° du rayon. Les articles sont classifiés selon leur type soit comme une boisson, soit comme de la nourriture. Ce type détermine si le dernier champ représente une contenance (boisson) ou un poids (nourriture). Structure d’un article (une ligne) Délimiteur d’article : retour ligne "\n\r" Délimiteur de champ : point-virgule ";" Structure d’une ligne : n°distributeur ; n°rayon ; n°article ; nom ; type ; description ; prix de revient ; prix vente ; contenance ou poids Johann SIEVERING 1/3 Version 1.0 Exemple de données 01;06;2;eau;0;boisson;0.1;1.5;0.33 01;06;2;eau;0;boisson;0.1;1.5;0.33 01;07;14;sandwich;1;jambon;1.4;3.7;220 01;07;14;sandwich;1;jambon;1.4;3.7;220 Modèle Exemple d’exécution Traitement des arrivages (fichier : "arrivage_30-05-2011.txt") Rapport de l'automate n° 1 Le prix max de tous les articles est : 3.7 Le bénéfice total possible est 64.2 CHF Nombre d'articles par rayon : rayon n° 1 contient 2 articles rayon n° 2 contient 6 articles rayon n° 3 contient 2 articles rayon n° 4 contient A REMPLIR rayon n° 6 contient 9 articles rayon n° 7 contient 6 articles rayon n° 8 contient 6 articles Johann SIEVERING 2/3 Version 1.0 Éléments fournis • Les fichiers contenant les classes que vous devez compléter: Article.java, Boisson.java, Nourriture.java, Rayon.java, Distributeur.java, GestionRapport.java. • Le fichier de test arrivage_30-05-2011.txt qui contient le contenu du distributeur au 30.05.2011. Un exemple de rapport issu de ce fichier est présenté ci-dessus. • Le fichier FileToStr.class contient la version compilée de la classe FileToStr qui permet la lecture d’un fichier texte et sa conversion en String. Cette classe est uniquement employée dans la méthode main(). • Le fichier ModeleTP11.pdf est le modèle UML du distributeur. • Ces éléments sont fournis sur le réseau en : G:\_cours\10-11\IG\M632.1\ÉnoncésTP\P11 À faire • Inscrivez vos nom et prénom dans les commentaires des classes; • Complétez les méthodes add(), get(), prixMax() et benefice() de la classe Distributeur en remplaçant les commentaire /**** A COMPLETER ****/ par du code fonctionnel. Veillez à respecter les spécifications données en commentaires. • Complétez les méthodes memoriseDistributeur() et afficheRapport() de la classe GestionRapport en remplaçant les commentaire /**** A COMPLETER ****/ par du code fonctionnel de telle manière à obtenir l’exemple d’exécution ci-dessus. Veillez à respecter les spécifications données en commentaires. • Si nécessaire complétez les classes Article, Boisson, Nourriture, Rayon, et Distributeur avec des attributs ou des méthodes que vous jugerez nécessaires. (Ne modifiez en aucun cas les signatures des méthodes existantes). Contraintes impératives • Vous programmerez vos méthodes en respectant le modèle figurant ci-dessus. • Vous mettrez en œuvre les concepts de la programmation orientée objet étudiés au cours. • Vous ne modifierez aucune signature des méthodes existantes. • Le code développé doit être compatible avec Java 1.4 (compilé avec l'option –source 1.4 ou, sous EditPlus, avec l'option Compilation 1.4 [Ctrl+1]) ; • Délai : ce travail est à rendre le jeudi 9 juin 2011 à 17h00 au plus tard en recopiant tout les éléments nécessaires sur le réseau en : G:\_cours\10-11\IG\M632.1\RedditionTP\VotreNom\P11 Johann SIEVERING 3/3 Version 1.0