TP2: Gestion d'un magasin de vente/achat de disques d'occasion

But:

Dans ce TP, vous allez réaliser un programme simple de gestion destiné à un magasin de vente et d'achat de disques d'occasion. Les connaissances développées dans ce TP sont essentiellement les tableaux et la programmation de méthodes.

Conseils:

Commencez par lire le sujet dans sa totalité: la plupart des questions posées habituellement par les étudiants ont leur réponse dans l'énoncé.

Vous ne disposerez pas nécessairement des tous les éléments nécessaires pour réaliser ce TP dès le début du cours. Il est donc conseillé de programmer petit à petit les éléments qui vous semblent réalisables et de compléter et/ou modifier ce que vous avez déjà écrit au fur et à mesure des progrès que vous réaliserez.

Énoncé:

Pour réaliser la gestion d'un magasin d'achat/vente de disques compacts (CD) vous devrez gérer deux "bases de données": le stock qui sera représenté par une table de tous les articles qui ont déjà été ou sont encore en vente dans le magasin et les opérations qui seront représentées par une table de tous les articles vendus ou achetés.

Un article dans la base stock contient au moins les informations suivantes:

  • titre: chaîne de caractères identifiant le CD.
  • auteur: nom de l'auteur principal (chaîne de catactères).
  • prix de vente: prix auquel est vendu le CD.
  • quantité: nombre d'exemplaires de ce CD en stock.
  • quantité max: nombre maximum de CD que le gérant du magasin souhaite avoir en stock. Le magasin n'achetera pas un CD d'un client si le nombre d'exemplaires de ce CD est déjà égal à cette quantité.

Toute opéeration (vente ou achat de CD) sera consignée dans la base des opérations. Les informations attachées à une transaction sont au moins les suivantes:

  • type de la transaction: indique s'il s'agit d'une vente ou d'un achat (du point de vue du magasin)
  • montant de la transaction: de la vente ou de l'achat
  • indice dans la table des stocks: indice dans la table des stocks de l'article qui a été vendu ou acheté. Ceci permet de retrouver toutes les informations reliées à cet article.

Vous devez programmer une classe Magasin qui offre les méthodes suivantes:

  • Magasin(int capital). Cette méthode est le constructeur de la classe Magasin. Elle prend en argument le capital de départ (en dollars $CA) que le gérant du magasin dépose sur le solde du compte, à l'ouverture du magasin.

  • boolean achat(String titre, String auteur) qui retourne vrai si l'achat est possible et faux sinon. titre identifie de manière unique un CD. Un achat est possible si la quantité maximale en stock de ce CD n'est pas déjà atteinte et si le solde du magasin est positif et supérieur au montant de l'achat. Le prix auquel le magasin achète le CD est 60% du prix de vente. Dans le cas où ce CD n'était pas déjà en stock, il convient de créer dans la base de stock, une fiche pour ce nouveau CD. Son prix de vente est par défaut fixé à 10$CA (le magasin l'achètera donc 6$CA) et sa quantité limite en stock sera fixée par défaut à 4.

    Il appartient à cette méthode de mettre à jour les bases de stock et d'opérations de manière adéquate.

  • boolean vente(String titre) qui retourne vrai si la vente du CD identifié par son titre est possible. Une vente est possible dès lors que le CD est en stock. Lorsque la vente est réalisée, les informations sur le stock et les transactions sont bien sur mises à jour.

  • boolean cdEnStock(String titre) retourne vrai si le CD dont le titre est spécifié en argument est disponible dans la base et qu'un exemplaire au moins est en stock.

  • int auteurEnStock(String auteur) retourne le nombre de CDs différents en stock dont l'auteur principal est spécifié en argument.

  • int getSolde() retourne le solde (en $CA) du magasin.

  • int getNombreCDEnStock() retourne le nombre de CD disponibles dans le magasin.

  • void afficheCDLePlusVendu() qui affiche les renseignements relatifs au CD le plus vendu par le magasin.

  • void setQuantiteMax(String titre, integer quantite) permet de changer la quantité maximale du CD dont le titre est spécifié en argument par la valeur quantité. Cette méthode sera par exemple appelée par le gérant du magasin afin de réduire le nombre d'exemplaires maximum d'un CD qui se vend mal ou au contraire augmenter ce nombre dans le cas d'un CD qui se vend bien.
  • void afficheTransactions() méthode qui affiche les informations de toutes les transactions réalisées depuis la création du magasin. Les informations concernant une transaction sont: le montant de la transaction, le type de la transaction (achat ou vente), le titre du CD vendu ainsi que son auteur.

Notes importantes: Seule l'écriture de la classe Magasin vous est demandée. Vous pouvez pour cela, développer vos propres classes si vous le souhaitez. Nous vous fournissons le code de la classe principale ainsi que le squelette de la classe Magasin dans ce document. Voici à quoi devrait ressembler la sortie écran produite par l'exécution de votre programme si vous utilisez la classe TP2 qui vous est fournie.

Lors de l'évaluation, la classe TP2 ici présente sera automatiquement substituée par une nouvelle classe TP2 (jeu de test différent). Vous ne devez donc pas mettre de code spécifique à votre application dans cette classe !!!. Le jeu de test qui sera utilisé lors de l'évaluation sera du même genre que celui qui vous est fourni: il contiendra des appels aux méthodes que nous vous demandons d'écrire dans la classe TP2. Ne modifiez pas les entêtes de ces méthodes, sans quoi votre programme risque de ne pas marcher lors de l'évaluation !!!

Remise du TP 2:

La date de remise du TP 2 est fixée au dimanche 4 juin. Vous devez impérativement remettre une version électronique ainsi qu'une version papier. Le programme que vous devez remettre doit porter le nom TP2.java.

La procédure de remise des travaux pratiques est décrite ici. Elle a également été vue lors de la démonstration 1. Dans le doute, voici quelques rappels appliqués à la remise de ce TP2.

  • Pour remettre votre TP, placez-vous dans le répertoire où se trouve votre fichier Pair.java puis tapez la commande:
    remise ift1170 TP2 TP2.java

    Un message de confirmation vous est normalement adressé. Profitez-en pour vérifier que vous avez envoyé la bonne version de votre programme...
    PREMIERE - Remise du travail TP2 pour le cours ift1170 par felipe
    Le fichier TP2.java (8827 octets) a ete remis.

  • Vérifiez que la commande s'est déroulée correctement en tapant la commande:
    remise -v ift1170 TP2

    Un message vous indiquera l'état de vos remises pour le TP indiqué...
    Etat des remises de felipe pour le travail TP2 du cours ift1170
    /u/dift1170/.remise/TP2/felipe:
    total 6
    drwx------ 2 dift1170 demo 1024 May 9 14:15 .
    drwx------ 44 dift1170 demo 1024 May 9 14:15 ..
    -rw------- 1 dift1170 demo 8827 May 9 14:20 TP2.java

Rappel: Vérifiez toujours que votre remise électronique s'est bien déroulée. En cas de non remise électronique, où dans l'hypothèse d'une erreur de votre part, votre note sera automatiquement 0. Vous êtes responsables du bon déroulement de la remise électronique.

Note concernant la remise d'un TP depuis chez vous: La procédure de connection à votre compte universitaire depuis chez vous est décrite dans cette page. Prenez bien conscience que transmettre par ftp (File Transfert Protocol) vos fichiers de chez vous à votre compte universitaire, ne constitue en aucun cas une remise électronique. Vous devez réaliser également la procédure de remise. Prenez également garde au fait que ftp dépose généralement vos documents sur votre compte universitaire avec des priorités de lecture pour tout le monde (un autre étudiant peut donc consulter vos solutions). Pour éviter tout problème de plagiat, il vous est fortement conseillé de changer les priorités des documents que vous transmettez afin que vous soyez le seul à pouvoir les consulter (et a fortiori à les modifier). Pour se faire vous pouvez utiliser la commande:

chmod og-rwx vos-fichiersvos fichiers désignent les fichiers que vous avez transmis.

Remettez également une version papier de votre listing. Vous pouvez me remettre directement vos TP, soit au début ou à la fin d'un cours. En dernier recours, vous pouvez également le déposer à mon bureau (2251 du pavillon André-Aisenstat). En cas d'absence, veuillez glisser votre listing sous la porte. Une page de garde pour la remise des documents est disponible à la DESI.

Évaluation

Ce TP est noté sur 45 points. Voici quelques détails concernant les critères qui seront appliqués lors de la notation.
  • La non remise électronique (volontaire ou par erreur) est sanctionnée par la note 0.

  • La non remise papier vous pénalise de 10 points.

  • Si votre programme ne compile pas, vous perdez 25 points. À ce sujet, il est important de noter que tous vos TPs seront exécutés par les démonstrateurs sur une machine Linux avec le compilateur jdk-1.2. Si par choix vous décidez d'utiliser un autre compilateur, vérifiez que le code que vous avez produit (qui normalement tourne chez vous) fonctionne bien sur les ordinateurs de la DESI avec le compilateur jdk-1.2. En particulier, Visual J++ vous donne accès à des packages microsoft qui ne sont pas supportés par la norme JAVA. En les utilisant, vous vous exposez à des problèmes au moment de l'évaluation.

    Pour être précis: Une requète du genre "Monsieur promis juré chez moi ca tourne" ne changera rien quant à la notation...

  • Une fois compilé (si votre programme compile), votre programme sera alors exécuté avec un jeu de test dont vous n'avez pas connaissance. S'il ne répond pas aux exigences du TP vous perdez des points:
    • votre programme "plante": vous perdez 15 points (puis 5 points à chaque autre problème jugé important par le démonstrateur qui corrige le TP).
    • votre programme a un comportement innatendu dû à un problème important: vous perdez 10 points (puis 5 points à chaque autre problème jugé important par le démonstrateur qui corrige le TP).

  • Enfin, votre programme sera évalué sur 20 points par vos démonstrateurs selon les critères habituels tels que:
    • bon découpage du programme,
    • clareté du code,
    • qualité du code,
    • algorithmique,
    • robustesse (dépassements de limites de tables non testés, etc)
    • etc...

Quelques exemples:

  1. votre programme ne compile pas sous jdk-1.2 : vous avez au plus 20 points.
  2. votre programme compile mais plante à l'exécution, vous avez au maximum 30 points
  3. votre programme compile, mais témoigne d'une ou plusieurs erreurs importantes, vous avez au maximum 35 points.
  4. votre programme est parfait, vous n'avez pas fait la remise papier, vous avez 35 points.
  5. le cas normal: votre programme compile, s'exécute normalement: vous avez au moins 25 points.