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

Лабораторные Егоров / 0361_ЦукановаПА_№8

.pdf
Скачиваний:
4
Добавлен:
03.02.2024
Размер:
409.8 Кб
Скачать

МИНОБРОССИНАУКИ САНКТ-ПЕТЕРБУРГГОСУДАРСТВЕННЫЙКИЙ

ЭЛЕКТРОТЕХУНИВЕРСИТЕТЧСКЙ «ЛЭТИ»ИМ.В.И.УЛЬЯНОВА(ЛЕНИНА)

КафедраИнформационныхсистем

ОТЧЕТ попрактическойработе№8

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

Студентыгр.0361

 

Семенова.А. Е

 

Цуканова.А. П

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

 

 

ЕгоровС.С.

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

2023

Задание на практическую. работу

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

Граф состояний—эториентированный, одна изграфвершин которогокаждыйвмоментвременисч таетсяактивной. Каждойуге приписанонек торое, присобытиевозникновении которого происходит смена активнойвершины.

Граф состояний описывает, число строкяматрицейкоторой равно числувершин, а число столбцов—числу событий. Элементомi-ой строки и j-гостолбцаявляетсяномерстроки(.е. соответствующаяейвершина

графа),которая становится активнойjгособытияпри, есливозникновении при этомвершинаi былактивна.

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

Рисунок1 Макет– диаграммыклассов

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

Прикорректностиданныхсоздаетсяобъекткласса"Графсостояний", устанавливаютсяесли( необходимо) связимеждуновымобъектом и существующими, послеч гографотображаетсявсоответствующем окне (объект"классаОкнопредставленияграфа").

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

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

 

Спецификация.

классов

 

 

КлассTDraw

 

 

 

 

 

Поля:

 

 

 

 

 

 

 

 

 

 

Наименование

 

Тип видимостиОбласть

 

 

 

 

 

 

 

Graph

 

TGraph

 

protected

 

 

 

 

 

 

Методы:

 

 

 

 

 

TDraw ();

 

 

 

 

 

Конструкторклассапоумолчанию,областьвидимости–public.

 

 

TDraw (TGraph);

 

 

 

Конструктор, в

 

классакоторый передаётся, области

граф

видимости–public.

 

 

 

 

 

void draw (QPainter*, QRect);

Отрисовыетграфокнеприложения,областьвидимости–public.

void drawLines (QPointF*, QPainter*, int i, int j, qreal);

Отрисовывалинииметждуузламиграфа,областьвидимости– public.

bool isConnected (int i, int j);

Проверяетсоединенточекiиj,областьвидимости–public.

КлассTGraph

 

 

Поля:

 

 

 

 

 

Наименование

Тип видимостиОбласть

 

 

 

 

adjMatrix

TMatrix<int>

private

 

 

 

dim

int

private

 

 

 

Методы:

TGraph();

Конструкторклассапоумолчанию,областьвидимости—public.

int getElement(int, int);

Геттерэлеменматарицы,областьвидимости—public.

int getDim();

Геттерразмерностиматр,областьцывидимости—public.

void setGraph(QString);

Считывает граф из файла, областьизаписывает матрицу видимости–public.

КлассTMatrix

 

 

Поля:

 

 

 

 

 

Наименование

Тип видимостиОбласть

 

 

 

 

dim

int

protected

 

 

 

defaultMatrix

vector<vector<number>>

protected

 

 

 

Методы:

number getElement(int, int);

Геттерэлеменматарицы,областьвидимости–public.

number getDimension();

Геттерразмерностиматр,областьцывидимости–public.

void setElement(number, int, int);

Сеттерэлеменматарицы,областьвидимости–public.

void setDimension(int);

Сеттерразмерностиматр,областьцывидимости–public.

КлассTStateGraph

 

 

Поля:

 

 

 

 

 

Наименование

Тип видимостиОбласть

 

 

 

 

selected

int

private

 

 

 

Методы:

TStateGraph;

Конструктклассапумолчаниюр ,областьвидимости—public.

TStateGraph(TGraph);

Конструктор, в которыйкласса передается граф и добавляется активная,вершинаобластьвидимости–public.

void draw(QPainter*,; QReact)

Отрисовывает граф и активную, вершину в окне приложения область видимости–public.

void onClickedEvent(bool);

Обрабатываетнажатиеклавишеймыши,областьвидимости—

public.

КлассTWindow

 

 

Поля:

 

 

 

 

 

Наименование

Тип видимостиОбласть

 

 

 

 

stateGraph

TStateGraph

private

 

 

 

Методы:

TWindow(TStateGraph, QWidget *parent = 0);

Конструкторкласса,областьвидимости—public.

~TWindow();

Деструкткласса,орбластьвидимости—public.

void browse();

Ищетфайлсграфом,открывего,атакжеетсоздаетновоеокно сизображеданногоием,облграфасть видимости—public.

void mousePressEvent(QMouseEvent);

Обрабатывнажклавишейтиеет мыши,областьвидимости— protected.

void paintEvent(QPaintEvent*);

Отрисовываетокноприложения,областьвидимости—protected.

Диаграмма. классов

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

Описание контрольного примера с исходными и ожидаемыми (расчетными)данными.

Дляпроверкипрограммыбылвзятграфсостоянийчетырьмя вершинами, который показан3. на рисунке

Рисунок3–Графсостоянийчетырьмявершинами

Приложение обрабатывает нажатие левой и правой кнопок мыши (ЛКМПКМисоответственно). При нажатииактивнаяЛКМвершина переходит к следующей неактивнойстрелки, привершине против часовой нажатииПКМ—почасовойстрелке. Пример работы программы при нажатии на кнопки мыши4 5показаны. на рисунках

Рисунок4—Нажатие левой(ЛКМкнопки) мыши

Рисунок5 Нажатие– правой(ПКМкнопки) мыши

Соседние файлы в папке Лабораторные Егоров