Сетевое приложение в архитектуре "клиент-сервер" на базе синтаксического анализатора xml-файлов

Разработка сетевого приложения в архитектуре клиент-сервер на базе синтаксического анализатора xml-файлов, позволяющего в реальном времени проводить моделирование сетей Петри. Оригинальные компоненты интерфейса, структуры передачи данных и их отображения.

Рубрика Программирование, компьютеры и кибернетика
Вид диссертация
Язык русский
Дата добавления 21.02.2019
Размер файла 2,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

out << quint16(arrBlock.size() - sizeof(quint16));

pSocket->write(arrBlock);

}

void MyServer::slotWriteClient()

{

if(lis.length() != 0)

{

QString str;

timer = new QTimer(this);

timer->setInterval(2000);

connect(timer, SIGNAL(timeout()), this, SLOT(slotZad()));

QFile file1("file1.txt");

if (!file1.open(QIODevice::ReadOnly | QIODevice::Text))

return;

kol1 = file1.readAll().toInt();

file1.close();

qDebug() << "kol1 = " << kol1;

for(int i = 0; i < lis.length(); i++)

{

socet = lis.at(i);

if(lineEdit_4->text().isEmpty()){

str = QString::number(i + 1) + " Client";

sendToClient(socet,

"Server Response: Received \"" + str + "\""

);

}

else if(lineEdit_4->text() == "start")

{

str = lineEdit_4->text();

answ = 1;

if((i >= 1) && (i = lis.length()))

{

timer->start();

}

else

sendToClient(socet, str);

}

else if(lineEdit_4->text() != "start")

sendToClient(socet, lineEdit_4->text());

}

}

else

m_ptxt->append("Пуст");

}

void MyServer::slotZad()

{

QString str;

if(socn < kol1 /*lis.length()*/)

{

qDebug() << "socn = " << socn;

socet = lis.at(socn);

str = lineEdit_4->text();

sendToClient(socet, str);

socn = socn + 1;

}

else

{

timer->stop();

lineEdit_4->clear();

socn = 1;

for(int i = 0; i <= 2; i++)

{

qDebug() << "массив результат " << maspr[i];

}

qDebug() << "номер приоритета = " <<c;

if(c != 0)

for(int i = 0; i < kol1; i++)

{

for(int j = 0; j < kol1; j++)

{

if(maspr[i] == maspr[j])

{

if(i != j)

{

qDebug() << "i = " << i << "j = " << j;

if(i == c)

m_ptxt->append("Максимальное число: " + QString::number(i) + " Клиент = " + QString::number(j));

}

}

}

}

if(c == 0)

m_ptxt->append("Максимальное число: " + QString::number(b));

b = 0;

c = 0;

}

}

void MyServer::xmlLoad()

{

scen1 = new GraphicsScene;

QGridLayout *layout = new QGridLayout();

layout->addWidget(scen1);

setLayout(layout);

}

void MyServer::xmlRead()

{

QString path;

QString filename = QFileDialog::getOpenFileName(this, trUtf8("Open SVG"),

path, tr("SVG files (*.svg *.ui)"));;

QDomDocument doc; // объект документа

QFile file(filename); // Открываем наш SVG-файл

QString tag1 = "net";

QString tag2 = "place";

// QString tag3 = "graphics";

// QString tag4 = "position";

QString tag5 = "transition";

QString tag6 = "arc";

QString tag7 = "initialMarking";

QString tag8 = "value";

// Если он не открылся или не удалось передать содержимое в QDocDocument

if (!file.open(QIODevice::ReadOnly) || !doc.setContent(&file))

return;

// Ищем в документе все объекты с тегом g

QDomNodeList gList = doc.elementsByTagName(tag1);

QDomNodeList gPlace = doc.elementsByTagName(tag2);

QDomNodeList gList2 = doc.elementsByTagName(tag5);

QDomNodeList gList3 = doc.elementsByTagName(tag6);

QDomNodeList gList4 = doc.elementsByTagName(tag7);

QDomNodeList gList5 = doc.elementsByTagName(tag8);

// Начинаем их перебирать

//int kol1 = 0;

qDebug() << tag2 << "нашел = " << gPlace.size();

QString mas1[gList3.length()];

QString mas2[gList3.length()];

QString mas3[gList2.length()];

QString mas4[gPlace.length()];

QString mas6[gList4.length()];

QString mas7[gList4.length()];

for (int i = 0; i < gList.size(); i++) {

QDomNode gNode = gList.item(i); // Выделяем из списка ноду

QDomElement rectangle = gNode.firstChildElement(tag2); // И ищем в ней элемент c тегом rect

// Если полученный элементы не нулевой, то

if (rectangle.isNull()){

qDebug() << tag2 << "не вошел";

continue;

} else {

qDebug() << tag2 << "вошел " << 1 <<" раз" << rectangle.attribute("id");

mas4[i] = rectangle.attribute("id");

if(gPlace.size() > gList.size())

{

for(int i = 1; i < gPlace.size(); i++)

{

QDomNode gNode = gPlace.item(i);

rectangle = gNode.toElement();

qDebug() << tag2 << "вошел " << i + 1 <<" раз" << rectangle.attribute("id");

mas4[i] = rectangle.attribute("id");

}

}

}

}

for (int i = 0; i < gList.size(); i++) {

QDomNode gNode = gList.item(i); // Выделяем из списка ноду

QDomElement rectangle = gNode.firstChildElement(tag5); // И ищем в ней элемент c тегом rect

// Если полученный элементы не нулевой, то

if (rectangle.isNull()){

qDebug() << tag5 << "не вошел";

continue;

} else {

qDebug() << tag5 << "вошел " << 1 <<" раз" << rectangle.attribute("id");

mas3[i] = rectangle.attribute("id");

if(gList2.size() > gList.size())

{

for(int i = 1; i < gList2.size(); i++)

{

QDomNode gNode = gList2.item(i);

rectangle = gNode.toElement();

qDebug() << tag5 << "вошел " << i + 1 <<" раз" << rectangle.attribute("id");

mas3[i] = rectangle.attribute("id");

}

}

}

}

for (int i = 0; i < gList.size(); i++) {

QDomNode gNode = gList.item(i); // Выделяем из списка ноду

QDomElement rectangle = gNode.firstChildElement(tag6); // И ищем в ней элемент c тегом rect

// Если полученный элементы не нулевой, то

if (rectangle.isNull()){

qDebug() << tag6 << "не вошел";

continue;

} else {

qDebug() << tag6 << "вошел " << 1 <<" раз" << rectangle.attribute("source") << rectangle.attribute("target");

mas1[i] = rectangle.attribute("source");

mas2[i] = rectangle.attribute("target");

if(gList3.size() > gList.size())

{

for(int i = 1; i < gList3.size(); i++)

{

QDomNode gNode = gList3.item(i);

rectangle = gNode.toElement();

qDebug() << tag6 << "вошел " << i + 1 <<" раз" << rectangle.attribute("source") << rectangle.attribute("target");

mas1[i] = rectangle.attribute("source");

mas2[i] = rectangle.attribute("target");

}

}

}

}

int n;

for (int i = 0; i < gPlace.size(); i++) {

n = i;

QDomNode gNode = gPlace.item(i); // Выделяем из списка ноду

QDomElement rectangle = gNode.firstChildElement(tag7); // И ищем в ней элемент c тегом rect

// Если полученный элементы не нулевой, то

if (rectangle.isNull()){

qDebug() << tag7 << "не вошел";

continue;

}

else

if(gList4.size() > 0)

{

QDomNode gNode = gList4.item(i);

rectangle = gNode.firstChildElement(tag8);

if(rectangle.text() != NULL)

{

qDebug() << tag8 << "вошел " << n << tag2 << rectangle.text();

QString rasb = rectangle.text();

mas6[i] = QString::number(n) + rasb;

}

}

}

// for(int i = 0; i < gPlace.size(); i++)

// {

// qDebug() << mas4[i];

// }

// for(int i = 0; i < gList2.size(); i++)

// {

// qDebug() << mas3[i];

// }

// for(int i = 0; i < gList3.size(); i++)

// {

// qDebug() << mas1[i] << mas2[i];

// }

int nPrem = 0;

for(int i = 0; i < gList4.size(); i++)

{

QString ras;

if(mas6[i] != NULL)

{

qDebug() << "ПРИОРИТЕТ = " << mas6[i] << "номер клиента" << i;

ras = mas6[i];

for(int a = 1; a < mas6[i].length(); a++)

{

ras = mas6[i];

ras = ras.at(a);

if(ras != "D")

if(ras != "e")

if(ras != "f")

if(ras != "a")

if(ras != "u")

if(ras != "l")

if(ras != "t")

if(ras != ",")

{

qDebug() << "ras = " << ras;

mas7[nPrem] += ras;

}

}

}

nPrem++;

}

for(int i = 0; i < gList4.size(); i++)

{

if(mas7[i] != NULL)

{

qDebug() << mas7[i] << " " << i;

c = i;

}

}

/*---------------------------------Add tabl---------------------------------------*/

QString rasb;

QString mas5[gPlace.size()];

int j = 0;

for(int i = 0; i < gList3.size(); i++)

{

rasb = mas1[i];

rasb = rasb.at(0);

if(rasb == "P")

{

mas5[j] = mas1[i] + "->" + mas2[i];

//qDebug() << mas5[j];

j++;

}

}

j = 0;

for(int i = 0; i < gList3.size(); i++)

{

for(int ii = 0; ii < gList3.size(); ii++)

{

if (mas2[i] == mas1[ii])

{

mas5[j] = mas5[j] + "->" + mas2[ii];

qDebug() << mas5[j];

j++;

}

}

}

QTableWidget *tableWidget = new QTableWidget();

qDebug() << j;

tableWidget->setRowCount(j);

tableWidget->setColumnCount(5);

QString ew, pw;

int r = 0;

int r2 = 0;

int r3 = 0;

int r4 = 0;

QString m1[j];

QString m2[j];

for(int i = 0; i < j; i++)

{

rasb = mas5[i];

for(int g = 0; g < rasb.length(); g++)

{

pw = rasb.at(g);

if(pw != "-")

{

ew = ew + rasb.at(g);

}

else

{

m1[r] = QString::number(g);

qDebug() << ew;

QTableWidgetItem *item = new QTableWidgetItem(); // выделяем память под ячейку

QTableWidgetItem *item2 = new QTableWidgetItem(); // выделяем память под ячейку

item->setText(QString("%1").arg(ew)); // вставляем текст

item2->setText(QString("%1").arg(rasb)); // вставляем текст

tableWidget->setItem(r, 0, item); // вставляем ячейку

tableWidget->setItem(r, 3, item2); // вставляем ячейку

r++;

break;

}

}

ew.clear();

int g = rasb.length();

while(g > 0)

{

pw = rasb.at(g-1);

if(pw != ">")

{

ew.prepend(rasb.at(g-1));

}

else

{

m2[r2] = QString::number(g);;

qDebug() << ew;

QTableWidgetItem *item = new QTableWidgetItem(); // выделяем память под ячейку

item->setText(QString("%1").arg(ew)); // вставляем текст

tableWidget->setItem(r2, 2, item); // вставляем ячейку

r2++;

break;

}

g = g - 1;

}

ew.clear();

}

for(int i = 0; i < j; i++)

{

qDebug() << m1[i] << m2[i];

}

for(int i = 0; i < j; i++)

{

rasb = mas5[i];

int a1 = m1[i].toInt() + 2;

int a2 = m2[i].toInt() - 2;

for(int b = a1; b < a2; b++)

{

ew = ew + rasb.at(b);

}

QTableWidgetItem *item = new QTableWidgetItem(); // выделяем память под ячейку

item->setText(QString("%1").arg(ew)); // вставляем текст

tableWidget->setItem(r3, 1, item); // вставляем ячейку

r3++;

ew.clear();

}

n = 1;

for(int i = 0; i < j; i++)

{

if(mas7[n] != NULL)

rasb = mas7[n];

else

rasb = "0";

// int a1 = m1[i].toInt() + 2;

// int a2 = m2[i].toInt() - 2;

// for(int b = a1; b < a2; b++)

// {

// ew = ew + rasb.at(b);

// }

QTableWidgetItem *item = new QTableWidgetItem(); // выделяем память под ячейку

item->setText(QString("%1").arg(rasb)); // вставляем текст

tableWidget->setItem(r4, 4, item); // вставляем ячейку

r4++;

n++;

ew.clear();

}

QStringList lst;

lst << ("Начало") << ("Переход") << ("Конец") << ("Полный путь") << ("Приоритет");

tableWidget -> setHorizontalHeaderLabels(lst);

kol2 = j;

QFile file1("file1.txt");

if (file1.open(QIODevice::WriteOnly) || QIODevice::Text)

{

QTextStream stream(&file1);

stream << kol2;

file1.close();

}

tableWidget->setMinimumSize(600,400);

tableWidget->show();

file.close();

return;

}

void MyServer::set_Cond()

{

QWidget *setc = new QWidget();

QGridLayout *layout = new QGridLayout();

QLineEdit *lin = new QLineEdit();

QCheckBox *check1 = new QCheckBox(">");

QCheckBox *check2 = new QCheckBox("Max");

QCheckBox *check3 = new QCheckBox("<");

QCheckBox *check4 = new QCheckBox("Min");

QPushButton *butOk = new QPushButton("OK");

QPushButton *butC = new QPushButton("Cancel");

lin->setText("5");

layout->addWidget(lin,0,0,1,2);

layout->addWidget(check1,1,0);

layout->addWidget(check2,1,1);

layout->addWidget(check3,2,0);

layout->addWidget(check4,2,1);

layout->addWidget(butOk,3,0);

layout->addWidget(butC,3,1);

setc->setLayout(layout);

setc->setWindowTitle("Set Condition");

setc->show();

}

1.10 svgreader.cpp:

#include "svgreader.h"

#include <QPen>

#include <QTextStream>

#include <QFile>

#include <QMessageBox>

#include <QDomDocument>

#include <QDebug>

#include <QStringList>

#include <QXmlStreamReader>

#include <QWidget>

#include <QTableWidget>

SvgReader::SvgReader()

{

}

QList<QGraphicsRectItem *> SvgReader::getElements(const QString filename)

{

QList<QGraphicsRectItem *> rectList; // Объявим в стеке список прямоугольников

QDomDocument doc; // объект документа

QFile file(filename); // Открываем наш SVG-файл

QString tag1 = "net";

QString tag2 = "place";

// QString tag3 = "graphics";

// QString tag4 = "position";

QString tag5 = "transition";

QString tag6 = "arc";

// Если он не открылся или не удалось передать содержимое в QDocDocument

if (!file.open(QIODevice::ReadOnly) || !doc.setContent(&file))

return rectList;

// Ищем в документе все объекты с тегом g

QDomNodeList gList = doc.elementsByTagName(tag1);

QDomNodeList gPlace = doc.elementsByTagName(tag2);

QDomNodeList gList2 = doc.elementsByTagName(tag5);

QDomNodeList gList3 = doc.elementsByTagName(tag6);

// Начинаем их перебирать

//int kol1 = 0;

qDebug() << tag2 << "нашел = " << gPlace.size();

QString mas1[gList3.length()];

QString mas2[gList3.length()];

QString mas3[gList2.length()];

QString mas4[gPlace.length()];

for (int i = 0; i < gList.size(); i++) {

QDomNode gNode = gList.item(i); // Выделяем из списка ноду

QDomElement rectangle = gNode.firstChildElement(tag2); // И ищем в ней элемент c тегом rect

// Если полученный элементы не нулевой, то

if (rectangle.isNull()){

qDebug() << tag2 << "не вошел";

continue;

} else {

qDebug() << tag2 << "вошел " << 1 <<" раз" << rectangle.attribute("id");

mas4[i] = rectangle.attribute("id");

if(gPlace.size() > gList.size())

{

for(int i = 1; i < gPlace.size(); i++)

{

QDomNode gNode = gPlace.item(i);

rectangle = gNode.toElement();

qDebug() << tag2 << "вошел " << i + 1 <<" раз" << rectangle.attribute("id");

mas4[i] = rectangle.attribute("id");

}

}

}

}

for (int i = 0; i < gList.size(); i++) {

QDomNode gNode = gList.item(i); // Выделяем из списка ноду

QDomElement rectangle = gNode.firstChildElement(tag5); // И ищем в ней элемент c тегом rect

// Если полученный элементы не нулевой, то

if (rectangle.isNull()){

qDebug() << tag5 << "не вошел";

continue;

} else {

qDebug() << tag5 << "вошел " << 1 <<" раз" << rectangle.attribute("id");

mas3[i] = rectangle.attribute("id");

if(gList2.size() > gList.size())

{

for(int i = 1; i < gList2.size(); i++)

{

QDomNode gNode = gList2.item(i);

rectangle = gNode.toElement();

qDebug() << tag5 << "вошел " << i + 1 <<" раз" << rectangle.attribute("id");

mas3[i] = rectangle.attribute("id");

}

}

}

}

for (int i = 0; i < gList.size(); i++) {

QDomNode gNode = gList.item(i); // Выделяем из списка ноду

QDomElement rectangle = gNode.firstChildElement(tag6); // И ищем в ней элемент c тегом rect

// Если полученный элементы не нулевой, то

if (rectangle.isNull()){

qDebug() << tag6 << "не вошел";

continue;

} else {

qDebug() << tag6 << "вошел " << 1 <<" раз" << rectangle.attribute("source") << rectangle.attribute("target");

mas1[i] = rectangle.attribute("source");

mas2[i] = rectangle.attribute("target");

if(gList3.size() > gList.size())

{

for(int i = 1; i < gList3.size(); i++)

{

QDomNode gNode = gList3.item(i);

rectangle = gNode.toElement();

qDebug() << tag6 << "вошел " << i + 1 <<" раз" << rectangle.attribute("source") << rectangle.attribute("target");

mas1[i] = rectangle.attribute("source");

mas2[i] = rectangle.attribute("target");

}

}

}

}

// for(int i = 0; i < gPlace.size(); i++)

// {

// qDebug() << mas4[i];

// }

// for(int i = 0; i < gList2.size(); i++)

// {

// qDebug() << mas3[i];

// }

// for(int i = 0; i < gList3.size(); i++)

// {

// qDebug() << mas1[i] << mas2[i];

// }

QString rasb;

QString mas5[gPlace.size()];

int j = 0;

for(int i = 0; i < gList3.size(); i++)

{

rasb = mas1[i];

rasb = rasb.at(0);

if(rasb == "P")

{

mas5[j] = mas1[i] + "->" + mas2[i];

//qDebug() << mas5[j];

j++;

}

}

j = 0;

for(int i = 0; i < gList3.size(); i++)

{

for(int ii = 0; ii < gList3.size(); ii++)

{

if (mas2[i] == mas1[ii])

{

mas5[j] = mas5[j] + "->" + mas2[ii];

qDebug() << mas5[j];

j++;

}

}

}

QTableWidget *tableWidget = new QTableWidget();

tableWidget->setRowCount(5);

tableWidget->setColumnCount(4);

for(int row = 0; row < tableWidget->rowCount(); row++)

for(int column = 0; column < tableWidget->columnCount(); column++)

{

QTableWidgetItem *item = new QTableWidgetItem(); // выделяем память под ячейку

item->setText(QString("%1_%2").arg(row).arg(column)); // вставляем текст

tableWidget->setItem(row, column, item); // вставляем ячейку

}

int kol2 = j;

QFile file1("file1.txt");

if (file1.open(QIODevice::WriteOnly) || QIODevice::Text)

{

QTextStream stream(&file1);

stream << kol2;

file1.close();

}

tableWidget->show();

file.close();

return rectList;

}

QRectF SvgReader::getSizes(const QString filename)

{

QDomDocument doc; // инициализируем в стеке объект QDomDocument

QFile file(filename); // Открываем наш SVG-файл

// Если он не открылся или не удалось передать содержимое в QDocDocument

if (!file.open(QIODevice::ReadOnly) || !doc.setContent(&file))

return QRectF(0,0,200,200); // то возвратим значения для сцены по умолчанию

/* Далее забираем список элементов с тегом svg.

* В случае, если список элементов будет не пустой,

* то заберём размеры графической сцены.

* */

QDomNodeList list = doc.elementsByTagName("svg");

if(list.length() > 0) {

QDomElement svgElement = list.item(0).toElement();

QStringList parameters = svgElement.attribute("viewBox").split(" ");

return QRectF(parameters.at(0).toInt(),

parameters.at(1).toInt(),

parameters.at(2).toInt(),

parameters.at(3).toInt());

}

return QRectF(0,0,200,200);

}

Приложение Б

Презентация

(рекомендуемое)

Размещено на Allbest.ru


Подобные документы

  • Многоуровневые архитектуры клиент–сервер. Диаграммы классов, реализующих уровни презентации, бизнес–логики и базы данных приложения. Словесное описание процесса выполнения транзакций. Создание, изменение и удаление хранимых процедур, их выполнение.

    курсовая работа [3,4 M], добавлен 23.03.2013

  • Разработка клиент-серверного приложения, позволяющего взаимодействовать друг с другом с использованием доступа к базам данных. Проектирование связи сервера с базой данных с помощью технологии ODBC. Разработка интерфейса программы, ее тестирование.

    курсовая работа [352,0 K], добавлен 24.08.2016

  • Основные концепции разработки приложения в архитектуре MVVM. Проектирование базы данных, предназначенной для сбора информации о дорожно-транспортных происшествиях. Классификация и типы архитектуры "клиент–сервер", ее основные достоинства и недостатки.

    курсовая работа [4,1 M], добавлен 25.11.2015

  • Реализация прямого проектирования в архитектуре "файл-сервер". Процесс изменения структуры базы данных, реализация прямого проектирования в архитектуре "клиент-сервер", генерирование SQL-кода создания базы данных на основе физической модели данных.

    контрольная работа [697,8 K], добавлен 16.02.2015

  • Основные компоненты системы и управление ими. Распределенная система управления и человеко-машинный интерфейс. Инструментарий для создания OPC-серверов и OPC-клиентов. Техническое руководство для администраторов, обслуживающих OPC-клиент и веб-сервер.

    дипломная работа [2,0 M], добавлен 20.10.2011

  • Реализация информационной системы "Стройгенплан" в архитектуре "клиент-сервер". Цели и задачи моделируемой информационной системы, ее функциональная и информационная модели. Описание программного обеспечения, разработанного в архитектуре "клиент-сервер".

    курсовая работа [1,9 M], добавлен 30.08.2010

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

    курсовая работа [28,5 K], добавлен 28.06.2011

  • Основные технологии веб-программирования. Методы отправки данных на сервер с помощью HTML-формы. PHP - Препроцессор Гипертекста. Сохранение данных в базе данных MySQL. Клиент-Сервер и технология CGI. Примеры использования PHP совместно с MySQL.

    лекция [2,9 M], добавлен 27.04.2009

  • Анализ предметной области. Выработка требований и ограничений. Серверная часть информационной системы. Запросы клиентского приложения. Триггеры для поддержки сложных ограничений целостности в базе данных. Пользовательский интерфейс клиентского приложения.

    курсовая работа [2,6 M], добавлен 21.02.2016

  • Характеристика модели клиент-сервер как технологии взаимодействия в информационной сети. Разработка и описание алгоритмов работы приложений на платформе Win32 в среде Microsoft Visual Studio, использующих для межпроцессного взаимодействия сокеты.

    курсовая работа [544,6 K], добавлен 02.06.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.