Диплом (1189781), страница 6

Файл №1189781 Диплом (Автоматизированная информационная система ООО Сетевая энергетическая компания) 6 страницаДиплом (1189781) страница 62020-10-01СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 6)

qry.prepare("select tip from tipnaspunkt;");

qry.exec();

nasel->setQuery(qry);

ui->comboBox->setModel(nasel);

int index = ui->comboBox->findText(dobavtipnas);

if(index != -1){

ui->comboBox->setCurrentIndex(index);

}

Ниже приведена часть кода, отвечающая за добавление записей в таблицу. В первые две переменные записываются значения, введенные пользователем. Далее, выполняется запрос для нахождения уникального номера той записи, которая из другой таблицы, так как в таблицу «Населенный пункт» записывается ее идентификатор. Переменная «all» отвечает за ячейку таблицы, которая включает полностью название населенного пункта вместе с его типом, поэтому она получается сложением этих строк, плюс символ пробела. Далее проверяется, ввел ли пользователь название населенного пункта, если да, то выполняется запрос на добавление записей в таблицу. Запрос начинается с INSERT INTO после чего указывается название таблицы, поля и значения.

QString tipnas=ui->comboBox->currentText();

QString nas=ui->lineEdit->text();

QSqlQuery qry1;

qry1.prepare("select id from tipnaspunkt where tip = :tipnas;");

qry1.bindValue(":tipnas", tipnas);

qry1.exec();

qry1.next();

int tipnasid = qry1.value(0).toInt();

QString all = tipnas+" "+nas;

if(nas !=""){

qry1.prepare("insert into naselpunkt (tipnaspunkt_id, namenaselpunkt, naselpunkt) values (:tipnasid, :nas, :all);");

qry1.bindValue(":tipnasid", tipnasid);

qry1.bindValue(":nas", nas);

qry1.bindValue(":all", all);

qry1.exec();

close();

}

Редактирование строк в таблице можно рассмотреть на примере таблицы «Фидеры ТП» (рисунок 16). Форма редактирования похожа на форму для добавления, только в comboBox и lineEdit отображаются текущие значения выбранной пользователем строки, которые при необходимости, пользователь может изменить.

Рисунок 16 – Форма для редактирования записи из таблицы «Фидеры ТП»

Рассмотрим часть кода, отвечающую за редактирование записи из таблицы «Фидеры ТП». Первым этапом, в переменные передаются текущие значения полей. Далее, вызывается диалоговое окно, где сообщаются строки, которые выделены пользователем в tableView. По записанным в переменные значениям находится id записей в таблицах «Трансформаторная подстанция», «Тип фидера» и «Фидер ТП». Далее, в переменные записываются измененные пользователем значения, и вычисляются id этих строк в связанных таблицах. Когда все данные получены, необходимо сформировать запрос на изменение записи. Оператор UPDATE обновляет столбцы в соответствии с их новыми значениями в строках существующей таблицы. В выражении SET указывается, какие именно столбцы следует модифицировать и какие величины должны быть в них установлены. В выражении WHERE, задается, какие строки подлежат обновлению.

QString tp = model->data(model->index(ui->tableView->currentIndex().row(), 1), Qt::DisplayRole).toString();

QString fid = model->data(model->index(ui->tableView->currentIndex().row(), 2), Qt::DisplayRole).toString();

QString tip = model->data(model->index(ui->tableView->currentIndex().row(), 3), Qt::DisplayRole).toString();

edfidertp nas (table,model->data( model->index(ui->tableView->currentIndex() .row(),1),Qt::DisplayRole).toString(),model->data(model->index (ui->tableView->currentIndex().row(),2),Qt::DisplayRole).toString(),model->data (model->index (ui->tableView->currentIndex().row(),3),Qt::DisplayRole).toString() ,model->data (model->index(ui->tableView->currentIndex().row(),4),Qt::DisplayRole).toString() );

QSqlQuery qry1;

qry1.prepare ("select id from transfp where tp=:tp;");

qry1.bindValue(":tp", tp);

qry1.exec();

qry1.next();

int tpid= qry1.value(0).toInt();

qry1.prepare ("select id from tipfidera where tipfidera=:tip;");

qry1.bindValue(":tip", tip);

qry1.exec();

qry1.next();

int tipid= qry1.value(0).toInt();

qry1.prepare ("select id from fidertp where transfp_id=:tpid and tipfidera_id=:tipid and fider=:fid;");

qry1.bindValue(":tpid", tpid);

qry1.bindValue(":tipid", tipid);

qry1.bindValue(":fid", fid);

qry1.exec();

qry1.next();

int id= qry1.value(0).toInt();

nas.exec();

QString tp1=nas.tp();

QString fider=nas.fider();

QString tip1=nas.tip();

QString fiderimp=nas.fiderimp();

qry1.prepare ("select id from transfp where tp=:tp1;");

qry1.bindValue(":tp1", tp1);

qry1.exec();

qry1.next();

int tp1id= qry1.value(0).toInt();

qry1.prepare ("select id from tipfidera where tipfidera=:tip1;");

qry1.bindValue(":tip1", tip1);

qry1.exec();

qry1.next();

int tip1id= qry1.value(0).toInt();

qry1.prepare ("update fidertp set transfp_id=:tp1id, fider=:fider, tipfidera_id=:tip1id, fiderimp=:fiderimp, opisfideratp=concat(:tp1, ' ', :fider, ' ', :tip1, ' ', :fiderimp) where id=:id;");

qry1.bindValue(":tp1id", tp1id);

qry1.bindValue(":fider", fider);

qry1.bindValue(":tip1id", tip1id);

qry1.bindValue(":fiderimp", fiderimp);

qry1.bindValue(":tp1", tp1);

qry1.bindValue(":tip1", tip1);

qry1.bindValue(":id", id);

qry1.exec();

qry->exec();

model->setQuery(*qry);

ui->tableView->setModel(model);

Для удобства работы с таблицами используются горячие клавиши. В данной АИС горячие клавиши предусмотрены: для кнопки удаления – Ctrl+X, для добавления – Ctrl+S, для редактирования – Ctrl+A, для фильтрования – Ctrl+F, а также для вывода на печать и создания отчета – Ctrl+R. Ниже приведена часть кода, отвечающая за создание горячих клавиш.

ui->delete_2->setShortcut(QKeySequence(Qt::CTRL+Qt::Key_X));

ui->action_2->setShortcut(QKeySequence(Qt::CTRL+Qt::Key_S));

ui->redakt->setShortcut(QKeySequence(Qt::CTRL+Qt::Key_A));

ui->filtr->setShortcut(QKeySequence(Qt::CTRL+Qt::Key_F));

ui->print->setShortcut(QKeySequence(Qt::CTRL+Qt::Key_R));

Метод setShortcut является слотом и устанавливает последовательность горячих клавиш. При этом, если QKeySequence содержит несколько сочетаний клавиш, то они все будут зарегистрированы.

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

Рисунок 17 – Фильтрование по дате показаний

Когда пользователь выбрал фильтрование, вызывается диалоговое окно, где пользователю предлагают указать период, за который необходимо узнать требуемую информацию. Создаются две переменные, в которые записываются указанные пользователем даты, а также модель и запрос. Далее, составляется запрос с выборкой всех данных из таблицы в том промежутке, который указал пользователь. После чего запрос выполняется, и результат выводится на экран пользователю.

Filtr fil(db, “”, “”);

fil.exec();

Qstring data1=fil.data1();

Qstring data2=fil.data2();

model = new QsqlQueryModel;

qry = new QsqlQuery;

qry->prepare(“select * from pokazania where datap between :data1 and :data2;”);

qry->bindValue(“:data1”, data1);

qry->bindValue(“:data2”, data2);

qry->exec();

model->setQuery(*qry);

ui->tableView->setModel(model);

Там, где это возможно необходимо применять регулярные выражения для избегания добавления некорректных данных в таблицу. Ниже приведен пример использования регулярных выражений для номера телефона и email. Функция возвращает true, если для регулярного выражения есть соответствие в этой строке, в противном случае возвращает false.

ui->lineEdit_5->text().contains(QRegExp("^[0-9]{11}$"));

ui->lineEdit_6->text().contains(QRegExp("^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"));

В базе данных ООО «СЭК» существует возможность вывода на печать содержимого таблиц и сохранение этих данных на компьютере в формате .XPS. Для этого, необходимо прописать в pro файле проекта QT += printsupport для использования возможностей сохранения и печати.

Для основной таблицы по показаниям электроэнергии при выводе на печать, формируется отчетный документ (рисунок 18).

Рисунок 18 – Формирование отчета

Ниже приведен код, отвечающий за запись таблиц в документ и вывод на печать. Первым этапом, необходимо посчитать количество строк и столбцов в активной таблице.

Весь документ основывается на html разметке, поэтому здесь применяются теги для работы с таблицами [26]:

– <table> – служит контейнером для элементов, определяющих содержимое таблицы;

– <tr> – служит контейнером для создания строки таблицы;

– <td> – предназначен для создания одной ячейки таблицы;

– <th> – предназначен для создания одной ячейки таблицы, которая обозначается как заголовочная;

– <thead> – предназначен для хранения одной или нескольких строк, которые представлены вверху таблицы.

В первом цикле, по столбцам выводятся названия полей таблицы, если они не спрятаны. Далее, построчно выводится содержимое активной таблицы, также как и с заголовками, если оно не скрыто. Здесь simplified () – возвращает строку, у которой пробельные символы удалены в начале и в конце, а все последовательные пробельные символы заменены одиночным пробелом [27]. Если в ячейке нет данных, то выводится пробел. Далее, создается текстовый документ. В данном случае, setHtml() – установка текста в формате HTML. После чего, подключается принтер и вызывается диалог принтера. Если диалог выполнился, то осуществляется вывод на печать.

QString strStream;

QTextStream out (&strStream);

const int rowCount = ui->tableView->model()->rowCount();

const int columnCount = ui->tableView->model()->columnCount();

out << "<html>\n" <<"<head></head>\n" "<body bgcolor = #ffffff>\n";

"<table border=1 cellpadding=2>\n";

for(int column = 0; column < columnCount; column++)

if(!ui->tableView->isColumnHidden(column))

out <<QString("<th>%1</th>").arg(ui->tableView->model()->headerData (column, Qt::Horizontal).toString());

out <<"</tr></thead>\n";

for(int row = 0; row<rowCount; row++){

out << "<tr>";

for(int column= 0; column<columnCount; column++){

if(!ui->tableView->isColumnHidden(column)){

QString data = ui->tableView->model()->data(ui->tableView-> model()->index(row, column)).toString().simplified();

out <<QString("<td bkcolor=0>%1</td>").arg((!data.isEmpty())? data:QString("&nbsp"));

}

}

out <<"</tr>\n";

}

out <<"</table>\n""</body>\n""</html>\n";

QTextDocument *document = new QTextDocument();

document->setHtml(strStream);

QPrinter printer;

QPrintDialog *dialog = new QPrintDialog(&printer, 0);

if(dialog->exec() == QDialog::Accepted){

document->print(&printer);

}

delete document;

При входе пользователя в систему появляется окно авторизации, где предоставляются поля для ввода логина и пароля (рисунок 19).

Характеристики

Список файлов ВКР

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7021
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее