DJIAN Samuel
ASTRE Jonathan
L2-info
Compte rendu de tp
Partie A : Programmation en langage C
Traduction de l’énoncé en shéma entité/association
Vend
Clients
Employes
Magasin
Achète
Produits
Est composé
Rayons
Gère
Approvisionne
Fournisseurs
Du shéma Entité/Association au programme C
A partir du shéma ci-dessus nous avons choisi de créer une classe pour chaque entité (Produit,
Fournisseur, Rayon, Employé, Client), plus une classe Magasin qui a pour but de stocker toutes les
données sous forme de tableau de classes.
class Magasin
{
private:
Produit *TabProduits;
Rayon *TabRayons;
Employe *TabEmployes;
Fournisseur *TabFournisseurs;
Client *TabClients;
}
Pour les attributs des cinq autres classes, nous nous sommes servis :
1) des informations du texte
Rayon
: nom
Employé : nom, prénom, âge, salaire, adresse, rayon d’affectation, responsable
Produit
: quantité et seuil de réapprovisionnement
Client
: entreprise/particulier
2) des relations du schéma entité/association
Fournisseur : Produits
Produit
: Rayons, Clients,Fournisseurs
Rayon
: Produits, Employés
Employé : Rayons, Clients
Client
: Produits, Employés
3) du questionnaire
Produit
: prix d’achat, prix de vente
Fournisseur : ville, nombre de livraisons
Employé : nombre de ventes
Client
: dépense
Remplissage du système avec des données permettant de valider son comportement
Le remplissage du système se réalise lorsque l’on lance, dans le fichier main.cpp, le
constructeur par défaut de la classe magasin. Ce dernier lance successivement les constructeurs des
cinq autes classes. Pour nous permettre de répondre correctement aux questions nous avons décidé
de créer 4 rayons (obligatoire), 20 produits, 8 employés, 3 fournisseurs et 10 clients.
Pour simplifier le code et nous concentrer sur l'algorithmique, nous avons choisi d'attribuer 5
produits a chaque rayon, ainsi que 2 employés dont un responsable. 3 fournisseurs au total
fournissent le magasin et 10 clients (paticulier ou entreprise) achetant chacun 2 produits.
Algorithmes permettant de répondre aux questions
Les algorithmes permettant de répondre aux questions sont définis sous forme de méthodes de
la classe magasin. Ils sont codés dans le fichier fonction.cpp puis appelés dans le fichier main. Ces
méthodes sont définies en tant que void, elles ne renvoi donc rien, elles affichent seulement le
résultat. Pour des raisons évidantes d’accessibilité nous avons aussi du mettre en place des fonctions
get pour certains attributs.
Question a)
Algorithme: Magasin.NomVendeurs();
Données: Magasin M1;
Résultat:
//Pas de données de retour , juste de l'affichage
Début
entier i;
pour i de 1 à 8 faire
Afficher(M1.TableauEmployés[i].Nom());
Fin
Question b)
Algorithme: Magasin.NomVendeursTries();
Données: Magasin M1;
Résultat:
//Les vendeurs sont triés par nom dans le tableau de vendeur
Début
entier i,k ;
Employe eTemp ;
pour k de 1 à 7 faire
pour i de 1 à 7 faire
si Magasin.TableauEmployes[i] > Magasin.TableauEmployes[i+1] alors
eTemp  Magasin.TableauEmployes[i] ;
Magasin.TableauEmployes[i]  Magasin.TableauEmployes[i+1];
Magasin.TableauEmployes[i+1]  eTemp;
Fin
//Pour cette question nous n’avons pas directement utilisé cet algorithme, nous nous sommes servis
de la fonction « sort() » (tirée de algorithm.h) qui permet de trier une liste ou un tableau de chaine
de caractères, une fois l’opérateur « < » surchargé.
Cet opérateur surchargé ; comparer deux Employes grâce a « < » revient à comparer leur nom grâce
a la fonction « strcmp() » (tirée de string.h).
Question c)
Algorithme: Magasin.ProduitPlusCher();
Données: Magasin M1;
Résultat:
//Pas de données de retour , juste de l'affichage
Début
entiers i,PlusCher;
PlusCher  M1.TableauProduits[1].Prix();
pour i de 2 à 20 faire
si ( PlusCher < M1.TableauProduits[i].Prix()) alors
PlusCher  M1.TableauProduits[i].Prix();
Afficher(PlusCher);
Fin
Question d)
Algorithme: Magasin.ProduitQuantiteSeuil();
Données: Magasin M1;
Résultat:
//Pas de données de retour , juste de l'affichage
Début
entier i;
Afficher(« Nom du Produit Quantité Seuil »);
pour i de 1 à 20 faire
Afficher(TableauProduits[i].Nom());
Afficher(TableauProduits[i].Quantite());
Afficher(TableauProduits[i].Seuil());
Fin
Question g)
Algorithme: Magasin.ClientPlusDepense();
Données: Magasin M1;
Résultat:
//Pas de données de retour , juste de l'affichage
Début
entiers depense,i,client;
depense  TableauClients[1].Depense();
client  1;
pour i de 1 a 10 faire
si ( depense < TableauClient[i].Depense() ) alors
depense  TableauClients[i].Depense();
client  i;
Afficher(« Client ayant fait le plus de dépenses : »);
Afficher(TableauClients[client].Nom());
Afficher(TableauClients[client].Depense());
Fin
Question h)
Algorithme: Magasin.FournisseurPlusLivraisons();
Données: Magasin M1;
Résultat:
//Pas de données de retour , juste de l'affichage
Début
entiers livraisons,i,client;
livraisons  TableauFournisseurs[1].Livraisons();
client  1;
pour i de 2 a 3 faire
si ( livraisons < TableauFournisseurs[i].Livraisons() ) alors
livraisons  TableauFournisseurs[i].Livraisons();
client  i;
Afficher(“Fournisseur ayant effectué le plus de livraisons : “);
Afficher(TableauFournisseurs[client].Nom());
Afficher(TableauFournisseurs[client].Livraisons());
Fin
Question i)
Algorithme: Magasin.ProduitPlusMarge();
Données: Magasin M1;
Résultat:
//Pas de données de retour , juste de l'affichage
Début
entiers marge,i,clients;
marge  TableauProduits[1].Marge();
client  1;
pour i de 2 à 20 faire
si (marge < TableauProduits[i]Marge() ) alors
marge  TableauProduits.Marge();
client  i;
Afficher(« Produits ayant la plus grande marge : »);
Afficher(TableauProduits[client].Nom());
Afficher(TableauProduits[client].Marge());
Fin
Question j)
Algorithme: Magasin.ProduitPlusMarge();
Données: Magasin M1;
Résultat:
//Pas de données de retour , juste de l'affichage
Début
entier i;
Afficher(« Vendeurs ayant effectue plus de 10 ventes : »);
pour i de 1 à 8 faire
si ( TableauEmployes[i].NombreVentes() > 10 ) alors
Afficher(TableauEmployes[i].Nom());
Fin