Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет (старое).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
259.58 Кб
Скачать

2 Постановка задачи

В рамках данной учебной практики требуется создать приложение для работы с графами. Средством создания приложения является среда программирования Microsoft Visual C++ 2010 с использованием библиотеки компонентов BGL. Графической основой для создания приложения является используемое на предприятии приложение DrawClient, позволяющее создавать изображения, состоящие из основных геометрических фигур. Требуется отредактировать программный код приложения DrawClient и адаптировать его для возможности работы с графами.

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

– иметь удобный и интуитивно понятный интерфейс;

– обладать свойствами надежности;

– обладать необходимыми функциональными возможностями

Приложение должно иметь следующие функциональные возможности:

– выбор вида графа (ориентированный или неориентированный);

– добавление вершин и ребер;

– удаление вершин и ребер;

– использование алгоритмов работы с графами.

Приложение должно поддерживать следующие алгоритмы работы с графами:

– вывод списка смежных вершин для каждой вершины;

– нахождение расстояния до вершин от данной вершины;

– поиск в ширину;

– поиск в глубину;

– топологическая сортировка (для ориентированного графа).

3 Описание приложения

3.1 Основные классы

Приложение содержит следующие основные классы:

1) CMainFrame – класс основного окна приложения. Содержит функции для отображения элементов окна приложения;

2) CDrawDoc – класс документа. Каждому документу соответствует один граф. Класс содержит объявление графа и функции, вызываемые при работе с документом (например, функция OnNewDocument выполняется при создании нового документа, устанавливает параметры документа (такие, как заголовок) и вызывает диалоговое окно для выбора вида графа). Также класс содержит переменную перечисляемого типа GraphType, которая может принимать значения GRAPH_UNDIR_TYPE и GRAPH_BIDIR_TYPE (неориентированный и неориентированный граф соответственно). Значение переменной устанавливается в результате выбора вида графа в диалоговом окне класса DialogGraph и определяет, с каким из графов будет производиться дальнейшая работа в рамках данного документа;

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

4) CDrawTool – класс инструментов представления. Является связующим звеном между классами CDrawView и CDrawObj. Содержит функции, обрабатывающие действия пользователя, такие как клик мышью и перетаскивание объекта. Содержит два дочерних класса: CSelectTool (при совершении действий с выбранном объектом) и CRectTool (при совершении действий вне конкретного объекта, в том числе, при клике мышью в документе для добавления вершины).

5) CDrawObj – класс объекта. Содержит информацию об объекте и функции для работы с ним, в том числе для непосредственной прорисовки объекта на экране;

6) COutputViewBar – класс панели Output. Содержит функции для работы с панелью для вывода результатов работы алгоритмов обработки графа;

7) COutputList – класс списка. Содержит функции для работы с информацией в панели класса COutputViewBar;

8) CDrawApp – класс приложения. Содержит функции для обработки процессов запуска и закрытия приложения;

9) CRibbonListButton – класс ленты меню основного окна приложения. Содержит функции для работы с самой лентой, ее панелями и кнопками;

10) DialogGraph – класс диалога для выбора вида графа. Содержит функции для обработки действий по выбору вида графа.

3.2 Работа с приложением

При запуске приложения, а также при создании нового документа (каждый из которых соответствует одному графу) на экран выводится диалоговое окно для выбора типа графа (ориентированный или неориентированный). После выбора и нажатия кнопки ОК создается новый документ, в заголовке которого указан тип графа.

Внешний вид приложения после запуска представлен на рисунке 1.

Рисунок 1 – Внешний вид окна приложения

В верхней части окна приложения находится лента меню Graphs, содержащая две панели: Draw и Algorithms. Панель Draw содержит инструменты: Vertex – для рисования вершин, Select – для выбора объекта. Панель Algorithms содержит алгоритмы для обработки графа.

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

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

Также на экране присутствует перемещаемая панель Output для вывода результатов работы алгоритмов обработки графа.

Для добавления вершины в граф необходимо выбрать инструмент Vertex в панели Draw, а затем кликнуть мышью в поле документа. Вершина появится на изображении и ей будет присвоен порядковый номер. Если среди уже существующих вершин отсутствует какой-то номер (вследствие удаления вершины), то вновь созданной вершине будет присвоен этот номер, если таких номеров несколько, то наименьший из них.

Для добавления ребра необходимо выделить две вершины (для чего нужно кликнуть сначала на одну из них, а затем, с зажатой клавишей Shift, на другую), потом щелкнуть правой клавишей мыши, нажать «Add Edge», и ребро появится на изображении. Ребру будет присвоено название в формате «[исходящая вершина] – [входящая вершина]». Для ориентированного графа вместо «–» будет изображено «->». В случае добавления в ориентированном графе ребра, обратного уже существующему, в названии на изображении стрелка будет изменена на двунаправленную («<->»).

Положение вершин на изображении можно менять перетаскиванием, вместе с ними будут менять свое положение инцидентные им ребра.

Для удаления вершины или ребра нужно выделить его и нажать клавишу Delete. Если удаляется одно из двух взаимообратных ребер ориентированного графа, то перед удалением будет выведено сообщение с вопросом о том, какое именно из двух ребер желает удалить пользователь.

Пример внешнего вида документа с изображенным ориентированным графом представлен на рисунке 2.

Рисунок 2 – Пример внешнего вида документа с ориентированным графом

Для работы с алгоритмами обработки графа необходимо после создания графа нажать кнопку соответствующего алгоритма на панели Algorithms. Результат обработки будет выведен на панель Output. Доступны следующие алгоритмы обработки графов:

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

2) поиск в ширину. Осуществляет вывод вершин графа в порядке, соответствующем поиску в ширину. Предварительно необходимо задать стартовую вершину;

3) расстояние до вершин. Выводит для каждой вершины количество вершин, находящихся на кратчайшем пути между стартовой и данной вершиной. Предварительно необходимо задать стартовую вершину;

4) поиск в глубину. Осуществляет вывод вершин графа в порядке, соответствующем поиску в глубину. Предварительно необходимо задать стартовую вершину;

5) топологическая сортировка. Осуществляет вывод вершин графа в порядке топологической сортировки. Данный алгоритм доступен только для ориентированных графов, не содержащих циклов.

Пример изображения ориентированного графа с выведенным результатом работы различных алгоритмов представлен на рисунке 3.

Рисунок 3 – Пример изображения ориентированного графа с выведенным результатом работы различных алгоритмов

ЗАКЛЮЧЕНИЕ

Конечной целью выполнения задания в рамках прохождения данной практики явилось написание приложения для работы с графами. В рамках написания приложения изучены основные принципы работы в среде программирования Microsoft Visual C++ 2010 и библиотека компонентов Boost Graph Library.

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

В целом требования, предъявленные к создаваемому приложению, можно считать достигнутыми, а задание по учебной практике – выполненным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]