Vous êtes sur la page 1sur 8

Ministre de lEnseignement Suprieur Direction Gnrale des Etudes Technologiques Institut Suprieur des Etudes Technologiques de Djerba

Problme : PIZZA Sharp opre un comptoir et un service de livraison de pizzas. Selon les connaisseurs, surtout des tudiants et des sportifs regardant le football la tl, PIZZA Sharp fait les meilleures pizzas en ville. Monsieur Salami, le propritaire, dsire amliorer son systme de prise de commande et de cuisine. Il vous demande de l'aider implmenter en c# son systme dinformation. 1- La cuisine : a- Les ingrdients Les pizzas son composs dingrdients (pate, sauce, mozzarella, cpre ). Ces ingrdients sont modliss par deux classes qui sont : Ingrdient et supplment selon le diagramme suivant :

qte est la quantit ncessaire dun ingrdient ou dun supplment pour cuisiner une pizza. prix est le prix a ajouter quant un client demande un supplment. Q1.Implmentez en C# les classes Ingredient et Supplement Correction:
public class Ingredient { protected string nom; protected int qte; public Ingredient(string n, int q) {
1

this.nom = n; this.qte = q; } public override string ToString() { return ("Ingredient de base "+this.nom+", Qte: "+this.qte); } } public class Supplement : Ingredient { private new int qte; private decimal prix; public decimal PRIX { get { return prix; } set { prix = value; } } public Supplement(string n,int q, decimal p): base(n,q) { this.prix = p; this.qte = q; } public override string ToString() { return ("Supplement " +base.nom+" ,Qte: "+qte+" Prix: "+prix); } }

b- Les Pizzas : Les Pizzas de Monsieur Salami sont modliss par la classe Pizza . La classe pizza possde les attributs suivants : nom : Nom de la pizza (4 saisons, Royale, Neptune .) (de type string) prixBase : Le prix de base de la pizza sans compter les supplments. (de type double) Ingrdients : ArrayList de type Ingredient Forme : la forme de la pizza qui est de type Forme donn par le diagramme de classe suivant :

Nb : Nimplmentez pas ce diagramme. Les mthodes de la classe Pizza Sont :

Nb : Le premier constructeur permet dinitialiser une Pizza avec une liste dingrdients vide. Le deuxime constructeur permet dinitialiser une pizza avec une ArrayList dingrdients (I) La classe Pizza possde une seule proprit INGREDIENTS qui permet daccder lattribut priv ingrdients. Enfin, la classe pizza implmente linterface IPizza suivante :

GetPrix() permet de calculer le prix Total dune pizza (prix de base + le prix des supplmnts) GetSurface() permet de calculer la surface de la pizza (suivant quelle soit rectangulaire ou ronde) Q2. Implmentez en C# la classe Pizza et linterface IPizza.

Corrcetion :
public interface IPizza { decimal GetPrix(); void AfficherDetail(); double GetSurface(); } public class Pizza : IPizza { private string Nom; private Forme Forme; private decimal PrixBase; private ArrayList Ingredients; public ArrayList INGREDIENTS { get { return Ingredients; } set { Ingredients = value; } } public Pizza(string n, Forme f, decimal Pb) { this.Nom = n; this.Forme = f; this.PrixBase = Pb; this.Ingredients = new ArrayList(); } public Pizza(string n, Forme f, decimal Pb, ArrayList I) { this.Nom = n; this.Forme = f; this.PrixBase = Pb; this.Ingredients = I; } public void AddIngredient(Ingredient i) { this.Ingredients.Add(i); }

#region IPizza Members public decimal GetPrix() { decimal r = PrixBase; foreach (Ingredient i in Ingredients) { if (i is Supplement) { Supplement s = (Supplement)i; r += s.PRIX; } }

return r; } public void AfficherDetail() { this.Afficher(); foreach (Ingredient i in Ingredients) Console.WriteLine(i); } public double GetSurface() { double surface=0; if (this.Forme is Rectangle) { Rectangle r = (Rectangle)Forme; surface=r.LARGEUR * r.HAUTEUR; } else if (this.Forme is Cercle) { Cercle c = (Cercle)Forme; surface=Math.PI * (c.DIAMETRE/2)* (c.DIAMETRE/2); } return (surface); } #endregion public void Afficher() { Console.WriteLine(this.Nom + "," + this.Forme +" Prix: "+ this.PrixBase); } }

Q3. Ecrire une fonction main () dans laquelle vous crer une pizza Royale de forme circulaire ( Maxi , diamtre 30) avec comme ingrdient de base {pate, sauce mozzarella}. Ajoutez les supplments {Champignon, Thon} (Fixez le prix de base et le prix des supplments selon votre choix)
static void Main() { Rectangle r = new Rectangle("rectangle", 10, 10); Cercle c = new Cercle("Maxi", 30); Pizza P = new Pizza("Marguerita",c, (decimal)3.5); Ingredient i1 = new Ingredient("Pate", 150); Ingredient i2 = new Ingredient("Sauce", 100); Ingredient i3 = new Ingredient("Mozzarella", 70); Ingredient i4 = new Ingredient("Capre", 20); Supplement s1 = new Supplement("Fromage", 100, (decimal)0.5F); Supplement s2 = new Supplement("Thon", 140, (decimal)0.7F); P.AddIngredient(i1); P.AddIngredient(i2); P.AddIngredient(i3); P.AddIngredient(i4); P.AddIngredient(s1); P.AddIngredient(s2); Pizza z = new Pizza("4 Saisons", r, (decimal)0.8, P.INGREDIENTS); }

2. Les commandes:

Les commandes arriveraient de deux faons : par tlphone et par des clients venant directement au comptoir. Pour les commandes tlphoniques, on enregistre le numro du tlphone du client qui a appel et la distance de livraison en km (qui sera ajout au prix de la commande) (0,5 x distance) Pour les commandes en comptoir on enregistre seulement le numro de table du client. (Pas de frais supplmentaires de livraison). Le systme de commande est modlis par le diagramme de classe suivant :

NbrCmd est un attribut de classe qui reprsente le nombre de commandes cres. numero : est le numro de la commande. (Le nombre de commandes cres +1) Pizzas : La liste des pizzas commandes par le client. Q4.Donnez limplmentation de linterface ICommande.
public interface ICommande { double TotalCommnde(); void AfficherDetail(); }

Q5. Donnez limplmentation des Classes Commande, CommandeComptoir et CommandeTelephone.


public abstract class Commande : ICommande { protected static int NbrCmd; protected int numero; protected ArrayList Pizzas;

public Commande() { this.numero = NbrCmd + 1; Pizzas = new ArrayList(); } public void AjouterPizza(Pizza p) { this.Pizzas.Add(p); } #region ICommande Members public virtual double TotalCommnde() { double T=0; foreach (Pizza p in Pizzas) { T += (double)p.GetPrix(); } return (T); } public abstract void AfficherDetail(); #endregion } public class CommandeComptoir : Commande { private int NumTable; public CommandeComptoir(int n) { this.NumTable = n; } public override double TotalCommnde() { return base.TotalCommnde(); } public override void AfficherDetail() { Console.WriteLine("Numro "+ this.numero + " Table " + this.NumTable); } } public class CommandeTelephone : Commande { private string Telephone; private int distance; public CommandeTelephone(string Tel, int d): base() { this.Telephone = Tel; this.distance = d; } public override double TotalCommnde() { return (base.TotalCommnde()+(0.1*distance)); } public override void AfficherDetail() {

Console.WriteLine("Numero " + this.numero + " Telephone " + this.Telephone + " Distance " + this.distance); foreach (Pizza p in Pizzas) p.AfficherDetail(); } }

Q6. Monsieur Salami gre un tableau de commandes (de taille 100) chaque jour. Ecrire une fonction main qui permet dinitialiser le tableau et dy ajouter deux commandes : Une par tlphone (deux pizzas {Margherita et Spciale} dun client qui habite a 10 km, lautre directement au comptoir (Une pizza 4 saisons).
Pizza z = new Pizza("4 Saisons", r, (decimal)0.8, P.INGREDIENTS); Commande[] C = new Commande[4]; C[0] = new CommandeTelephone("21 689 300", 12); C[0].AjouterPizza(P); C[0].AjouterPizza(z); C[0].AfficherDetail(); Console.WriteLine("total commande "+C[0].TotalCommnde().ToString());

Vous aimerez peut-être aussi