Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

9373_8_7

.pdf
Скачиваний:
0
Добавлен:
20.06.2023
Размер:
1.23 Mб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра информационных систем

ОТЧЕТ

по практической работе №7

по дисциплине «Объектно-ориентированное программирование»

Студент гр. 9373

 

Заболотников М.Е.

Студентка гр. 9373

 

Петрова С.В.

Преподаватель

 

 

Егоров С.С.

Санкт-Петербург

2022

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

Разработать GUI приложение, выполняющее функцию визуализации графа

состояний.

Выполнение работы.

Для выполнения работы были внесены некоторые изменения в содержание и структуры некоторых классов, а также созданы новые.

Класс QWindow:

1.StateGraph sgraph – атрибут, хранящий в себе информацию о графе состояний (область видимости – private);

2.Добавились поле ввода данных и кнопка: QLabel *valu_state, QLineEdit *state QPushButton *ok_state и QLabel *output. Эти атрибуты необходимы для контроля изменения активной вершины графа (область видимости – private).

3.void mousPressEvent() – обработчик сигнала нажатия клавиши компьютерной мыши (область видимости – protected);

4.void set_state() – метод изменения состояния и установления нового

(область видимости – public).

Добавился новый класс StateGraph. Данный класс является производным от базового класса Graph, то есть наследует все его свойства.

1.Атрибут int active – хранит номер активной в данный момент времени вершины графа (область видимости – private);

2.StateGraph(QString, int, int) – конструктор класса, который создаёт объект по заданным из файла данным о графе (область видимости – public).

3.StateGraph() – конструктор класса, который создаёт "пустой" объект, то есть базовый граф состояний, состоящий из одной вершины (область видимости – public).

4.void draw() – метод, который будет отрисовывать граф в окне QWindow

(область видимости – public).

2

5.void newEvent_mouse() – метод-обработчик сигнала нажатия кнопки компьютерной мыши – правой или левой – который передаст информацию о том, какая именно кнопка была нажата. Через данный метод путём нажатия кнопки мыши меняется стартовая активная вершина (по умолчанию, изначально это вершина №1) (идя по часовой стрелке или против) (область видимости – public).

6.bool newEvent_state() – метод, который обрабатывает событие,

связанное с возможностью сделать выбранную пользователем i-ю

вершину активной при условии активности в данный момент j-ой вершины (область видимости – public).

7.int count_v() – данный метод возвращает количество вершин графа

состояний (область видимости – public).

Ниже представлена диаграмма классов данной программы:

Рисунок 1 – Диаграмма классов

3

Тесты работы программы.

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

Матрица состояний печатается в текстовом файле с использованием верхних клавиш с цифрами от "0" до "9", клавиш "Enter" и "Tab". Сама матрица состоит из n строк (n – количество вершин) и n столбцов (событий тоже n: каждое событие обозначает переход в -ую вершину). Элементом матрицы является номер -ой вершины, в которую можно попасть из -ой. Если из -ой вершины нельзя попасть в -ю, то данный элемент равен нулю.

Итак, рассмотрим матрицу для графа состояний на десять вершин:

Проверим правильность построения графа:

4

Как видно из рисунка, граф построен верно. Активная вершина в нём помечена бирюзовым кружком. Вершины, имеющие петли, помечаются зелёным кружком.

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

Как видно из рисунка, выбор стартовой активной вершины осуществлён и работает успешно.

Теперь опробуем из 10-й вершины перейти в 1-ю, введя в поле State is

число 1 и нажав кнопку "Ввести состояние":

5

Программа выдаёт сообщение о том, что у данной вершины нет введённого

состояния. Это означает, что не существует событие перехода из вершины №10

ввершину №1. Это соответствует элементу 10,1 = 0.

Авот перейти из вершины №10 в вершину №3 мы можем. Для этого введём

вполе State is число 3 и нажмём кнопку "Ввести состояние":

Далее посмотрим, как работает проверка на ошибочность исходных данных в файле. Попробуем считать такой граф:

В нём всё хорошо, кроме того, что 11 = 2 . Посмотрим, что выдаёт программа:

6

Программа не приняла этот граф. Проверка пройдена. Теперь проведём проверку на наличие посторонних символов, помимо цифр:

Здесь стоит буква у самого первого элемента. Реакция программы:

Итак, программа прошла проверку на ошибочные исходные данные.

7

Выводы.

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

8