{"id":21534450,"url":"https://github.com/ilyachvanov/staff","last_synced_at":"2025-03-17T20:14:41.817Z","repository":{"id":239211810,"uuid":"798884047","full_name":"IlyaChvanov/Staff","owner":"IlyaChvanov","description":"🛠👩🏻‍💻 Program for accounting employees in IT companies","archived":false,"fork":false,"pushed_at":"2024-08-25T07:12:14.000Z","size":3025,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-24T07:11:28.725Z","etag":null,"topics":["dynamic-polymorphism","inheritance","polimorphism"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IlyaChvanov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-10T17:15:26.000Z","updated_at":"2024-10-26T19:38:00.000Z","dependencies_parsed_at":"2024-06-29T09:44:59.738Z","dependency_job_id":"f635ccbe-4b15-41c0-85de-e0b9a7061e54","html_url":"https://github.com/IlyaChvanov/Staff","commit_stats":null,"previous_names":["ilyachvanov/staff"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaChvanov%2FStaff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaChvanov%2FStaff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaChvanov%2FStaff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaChvanov%2FStaff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IlyaChvanov","download_url":"https://codeload.github.com/IlyaChvanov/Staff/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244102855,"owners_count":20398386,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dynamic-polymorphism","inheritance","polimorphism"],"created_at":"2024-11-24T03:10:48.253Z","updated_at":"2025-03-17T20:14:41.796Z","avatar_url":"https://github.com/IlyaChvanov.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n## Лабораторный практикум StaffDemo\n\n\n\n\nРазработать иерархию классов в соответствии со следующей диаграммой:\n\n\u003cimg src=\"img/staff.png\"\u003e\n\n\nПеречень классов:\n\n- **Employee** - работник. Основной (абстрактный) родительский класс для всех разновидностей работников.\n- **Pesonal** - работник по найму с оплатой за фактически отработанное время. Имеет ставку за час.\n- **Engineer** - инженер. Имеет ставку и оплату за час + бонусы от выполняемого проекта.\n- **Cleaner** - уборщица. Получает зарплату на основе отработанного времени.\n- **Driver** - водитель. Получает зарплату на основе отработанного времени + надбавку за ночные часы.\n- **Programmer** - инженер-программист. Получает зарплату за отработанное время, часть бюджета проекта и дополнительную премию за досрочно написанный код.\n- **Tester** - инженер-тестировщик. Получает зарплату за отработанное время, за участие в проекте и за количество найденных ошибок.\n- **TeamLeader** - ведущий программист. Получает зарплату за отработанное время, часть бюджета проекта и за руководство программистами.\n- **ProjectManager** - проектный менеджер. Получает зарплату из бюджета проекта и за руководство участниками проекта.\n- **SeniorManager** - руководитель направления. Получает из бюджетов всех проектов и за руководство всеми участниками.\n- **Factory** - Компания. Считывает из файла работников и добавляет их в в вектор\n\nДополнительно предполагается создания класса/структуры **Project** для хранения информации о проекте. В этой структуре нужно хранить **название** и **бюджет**.\n\n### Перечень интерфейсов:\n\n- **WorkBaseTime** - расчет оплаты исходя из отработанного времени.\n\n  - **calcBase** - метод расчета зарплаты исходя из оклада (за час) и отработанных часов\n  - **calcBonus** - дополнительные выплаты\n\n- **ProjectBudget** - расчет оплаты исходя из участия в проекте (бюджет проекта делится пропорционально персональному вкладу).\n  \n  - **calcBudgetPart** - расчет выплат из бюджета проекта\n  - **calcProAdditions** - расчет *бонусных* выплат\n\n- **Heading** - расчет оплаты исходя из руководства (количество подчиненных).\n\n\n### Класс Employee\n\nЭтот, наиболее важный класс, должен содержать поля:\n\n- **id** - идентификационный номер.\n- **name** - ФИО.\n- **worktime** - отработанное время.\n- **payment** - заработная плата.\n\nПолю **worktime** присваивается фактически отработанное время (независимо от должности). После вызова виртуального метода **calc** происходит расчет зарплаты с учетом всех бонусов и полю **payment** присваивается вся сумма.\n\n### Файл данных\n\nПодготовить текстовый файл со списком сотрудников. Информация о каждом сотруднике должна включать:\n\n- **id** - идентификационный номер.\n- **name** - ФИО сотрудника.\n- **position** - должность.\n- **salary** - базовая ставка руб./час (если нужна).\n- **project** - название проекта (если нужен).\n\n### Приложение\n\nНаписать демонстрационное приложение, которое создает штат сотрудников на основе данных из текстового файла и рассчитывает им зарплату, исходя из отработанного времени и участия в проектах. Информация о сотрудниках, об отработанном времени и заработной плате выводится на экран в виде таблицы.\n\n```cpp\n\n// создание штата сотрудников на основе файла\nvector\u003cEmployee*\u003e staff = StaffFactory::makeStaff(...);\n\n// присвоение отработанного времени\nfor(Employee emp: staff) {\n   emp -\u003e setWorkTime(...);\n}\n\n// расчет зарплаты\nfor(Employee emp: staff) {\n   emp -\u003e calc(...);\n}\n\n// вывод данных о зарплате\nfor(Employee emp: staff) {\n   emp -\u003e printInfo(...);\n}\n```\n\n### Состав проекта\n\n- Interfaces.h \n- Employee.h \n- Personal.h\n- Programmer.h\n- ProjectManager.h\n- SeniorManager.h\n- Engineer.h\n- TeamLeader.h\n- Tester.h\n- Factory.h\n- Employee.cpp \n- Personal.cpp\n- Programmer.cpp\n- ProjectManager.cpp\n- SeniorManager.cpp\n- Engineer.cpp\n- TeamLeader.cpp\n- Tester.cpp\n- Factory.cpp\n- main.cpp\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filyachvanov%2Fstaff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Filyachvanov%2Fstaff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Filyachvanov%2Fstaff/lists"}