Le traiteur [gs03] - Exercice

Transcription

Le traiteur [gs03] - Exercice
Le traiteur [gs03] - Exercice
Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner
Unisciel
algoprog
Version 10 avril 2015
Table des matières
1 Le traiteur / pg-traiteurC1 (C++)
1.1 Classe Menu . . . . . . . . . . . . .
1.2 Classe Ligne . . . . . . . . . . . . .
1.3 Classe Commande . . . . . . . . . .
1.4 Classe Client . . . . . . . . . . . .
1.5 Classe Traiteur . . . . . . . . . . .
1.6 Test des classes . . . . . . . . . . .
1.7 Programme de gestion . . . . . . .
1.8 Chargement par fichier . . . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
3
4
4
8
9
11
Le traiteur / pg-traiteurC1 (C++)
Mots-Clés Gestion, Algorithmique, Programmation, C++.
Requis Axiomatique impérative, Classes, Classes (suite).
Cet exercice réalise la gestion informatique des commandes de menus et des clients d’un
traiteur.
1.1
Classe Menu
Un menu est caractérisé par un nom et un prix par personne.
Écrivez une classe Menu ayant pour attributs le nom du menu (chaı̂ne de caractères) et
son prix (réel).
Écrivez un constructeur à deux paramètres initialisant les attributs.
Écrivez des accesseurs getNom du nom et getPrix du prix par personne du menu.
1
Unisciel algoprog – Le traiteur / gs03
2
Validez votre classe avec la solution.
Solution simple
C++ @[TMenuC1.hpp] @[TMenuC1.cpp]
1.2
Classe Ligne
Une commande est caractérisée par une paire « nom du menu, quantités commandées ».
Chaque paire indique quel menu est commandé et pour combien de personnes. On appelle
ces paires des lignes de commande.
Écrivez une classe Ligne ayant pour attributs le nom du menu (chaı̂ne de caractères) et
sa quantité qte (entier positif).
Écrivez un constructeur à deux paramètres initialisant les attributs.
Écrivez des accesseurs getNom du nom et getQte de la quantité de la ligne de commande.
Pour afficher ou calculer le montant d’une ligne de commande, il faut retrouver le prix
associé à un menu ce qui induit une recherche.
Écrivez une méthode interne position(menus,nom) qui recherche et renvoie la position
du menu nom dans une liste (vecteur) de Menu menus.
Écrivez une méthode afficher(menus) qui, étant donnée une liste (vecteur) de Menu menus,
affiche la ligne de commande.
Aide simple
Utilisez la méthode interne pour rechercher le prix associé à un menu.
Unisciel algoprog – Le traiteur / gs03
3
Écrivez une méthode montant(menus) qui, étant donnée une liste (vecteur) de Menu menus,
calcule et renvoie le montant de la ligne de commande.
Validez votre classe avec la solution.
Solution simple
C++ @[TLigneC1.hpp] @[TLigneC1.cpp]
1.3
Classe Commande
Une commande est caractérisée par un numéro de commande, une liste de lignes de
commande, le nom du client ayant effectué la commande et une information indiquant
si la commande est ou non payée.
Écrivez une classe Commande ayant pour attributs :
– Le numéro num de la commande (entier positif).
– Le vecteur cdes des lignes de commande.
– Le nom du client (chaı̂ne de caractères).
– L’information payee (booléen) qui vaut Vrai si la commande a été payée, Faux sinon.
Écrivez un constructeur à deux paramètres (numéro, nom) initialisant les attributs.
Écrivez des accesseurs getNom du nom du client et getNum du numéro de la commande.
Écrivez une méthode ajouterLigne(lm) qui ajoute une Ligne de menu lm à la commande.
Écrivez une méthode afficher(menus) qui, étant donnée une liste (vecteur) de Menu menus,
affiche la commande.
Écrivez une méthode montant(menus) qui, étant donnée une liste (vecteur) de Menu menus,
calcule et renvoie le montant total de la commande.
Unisciel algoprog – Le traiteur / gs03
4
Validez votre classe avec la solution.
Solution simple
C++ @[TCommandeC1.hpp] @[TCommandeC1.cpp]
1.4
Classe Client
Un client est caractérisé par un nom, une adresse, un numéro de carte de crédit et
l’ensemble des commandes qu’il a effectué.
Écrivez une classe Client ayant pour attributs :
– Le nom du client (chaı̂ne de caractères).
– L’adresse adr du client (chaı̂ne de caractères).
– Le numéro de carte de crédit nc (entier positif).
– Le vecteur cdes spécifiant les numéros de commandes effectuées.
Écrivez un constructeur à trois paramètres (nom, adresse, nc) initialisant les attributs.
Écrivez un accesseur getNom du nom client.
Écrivez une méthode ajouterCommande(num) qui ajoute la commande numéro num (entier) à la liste des commandes du client.
Écrivez une méthode supprimerCommande(num) qui supprime la commande numéro num
(entier) de la liste des commandes du client.
Validez votre classe avec la solution.
Solution simple
C++ @[TClientC1.hpp] @[TClientC1.cpp]
1.5
Classe Traiteur
Le traiteur souhaite gérer une liste de clients connus, une liste de menus connus et
une liste de commandes.
Les fonctionnalités souhaitées par le traiteur sont :
– Créer un client et l’ajouter à la liste des clients.
– Créer un menu et l’ajouter à la liste des menus.
– Créer une commande et l’ajouter à la liste de commandes.
– Calculer le montant dû par un client.
Unisciel algoprog – Le traiteur / gs03
5
– Calculer le montant total de toutes les commandes.
– Supprimer une commande de la liste des commandes.
Écrivez une classe Traiteur ayant pour attributs :
– La liste (vecteur) des Client clients.
– La liste (vecteur) des Menu menus.
– La liste (vecteur) des Commande commandes.
Au vu des fonctionnalités souhaitées, écrivez les en-têtes des constructeurs et méthodes.
Écrivez un constructeur par défaut.
Écrivez des accesseurs nclients du nombre de clients, nmenus du nombre de menus et
ncommandes du nombre de commandes.
Écrivez une méthode afficherCommandes qui affiche l’état des commandes à l’écran.
Validez vos méthodes avec la solution.
Solution simple
C++ @[TraiteurC1a.cpp]
Écrivez une méthode interne rechClient(nom) qui recherche un nom (chaine de caractères) de client et renvoie l’indice du client dans le vecteur des Clients, -1 s’il n’existe
pas.
Écrivez une méthode ajouterClient(x) qui ajoute un Client x à la liste des clients
s’il n’existe pas, et ne fait rien sinon. La méthode renvoie le statut de l’opération, c.-à-d.
Vrai si l’opération d’ajout a été réalisée, Faux sinon.
Unisciel algoprog – Le traiteur / gs03
6
Validez vos méthodes avec la solution.
Solution simple
C++ @[TraiteurC1b.cpp]
De même, écrivez une méthode interne rechMenu(nom) qui recherche un nom (chaine de
caractères) de menu et renvoie l’indice du menu dans le vecteur des Menus, -1 s’il n’existe
pas.
Écrivez une méthode ajouterMenu(x) qui ajoute un Menu x à la liste des menus, s’il
n’existe pas et ne fait sinon. La méthode renvoie le statut de l’opération, c.-à-d. Vrai si
l’opération d’ajout a été réalisée, Faux sinon.
Écrivez une méthode ajouterCommande(x) qui ajoute une Commande x à la liste des commandes. La méthode renvoie le statut de l’opération, c.-à-d. Vrai si l’opération d’ajout
a été réalisée, Faux sinon.
Validez vos méthodes avec la solution.
Solution simple
C++ @[TraiteurC1c.cpp]
Unisciel algoprog – Le traiteur / gs03
7
Écrivez une méthode montantDu(nom) qui calcule et renvoie le montant dû par le client
de nom spécifié.
Écrivez une méthode montantTotal qui calcule et renvoie le montant total des commandes.
Validez vos méthodes avec la solution.
Solution simple
C++ @[TraiteurC1d.cpp]
Écrivez une méthode supprimerCommande(num) qui supprime la commande de numéro
num (entier) et qui renvoie le statut de l’opération, c.-à-d. Vrai si l’opération de suppression a été réalisée, Faux sinon.
Validez votre méthode avec la solution.
Solution simple
C++ @[TraiteurC1f.cpp]
Validez la définition de votre classe avec la solution.
Solution simple
C++ @[TraiteurC1.hpp]
Unisciel algoprog – Le traiteur / gs03
1.6
Test des classes
Voici le graphe des appels de la procédure de test.
Écrivez une procédure test_classes qui instancie un Traiteur t.
Ajoutez les clients suivants :
Client("Dupont", "rue", 100)
Client("Rateau", "bld", 200)
Ajoutez les menus suivants :
Menu("Prado",
Menu("India",
Menu("Cheap",
Menu("Light",
56.0)
62.0)
25.0)
42.0)
Ajoutez les commandes suivantes :
c1(1, "Dupont"): Ligne("Prado", 15), Ligne("Light", 3)
c2(2, "Rateau"): Ligne("Cheap", 2)
c3(3, "Dupont"): Ligne("India", 8)
Affichez l’état des commandes.
Calculez et affichez le montant total.
8
Unisciel algoprog – Le traiteur / gs03
9
Testez. Résultat d’exécution.
Ensemble des commandes actuelles:
#cde=1; client Dupont; payee 0
Menu ’Prado’ (56 Euros/pers.) pour 15 personnes
Menu ’Light’ (42 Euros/pers.) pour 3 personnes
#cde=2; client Rateau; payee 0
Menu ’Cheap’ (25 Euros/pers.) pour 2 personnes
#cde=3; client Dupont; payee 0
Menu ’India’ (62 Euros/pers.) pour 8 personnes
Montant total = 1512 Euros
Validez votre procédure avec la solution.
Solution simple
C++ @[pg-traiteurC1a.cpp]
1.7
Programme de gestion
Écrivez une fonction menu qui affiche le menu suivant et renvoie le choix de l’utilisateur.
0:
1:
2:
3:
4:
5:
6:
Quitter
Création d’un client
Création d’un menu
Création d’une commande
Calcul du montant du par un client
Suppression d’une commande
Etat des commandes
Écrivez une procédure creerClient(t) qui demande les caractéristiques d’un client,
instancie un client, puis l’ajoute comme nouveau client à un Traiteur t.
Écrivez une procédure creerMenu(t) qui demande les caractéristiques d’un menu, instancie un menu, puis l’ajoute comme nouveau menu à un Traiteur t.
Unisciel algoprog – Le traiteur / gs03
10
Écrivez une procédure creerCommande(t) qui demande les caractéristiques d’une commande, instancie une commande, ajoute les lignes à la commande puis l’ajoute comme
nouvelle commande à un Traiteur t.
Écrivez une procédure calculerMontant(t) qui demande le nom du client puis calcule
et affiche le montant dû du client chez un Traiteur t.
Écrivez une procédure supprimerCommande(t) qui demande le numéro de la commande
à supprimer puis lance la suppression de la commande chez un Traiteur t.
Écrivez une procédure afficherEtat(t) qui affiche l’état des commandes d’un Traiteur t.
Validez votre fonction et vos procédures avec la solution.
Solution simple
C++ @[traiteurManipA1.cpp]
Écrivez une procédure test_Gestion qui instancie un Traiteur t puis lance la boucle
de gestion en affichant le menu et en effectuant le choix de l’utilisateur.
Unisciel algoprog – Le traiteur / gs03
Testez.
Validez votre procédure avec la solution.
Solution simple
C++ @[pg-traiteurC1b.cpp]
1.8
Chargement par fichier
Étendez l’exercice afin de charger les données par fichier.
11