C++ Создать класс, содержащий сведения о месячной
заработной плате рабочих завода. Класс содержит
следующие данные: фамилия рабочего, наименование цеха,
размер заработной платы за месяц. Вычислить общую
сумму выплат за месяц по цеху X, а также среднемесячный
заработок рабочего этого цеха. Напечатать для бухгалтерии
ведомость для начисления заработной платы рабочим этого
цеха. Данные и результаты должны храниться в файлах.
Предусмотреть возможность добавления информации,
удаления отдельных записей, сортировки по заданному
полю.

димасвлас димасвлас    2   23.05.2021 13:20    2

Ответы
sashashenko sashashenko  24.12.2023 21:13
Хорошо, я с удовольствием помогу вам решить задачу.

Сначала создадим класс "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 workers;

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, рабочие будут отсортированы по убыванию зарплаты.

Это базовый код, который выполняет поставленные задачи. Если вам нужно добавить функциональность, например, возможность добавлять и удалять рабочих через пользовательский интерфейс, это уже будет более сложная задача.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Другие предметы