EFM - Programmation orientée objet - 2015-2016
On souhaite créer une application pour la gestion des employés on vous demande de créer l'ensemble des classes de cette application.
Travail demandé
L’IR ou l'impôt sur le revenu est un impôt global établi sur la totalité des revenus (le salaire) dont dispose une personne au cours d'une année déterminée. Pour déterminer le montant de l’IR on utilise le tableau de barème de l’IR suivant :
Tranches de salaire annuel (en DH) |
Taux IR en % |
0 à 28 000 |
0% |
28 001 à 40 000 |
12% |
40 001 à 50 000 |
24% |
50 001 à 60 000 |
34% |
60 001 à 150 000 |
38% |
Au-delà de 150 000 |
40% |
Par exemple si le salaire d’un employé est 9 500 dh alors :
Son salaire annuel est = salaire x 12 = 11 500 x 12 =114 000 dh
Alors le taux IR est = 38%
- Créer la classe abstraite IR avec :
- L’attribut _tranches: Un tableau statique initialisé par les valeurs des tranches ci-dessus. (1.5 pts)
- L’attribut _tauxIR: Un tableau statique de Taux IR initialisé par les valeurs de l’IR correspondantes (1.5 pts)
- Une fonction statique getIR(salaire) qui permet de retourner le taux d’IR correspondant au salaire passé en paramètre. (3pts)
- Créer l’interface IEmploye avec les méthodes suivantes:
- Une méthode Age() qui retournera l’âge d’un employé (Entier). (1pt)
- Une méthode Ancienneté() qui retournera l’ancienneté d’un employé (le nombre d’années qu’il a travaillé). (1pt)
- Une Méthode DateRetraite(ageRetraite) pour renvoyer la date de retraite de l’employé : (1pt)
Date de retraite = date de naissance + âge de retraite
Un employé est caractérisé par:
- Matricule (incrémenté automatiquement) : _mtle
- Nom : _nom
- Date de naissance : _dateNaissance
- Date d’embauche (la date de recrutement) : _dateEmbauche
- Salaire de base : _salaireBase
- Créer la classe Employe avec :
- Les attributs (ils doivent être visibles dans les classes filles de la classe Employe) (2pts)
- Les deux accesseurs DateEmbauche et DateNaissance sachant que l’âge de l’employé à la date de recrutement ne doit pas être inférieur à 16 ans, lever une exception sinon. (3pts)
- Un constructeur par défaut et un autre d’initialisation. (3pts)
- Une méthode abstraite SalaireAPayer() pour retourner le salaire net d’un employé(1pt)
- L’implémentation de l’interface IComparable<Employe> pour comparer deux employés par nom. (2pts)
- L’implémentation de l’interface IEmploye avec ces trois méthodes. (5pts)
- La redéfinition de la méthode toString() qui renvoie toutes les propriétés séparées par « - » (1pt)
- La redéfinition de la méthode Equals() : 2 employés sont égaux s’ils ont le même matricule.(2pts)
Un formateur est un employé avec en plus :
- Le nombre des heures supplémentaires par mois : _heureSup.
- La rémunération par heur supplémentaire, dont la valeur est partagée par tous les formateurs et par défaut égale à 70,00 dh : _remunerationHSup
- Créer la classe Formateur avec :
- Les attributs. (2pts)
- L’accesseur RemunerationHSup. (1pt)
- Les deux constructeurs par défaut et d’initialisation. (3pts)
-
La méthode SalaireAPayer() pour calculer le salaire net d’un formateur sachant que : (3pts)
Salaire net = (SalaireBase + NbrHS x RemunerationHSup) x (1 – taux IR )
Où
N.B : Utiliser la méthode getIR de la classe IR pour calculer le taux IR.
- La méthode ToString(). (1pt)
Un Agent est un employé avec en plus :
- Le montant de la prime de responsabilité : _primeResponsabilite.
- Créer la classe Agent avec :
- La méthode SalaireAPayer() pour calculer le salaire net d’un agnet sachant que : (2pts)
Salaire net = (SalaireBase + PrimeResponsabilité) x (1 – taux IR )
1) La classe abstraite IR
public abstract class IR { //L'attribut _tranches: Un tableau statique initialisé par les valeurs des tranches ci-dessus. private static double[] _tranches = {0,28001,40001,50001,60001,150001}; //L'attribut _tauxIR: Un tableau statique initialisé par les valeurs de l'IR correspondantes. private static double[] _tauxIR = {0,0.12,0.24,0.34,0.38,0.40}; //Une fonction statique getIR(salaire) qui permet de retourner le taux d'IR //correspondant au salaire passé en paramètre. public static double getIR(double salaire) { for (int i = 1; i < 6; i++) { if (salaire < _tranches[i]) return _tauxIR[i - 1]; } return _tauxIR[5]; } }
2) L'interface IEmploye
public interface IEmploye { //Une méthode Age() qui retournera l'âge de l'employé: int Age(); //Une méthode Anciennete() qui retournera l'ancienneté d'un employé (le nombre d'années qu'il a travaillé). int Anciennete(); //Une méthode DateRetraite(ageRetraite) pour renvoyer la date de retraite de l'employé: DateTime DateRetraite(int ageRetraite); }
3) La classe Employe
[Serializable()] public abstract class Employe:IEmploye,IComparable<Employe> { //Les attributs (ils doivent être visibles dans les classes filles de la classe Employé) protected int _mtle; protected string _nom; protected DateTime _dateNaissance, _dateEmbauche; protected double _salaireBase; private static int cpt = 0; public int Matricule { get { return _mtle; } } public string Nom { get { return _nom; } set { _nom = value; } } //Les deux accesseurs DateEmbauche et DateNaissance sachant que l'âge de l'employé à la date d'embauche ne doit être // inferieure à 16 ans, lever une exception sinon: public DateTime DateNaissance { get { return _dateNaissance; } set { _dateNaissance = value; } } public DateTime DateEmbauche { get { return _dateEmbauche; } set { TimeSpan ts = value - _dateNaissance; if ((ts.TotalDays / 365) < 16) throw new Exception("L'âge au recrutement doit être supérieur à 16 ans"); _dateEmbauche = value; } } public double SalaireBase { get { return _salaireBase; } set { _salaireBase = value; } } //Un constructeur par défaut et un autre d'initialisation public Employe() { cpt++; _mtle = cpt; _nom = ""; _dateEmbauche = DateTime.Now; _dateNaissance=new DateTime(2000,1,1); _salaireBase = 0; } public Employe(string nom, DateTime dateNaissance, DateTime dateEmbauche, double salaireBase) { _nom = nom; _dateNaissance = dateNaissance; DateEmbauche = dateEmbauche; _salaireBase = salaireBase; cpt++; _mtle = cpt; } //Une méthode abstraite SalaireAPayer() pour retourner le salaire net d'un employé: public abstract double SalaireAPayer(); //L'implémentation de l'interface IComparable<Employe> pour comparer deux employés par nom. public int CompareTo(Employe e) { return _nom.CompareTo(e._nom); } //L'implémentation de l'interface IEmploye avec ses trois méthodes: public int Age() { TimeSpan ts = DateTime.Now - _dateNaissance; return (int)ts.TotalDays / 365; } public int Anciennete() { TimeSpan ts = DateTime.Now - _dateEmbauche; return (int)ts.TotalDays / 365; } public DateTime DateRetraite(int ageRetraite) { TimeSpan ts = new TimeSpan(ageRetraite*365,0,0,0); DateTime dateRetraite = new DateTime(_dateNaissance.Year, _dateNaissance.Month, _dateNaissance.Day).Add(ts); return dateRetraite; } //La redéfinition de la méthode ToString() qui renvoie toutes les propriétés séparées par "-". public override string ToString() { return _mtle + "-" + _nom + "-" + _dateNaissance.ToString("dd/MM/yyyy") + "-" + _dateEmbauche.ToString("dd/MM/yyyy") + "-" + _salaireBase; } //La redéfinition de la méthode Equals() : 2 employés sont égaux s'ils ont le même matricule: public override bool Equals(object obj) { Employe e = obj as Employe; if (e == null) return false; return _mtle == e._mtle; } }
4) La classe Formateur
[Serializable()] class Formateur:Employe { //Les attributs: private int _heureSup; private static double _remunerationHSup = 70.00; //L'accesseur RemunerationHSup: public static double RemunerationHSup { get { return _remunerationHSup; } set { _remunerationHSup = value; } } public int HeureSup { get { return _heureSup; } set { _heureSup = value; } } //Les deux constructeurs par défaut et d'initialisation: public Formateur():base() { _heureSup = 0; } public Formateur(string nom, DateTime dateNaissance, DateTime dateEmbauche, double salaireBase, int heureSup) : base(nom, dateNaissance, dateEmbauche, salaireBase) { _heureSup = heureSup; } //La méthode SalaireAPayer() pour calculer le salaire net d'un formateur sachant que ... public override double SalaireAPayer() { int NbreHS = _heureSup; if (NbreHS >= 30) NbreHS = 30; return (_salaireBase + NbreHS*_remunerationHSup) * (1 - IR.getIR(_salaireBase*12)); } //La méthode ToString() public override string ToString() { return base.ToString()+"-"+_heureSup; } }
5) La classe Agent
[Serializable()] class Agent:Employe { private double _primeResponsabilite; public double PrimeResponsabilite { get { return _primeResponsabilite; } set { _primeResponsabilite = value; } } public Agent(string nom, DateTime dateNaissance, DateTime dateEmbauche, double salaireBase, double primeResponsabilite) : base(nom, dateNaissance, dateEmbauche, salaireBase) { _primeResponsabilite = primeResponsabilite; } //La méthode SalaireAPayer() pour calculer le salaire net d'un agent sachant que... public override double SalaireAPayer() { return (_salaireBase+_primeResponsabilite)*(1-IR.getIR(_salaireBase*12)); } }
Nom | Taille | Clics | Téléchargements |
EFM POO 2016 | 411.93 Ko | 5604 | Télécharger |