26 Avr2016
EFM - Programmation orientée objet - 2014-2015
On souhaite créer une application pour la gestion des factures d’un magasin pour cela on vous demande d’écrire 3 classes de cette application.
Travail demandé:
Dans ce magasin un article est identifié par:
- code
- désignation
- prix
- catégorie : ne peut prendre que les valeurs « Informatique » ou « Bureautique »
- Ecrire la classe Article :(0,5 pt)
- Ecrire les attributs (ils doivent être visibles dans les classes filles de la classe article)(2pts)
- Ecrire l’Accesseur pour l’attribut catégorie(1pt)
- Ecrire le Constructeur par défaut et d’initialisation(1pt)
- Ecrire la méthode virtuelle getPrix() pour retourner le prix de l'article(1pt)
- Ecrire la méthode setPrix(double) : pour changer le prix de l'article(1pt)
- Ecrire la méthode toString()qui renvoie toutes les propriétés séparées par un point-virgule. (2pts)
- Ecrire la méthode Equals() :2 articles sont égaux s’ils ont les mêmes propriétés(2pts)
- Ecrire l’exception CatégorieInvalideException() qui se déclenche si la catégorie est invalide(2pts)
Un article en solde comprend une information additionnelle :
- Remise : pourcentage de réduction sur le prix d'origine
- Ecrire la classe ArticleEnSolde(1pt)
- Ecrire les Attributs(1pt)
- Ecrire les Constructeurs par défaut et d’initialisation (3pts)
- redéfinir la méthode getPrix(), afin de tenir compte du solde. (3pts)
Le magasin établit des factures numérotées automatiquement (en partant de 1) et datées.
Une facture est identifiée alors par :
- Numéro de la facture (automatiquement incrémenté)
- Date facture (prend par défaut la date du système)
- Collection d’achats
On considère une classe achat ayant comme attributs l’article acheté et la quantité achetée (il n’est pas demandé d’écrire la classe Achat)
public class Achat { privateintnuméro_achat; private Article article_acheté; privateint quantité; }
- Ecrire la classe Facture (0,5 pt)
- Ecrire les attributs (3pts)
- Ecrire les Constructeurs par défaut et d’initialisation (3pts)
- Ecrire la méthode void Ajouter (Achat a): permet d’ajouter un achat à la collectionachats, vérifier la non existence du même achat dans la collection, dans le cas contraire la méthode doit afficher un message d’erreur(3pts)
- Ecrire la Méthode Double Montant_facture(): retourne le montant total de la facture(3pts)
- Ecrire la méthode Enregistrer_Achats(string nom_fichier):permet d’enregistrer dans un fichier binaire la liste des achats triée par désignation(3pts)
- Ecrire la Méthode Tostring()qui renvoie le numéro et la date de facture avec la liste des articles achetées de la façon suivante :(4pts)
Numéro facture …… date facture 15/05/2015 Liste des achats Désignation remise prix(en DH) quantité prix Total …………………………………………………………… Montant de la facture :……………………………………….. |
La classe Article:
class Article { protected int code; protected string designation; protected double prix; protected string categorie; public string Designation { get { return designation; } set { designation = value; } } public double Prix { get { return prix; } set { prix = value; } } public string Categorie { get { return categorie; } set { if (value.ToLower() == "informatique" || value.ToLower() == "bureautique") categorie = value; else throw new CategorieInvalideException(); } } public Article() { } public Article(int c, string d, double p, string cat) { code = c; designation = d; prix = p; Categorie = cat; //Utiliser la propriété au lieu de l'attribut } public virtual double GetPrix() { return prix; } public void SetPrix(double p) { if (p > 0) prix = p; else throw new Exception("Prix Invalide"); } public override string ToString() { return "Code: " + code + "Désignation" + designation + "Prix: " + prix + "Catégorie: " + Categorie; } public override bool Equals(object obj) { if (obj == null) return false; else if (obj == this) return true; else if (obj.GetType() != this.GetType()) return false; else { Article A=(Article)obj; if (A.code == this.code && A.designation == this.designation && A.prix == this.prix && A.Categorie == this.Categorie) return true; else return false; } } }
La classe Article en Solde:
class ArticleEnSolde:Article { private double remise; public double Remise { get { return remise; } set { remise = value; } } public ArticleEnSolde() : base() { } public ArticleEnSolde(int c, string d, double p, string cat, double r) : base(c, d, p, cat) { if (r >= 0) remise = r; else throw new Exception("Valeur remise invalide"); } public override double GetPrix() { return Prix*(1-remise/100); } }
La classe Achat:
[Serializable] class Achat : IComparable { private int numeroachat; private Article article_achete; private int quantite; public int Numeroachat { get { return numeroachat; } set { numeroachat = value; } } public Article Article_achete { get { return article_achete; } set { article_achete = value; } } public int Quantite { get { return quantite; } set { quantite = value; } } public Achat(int num, Article art, int q) { numeroachat = num; article_achete = art; quantite = q; } public int CompareTo(Object o) { Achat a = (Achat)o; return article_achete.Designation.CompareTo(a.article_achete.Designation); } }
La classe Facture:
class Facture { private static int compteur = 0; private int code; private DateTime date; private List<Achat> A; public int Code { get { return code; } } public Facture() { compteur++; code = compteur; date = DateTime.Today; A = new List<Achat>(); } public Facture(List<Achat> L) { compteur++; code = compteur; date = DateTime.Today; A = new List<Achat>(); A.AddRange(L); } public void Ajouter(Achat a) { bool b = true; for (int i = 0; i < A.Count; i++) { if (A[i].Numeroachat == a.Numeroachat) { b = false; break; } } if (b == true) { A.Add(a); Console.Out.WriteLine("L'achat a été bien ajouté"); } else Console.Out.WriteLine("Achat existe déjà"); } public double Montant_Facture() { double s = 0; for (int i = 0; i < A.Count; i++) { s += A[i].Article_achete.GetPrix() * A[i].Quantite; } return s; } public void Enregistrer(string nom_fichier) { List<Achat> temp = new List<Achat>(); temp.AddRange(A); temp.Sort(); //Trier les achats par désignation (Implémenter dans la classe Achat la méthode CompareTo de l'interface IComparable) BinaryFormatter b = new BinaryFormatter(); Stream f = File.OpenWrite(nom_fichier); b.Serialize(f, temp); f.Close(); Console.Out.WriteLine("Enregistrement terminé"); } public override string ToString() { string s1 = "", s2 = "", s3 = ""; s1 = "Numéro facture: " + Code + " Date Facture: " + date.ToShortDateString() + "\r\n"; s2 = "Liste d'achats:\r\nDésignation\tRemise\tPrix(en DH)\tQuantité\tPrix total\r\n"; if (A.Count == 0) s3 = "-----------------------------\n"; else { for (int i = 0; i < A.Count; i++) { s3 = s3 + A[i].Article_achete.Designation + "\t"; if (A[i].Article_achete.GetType() == typeof(Article)) s3 = s3 + "0\t"; else { ArticleEnSolde at = (ArticleEnSolde)A[i].Article_achete; s3 += at.Remise + "\t"; } s3 += A[i].Article_achete.Prix + "\t\t"; s3 += A[i].Quantite + "\t\t"; s3 += A[i].Quantite * A[i].Article_achete.GetPrix() + "\r\n"; } } s3 = s3 + "Montant de la facture: " + Montant_Facture(); return s1 + s2 + s3; } }
Nom | Taille | Clics | Téléchargements |
EFM_POO - 2015.pdf | 701.71 Ko | 6275 | Télécharger |