Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ilyachvanov/staff
🛠👩🏻💻 Program for accounting employees in IT companies
https://github.com/ilyachvanov/staff
dynamic-polymorphism inheritance polimorphism
Last synced: about 1 month ago
JSON representation
🛠👩🏻💻 Program for accounting employees in IT companies
- Host: GitHub
- URL: https://github.com/ilyachvanov/staff
- Owner: IlyaChvanov
- Created: 2024-05-10T17:15:26.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-08-25T07:12:14.000Z (4 months ago)
- Last Synced: 2024-08-25T08:27:38.579Z (4 months ago)
- Topics: dynamic-polymorphism, inheritance, polimorphism
- Language: C++
- Homepage:
- Size: 2.88 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Лабораторный практикум StaffDemo
Разработать иерархию классов в соответствии со следующей диаграммой:
Перечень классов:
- **Employee** - работник. Основной (абстрактный) родительский класс для всех разновидностей работников.
- **Pesonal** - работник по найму с оплатой за фактически отработанное время. Имеет ставку за час.
- **Engineer** - инженер. Имеет ставку и оплату за час + бонусы от выполняемого проекта.
- **Cleaner** - уборщица. Получает зарплату на основе отработанного времени.
- **Driver** - водитель. Получает зарплату на основе отработанного времени + надбавку за ночные часы.
- **Programmer** - инженер-программист. Получает зарплату за отработанное время, часть бюджета проекта и дополнительную премию за досрочно написанный код.
- **Tester** - инженер-тестировщик. Получает зарплату за отработанное время, за участие в проекте и за количество найденных ошибок.
- **TeamLeader** - ведущий программист. Получает зарплату за отработанное время, часть бюджета проекта и за руководство программистами.
- **ProjectManager** - проектный менеджер. Получает зарплату из бюджета проекта и за руководство участниками проекта.
- **SeniorManager** - руководитель направления. Получает из бюджетов всех проектов и за руководство всеми участниками.
- **Factory** - Компания. Считывает из файла работников и добавляет их в в векторДополнительно предполагается создания класса/структуры **Project** для хранения информации о проекте. В этой структуре нужно хранить **название** и **бюджет**.
### Перечень интерфейсов:
- **WorkBaseTime** - расчет оплаты исходя из отработанного времени.
- **calcBase** - метод расчета зарплаты исходя из оклада (за час) и отработанных часов
- **calcBonus** - дополнительные выплаты- **ProjectBudget** - расчет оплаты исходя из участия в проекте (бюджет проекта делится пропорционально персональному вкладу).
- **calcBudgetPart** - расчет выплат из бюджета проекта
- **calcProAdditions** - расчет *бонусных* выплат- **Heading** - расчет оплаты исходя из руководства (количество подчиненных).
### Класс Employee
Этот, наиболее важный класс, должен содержать поля:
- **id** - идентификационный номер.
- **name** - ФИО.
- **worktime** - отработанное время.
- **payment** - заработная плата.Полю **worktime** присваивается фактически отработанное время (независимо от должности). После вызова виртуального метода **calc** происходит расчет зарплаты с учетом всех бонусов и полю **payment** присваивается вся сумма.
### Файл данных
Подготовить текстовый файл со списком сотрудников. Информация о каждом сотруднике должна включать:
- **id** - идентификационный номер.
- **name** - ФИО сотрудника.
- **position** - должность.
- **salary** - базовая ставка руб./час (если нужна).
- **project** - название проекта (если нужен).### Приложение
Написать демонстрационное приложение, которое создает штат сотрудников на основе данных из текстового файла и рассчитывает им зарплату, исходя из отработанного времени и участия в проектах. Информация о сотрудниках, об отработанном времени и заработной плате выводится на экран в виде таблицы.
```cpp
// создание штата сотрудников на основе файла
vector staff = StaffFactory::makeStaff(...);// присвоение отработанного времени
for(Employee emp: staff) {
emp -> setWorkTime(...);
}// расчет зарплаты
for(Employee emp: staff) {
emp -> calc(...);
}// вывод данных о зарплате
for(Employee emp: staff) {
emp -> printInfo(...);
}
```### Состав проекта
- Interfaces.h
- Employee.h
- Personal.h
- Programmer.h
- ProjectManager.h
- SeniorManager.h
- Engineer.h
- TeamLeader.h
- Tester.h
- Factory.h
- Employee.cpp
- Personal.cpp
- Programmer.cpp
- ProjectManager.cpp
- SeniorManager.cpp
- Engineer.cpp
- TeamLeader.cpp
- Tester.cpp
- Factory.cpp
- main.cpp