Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2021, 22:18   #1
олег17
Новичок
Джуниор
 
Регистрация: 03.02.2021
Сообщений: 2
По умолчанию структуры

помогите решить задачу вот мой код, но что то с ним не так
1. Написать структуру «Рабочий». Поля структуры:
- ФИО
- ID
- Оклад
- Премия
- Итого

Премия рассчитывается по принципу 10% от Ставки. Итого это Премия + Ставка

Функции:
- Заполнения массива
- удаления элементов по индексу
- Поиск по фамилии
- сортировка
Подсчет общей суммы по всем рабочим

Код:
#include <iostream>
#include <list>
#include <map>
 
using namespace std;
 
struct worker {
private:
    string full_name;
    int id;
    long double salary, premium, result;
 
public:
    worker(const string &full_name, int id, long double salary) {
        setFullName(full_name);
        setId(id);
        setSalary(salary);
    }
 
    void setFullName(const string &full_name) {
        worker::full_name = full_name;
    }
 
    void setId(int id) {
        worker::id = id;
    }
 
    void setSalary(long double salary) {
        worker::salary = salary;
        worker::premium = salary * 0.1;
        worker::result = worker::salary + worker::premium;
    }
 
    const string &getFullName() const {
        return full_name;
    }
 
    int getId() const {
        return id;
    }
 
    long double getSalary() const {
        return salary;
    }
 
    long double getPremium() const {
        return premium;
    }
 
    long double getResult() const {
        return result;
    }
 
    bool operator<(const worker &rhs) const {
        return result < rhs.result;
    }
 
    bool operator>(const worker &rhs) const {
        return rhs < *this;
    }
 
    bool operator<=(const worker &rhs) const {
        return !(rhs < *this);
    }
 
    bool operator>=(const worker &rhs) const {
        return !(*this < rhs);
    }
 
    friend ostream &operator<<(ostream &os, const worker &worker) {
        os << worker.full_name << "\t" << worker.id << "\t" << worker.salary << "\t\t"
           << worker.premium << "\t\t" << worker.result;
        return os;
    }
};
 
struct base_worker {
    void del(int id) {
            links_id_worker.erase(links_id_worker.find(id));
            for (auto it = workers.begin(); it != workers.end(); ++it) {
                if(it->getId() == id){
                    workers.erase(it);
                    break;
                }
            }
            for (auto it = links_name_worker.begin(); it != links_name_worker.end(); ++it) {
                if(it->second->getId() == id){
                    links_name_worker.erase(it);
                    break;
                }
            }
        }
private:
    list<worker> workers;
    multimap<int, worker *> links_id_worker;
    multimap<string, worker *> links_name_worker;
public:
    void add(const worker &_worker) {
        workers.push_back(_worker);
        links_id_worker.insert(pair<int, worker *>(_worker.getId(), &workers.back()));
        links_name_worker.insert(pair<string, worker *>(_worker.getFullName(), &workers.back()));
    }
 
    void sort() {
        workers.sort();
    }
 
    worker find(string full_name) {
        return *links_name_worker.find(full_name)->second;
    }
 
    worker find(int id) {
        return *links_id_worker.find(id)->second;
    }
 
    friend ostream &operator<<(ostream &os, const base_worker &_worker) {
        os << "name\tid\tsalary\tpremium\tresult" << endl;
        for (const worker &w : _worker.workers) {
            os << w << endl;
        }
        return os;
    }
};
 
int main() {
    base_worker base;
    base.add(*new worker("Vasya", 0, 950));
    base.add(*new worker("Petya", 1, 850));
    base.add(*new worker("Vanya", 2, 750));
    cout << base.find(2) << endl << base.find("Petya") << endl << endl;
    base.sort();
    cout << base;
    return 0;
}
олег17 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача структуры из программы на c# в dll на c++ и получение структуры из dll iukash Общие вопросы .NET 0 07.05.2013 16:03
Динамические структуры данных, списковые структуры (надо разобраться что делает программа) _4Alex4_ Помощь студентам 1 14.11.2012 07:39
Написание программ (древовидные структуры, структуры неспециального вида и т.д.) Green Gin Фриланс 2 27.04.2012 15:26
Управляющие структуры. Программирование алгоритмов разветвляющейся структуры. Лёнка Компоненты Delphi 1 23.04.2012 15:03
Структуры в С++ Slavytich Помощь студентам 1 18.11.2010 20:30