Лабораторные Егоров / 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 Нажатие– правой(ПКМкнопки) мыши
