Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
15.07.2013, 20:26     Класс работник. Сортировка. Советы по коду #1
Здраствуйте!
Вот задание:
Построить три класса (базовый и 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();
}
И еще, дайте пожалуйста советы по коду, может как улучшить его или переделать что-то, может что-то не правильно, буду благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 20:26     Класс работник. Сортировка. Советы по коду
Посмотрите здесь:

C++ Создать базовый класс - работник и производные классы - служащий с почасовой оплатой, служащий в штате и служащий с процентной ставкой
C++ Сортировка массива указателей на абстрактный базовый класс
Класс работник. Виртуальный метод C++
Класс работник, сортировка C++
C++ написать программу, которая по коду строит схему классов(нужны советы, "наводки")
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
 Аватар для SummerRain
325 / 324 / 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;
    ...................
А потом создай уже массив или вектор "вокеров".
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;
    ...................
А потом создай уже массив или вектор "вокеров".
немного не понял где создавать вектор *воркеров*
покажите пожалуйста на примере
SummerRain
 Аватар для SummerRain
325 / 324 / 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); // вектор
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();
}
как-то так должно быть?
SummerRain
 Аватар для SummerRain
325 / 324 / 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();
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();
с выводом понял, а как тогда правильно вводить данные ?
покажите пожалуйста метод
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
15.07.2013, 23:17     Класс работник. Сортировка. Советы по коду #8
есть там уже метод Show.
Только надо сделать так чтобы он выводил не вектор, а только члены одного объекта.
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
15.07.2013, 23:26  [ТС]     Класс работник. Сортировка. Советы по коду #9
Цитата Сообщение от SummerRain Посмотреть сообщение
есть там уже метод Show.
Только надо сделать так чтобы он выводил не вектор, а только члены одного объекта.
а как правильно ВВОДИТЬ данные ?
SummerRain
 Аватар для SummerRain
325 / 324 / 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;
 
}
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;
}
}

а если мне надо ввести несколько имен и зарплат, то можно так сделать?
SummerRain
 Аватар для SummerRain
325 / 324 / 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();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 01:04     Класс работник. Сортировка. Советы по коду
Еще ссылки по теме:

C++ Структура элемента массива работник. Определить фамилию самого старшего мужчины
C++ Класс редактирования данных. Нужны советы по реализации
C++ Создать структуру Работник

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

Или воспользуйтесь поиском по форуму:
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();
наконецто дошло, спасибо за помощь
Yandex
Объявления
16.07.2013, 01:04     Класс работник. Сортировка. Советы по коду
Ответ Создать тему
Опции темы

Текущее время: 05:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru