Генератор блок-схем
Рисовать блок-схемы к лабораторным – нудно. Намного веселее запустить наш генератор блок-схем Flowchart Creator и сэкономить время.
История проекта
На протяжении первого курса университета авторам приходилось сталкиваться с очень скучной и отнимающей кучу времени частью оформления отчетов по лабораторным работам – созданию блок-схем к написанному коду.
Нам хорошо известно ощущение, когда после долгожданной успешной компиляции приходит осознание, что следующим этапом станет написание отчета и долгое рисование блок-схем. Это снижает мотивацию и наслаждение от программирования. Наша программа поможет студентам не терять настрой и тратить больше времени на программирование, а не на писанину.

В начале летней практики у нас было много идей самых разных проектов: от telegram-ботов до компьютерных игр. Мы хотели, чтобы наш проект приносил практическую пользу. Идея с генератором блок-схем показалась нам самой подходящей.
Часть команды интересовалась web-дизайном и разработкой web-сервисов, они хотели попробовать себя в создании приложения с использованием новых для себя технологий: языка JavaScript и фреймворка Electron. Остальная часть команды занималась backend-разработкой и изучала язык c++, поэтому каждый выполнял те задачи, которые ему по душе.
За короткий срок был разработан интерфейс и дизайн программы. Написание функции проверки введённого кода на корректность заняло пару дней.

Основными задачами стали: парсер для выявления блоков кода для отрисовщика, и сам отрисовщик для составления блок-схем на основе данных, полученных от парсера. На разработку этих двух блоков ушло 80% времени от всей разработки проекта.
Демонстрация работы программы: https://www.youtube.com/watch?v=R2pKrQ6Ym8w
Описание проекта

- Файл parse.h парсит код на языке c++. Он ищет ключевые слова в коде и определяет для каждого свою структуру объявленных и описанных в других файлах. В зависимости от вложенности структур парсер строит дерево. Затем с помощью двух проходов в глубину рассчитываются размеры блоков и их координаты. Два прохода нужно, сначала нужно рассчитать размеры блоков, что удобно делать на “размотке рекурсии”, а затем рассчитать координаты через размеры блоков.
- Файл Figure.h содержит объявление абстрактного класса фигуры, от которого наследуются все типы блоков. Этот абстрактный класс содержит объявление функций добавления очередного блока внутрь текущего и возврата типа фигуры.
- В файлах If.h, While.h, For.h, Rectangle.h, Circle.h описываются все использующиеся типы фигур.
- После того как парсер составит структуру рассчитываются координаты линий и добавляются в вектор линий, после чего функция parse возвращает пару векторов, в первом содержатся координаты фигур, во втором координаты линий.
- В файлах отрисовщика определены функции отрисовки линий и всех нужных типов фигур по координатам.
- Перед запуском парсера программа сохраняет код на с++ в текстовый файл, к которому обращается сначала корректировщик (он должен проверить на корректность код на с++), а затем к нему уже обращается и сам парсер.
- Корректировщик получает на вход путь к .cpp файлу. Создаёт .bat файл, в который помещается скрипт компиляции файла при помощи компилятора g++. Если
- компиляция завершилась с кодом «0», то код корректен, и его можно передавать парсеру. В ином случае – в коде ошибка.
- Для реализации отрисовщика была использована open-source-библиотека sfml.
- На данный момент программа работает неидеально. В некоторых случаях некорректно рассчитываются координаты линий из-за чего возникают коллизии при отрисовке. Также не удалось вставить текст в блоки и существуют ограничения на размер блок схемы.
Заключение, послесловие, благодарности
Выражаем благодарность руководителем летней практики Борису Николаевичу Седову и Алексею Юрьевичу Сыщикову за качественную организацию и креативный подход. Мы узнали, что такое работа над проектом в команде, и приобрели опыт разработки программного обеспечения, которое решает пользовательскую проблему.
Команда проекта
В проекте принимали участие:
- Иванов Артем – Дизайн приложения. Гр 1942. https://vk.com/mercy2436
- Кокшаров Сергей – Отрисовщик. Гр 1942. https://vk.com/idpamagiti
- Кузнецова Алина – Тестирование. Гр 1941. https://vk.com/lightlamafrrr
- Пещеров Андрей – Интерфейс пользователя. Гр 1942. https://vk.com/andvrxcsp
- Файзуллин Роман – Корректировщик, отрисовщик, Гр 1942. https://vk.com/id101896421
- Фесенко Андрей – Парсер, отрисовщик. Гр 1942. https://vk.com/andrei.fesenko
Ссылка на проект: https://github.com/Andrey13-cyber/FlowChart-App-2021
Примерная оценка затраченного времени на разработку проекта – 50 человеко-часов.