Vous êtes sur la page 1sur 3

using System;

public class Technicien

public static readonly string GRADE_A = "A";

public static readonly string GRADE_B = "B";

public string NumeroSecu { get; private set; }

public string Nom { get; private set; }

public string Grade { get; private set; }

public int Experience { get; private set; }

// Constructeur

public Technicien(string numeroSecu, string nom, string grade, int experience)

if (!EstValideNumeroSecu(numeroSecu))

throw new ArgumentException("Le numéro de sécurité sociale n'est pas valide.");

if (string.IsNullOrWhiteSpace(nom))

throw new ArgumentException("Le nom ne peut pas être vide ou nul.");

NumeroSecu = numeroSecu;

Nom = FormatNom(nom);

if (grade != GRADE_A && grade != GRADE_B)

throw new ArgumentException("Le grade doit être égal à GRADE_A ou GRADE_B.");

Grade = grade;

if (experience < 0)

throw new ArgumentException("L'expérience ne peut pas être négative.");


Experience = experience;

private bool EstValideNumeroSecu(string numeroSecu)

return numeroSecu.Length == 13 && (numeroSecu.StartsWith("1") ||


numeroSecu.StartsWith("2"));

private string FormatNom(string nom)

return char.ToUpper(nom[0]) + nom.Substring(1).ToLower();

public override bool Equals(object obj)

if (obj == null || GetType() != obj.GetType())

return false;

Technicien other = (Technicien)obj;

return NumeroSecu == other.NumeroSecu;

public override int GetHashCode()

return NumeroSecu.GetHashCode();

public override string ToString()

{
string genre = EstUneFemme() ? "Mme " : "M. ";

return $"{genre}{Nom}";

public double CalculeCoutHoraire()

double coutHoraire = Grade == GRADE_A ? 20 : 30;

if (Experience >= 5 && Experience < 10)

coutHoraire *= 1.05;

else if (Experience >= 10)

coutHoraire *= 1.15;

return coutHoraire;

public bool EstUneFemme()

return NumeroSecu.StartsWith("2");

public double CalculeCoutPourUneIntervention(double tempsPasse)

double coutHoraire = CalculeCoutHoraire();

return Math.Round(coutHoraire * tempsPasse, 2);

Vous aimerez peut-être aussi