Cvičení 5

Cílem cvičení bude implementovat strukturu tříd podle následujícího třídního diagramu:

Třídní diagram

Během implementace se řiďte třídním diagramem (některé třídy jsou abstraktní).

  1. Person

    1. Jméno bude pouze pro čtení. Jméno a věk bude nutné předat při vytváření instance.
    2. Metoda PrintInfo bude virtuální. V rámci metody se do konzole vypíše jméno a věk.
  2. Employee

    1. Metoda GetSalary (získání platu) bude abstraktní.
    2. Metoda GetBonus (prémie k platu) bude virtuální a bude vracet hodnotu 0.
    3. Operátory porovnání budou porovnávat zaměstnance na základě jejich platu.
  3. MonthlySalaryEmployee

    1. Při vytváření instance bude nutné předat měsíční plat (MonthlySalary).
    2. Finální plat bude vypočítán jako měsíční plat + prémie.
  4. HourlySalaryEmployee

    1. Při vytváření instance bude nutné předat hodinovou mzdu (HourlySalary).
    2. Finální plat bude vypočítán jako počet odpracovaných hodin (HoursWorked) × hodinová mzda (HourlySalary) + prémie.
  5. Worker

    1. Hodinová mzda bude pevně stanovena na hodnotu 130.
    2. Pokud dělník odpracuje více než 160 hodin, dostane prémii ve výši 5000.
  6. Manager

    1. Měsíční mzda bude pevně stanovena na hodnotu 80 000.
    2. Finální plat bude vypočítán jako měsíční mzda + věk × 500 + prémie.
    3. Metoda PrintInfo bude kromě základních informací vypisovat také Pozice: manager.
  7. Secretary

    1. Měsíční mzda bude pevně stanovena na hodnotu 20 000.
    2. Metoda PrintInfo bude kromě základních informací vypisovat také Pozice: sekretářka.
  8. Population

    1. Bude fungovat jako seznam osob.
    2. PrintUnemployed – vypíše do konzole všechny nezaměstnané.
    3. PrintEmployeesWithSalary – vypíše do konzole všechny zaměstnance a jejich plat.
    4. GetPersonWithHighestSalary – vrátí zaměstnance s nejvyšším platem (využijte přetížení operátorů porovnání).
    5. GetHourlySalaryEmployees – vrátí pole všech zaměstnanců, kteří mají hodinovou mzdu.
    6. IncreaseHourlySalary – navýší hodinovou mzdu předaných zaměstnanců o zadanou částku.
  9. Otestujte aplikaci.

Population population = new Population();

population.Add(new Secretary("Ana", 30));
population.Add(new Manager("Petr", 40));

population.Add(new Worker("Tomáš", 25)
{
    HoursWorked = 90
});

population.Add(new Worker("Monika", 50)
{
    HoursWorked = 200
});

population.Add(new Unemployed("Ondra", 50));

Console.WriteLine("Zaměstnanci:");
population.PrintEmployeesWithSalary();

Console.WriteLine("Nezaměstnaní:");
population.PrintUnemployed();

Console.Write("Osoba s nejvyšším platem:");
var person = population.GetPersonWithHighestSalary();
person.PrintInfo();
Console.WriteLine($"Plat: {person.GetSalary()}");

var hourlySalaryEmployees = population.GetHourlySalaryEmployees();
population.IncreaseHourlySalary(hourlySalaryEmployees, 20);