Вывести идентификатор работника, имя и среднемесячную зарплату для всех элементов списка - 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();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д