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

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

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

В качестве недостатка можно отметить невозможность отладчика (Microsoft Visual Studio Debugger) отслеживать в коде режима ядра.

Для разработки принято решение использовать СУБД – MySQL так как он быстр, надежен и легок в использовании. Для создания интерфейса предпочтение отдано Qt Creator, так как эта программа обладает всеми необходимыми для этого средствами.

4 РАЗРАБОТКА АИС

4.1 Создание базы данных и разработка интерфейса

В данном пункте рассматриваются основные моменты работы с СУБД и создания интерфейса пользователя.

Ниже приведено краткое описание типов данных MySQL, которые используются в базе данных ООО «СЭК».

INT (INTEGER) – целое число нормального размера. Диапазон со знаком от -2147483648 до 2147483647. Диапазон без знака от 0 до 4294967295.

DATE – дата. Поддерживается интервал от '1000-01-01' до '9999-12-31'.

FLOAT – малое (одинарной точности) число с плавающей запятой. Диапазоны от –3.402823466E+38 до –1.175494351E-38, 0 и 1.175494351E-38 до 3.402823466E+38. Если количество знаков после запятой не установлено или меньше или равно 24 – это число с плавающей запятой одинарной точности.

VARCHAR (M) – строка переменной длины. Концевые пробелы удаляются при сохранении значения. Диапазон аргумента M составляет от 0 до 255 символов [22].

Создание базы данных в командной строке MySQL начинается с CREATE DATABASE после чего указывается имя новой базы данных и ставится точка с запятой для завершения запроса. Пример кода для создания базы данных:

«CREATE DATABASE name_database;».

Для того чтобы переключиться на созданную базу данных для дальнейшего создания таблиц и прочих действий, необходимо ввести команду «USE name_database;», где name_database – имя базы данных.

Создание таблицы в MySQL начинается с CREATE TABLE с последующей информацией о таблице. Чтобы создать таблицу, содержащую данные о питающих станциях необходимо в командной строке MySQL ввести команду «CREATE TABLE pitstancia (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, pitstancia VARCHAR(25), primechanie VARCHAR(25));». Для первичных ключей используется атрибут «AUTO_INCREMENT», который необходим для генерации уникального идентификатора для новых строк. NOT NULL указывает, может ли данный столбец содержать значение NULL или нет.

Для того, чтобы создать новую таблицу, которая будет ссылаться на ту, которая создана в предыдущем примере, необходимо воспользоваться командой «CREATE TABLE fiderap (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, pitstancia_id INT, fider INT, primechanie VARCHAR(35), opisaniefiderap VARCHAR(255), FOREIGN KEY(pitstancia_id) REFERENCES pitstancia(id));». Данная таблица содержит вторичный ключ pitstancia_id, который устанавливает связь с таблицей pitstancia по ее id. REFERENCES – указывает на столбец в родительской таблице, ограничивающую значения в текущей таблице.

Остальные таблицы базы данных ООО «СЭК» создаются подобным образом. После их создания, необходимо перейти к созданию интерфейса в программе Qt Creator.

В Qt Creator есть модуль QtSql, который помогает обеспечить однородную интеграцию базы данных в создаваемое Qt приложение. Для сборки проекта с модулем, добавляется в qmake .pro-файл следующая строка: QT += sql.

Ниже приведен код, который устанавливает соединение с базой данной:

db = QSqlDatabase:: addDatabase("QMYSQL");

db.setUserName("root");

db.setDatabaseName("energia");

db.setPassword("chebura4122");

db.setHostName("localhost");

if (!db.open()){

QMessageBox::critical(this,"Error",model->lastError().text());

}

Первая строка создает объект соединения, а строка db.open() открывает его. Значение, возвращаемое им, рекомендуется проверять. В промежутке, инициализируется некоторая информация о соединении, включая имя пользователя, имя базы данных, пароль, имя компьютера на котором размещена база данных. Аргумент «QMYSQL» в addDatabase() – тип драйвера базы данных, чтобы использовать для соединения.

Для разработки интерфейса базы данных ООО «СЭК» понадобятся следующие библиотеки [23]:

– QtSql/QSqlDatabase – предоставляет соединение с базой данных;

– QtSql/QSqlQuery – средства управления выражениями SQL и их выполнения;

– QtSql/QSqlQueryModel – модель данных только для чтения результирующей SQL-выборки;

– QtSql/QSqlError – информация об ошибке базы данных SQL;

– QMessageBox – отвечает за работу с всплывающими сообщениями;

– QtPrintSupport/QPrinter – устройство рисования, рисующее на принтер;

– QtPrintSupport/QPrintDialog – диалог для задания настроек принтера;

– QTextStream – предоставляет удобный интерфейс для чтения и записи текста;

– QTextDocument – содержит форматированный текст, который может быть отображен и изменен с помощью QTextEdit.

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

Рисунок 11 – Главное окно приложения в редакторе форм

Главное окно включает:

– menuBar, которое состоит из четырех раскрывающихся списков – справочники, данные, объекты учета, показания электроэнергии;

– tableView, для вывода таблиц из базы данных;

– verticalLayout, в сочетании с тем, что centralWidget представляет собой horizontalLayout обеспечивает растягивание tableView в зависимости от размера открытого окна.

Меню «Справочники» содержит следующие пункты: адреса, потребители, класс напряжения, тип счетчика, счетчики, питающие станции, объекты, сотрудники, тип населенного пункта, населенный пункт, тип улицы, улица, трансформаторные подстанции, тип фидера (рисунок 12).

Рисунок 12 – Меню «Справочники»

При выборе справочника в tableView главного окна отображается соответствующая таблица из базы данных MySQL. Ниже приведен код, отвечающий за открытие таблицы «Сотрудники»:

model = new QSqlQueryModel;

qry = new QSqlQuery;

if(db.open()){

qry->prepare("select * from rabotniki;");

qry->exec();

model->setQuery(*qry);

model->setHeaderData(1, Qt::Horizontal, "Фамилия");

model->setHeaderData(2, Qt::Horizontal, "Имя");

model->setHeaderData(3, Qt::Horizontal, "Отчество");

model->setHeaderData(4, Qt::Horizontal, "Пол");

model->setHeaderData(5, Qt::Horizontal, "Рабочий телефон");

model->setHeaderData(6, Qt::Horizontal, "Сотовый телефон");

model->setHeaderData(7, Qt::Horizontal, "Email");

ui->tableView->setModel(model);

ui->tableView->setColumnHidden(0, true);

}

Первые две строки отвечают за выделение памяти под модель и запрос соответственно. QSqlQueryModel формирует набор результата SQL-запроса. Класс QSqlQuery обеспечивает интерфейс для выполнения SQL запросов и навигации по результирующей выборке [24]. Если соединение с базой данных установлено, то выполняется SQL-запрос с выборкой всех данных из таблицы работники. После вызова exec(), внутренний указатель QSqlQuery указывает на позицию перед первой записью. Если возникает ошибка, exec() возвращает false. Далее, запрос передается модели и устанавливаются заголовки для столбцов таблицы «Сотрудники». В tableView передается модель и скрывается первая колонка с id сотрудника. На рисунке 14 представлен результат выборки из таблицы «Сотрудники».

Рисунок 13 – Таблица «Сотрудники»

Аналогичным образом, производится отображение всех таблиц из базы данных ООО «СЭК».

Меню «Данные» включает действия, которые можно применять к открытой в tableView таблице, а именно: добавить, удалить, редактировать, фильтр, печать (рисунок 15). Кроме того, вызывать эти функции можно при помощи горячих клавиш.

Рисунок 14 – Меню «Данные»

Удаление записи из таблицы рассмотрено на примере таблицы «Тип фидера». Записи данной таблицы влияют на содержимое таблиц «Фидер ТП» и «Показания электроэнергии». Чтобы удалить запись, необходимо кнопкой мыши нажать в любое место строки, которая должна быть удалена и выбрать в меню пункт «Удалить» или воспользоваться горячими клавишами. Если пользователь не выбрал никакой строки, но нажал «Удалить», автоматически указатель устанавливается на первую строку и если пользователь подтвердит свои действия, удаление будет выполнено. Ниже приведен код удаления записи из таблицы «Тип фидера»:

QMessageBox::StandardButton bYes;

bYes = QMessageBox::question(this, "Delete conformation", "Вы удаляете?",

QMessageBox::Yes|QMessageBox::No);

if(bYes == QMessageBox:: Yes){

QSqlQuery qry1;

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

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

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

if(qry1.exec()) {

qry1.next();

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

qry1.prepare("select id from fidertp where tipfidera_id = :id;");

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

qry1.exec();

qry1.next();

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

qry1.prepare("select id from pokazania where fidertp_id = :fidertpid;");

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

qry1.exec();

qry1.next();

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

qry1.prepare("delete from pokazania where id=:pokazid;");

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

qry1.exec();

qry1.next();

qry1.prepare("delete from fidertp where id=:fidertpid;");

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

qry1.exec();

qry1.next();

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

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

qry1.exec();

}

}

Когда пользователь нажимает «Удалить», всплывает окно с подтверждением выбранных действий, для того чтобы по ошибке не удалить нужные данные. Если пользователь подтвердил удаление, то для выполнения SQL запросов, создается объект QSqlQuery. Далее, в переменную name записывается тип фидера, который выбрал пользователь и выполняется запрос для нахождения id выбранной записи. В методе prepare() задается шаблон, данные в который подставляются методами bindValue(). После вызова exec(), внутренний указатель QSqlQuery указывает на позицию перед первой записью. Необходимо вызвать метод QSqlQuery::next(), чтобы переместить указатель к первой записи. Функция QSqlQuery::value() возвращает значение типа QVariant, который может хранить значения различных типов C++ и ядра Qt, такие как int, QString [25]. Перед тем как удалить запись из таблицы «Тип фидера» необходимо удалить все связанные записи из других таблиц, иначе MySQL запретит удаление, чтобы не нарушать целостность базы данных. Поэтому, сначала находится id записей в таблице «Фидер ТП» где вторичный ключ «Тип фидера» совпадает с id выделенной пользователем записи, а так как «Фидер ТП» имеет связь с таблицей «Показания электроэнергии», то по тому же принципу находятся id связанных записей и в этой таблице. Далее удаляются записи из таблиц в следующем порядке: «Показания электроэнергии», «Фидер ТП», «Тип фидера».

Добавление записей в базу данных рассмотрено на примере таблицы «Населенный пункт». При нажатии на кнопку «Добавить» всплывает окно с формами для заполнения (рисунок 15).

Рисунок 15 – Форма для добавления населенного пункта

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

nasel = new QSqlQueryModel;

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

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

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