Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <set>
- #include <vector>
- //#include <string>
- using namespace std;
- // Перечислимый тип для статуса задачи
- enum class TaskStatus {
- NEW, // новая
- IN_PROGRESS, // в разработке
- TESTING, // на тестировании
- DONE // завершена
- };
- // Объявляем тип-синоним для map<TaskStatus, int>,
- // позволяющего хранить количество задач каждого статуса
- using TasksInfo = map<TaskStatus, int>;
- class Slave;
- //class TeamTasks;
- class TeamTasks
- {
- public:
- // Получить статистику по статусам задач конкретного разработчика
- const TasksInfo& GetPersonTasksInfo(const string& person) const;
- // Добавить новую задачу (в статусе NEW) для конкретного разработчитка
- void AddNewTask(const string& person);
- // Обновить статусы по данному количеству задач конкретного разработчика,
- // подробности см. ниже
- tuple<TasksInfo, TasksInfo> PerformPersonTasks(
- const string& person, int task_count);
- //friend class Slave;
- private:
- set <Slave> employees;
- };
- const TasksInfo& TeamTasks::GetPersonTasksInfo(const string& person) const
- {
- }
- void TeamTasks::AddNewTask(const string& person)
- {
- for (auto & i : employees)
- {
- if (i == )
- }
- }
- tuple<TasksInfo, TasksInfo> TeamTasks::PerformPersonTasks(const string& person, int task_count)
- {
- }
- class Slave
- {
- public:
- Slave(const string & s)
- {
- this->name = s;
- this->tasks.insert({TaskStatus::NEW, 0});
- }
- void Add()
- {
- ++this->tasks[TaskStatus::NEW];
- }
- const string & GetName() const
- {
- return this->name;
- }
- ~Slave();
- //friend class TeamTasks;
- //friend void TeamTasks::AddNewTask(const string& person);
- //private:
- string name;
- TasksInfo tasks;
- };
- bool operator<(const Slave & s1, const Slave & s2)
- {
- return s1.GetName() < s2.GetName();
- }
- bool operator==(const Slave & s1, const Slave & s2)
- {
- return (!(s1.GetName() < s2.GetName())&&!(s2.GetName() < s1.GetName()));
- }
- // Принимаем словарь по значению, чтобы иметь возможность
- // обращаться к отсутствующим ключам с помощью [] и получать 0,
- // не меняя при этом исходный словарь
- void PrintTasksInfo(TasksInfo tasks_info)
- {
- cout << tasks_info[TaskStatus::NEW] << " new tasks" <<
- ", " << tasks_info[TaskStatus::IN_PROGRESS] << " tasks in progress" <<
- ", " << tasks_info[TaskStatus::TESTING] << " tasks are being tested" <<
- ", " << tasks_info[TaskStatus::DONE] << " tasks are done" << endl;
- }
- int main() {
- TeamTasks tasks;
- tasks.AddNewTask("Ilia");
- for (int i = 0; i < 3; ++i) {
- tasks.AddNewTask("Ivan");
- }
- cout << "Ilia's tasks: ";
- PrintTasksInfo(tasks.GetPersonTasksInfo("Ilia"));
- cout << "Ivan's tasks: ";
- PrintTasksInfo(tasks.GetPersonTasksInfo("Ivan"));
- TasksInfo updated_tasks, untouched_tasks;
- tie(updated_tasks, untouched_tasks) =
- tasks.PerformPersonTasks("Ivan", 2);
- cout << "Updated Ivan's tasks: ";
- PrintTasksInfo(updated_tasks);
- cout << "Untouched Ivan's tasks: ";
- PrintTasksInfo(untouched_tasks);
- tie(updated_tasks, untouched_tasks) =
- tasks.PerformPersonTasks("Ivan", 2);
- cout << "Updated Ivan's tasks: ";
- PrintTasksInfo(updated_tasks);
- cout << "Untouched Ivan's tasks: ";
- PrintTasksInfo(untouched_tasks);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement