Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
#1

Класс работник. Сортировка. Советы по коду - C++

15.07.2013, 20:26. Просмотров 1074. Ответов 12
Метки нет (Все метки)

Здраствуйте!
Вот задание:
Построить три класса (базовый и 2 производный), описывающие некоторых работников с почасовой оплатой (один из потомков) и фиксированной оплатой (второй потомок). Описать в базовом классе абстрактный метод для расчета среднемесячной заработной платы.
Для работников с почасовой оплатой формула для расчета такова: «среднемесячная заработная плата = 20.8 * 8 * почасовую ставку», для работников с фиксированной оплатой «среднемесячная заработная плата = фиксированной месячной оплате».

Помогите пожалуйста как реализовать:
Отсортировать всю последовательность работников по убыванию среднемесячного заработка. При совпадении зарплаты - упорядочивать данные по алфавиту по имени. (Желательно с использованием метода std::sort)


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
 
using namespace std;
 
class Worker
{
protected:
    string name[10];
    vector <int> ident;
    vector <double> salary;
    vector <double> middleSalary;
public:
    Worker(){};
    ~Worker(){};
    virtual void SalaryCalculation(int numberOfWorkers)
    {}
 
    void sort()
    {
        // код
    }
 
    void show(int a)
    {
        cout << "Name |" << "Identification number |" << "MiddleSalary " << endl;
        for (int i = 0; i < a; i++)
        cout << name[i] << " " << ident.at(i) << " " << middleSalary.at(i) << endl; 
    }
};
 
class SalaryPerHour : public Worker
{
public:
    SalaryPerHour(){};
    ~SalaryPerHour(){};
    void inputDataPerHour (int a)
    {
        int p;
        double q;
        for (int i = 0; i < a; i++)
        {
        cin.ignore();
        cout << "Enter the name of " << i+1 << " worker with salary per hour : " << endl;
        getline (cin, name[i]);
        cout << "Enter the identification number of " << i+1 << " worker with salary per hour : " << endl;
        cin >> p;
        ident.push_back(p);
        cout << "Enter the " << i+1 << "  worker's salary per hour : " << endl;
        cin >> q;
        salary.push_back(q);
        }
    }
 
    void SalaryCalculation(int numberOfWorkers)
    {
        inputDataPerHour(numberOfWorkers);
        for (int i = 0; i < numberOfWorkers; i++)
            middleSalary.push_back(20.8*8*salary.at(i));
    //  show(numberOfWorkers);  
    }
};
 
class FixedSalary : public Worker
{   
public:
    FixedSalary(){};
    ~FixedSalary(){};
     void inputDataFixedSalary (int a)
    {
        int p;
        double q;
        for (int i = 0; i < a; i++)
        {
        cin.ignore();
        cout << "Enter the name of worker with fixed salary : " << endl;
        getline (cin, name[i]);
        cout << "Enter the identification number of worker with fixed salary : " << endl;
        cin >> p;
        ident.push_back(p);
        cin.ignore();
        cout << "Enter the worker's fixed salary : " << endl;
        cin >> q;
        salary.push_back(q);
        }
     }
 
    void SalaryCalculation(int numberOfWorkers)
    {
        inputDataFixedSalary(numberOfWorkers);
        for ( int i = 0; i < numberOfWorkers; i++ )
            middleSalary.push_back(salary[i]);
        //show(numberOfWorkers);    
    }
};
 
void main()
{
    int number;
    cout << "Enter the number of workers " << endl;
    cin >> number;
    Worker *mas[2];
    mas[0] = new SalaryPerHour();
    mas[1] = new FixedSalary();
    for (int i = 0; i < 2; i++)
    {
         mas[i]->SalaryCalculation(number);
    }
    for (int i = 0; i < 2; i++)
    {
        mas[i]->show(number);
    }
    for (int i = 0; i < 2; i++)
        delete mas[i];
    
    cin.get();
}
И еще, дайте пожалуйста советы по коду, может как улучшить его или переделать что-то, может что-то не правильно, буду благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 20:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс работник. Сортировка. Советы по коду (C++):

Класс работник, сортировка - C++
Здарова. Помогите пожалуйста как отсортировать: упорядочить всю последовательность работников по убыванию месячного заработка. Что тут...

Класс работник. Виртуальный метод - C++
Здраствуйте! Надо ввести работников с почасовой ЗП и фиксированной ЗП. Написать виртуальный метод для подсчета ЗП( для почасовиков -...

Описать класс «Работник». Каждая запись содержит фамилия и инициалы, должность, год поступления на работу, - C++
Описать класс «Работник». Каждая запись содержит фамилия и инициалы, должность, год поступления на работу, зарплата. Предусмотреть...

Класс редактирования данных. Нужны советы по реализации - C++
Есть задача: написать класс, позволяющий редактировать данные в памяти. Указатель на данные и их начальный размер передаются в конструктор....

Создать базовый класс - работник и производные классы - служащий с почасовой оплатой, служащий в штате и служащий с процентной ставкой - C++
Мальчики помогите пожалуйста, с задачей. -Создать базовый класс - работник и производные классы - служащий с почасовой оплатой, служащий...

Класс "Работник" - C++
Всем привет. Есть пример задачи по ООП Составить класс с именем WORKER, содержащего следующие поля: фамилия и инициалы работника,...

12
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
15.07.2013, 20:37 #2
1)создай функцию-предикат для функции sort()
вроде этой
C++
1
2
3
4
5
bool compare(const Worker& w1, const Worker& w2) {
    if (w1.salary == w2.salary)
        return w1.name < w2.name;
    return w1.salary < w2.salary;
}
2) зачем ты делаешь в класс Worker c массивами и векторами?
Просто сделай так
C++
1
2
3
4
5
6
7
8
class Worker
{
protected:
    string name;
    int ident;
    double salary;
    double middleSalary;
    ...................
А потом создай уже массив или вектор "вокеров".
1
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
15.07.2013, 20:43  [ТС] #3
Цитата Сообщение от SummerRain Посмотреть сообщение
2) зачем ты делаешь в класс Worker c массивами и векторами?
Просто сделай так
C++
1
2
3
4
5
6
7
8
class Worker
{
protected:
    string name;
    int ident;
    double salary;
    double middleSalary;
    ...................
А потом создай уже массив или вектор "вокеров".
немного не понял где создавать вектор *воркеров*
покажите пожалуйста на примере
0
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
15.07.2013, 20:48 #4
C++
1
2
3
4
5
int main()
{
 
    Worker arr[10]; // массив
    vector<Worker> v(10); // вектор
1
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
15.07.2013, 21:14  [ТС] #5
Цитата Сообщение от SummerRain Посмотреть сообщение
C++
1
2
3
4
5
int main()
{
 
    Worker arr[10]; // массив
    vector<Worker> v(10); // вектор
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class A
{
private:
    string S;
    int M;
public:
    A(){};
    ~A(){};
    void ky(A obj[])
    {
        obj[0].S = "fsdfd";
        obj[0].M = 1488;
        obj[1].S = "gfngfnfbc bvcxvx";
        obj[1].M = 161;
    }
    void out(A *obj)
    {
        cout << obj[0].S << endl;
        cout << obj[0].M << endl;
        cout << obj[1].S << endl;
        cout << obj[1].M;
    }
};
 
void main()
{
    A obj;
    A oop[10];
    obj.ky(oop);
    obj.out(oop);
    cin.get();
}
как-то так должно быть?
0
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
15.07.2013, 21:36 #6
что за методы ky и out.
Зачем там массивы?
Это не согласуется с концепцией ООП.
Есть класс Worker.
Он содержит поля
-имя;
-возраст;
-зарплата;
и тд.
Всё это только для одного вокера.
Метод Show() или Out() должен показывать данные только одного работника.
Если мы хотим вывести данные всех работников, то вызываем этот метод для каждого элемента массива или вектора.
C++
1
2
for (size_t i = 0; i < vec.size(); ++i)
        vec[i].Show();
1
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
15.07.2013, 23:01  [ТС] #7
Цитата Сообщение от SummerRain Посмотреть сообщение
что за методы ky и out.
Зачем там массивы?
Это не согласуется с концепцией ООП.
Есть класс Worker.
Он содержит поля
-имя;
-возраст;
-зарплата;
и тд.
Всё это только для одного вокера.
Метод Show() или Out() должен показывать данные только одного работника.
Если мы хотим вывести данные всех работников, то вызываем этот метод для каждого элемента массива или вектора.
C++
1
2
for (size_t i = 0; i < vec.size(); ++i)
        vec[i].Show();
с выводом понял, а как тогда правильно вводить данные ?
покажите пожалуйста метод
0
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
15.07.2013, 23:17 #8
есть там уже метод Show.
Только надо сделать так чтобы он выводил не вектор, а только члены одного объекта.
0
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
15.07.2013, 23:26  [ТС] #9
Цитата Сообщение от SummerRain Посмотреть сообщение
есть там уже метод Show.
Только надо сделать так чтобы он выводил не вектор, а только члены одного объекта.
а как правильно ВВОДИТЬ данные ?
0
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
16.07.2013, 00:48 #10
C++
1
2
3
4
5
6
7
int main()
{
    Worker w1("Vasya Pupkin", 1000000$);  // через конструктор
 
    Worker w2;
    w2.setName("Panfutiy Ivanovich");  // через set-методы
    w2.setSalary(10000000);            //
или сделать ввод с клавиатуры
C++
1
2
3
4
5
6
7
void Worker::Input() {
    cout << "Enter name";
    cin >> this->name;
    cout << "Enter salary";
    cin >> this->salary;
 
}
1
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
16.07.2013, 00:58  [ТС] #11
Цитата Сообщение от SummerRain Посмотреть сообщение
[CPP]int main()
{

C++
1
2
3
4
5
6
7
8
9
void Worker::Input(Worker *obj, int a) {
 for (int i = 0; i < a; i++)
{
    cout << "Enter name";
    cin >> this->obj[i].name;
    cout << "Enter salary";
    cin >> this->obj[i].salary;
}
}

а если мне надо ввести несколько имен и зарплат, то можно так сделать?
0
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
16.07.2013, 01:00 #12
C++
1
2
for (size_t i = 0; i < vec.size(); ++i)
        vec[i].Input();
0
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
16.07.2013, 01:04  [ТС] #13
Цитата Сообщение от SummerRain Посмотреть сообщение
C++
1
2
for (size_t i = 0; i < vec.size(); ++i)
        vec[i].Input();
наконецто дошло, спасибо за помощь
0
16.07.2013, 01:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 01:04
Привет! Вот еще темы с ответами:

Сортировка массива (нужны комментарии к коду) - C++
Объясните пожалуйста, что значит каждый рядок 1 #include &lt;iostream&gt; void compare(int arr,int size) { for(int i = 0; i...

Создать структуру Работник - C++
Создать структуру &quot;Работник&quot;, с такими строками: -фамилия -разряд -Семейное положение -пол -дети Создать массив этих структур,...

Описать класс «Работник» - Lazarus
Описать класс «Работник». Каждая запись содержит фамилия и инициалы, должность, год поступления на работу, зарплата. Предусмотреть...

Описать класс Работник - Delphi
описать класс работник имя фамилия инициалы должность оклад и дата поступления . Помогите пожалуйста (


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru