Вывести идентификатор работника, имя и среднемесячную зарплату для всех элементов списка - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Есть такая задача: Построить три класса (базовый и 2 наследника), которые описывают некоторых работников с почасовой оплатой (один из наследников) и фиксированной оплатой (второй наследник). Описать в базовом классе абстрактный метод для расчёта среднемесячной зарплаты работников. Для почасовой оплаты формула такая: 20.8*8*почасовую ставку, для работников с фиксированной зарплатой, среднемесячная зарплата равна фиксированной месячной оплате. 1) Упорядочить вся последовательность работников по уменьшению среднемесячного заработка. При совпадении зарплаты - упорядочить данные по имени в алфавитном порядке. Вывести идентификатор работника, имя и среднемесячную зарплату для всех элементов списка. 2) Вывести первые 5 имен из полученного выше списка (задача А). 3) Вывести последние 3 идентификатора работника из полученного выше списка (задача А). 4) Организовать запись и чтение коллекции в/из файла. 5) Организовать обработку некорректного формата входного файла. Очень хотелось бы услышать мнение уже имеющих опыт в программировании, как правильнее было бы решить данную задачу. Вот, что делал бы я: Создать три класса - это понятно. Формула вычисления зарплаты реализуется в двух классах и потом работает через ссылку на базовый класс. Далее в базовом классе должна быть коллекция объектов работников. В каждом объекте будет id работника, имя, зарплата. Не совсем понятно, как проводить сортировку коллекции, если в ней содержатся объекты, а тем более по двум критериям (зарплата и (если она совпадает) имя по алфавиту). Пункт 3 вытекает из предыдущего. Запись и чтение коллекции планирую производить с помощью классов BinaryWriter и BinaryReader. Что имеется в виду под некорректным форматом входного файла не совсем понимаю. Если имеется в виду, к примеру, что данные были записаны не в том порядке, в котором проходит чтение, то просто должно вылететь исключение и нужно его обработать. Так ли это? Заранее благодарю за советы!

Решение задачи: «Вывести идентификатор работника, имя и среднемесячную зарплату для всех элементов списка»

textual
Листинг программы
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. #include <fstream>
  5. using namespace std;
  6.  
  7. class Worker
  8. {
  9.   protected:
  10.     string name;
  11.     double salary;
  12.     int ident;
  13.   public:
  14.     Worker(){};
  15.     ~Worker(){};
  16.  
  17.     string getname() {return name;}
  18.     double getsalary() {return salary;}
  19.     virtual void calc()  {}      
  20.     void out()
  21.     {
  22.         cout << name <<  " " << salary << " " << ident << endl;
  23.     }
  24.     void out_in_file()
  25.     {
  26.         ofstream write("E://write.txt", ios_base::app);
  27.         write << name <<  " " << salary << " " << ident << endl;
  28.     }
  29.     void in()
  30.     {      
  31.     cout << "Enter name" << endl;
  32.     getline(cin, name);
  33.     cout << "Enter salary" << endl;
  34.     cin >> this->salary;
  35.      cout << "Enter identification number" << endl;
  36.     cin >> this->ident;
  37.     cin.ignore();
  38.     }
  39.  };
  40.  
  41. class salPerHour : public Worker
  42. {
  43. public:
  44.     salPerHour(){};
  45.     ~salPerHour(){};
  46.  
  47.     void calc()
  48.     {
  49.         this->salary = salary * 20.8 * 8;
  50.     }
  51. };
  52. class salaryFixed : public Worker
  53. {
  54.     public:
  55.     salaryFixed(){};
  56.     ~salaryFixed(){};
  57.    
  58.     void calc()
  59.     {
  60.       this->salary = salary * 1;
  61.     }
  62. };
  63.  
  64. bool compare(Worker *w1, Worker *w2)  
  65. {  
  66.     if (w1->getsalary() == w2->getsalary())
  67.         return w1->getname() < w2->getname();
  68.     return w1->getsalary() > w2->getsalary();
  69. }
  70.  
  71. void main()
  72. {
  73.    Worker *salaryPerHour[5];
  74.    Worker *fixedSalary[5];
  75.    Worker obj;
  76.    int a, b;
  77.    cout << "Enter data about workers with salary per hour " << endl;
  78.    cout << "Enter number of workers : ";
  79.    cin >> a;
  80.    cin.ignore();
  81.    for(int i = 0; i < a; i++)
  82.    {
  83.        salaryPerHour[i] = new salPerHour;
  84.        salaryPerHour[i]->in();
  85.        salaryPerHour[i]->calc();
  86.    }
  87.  
  88.    cout << "Enter data about workers with fixed salary " << endl;
  89.    cout << "Enter number of workers : ";
  90.    cin >> b;
  91.    cin.ignore();
  92.    for(int i = 0; i < b; i++)
  93.    {
  94.        fixedSalary[i] = new salaryFixed;
  95.        fixedSalary[i]->in();
  96.        fixedSalary[i]->calc();
  97.    }
  98.  
  99.     sort(salaryPerHour, salaryPerHour + a, compare);
  100.     sort(fixedSalary, fixedSalary + b, compare);
  101.  
  102.     for(int i = 0; i < a; i++)
  103.     {
  104.         salaryPerHour[i]->out();
  105.         salaryPerHour[i]->out_in_file();
  106.     }
  107.      for(int i = 0; i < b; i++)
  108.      {
  109.         fixedSalary[i]->out();
  110.         fixedSalary[i]->out_in_file();
  111.      }
  112.     cin.get();
  113.     cin.get();
  114. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы