Генератор блок-схем

Рисовать блок-схемы к лабораторным – нудно. Намного веселее запустить наш генератор блок-схем Flowchart Creator и сэкономить время.

О проекте за 40 секунд

История проекта

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

В начале летней практики у нас было много идей самых разных проектов: от telegram-ботов до компьютерных игр. Мы хотели, чтобы наш проект приносил практическую пользу. Идея с генератором блок-схем показалась нам самой подходящей.

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

За короткий срок был разработан интерфейс и дизайн программы. Написание функции проверки введённого кода на корректность заняло пару дней.

Окно desktop-приложения

Основными задачами стали: парсер для выявления блоков кода для отрисовщика, и сам отрисовщик для составления блок-схем на основе данных, полученных от парсера. На разработку этих двух блоков ушло 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.
  • На данный момент программа работает неидеально. В некоторых случаях некорректно рассчитываются координаты линий из-за чего возникают коллизии при отрисовке. Также не удалось вставить текст в блоки и существуют ограничения на размер блок схемы.

Заключение, послесловие, благодарности

Выражаем благодарность руководителем летней практики Борису Николаевичу Седову и Алексею Юрьевичу Сыщикову за качественную организацию и креативный подход. Мы узнали, что такое работа над проектом в команде, и приобрели опыт разработки программного обеспечения, которое решает пользовательскую проблему.

Команда проекта

В проекте принимали участие:

Ссылка на проект: https://github.com/Andrey13-cyber/FlowChart-App-2021
Примерная оценка затраченного времени на разработку проекта – 50 человеко-часов.

Previous Article