C++ Создать класс, содержащий сведения о месячной
заработной плате рабочих завода. Класс содержит
следующие данные: фамилия рабочего, наименование цеха,
размер заработной платы за месяц. Вычислить общую
сумму выплат за месяц по цеху X, а также среднемесячный
заработок рабочего этого цеха. Напечатать для бухгалтерии
ведомость для начисления заработной платы рабочим этого
цеха. Данные и результаты должны храниться в файлах.
Предусмотреть возможность добавления информации,
удаления отдельных записей, сортировки по заданному
полю.
Сначала создадим класс "Worker", который будет содержать информацию о рабочих. В этом классе будут поля для фамилии рабочего, наименования цеха и размера заработной платы за месяц.
```cpp
class Worker {
private:
std::string surname;
std::string workshop;
float salary;
public:
Worker(std::string surname, std::string workshop, float salary) {
this->surname = surname;
this->workshop = workshop;
this->salary = salary;
}
std::string getWorkshop() const {
return workshop;
}
float getSalary() const {
return salary;
}
};
```
Затем создадим класс "Factory", который будет содержать список всех рабочих завода и будет предоставлять методы для выполнения требуемых операций.
```cpp
class Factory {
private:
std::vector
public:
void addWorker(const Worker& worker) {
workers.push_back(worker);
}
void removeWorker(int index) {
workers.erase(workers.begin() + index);
}
float calculateTotalPayment(const std::string& workshop) const {
float totalPayment = 0.0;
int count = 0;
for (const Worker& worker : workers) {
if (worker.getWorkshop() == workshop) {
totalPayment += worker.getSalary();
count++;
}
}
return totalPayment;
}
float calculateAveragePayment(const std::string& workshop) const {
float totalPayment = 0.0;
int count = 0;
for (const Worker& worker : workers) {
if (worker.getWorkshop() == workshop) {
totalPayment += worker.getSalary();
count++;
}
}
return totalPayment / count;
}
void printPayroll(const std::string& workshop) const {
std::ofstream outputFile("payroll.txt");
for (const Worker& worker : workers) {
if (worker.getWorkshop() == workshop) {
outputFile << "Worker: " << worker.getSurname() << ", Workshop: " << worker.getWorkshop() << ", Salary: " << worker.getSalary() << std::endl;
}
}
outputFile.close();
}
void sortWorkersByField(bool ascendingOrder) {
if (ascendingOrder) {
std::sort(workers.begin(), workers.end(), [](const Worker& a, const Worker& b) {
return a.getSalary() < b.getSalary();
});
}
else {
std::sort(workers.begin(), workers.end(), [](const Worker& a, const Worker& b) {
return a.getSalary() > b.getSalary();
});
}
}
};
```
Теперь можно создать объект класса "Factory" и выполнять операции, описанные в задаче.
Например, чтобы добавить рабочего в цех, можно использовать следующий код:
```cpp
Factory factory;
Worker worker1("Smith", "X", 1000);
Worker worker2("Johnson", "Y", 1200);
factory.addWorker(worker1);
factory.addWorker(worker2);
```
Чтобы вычислить общую сумму выплат за месяц по цеху X, можно использовать следующий код:
```cpp
float totalPaymentX = factory.calculateTotalPayment("X");
std::cout << "Total payment for workshop X: " << totalPaymentX << std::endl;
```
А чтобы вычислить среднемесячный заработок рабочих цеха X, используйте следующий код:
```cpp
float averagePaymentX = factory.calculateAveragePayment("X");
std::cout << "Average payment for workshop X: " << averagePaymentX << std::endl;
```
Для создания ведомости для начисления заработной платы рабочим цеха X в файле "payroll.txt", используйте следующий код:
```cpp
factory.printPayroll("X");
```
Для сортировки рабочих по заданному полю (например, по зарплате), используйте следующий код:
```cpp
factory.sortWorkersByField(true);
```
В этом примере рабочие будут отсортированы по возрастанию зарплаты. Если в методе sortWorkersByField указать значение false, рабочие будут отсортированы по убыванию зарплаты.
Это базовый код, который выполняет поставленные задачи. Если вам нужно добавить функциональность, например, возможность добавлять и удалять рабочих через пользовательский интерфейс, это уже будет более сложная задача.