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