Skip to content

Latest commit

 

History

History
114 lines (74 loc) · 9.16 KB

File metadata and controls

114 lines (74 loc) · 9.16 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 (изучим на следующей неделе).