Сетевое приложение в архитектуре "клиент-сервер" на базе синтаксического анализатора 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