Требования к CLI для курсовой работы весеннего семестра

Для возможности проведения защиты курсовой работы весеннего необходимо пройти предварительную проверку на moodle: ссылка на модуль

Базовые сведения про cli можно прочитать здесь: Требования к курсовым (весенний семестр)

Если сборка курсовой работы реализована через системы автоматизации, то программа с курсовой работы должна называться cw!

Обязательные флаги

--input, -i: Задаёт имя входного изображения. При необходимости (если требуется по заданию), флаг может принимать несколько аргументов. Если флаг отсутствует, то предполагается, что имя входного изображения передаётся последним аргументом

--output, -o: Задаёт имя выходного изображения. При необходимости (если требуется по заданию), флаг может принимать несколько аргументов

--info: Печатает информацию об изображении и завершает работу

--help, -h: Выводит справку. ВАЖНО: первой строкой при запуске программы нужно выводить информацию о варианте курсовой работе и об авторе программы в строго определенном формате: Course work for option <V>, created by <Name> <Surname>. Где V – вариант курсовой и Имя и Фамилия, как указано в репозитории группы. Данное предложение должно быть строго первым предложением в выводе программы и является отдельной строкой (заканчивается знаком ‘\n’). Например: Course work for option 3.2, created by Ivan Ivanov.

Обработка ошибок

В случае ошибки и невозможности выполнить функцию по какой-либо причине, нужно вывести строку с ошибкой и завершить работу программы с кодом возврата из диапазона: [40-49]

Обработка ошибок при некорректных аргументах у флагов:

Если флаг отвечает за цвет и передано некорректное значение (например 500.0.10), то необходимо остановить выполнение и завершить работу с ошибкой

Если флаг отвечает за координаты для рисования (например, для рисования линии) и координаты находится вне границ изображения, то необходимо продолжить обработку так, как если бы можно было выходить за рамки изображения. Пример: допустим на вход подано изображение размером 100×100 пикселей, начало отрезка 0.0, а конец отрезка 200.200. В таком случае должна быть нарисована диагональ. Если же начало отрезка было 150.130, то на изображении ничего не должно быть нарисовано, так как линия проходить за границами обрабатываемого изображения

Если флаг отвечает за координаты для области и координаты находится вне границ изображения, то необходимо продолжить обработку до максимально/минимально возможного значения координат

Если были введены аргументы для флага, который не принимает аргументов, то

Завершить работу с ошибкой

Вывести пользователю сообщение, что данные аргументы будут проигнорированы. Например, Аргументы 'best_arg' и 'another_best_arg' проигнорирован, так как флаг '--info' не принимает аргументов

Если введён аргумент, который не соответствует ожидаемому шаблону, то необходимо завершить работу с ошибкой

Если введён некорректный флаг или не хватает флагов для задания параметров, то необходимо завершить работу с ошибкой

Необязательные дополнения к курсовой работе

Описанные в данной секции дополнения являются не обязательными, получить желаемую оценку можно без них.

GUI

Рядовые пользователи очень плохо умеют пользоваться терминалом, поэтому для их удобства зачастую реализуют графический интерфейс. В программе по обработке изображений такое напрашивается само собой (иначе убийца photoshop'а будет выглядеть не солидно). Подробнее про требования к GUI: Требования к курсовым (весенний семестр)

Документация

В любом хорошем проекте должна быть документация. Документация означает, что для каждой функции, структуры (и классов для C++) есть адекватное описание. Фразы в духе “Данная структура содержит данные для изображения” или “Функция обработки изображения” являются плохим описанием.

Для функций дополнительно расписаны аргументы (описание, назначение, возможные значения)

Для структур (и классов в C++) дополнительно расписаны все поля

Документацию можно написать сразу в коде, обратите вниммание на Doxygen

Создание .so библиотеки

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

Библиотека формата .so , которая содержит только функции для работы с изображениями: открытие и сохранение изображения, обработка изображений, ...

Главная часть, которая содержит в себе только main с CLI (и опционально GUI) обработкой и вызовом функций из разработанной библиотеки

ВАЖНО: Не нужно по умолчанию выполнять установку библиотеки в систему, сделайте для этого отдельную цель, например make install