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;
}
→ Ссылка