2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки





Начать новую тему Ответить на тему
 
 Расчет зп сотрудников предприятия - C++
Сообщение10.03.2017, 16:54 
Аватара пользователя


05/08/11
36
Калининград
Здравствуйте. Помогите, пожалуйста разработать приложение. Если коротко, то задача такая: есть предприятия с сотрудниками трех видов (manager, disigner, programmer), у каждого типа работника свои правила, по которым растет их зп. У менеджера - это процента за год стажа. У дизайнера- процент за стаж + полпроцента за всех его подчиненных. У программиста - процента за стаж + полпроцента за всех его подчиненных первого уровня. Нужно написать программу, которая бы рассчитывала зарплату любого сотрудника или сразу всех.
В принципе задача не сложная, но у меня возникло несколько трудностей. Первая трудность в том, что я не представляю где хранить информацию о том, сколько сотрудников на кого работает и информацию об их уровне. Вторая это то, что приложение надо написать на Qt с использованием SQLLite, с ними я только начал разбираться.
Я написал базовый, абстрактный класс и реализацию класса менеджера.

Используется синтаксис C++
//worker.h
 
class Worker
{
protected:
    std::string name;
    Date dateOfReceipt;
    int baseSalary;
 
public:
    Worker(const std::string& nm, const Date& dt, const int salary)
        : name(nm), dateOfReceipt(dt), baseSalary(salary) {}
 
    virtual double calculateSalary(const Date& dateOfCalcuation) = 0;
};


Но с остальными классами не могу разобраться, из-за того, что в них где-то должна хранится информация о других работниках. Как их правильно реализовать? Хранить указатели на подчиненных работников или написать отдельный класс, который бы хранил всю иерархию предприятия? но в этом случае реализация не яснее.

 Профиль  
                  
 
 Re: Расчет зп сотрудников предприятия - C++
Сообщение10.03.2017, 17:09 
Заслуженный участник
Аватара пользователя


02/08/11
4211
Alex Fox в сообщении #1198792 писал(а):
Первая трудность в том, что я не представляю где хранить информацию о том, сколько сотрудников на кого работает и информацию об их уровне.
Я бы отталкивался вот от этого:
Alex Fox в сообщении #1198792 писал(а):
с использованием SQLLite
Соответствеено, первый вопрос - каким именно образом вы будете работать с SQLite? Надо ли вам вообще хранить где-то в программе какую-то информацию? Зачем?

 Профиль  
                  
 
 Re: Расчет зп сотрудников предприятия - C++
Сообщение10.03.2017, 17:23 
Аватара пользователя


05/08/11
36
Калининград
warlock66613 в сообщении #1198799 писал(а):
каким именно образом вы будете работать с SQLite?

Я не знаю какой будет иметь вид БД пользователя, поэтому хотел сделать максимально независимую от нее реализацию. Но из-за того, что нужно знать еще и иерархию, то скорее всего придется всю необходимую информацию внести в БД, в программе же создавать соответствующие экземпляры, которые знают свое имя, дату поступления и базовую ставку, а так же берут из таблицы количество всех подчиненных и подчиненных первого уровня.

 Профиль  
                  
 
 Re: Расчет зп сотрудников предприятия - C++
Сообщение10.03.2017, 18:49 
Заслуженный участник


06/07/11
3249
Alex Fox в сообщении #1198792 писал(а):
Первая трудность в том, что я не представляю где хранить информацию о том, сколько сотрудников на кого работает и информацию об их уровне. Вторая это то, что приложение надо написать на Qt с использованием SQLLite, с ними я только начал разбираться.
Ну если в задании сказано, что надо использовать SQLLite, очевидно, что в нем и надо хранить информацию. У вас как с этим? Схема БД есть уже? DDL таблиц?

Alex Fox в сообщении #1198792 писал(а):
Хранить указатели на подчиненных работников или написать отдельный класс, который бы хранил всю иерархию предприятия?
Обычно в реляционных БД иерархии хранятся в таблицах вида:
Используется синтаксис SQL
CREATE TABLE employee (
id NUMBER,
parent_id NUMBER,
employee_name varchar2(100),
... /*остальные поля*/
);
(синтаксис оракловый, извините)
ID - первичный ключ (номер сотрудника)
PARENT_ID - внешний ключ (ссылающийся на ID той же таблицы), ссылка на начальника. Для извлечения данных можно использовать иерархические запросы (SQLLite их поддерживает). Как - думаю, самостоятельно нагуглите (hierarchical query это называется).

 Профиль  
                  
 
 Re: Расчет зп сотрудников предприятия - C++
Сообщение10.03.2017, 19:26 
Аватара пользователя


05/08/11
36
Калининград
Цитата:
Схема БД есть уже?

На данный момент я ее так представляю:
Используется синтаксис SQL
CREATE TABLE employees(id INTEGER PRIMARY KEY AUROINCREMENT, parent_id INTEGER, name TEXT, receipt_date TEXT, occupy TEXT, salary NUMERIC

Затем думаю, что нужно в программе написать "фабрику", в ней, используя информацию о должности из БД, создается необходимый объект, проблема только с тем, чтобы задать поля объекта, которые бы отвечали за количество всех его подчиненных и за подчиненных первого уровня, но скорее всего ответ кроется, как вы уже сказали, в иерархических запросах. Буду разбираться с этой темой.

 Профиль  
                  
 
 Re: Расчет зп сотрудников предприятия - C++
Сообщение10.03.2017, 19:29 
Заслуженный участник
Аватара пользователя


02/08/11
4211
Alex Fox в сообщении #1198802 писал(а):
Я не знаю какой будет иметь вид БД пользователя, поэтому хотел сделать максимально независимую от нее реализацию.
Собственно алгоритм расчёта можно сделать независимым от способа хранения данных вообще: для этого метод расчёта делается шаблонным, и в него параметрами передаются лямбды (std::function<int(T)> getEmployeesCount и т. п.), используя которые алгоритм и получает необходимую информацию. А вот остальная часть программы как ни крути как раз на БД завязана.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Toucan, maxal, Karan, PAV, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Astroid


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group