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

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

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

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

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

textual
Листинг программы
#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
using namespace std;
 
class Worker
{
  protected:
    string name;
    double salary;
    int ident;
  public:
    Worker(){};
    ~Worker(){};
 
    string getname() {return name;}
    double getsalary() {return salary;}
    virtual void calc()  {}      
    void out()
    {
        cout << name <<  " " << salary << " " << ident << endl;
    }
    void out_in_file()
    {
        ofstream write("E://write.txt", ios_base::app); 
        write << name <<  " " << salary << " " << ident << endl;
    } 
    void in()
    {       
    cout << "Enter name" << endl;
    getline(cin, name);
    cout << "Enter salary" << endl;
    cin >> this->salary; 
     cout << "Enter identification number" << endl;
    cin >> this->ident; 
    cin.ignore();
    }
 };
 
class salPerHour : public Worker
{
public:
    salPerHour(){};
    ~salPerHour(){};
 
    void calc()
    {
        this->salary = salary * 20.8 * 8;
    }
};
class salaryFixed : public Worker
{
    public:
    salaryFixed(){};
    ~salaryFixed(){};
   
    void calc()
    {
      this->salary = salary * 1;
    }
};
 
bool compare(Worker *w1, Worker *w2)  
{  
    if (w1->getsalary() == w2->getsalary())
        return w1->getname() < w2->getname();
    return w1->getsalary() > w2->getsalary();
}
 
void main()
{
   Worker *salaryPerHour[5];
   Worker *fixedSalary[5];
   Worker obj;
   int a, b;
   cout << "Enter data about workers with salary per hour " << endl;
   cout << "Enter number of workers : ";
   cin >> a;
   cin.ignore();
   for(int i = 0; i < a; i++)
   {
       salaryPerHour[i] = new salPerHour;
       salaryPerHour[i]->in();
       salaryPerHour[i]->calc();
   } 
 
   cout << "Enter data about workers with fixed salary " << endl;
   cout << "Enter number of workers : ";
   cin >> b;
   cin.ignore();
   for(int i = 0; i < b; i++)
   {
       fixedSalary[i] = new salaryFixed;
       fixedSalary[i]->in();
       fixedSalary[i]->calc();
   }
  
    sort(salaryPerHour, salaryPerHour + a, compare); 
    sort(fixedSalary, fixedSalary + b, compare); 
  
    for(int i = 0; i < a; i++)
    {
        salaryPerHour[i]->out();
        salaryPerHour[i]->out_in_file();
    }
     for(int i = 0; i < b; i++)
     {
        fixedSalary[i]->out();
        fixedSalary[i]->out_in_file();
     }
    cin.get();
    cin.get();
}

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


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

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

12   голосов , оценка 3.75 из 5
Похожие ответы