Лабораторные Егоров / 0361_ЦукановаПА_№8
.pdfМИНОБРОССИНАУКИ САНКТ-ПЕТЕРБУРГГОСУДАРСТВЕННЫЙКИЙ
ЭЛЕКТРОТЕХУНИВЕРСИТЕТЧСКЙ «ЛЭТИ»ИМ.В.И.УЛЬЯНОВА(ЛЕНИНА)
КафедраИнформационныхсистем
ОТЧЕТ попрактическойработе№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 Нажатие– правой(ПКМкнопки) мыши