Создаем консольную систему управления задачами
Вам необходимо создать систему управления задачами для небольшого проекта. Система должна поддерживать создание, обновление, удаление и просмотр задач. Каждая задача должна иметь название, описание, приоритет, статус, уникальный идентификатор (цифра, как работает в деталях).
- Данные о задачах должны храниться в текстовом файле, в этой же папке.
- Реализуйте пользовательский интерфейс (например, с помощью цикла while и ввода пользователя) для взаимодействия с системой задач.
- Добавьте возможность сортировки задач по приоритету или статусу при просмотре.
- Реализуйте возможность поиска задач по ключевым словам в названии или описании.
- Задача должна состоять из названия, описания, приоритета, статуса и уникального идентификатора.
- Приоритет может иметь три варианта
низкий
,средний
,высокий
- Статус может иметь три варианта
новая
,в процессе
,завершена
- Уникальный идентификатор (
id
), это просто цифра, которая всегда на 1 больше чем самая большая из уже существующих. Например, если у вас задач нет, то для первой этот параметр будет равен 1. Если у вас уже есть задачи с номерами 1, 2, 3. То новая будет создана с номером 4. Если пользователь удалил несколько задач, и у вас остались задачи 1, 3, 5, то следующая будет с номером 6.
Необходимо реализовать возможность пользователю вводить значения через клавиатуру в консоли для взаимодействия с различными операциями.
Например:
При запуске скрипта, напечатать что пользователь может ввести несколько параметров:
- 1 - Создать новую задачу
- 2 - Просмотреть задач
- 3 - Обновить задачу
- 4 - Удалить задачу
- 0 - Выйти из программы
Если пользователь вводит что-либо другое, сообщить что ввод не верен, и попросить повторить ввод
Предложить пользователю последовательно ввести название, описание и выбрать приоритет и статус. Название и описание могут быть любыми, приоритет и статус, ограничить вариантами 1, 2, 3 и просить ввести заново, в случае неверного ввода.
Идентификатор (id) должен высчитываться автоматически без участия пользователя
После введения всех данных возвращаемся в главное меню.
Отобразить пользователю дополнительное меню
- 1 - Отобразить задачи в изначальном виде
- 2 - Отсортировать по статусу
- 3 - Отсортировать по приоритету
- 4 - Осуществить поиск по названию или описанию
Если пользователь ввел значения от 1 до 3 просто выводим запрашиваемые им данные, если ввел 4. То просим задать значение для поиска, после чего отфильтровать задачи так что если указанное значение встречается в названии или описании ( в любом регистре, не важно маленькие буквы или большие и во вводе пользователя и в самой задаче) то отобразить только такие задачи.
Спросить у пользователя id
задачи которую он хочет обновить. Если такой задачи не существует, сообщить об этом и выйти
в главное меню.
Если существует спросить какое именно поле он хочет обновить
- 1 - название
- 2 - описание
- 3 - приоритет
- 4 - статус
Для приоритета и статуса провести дополнительную проверку, что введено возможное значение После чего обновить задачу и выйти в главное меню.
Спросить пользователя id задачи которую необходимо удалить, если такая задача не существует сообщить об этом и выйти в главное меню. Если существует, тоже сообщить об этом удалить и выйти в главное меню.
Я бы рекомендовал использовать в качестве структуры для хранения данных словарь в котором id это ключ, а значение это еще один словарь с деталями задачи. Но это не строгое правило, если вы видите другие варианты, можем это обсудить.
Все указанные данные нужно записывать в файл, для того что бы если мы вышли из программы и зашли еще раз, то пользователь мог прочитать задачи с которыми он уже взаимодействовал ранее.
Я рекомендую декомпозировать задачу. Сначала написать код который не взаимодействует с пользователем и не использует файлы вообще.
- Продумать структуру в которой потенциально могут храниться наши данные
- Написать код, который позволит добавить/изменить/прочитать/удалить задачу просто что бы убедиться, что вы можете это сделать
- Перенести добавление/чтение/удаление/изменение в отдельные функции
- Добавить проверки, что операции возможны (существует ли объект, не пытаемся ли мы передать статус, которого не существует итд.)
- Добавить сортировки для чтения
- Добавить чтение/запись в файл для каждого действия
- Добавить взаимодействие с пользователем
Не стесняйтесь создавать дополнительные функции, например для проверки ввода пользователя на возможные значения, или для вычисления следующего идентификатора из уже существующих.
Храните значения которые у вас не меняются в константах. Например, возможные варианта статуса можно хранить так:
LOW = "1"
MEDIUM = "2"
HIGH = "3"
STATUS = {
LOW: "low",
MEDIUM: "medium",
HIGH: "high"
}
Задание предполагает, что у вас на него 2 недели. И результат будет прислан в виде Pull Request (Изучим на следующей неделе)