Skip to content

Latest commit

 

History

History
132 lines (93 loc) · 9.19 KB

module1.md

File metadata and controls

132 lines (93 loc) · 9.19 KB

Модульное задание по базе языка python

Создаем консольную систему управления задачами

Общее описание

Вам необходимо создать систему управления задачами для небольшого проекта. Система должна поддерживать создание, обновление, удаление и просмотр задач. Каждая задача должна иметь название, описание, приоритет, статус, уникальный идентификатор (цифра, как работает в деталях).

  • Данные о задачах должны храниться в текстовом файле, в этой же папке.
  • Реализуйте пользовательский интерфейс (например, с помощью цикла while и ввода пользователя) для взаимодействия с системой задач.
  • Добавьте возможность сортировки задач по приоритету или статусу при просмотре.
  • Реализуйте возможность поиска задач по ключевым словам в названии или описании.

Детали

Из чего состоит?

  1. Задача должна состоять из названия, описания, приоритета, статуса и уникального идентификатора.
  2. Приоритет может иметь три варианта низкий, средний, высокий
  3. Статус может иметь три варианта новая, в процессе, завершена
  4. Уникальный идентификатор (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 это ключ, а значение это еще один словарь с деталями задачи. Но это не строгое правило, если вы видите другие варианты, можем это обсудить.

Все данные должны записываться в файл

Все указанные данные нужно записывать в файл, для того что бы если мы вышли из программы и зашли еще раз, то пользователь мог прочитать задачи с которыми он уже взаимодействовал ранее.

Рекомендованный порядок реализации

Я рекомендую декомпозировать задачу. Сначала написать код который не взаимодействует с пользователем и не использует файлы вообще.

  1. Продумать структуру в которой потенциально могут храниться наши данные
  2. Написать код, который позволит добавить/изменить/прочитать/удалить задачу просто что бы убедиться, что вы можете это сделать
  3. Перенести добавление/чтение/удаление/изменение в отдельные функции
  4. Добавить проверки, что операции возможны (существует ли объект, не пытаемся ли мы передать статус, которого не существует итд.)
  5. Добавить сортировки для чтения
  6. Добавить чтение/запись в файл для каждого действия
  7. Добавить взаимодействие с пользователем

Общие рекомендации

Не стесняйтесь создавать дополнительные функции, например для проверки ввода пользователя на возможные значения, или для вычисления следующего идентификатора из уже существующих.

Храните значения которые у вас не меняются в константах. Например, возможные варианта статуса можно хранить так:

LOW = "1"
MEDIUM = "2"
HIGH = "3"
STATUS = {
    LOW: "low",
    MEDIUM: "medium",
    HIGH: "high"
}

Задание предполагает, что у вас на него 2 недели. И результат будет прислан в виде Pull Request (Изучим на следующей неделе)