Vous êtes sur la page 1sur 4

Programmation Avancée en JAVA

Master Science et Ingénierie de Données


Projet Final

Édition de tickets de caisse


L’objectif de ce projet est de modéliser l’activité d’encaissement d’un supermarché, plus
précisément l’édition des tickets de caisse et la comptabilisation des encaissements réalisés.

1. Description fonctionnelle
En entrant dans le supermarché, le client emprunte un caddie dans lequel il peut ajouter (ou
enlever) les articles qu’il souhaite acheter. Une fois sa sélection d’articles réalisée, il passe en
caisse. Le caissier passe les articles devant le scanner de la caisse. Le code barre de l’article
est lu et la référence de l’article est décodée. Cette référence permet d’accéder à la base des
articles qui contient les informations sur l’article correspondant (libellé et prix).

Dans ce projet, nous allons modéliser le caddie du client, la base des articles et la caisse
enregistreuse. Les principales classes de cette application sont données dans le diagramme de
classes de la figure 1.

Le caddie est simplement modélisé comme une séquence de références. Le client peut ajouter
une nouvelle référence dans son caddie ou enlever une référence. Bien entendu, plusieurs
références identiques peuvent apparaître dans le caddie. Ceci signifie que le client a décidé
d’acheter plusieurs fois le même article.

La base des articles contient les informations sur les articles proposés à la vente dans le
supermarché, c’est-à-dire leur libellé et leur prix. Le supermarché propose deux types d’articles
: les articles vendus à l’unité et les lots. Un lot regroupe plusieurs exemplaires d’un même
article (par exemple un pack de 6 litres de lait). Le prix du lot doit être inférieur ou égal au prix
des articles achetés à l’unité.

La caisse enregistreuse permet de scanner les références d’un caddie et d’éditer le ticket de
caisse correspondant. Les références sont scannées dans l’ordre de leur ajout dans le caddie.
Un exemple de ticket de caisse est donné figure 2. Il fait apparaître le numéro du ticket (ce
numéro correspond au nombre de tickets édités depuis la mise en route de la caisse
enregistreuse), le détail des articles achetés, le nombre total d’articles et le prix total à payer. Le
détail d’un article acheté doit faire apparaître le libellé et le prix de cet article. Dans le cas où
plusieurs références consécutives sont identiques, l’édition se fait sur deux lignes. La première
indique le libellé. La seconde indique la quantité, le prix unitaire et le prix total à payer pour ces
articles identiques.

La caisse enregistreuse conserve le total des tickets édités ce qui permet de connaître le
chiffre d’affaires réalisé sur une caisse.
2. Contraintes de réalisation
Les contraintes de réalisation à respecter impérativement sont les suivantes :
1. Ce projet est un travail individuel.
2. La documentation des classes devra être fournie dans le source du programme en utilisant
les commentaires de documentation (javadoc).
3. L’application sera définie dans un paquetage appelé supermarche. Les classes qui
concernent la base des articles et donc les articles devront être placées dans un sous-
paquetage appelé articles.
4. Une référence sera représentée par une chaîne de caractères.
5. Les prix seront représentés par le type long.
6. La solution proposée doit respecter le diagramme de classe de la figure 1. Bien entendu,
toutes les classes du paquetage supermarche.articles ne sont pas dessinées sur ce
diagramme.
7. Par rapport au diagramme de classe, seules des méthodes privées peuvent être ajoutées
dans les classes dont le détail apparaît sur le diagramme de classe. Bien sûr, toutes les
méthodes du diagramme doivent être présentes.
8. Les signatures des méthodes et les attributs du code fourni ne doivent pas être modifiés.
9. La relation entre BaseArticles et Article (figure 1) sera réalisée en utilisant un
tableau associatif (qui correspond à l’interface java.util.Map dans les API Java).
10. Les méthodes supprimer et article de BaseArticles lèveront une exception non contrôlée
par le compilateur appelée supermarche.articles.ReferenceInconnueException si la
référence n’est pas présente dans la base.
11. La méthode enregistrer de BaseArticles permet d’enregistrer un nouvel article dans la
base à partir de sa référence ou de remplacer l’article associé à une référence.
12. La classe Caddie permet d’itérer sur les références du caddie (voir java.lang.Iterable).
13. La méthode imprimerReferencesInconnues() de la classe Caisse affiche sur le terminal
les références scannées depuis le démarrage de la caisse et qui n’ont pas été reconnues.
Ceci permettra de corriger la base d’articles en ajoutant ces nouvelles références. Cette
dernière partie n’est pas gérée par le programme qui se contente de lister les références
inconnues. Attention, pour faciliter la tâche du gestionnaire, les références inconnues
doivent être affichées dans l’ordre alphabétique et sans redondance.
14. La classe TicketBuilder permet de collecter toutes les informations nécessaires à
l’élaboration du ticket qui peut ensuite être obtenu grâce à la méthode getTicket(). Les
classes TicketBuilder et Ticket ne doivent pas être modifiées.
15. La classe ExempleSujet doit créer une base d’article, remplir un caddie et le scanner à la
caisse pour imprimer le ticket de caisse qui est donné comme exemple à la figure 2.

3. Documents à fournir
Vous devez impérativement rendre les éléments suivants :
I. Le code source de vos programmes qui doit comprendre les commentaires de
documentation (javadoc).
II. Un fichier texte LISEZ-MOI.txt qui contient des informations sur les choix réalisés et les
informations jugées utiles pour comprendre le travail fait.

Vous aimerez peut-être aussi