Создаём консольную систему управления задачами.
Вам необходимо создать систему управления задачами для небольшого проекта. Система должна поддерживать создание, обновление, удаление и просмотр задач. Каждая задача должна иметь название, описание, приоритет, статус и уникальный идентификатор (подробнее — в разделе «Детали»).
- Данные о задачах должны храниться в текстовом файле, в этой же папке.
- Реализуйте пользовательский интерфейс (например, с помощью цикла 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 (изучим на следующей неделе).