03 Mar2016
Les classes abstraites - La classe Employé
Objectif:
- Créer une classe abstraite.
- Dériver une classe abstraite
- Implémenter une méthode abstraite
Énonce:
Soit la classe abstraite Employé caractérisée par attributs suivants :
- Matricule
- Nom
- Prénom
- Date de naissance
La classe Employé doit disposer des méthodes suivantes :
- un constructeur d’initialisation
- des propriétés pour les différents attributs
- la méthode Tostring
- une méthode abstraite GetSalaire.
Un ouvrier est un employé qui se caractérise par sa date d’entrée à la société.
- Tous les ouvriers ont une valeur commune appelée SMIG=2500 DH
- L’ouvrier a un salaire mensuel qui est : Salaire = SMIG + (Ancienneté en année)*100.
- De plus, le salaire ne doit pas dépasser SMIG*2.
Un cadre est un employé qui se caractérise par un indice.
- Le cadre a un salaire qui dépend de son indice :
- 1 : salaire mensuel 13000 DH
- 2 : salaire mensuel 15000 DH
- 3 : salaire mensuel 17000 DH
- 4 : salaire mensuel 20000 DH
Un patron est un employé qui se caractérise par un chiffre d’affaire et un pourcentage.
- Le chiffre d’affaire est commun entre les patrons.
- Le patron a un salaire annuel qui est égal à x% du chiffre d'affaire : Salaire = CA*pourcentage/100
Travail à faire:
- Créer la classe abstraite Employé.
- Créer la classe Ouvrier, la classe Cadre et la classe Patron qui héritent de la classe Employé, et prévoir les Constructeurs et la méthode ToString de chacune des 3 classes.
- Implémenter la méthode GetSalaire() qui permet de calculer le salaire pour chacune des classes.
La classe Employé:
//Auteur : CHAOULID //Copyright: Exelib.net abstract class Employe { private int matircule; private string nom; private string prenom; private DateTime datenaissance; public int Matircule { get { return matircule; } set { matircule = value; } } public string Nom { get { return nom; } set { nom = value; } } public string Prenom { get { return prenom; } set { prenom = value; } } public DateTime Datenaissance { get { return datenaissance; } set { datenaissance = value; } } public Employe(int matricule,string nom,string prenom,DateTime dn) { this.matircule = matricule; this.nom = nom; this.prenom = prenom; this.datenaissance = dn; } public override string ToString() { return "Matricule: " + matircule + " Nom: " + nom + " Prénom: " + prenom + "Date de naissance: " + datenaissance.ToShortDateString(); } public abstract double GetSalaire(); } }
La classe Ouvrier:
class Ouvrier : Employe { private DateTime dateentree; private static double sMIG = 2500; public static double SMIG { get { return sMIG; } } public DateTime Dateentree { get { return dateentree; } set { dateentree = value; } } public Ouvrier(int m, string n, string p, DateTime dn, DateTime de) : base(m, n, p, dn) { dateentree = de; } public override string ToString() { return "Employé:"+" "+base.ToString()+" Date d'entrée: "+dateentree.ToShortDateString(); } public override double GetSalaire() { double salaire; int Anciennete = DateTime.Now.Year - dateentree.Year; if (dateentree.AddYears(Anciennete) > DateTime.Now.Date) Anciennete--; if (sMIG + Anciennete * 100 <= 2 * sMIG) salaire = sMIG + Anciennete * 100; else salaire = sMIG * 2; return salaire; } }
La classe Cadre:
class Cadre : Employe { private int indice; public int Indice { get { return indice; } set { indice = value; } } public Cadre(int matricule, string nom, string prenom, DateTime dn, int indice) : base(matricule, nom, prenom, dn) { this.indice = indice; } public override string ToString() { return "Cadre: "+" "+base.ToString()+" Indice: "+indice; } public override double GetSalaire() { if (indice == 1) return 13000; else if (indice == 2) return 15000; else if (indice == 3) return 17000; else if (indice == 4) return 20000; else return -1; //Problème d'indice } }
La classe Patron:
class Patron : Employe { private static double ca; private double pourcentage; public static double Ca { get { return ca; } set { ca = value; } } public double Pourcentage { get { return pourcentage; } set { pourcentage = value; } } public Patron(int matricule, string nom, string prenom, DateTime dn, double p) : base(matricule, nom, prenom, dn) { this.pourcentage = p; } public override string ToString() { return "Patron: "+" "+base.ToString()+" Pourcentage: "+pourcentage+"%"; } public override double GetSalaire() { return Math.Round((ca * pourcentage / 100) / 12, 2); } }
Le programme de test: (Un exemple)
class Program { static void Main(string[] args) { // un exemple de programme de test simple Ouvrier o = new Ouvrier(1, "Nom1", "Prenom1", new DateTime(1980, 2, 3), new DateTime(2000, 4, 5)); Console.Out.WriteLine(o); Console.Out.WriteLine("Salaire de l'employé: " + o.GetSalaire()); Console.Out.WriteLine("***********************************"); Cadre c = new Cadre(2, "Nom2", "Prenom2", new DateTime(1986, 4, 3), 3); Console.Out.WriteLine(c); Console.Out.WriteLine("Le salaire du cadre est: " + c.GetSalaire()); Console.Out.WriteLine("***********************************"); Patron.Ca = 17000000; Patron p = new Patron(3, "Nom3", "Prenom3", new DateTime(1970, 6, 6), 3); Console.Out.WriteLine(p); Console.Out.WriteLine("Le salaire du patron est: " + p.GetSalaire()); Console.ReadKey(); } }