C++ Разработать классы для описанных ниже объектов. Включить в класс методы set()...get()...show()
Создал класс, не понимаю как сделать массив и вывести
Worker. Фамилия и инициалы, Должность, год поступления на работу, Зарплата. Создать массив объектов. Вывести:
а) список работников, стаж которых на данном предприятии превышает заданное число лет. б) список работников, зарплата которых больше заданной. в) список работников, занимающих заданную должность.
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <stdio.h>
#include <string>
using namespace std;
// Объявление класса Worker:
class Worker {
protected:
string name, position;
int year, pay;
public:
Worker() : name("NULL"), position("NULL"), year(0), pay(0) {};
void GetWrkr()
{
cout << "\nВведите фамилию и инициалы: "; cin >> name;
cout << "Введите должность: "; cin >> position;
cout << "Введите год поступления на работу: "; cin >> year;
cout << "Введите зарплату: "; cin >> pay;
}
void PutWrkr()
{
cout << "\nФ.И.О.: " << name;
cout << "\nДолжность: " << position;
cout << "\nГод поступления: " << year;
cout << "\nЗарплата: " << pay;
}
void GetData();
void PutData();
};
int main()
{
setlocale(LC_ALL, "Russian");
system("chcp 1251 && cls");
srand(time(NULL));
int n = 0, s = -1, h = 2;
Worker* instK[n];
bool k = true;
char choice;
while (true) {
cout << " Выберите дальнейшее действие: " << endl;
cout << "1) Ввод рабочих" << endl;
cout << "2) Вывод рабочих, стаж которых на данном предприятии превышает заданное число лет" << endl;
cout << "3) Список рабочих, зарплата которых больше заданной" << endl;
cout << "4) Список рабочих, занимающих заданную должность" << endl;
cout << "0) Выход" << endl << endl;
cout << "S=";
cin >> s;
system("cls");
switch (s) {
//Ввод рабочих
case 1: {
cout << "Продолжить? (y/n): ";
cin >> choice;
if (choice == 'Y' || choice == 'y')
{
instK[n] = new Worker;
h++;
}
instK[n++]->GetData();
cout << "Ещё рабочий? (y/n)";
cin >> choice;
system("cls");
}
while (choice == 'y');
system("cls");
break;
}
case 2: {
for (int j = 0; j<n; j++)
{
instK[j]->PutData();
}
system("pause");
system("cls");
break;
}
case 0: {
return 0;
break;
}
}
}
Ответы (2 шт):
Автор решения: AR Hovsepyan
→ Ссылка
Лично я понимаю так:
- Нужно обеспечить возможность создания работника сразу с полной инициализацией, т.е. иметь соответствующий конструктор класса.
- Обеспечить класс указанными функциями_членами:
string get_name() const; string get_position() const; int get_pay() const; int get_year() const;вместо вашегоvoid GetData();чтобы потом иметь возможность выполнить пункты заданияа, б и в. Ну и нужно решать, нужно ли устанавливать данные кроме как при конструировании или ввода из потока. Если да, то функция_член void PutData(); должна принимать эти аргументы.
Дальше создаете список объектов, инициализируя при конструировании или для каждого объекта вызвать PutData, и использовать геттеры для выполнения пунктов задания. Ничего сложного...
Автор решения: Леонид Демидов
→ Ссылка
Решил сам.
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <stdio.h>
#include <string>
using namespace std;
class Worker
{
string surname;
string name;
string post;
int year;
int salary;
public:
Worker() {}
void Set();
void Show();
void PostList(string p);
void SalaryList(int s);
void ExperienceList(int y, int current);
};
void Worker::Set()
{
cout << "Введите фамилию: "; cin >> surname;
cout << "Введите имя: "; cin >> name;
cout << "Введите должность: "; cin >> post;
cout << "Введите год поступления: "; cin >> year;
cout << "Введите зарплату: "; cin >> salary;
}
void Worker::Show()
{
cout << "Имя :" << surname << " " << name << endl;
cout << "Должность:" << post << endl;
cout << "Год :" << year << endl;
cout << "Зарплата:" << salary << endl;
}
void Worker::PostList(string p)
{
if (post == p) cout << surname << " " << name << endl;
}
void Worker::SalaryList(int s)
{
if (salary>s) cout << surname << " " << name << endl;
}
void Worker::ExperienceList(int y, int current)
{
int Year = year - current;
if (Year>y) cout << surname << " " << name << endl;
}
int main()
{
setlocale(LC_ALL, "Russian");
int n;
cout << "Введите кол-во сотрудников: "; cin >> n;
Worker* worker = new Worker[n];
for (int i = 0; i<n; i++)
worker[i].Set();
cout << "Список сотрудников: " << endl;
for (int i = 0; i<n; i++)
worker[i].Show();
string post;
cout << "Введите должность: "; cin >> post;
for (int i = 0; i<n; i++)
worker[i].PostList(post);
int salary;
cout << "Введите зарплату: "; cin >> salary;
for (int i = 0; i<n; i++)
worker[i].SalaryList(salary);
int current, year;
cout << "Введите текущий год: "; cin >> current;
cout << "Введите кол-во рабочих лет: "; cin >> year;
for (int i = 0; i<n; i++)
worker[i].ExperienceList(year, current);
delete[] worker;
system("pause");
return 0;
}