Разработка базы данных и клиентского приложения для ЖКХ - Курсовая работа

бесплатно 0
4.5 103
Автоматизация системы снятия показаний счетчиков энергии. Разработка базы данных и клиентского приложения для структур жилищно-коммунального хозяйства, занимающихся составлением квитанций. Описание предметной области. Тестирование клиентского приложения.


Аннотация к работе
Описание предметной области.

Список литературы
Введение

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

Задачами курсовой работы являются разработка базы данных и клиентского приложения для структур ЖКХ, занимающихся составлением квитанций. Разработанная база данных должна соответствовать требованиям предметной области, а клиентское приложение должно корректно работать с базой данных и должно быть достаточно простым и удобным для пользователя.

Целью данной работы является автоматизация работы системы снятия показаний. Разработанная программа позволит существенно сократить время "бумажного учета", обеспечит легкость, эффективность и быстроту работы в вычислении квитанций, в выведении необходимой информации за счет того, что вся работа будет осуществляться автоматически.

1. Описание предметной области

В базе данных "ЖКХ" представлена информация о клиентах и их потреблении.

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

Клиенту могут потребоваться следующие сведения о текущем состоянии объектов: Текущие показания клиента. квитанцию об оплате определенного клиента, показания всего дома, Администратор должен иметь возможность выполнить следующие операции: добавлять квартиры, дома, счетчики. изменить тарифы оплаты. поселить или выселить клиента.

Необходимо предусмотреть также возможность автоматической выдачи клиенту счета за услуги за последний квартал текущего года. Такой отчет должен содержать следующие сведения: ФИО клиента, расход клиента, сумма к оплате.

Доступ к данным будет производиться с помощью клиентского приложения, в котором должна быть предусмотрена возможность не только получать необходимые сведения, но и добавлять и редактировать их.

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

2. Разработка и создание базы данных

Разработка базы данных производилась в бесплатной программе Toad Data Modeler 5.2 Физическая модель для бесплатной СУБД MYSQL 5.5 была построена на основе логической.

Логическая модель изображена на рисунке 1. Физическая модель изображена на рисунке 2.

Рисунок 1 - Логическая модель базы данных.

Рисунок 2 - Физическая модель базы данных.

Для создания логической модели были выделены 9 сущности: 1. Счетчик. Содержит атрибуты: Ид_счетчика (PK), тип, сериальный номер, ип_адрес, текущие показания

2. Показания. Содержит атрибуты: Дата (РК), показания

3. Квартира. ИД_Квартиры (PK), ФИО, Номер_квартиры, Улица

4. Управляющая компания. ИД_Компании (PK), Имя управляющей компании

5. Квитанция. Содержит атрибуты: ИД_Квитанция (PK), Дата

6. Тариф квитанции. Содержит атрибуты: Тип оплаты (PK), Итого к оплате (FK)

7. Тариф УК. Содержит атрибуты: Ид тарифа (PK), Множитель (FK)

8. Дом. Содержит атрибуты: ИД дома (PK), Адрес

9. Счетчик общедомовой. Содержит атрибуты: Ид_счетчика (PK), тип, сериальный номер, ип_адрес, текущие показания

10. Показания общедомовые. Содержит атрибуты: Дата (РК), показания

Описание связей: 1. Показания счетчика. Счетчик - Показания, 1: N. Один счетчик имеет много показаний за разное время. Показание может быть у одного счетчика.

2. Счетчик в какой квартире. Счетчик - Квартира, N: 3. В одной квартире несколько счетчиков. Один счетчик может быть только в одной квартире.

4. Квитанция на квартиру. Квитанция-Квартира, N: 5. Каждый месяц квитанции приходят в одну квартиру. В одной квартире много квитанций.

6. Квитанция на дом. Квитанция-Дом, N: 7. Каждый месяц квитанции приходят в дом. В одном доме множество квитанций. база клиентское приложение тестирование

8. Имя управляющей компании. Квитанция-Управляющая компания, N: 9. Имя управляющей компании важно в квитанции. Во множестве квитанций одна управляющая компания.

10. Тариф в квитанции. Тариф квитанции - Квитанция, N: 11. Несколько пунктов оплаты в квитанции. В одной квитанции несколько тарифов.

12. Рекомендованный тариф. Тариф квитанции - Тариф, 1: 13. Для оплаты каждого потребителя энергии используется тариф выданный УК. Один тариф для многих потребителей.

14. Счетчик на дом. Счетчик общедомовой - Дом, N: 15. В доме несколько счетчиков. Счетчик в одном доме.

16. Квитанция на дом. Квитанция - Дом, N: 17. Каждый месяц квитанции приходят в дом. В одном доме много квитанции.

18. Показания общедомового счетчика. Счетчик общедомовой - Показания общедомовые, 1: N. Один счетчик имеет много показаний за разное время. может быть у одного счетчика.

На основе физической модели был сгенерирован SQL-скрипт для создания базу данных в СУБД MYSQL 5.5 Текст SQL-скрипта приведен в приложении А. Далее с помощью бесплатной версии программы SQL Manager Lite for MYSQL 5.4.3 из скрипта была создана база данных и разработано несколько процедур и триггеров для облегчения дальнейшей работы с базой данных.

Триггер, запрещающий вносить отрицательные показания счетчика. Код триггера: CREATE DEFINER = "root"@"localhost" TRIGGER `_before_ins_tr1` BEFORE INSERT ON `saw`

FOR EACH ROW

BEGIN

DECLARE ERROR CONDITION FOR SQLSTATE "45000";

IF (NEW. saw<=0) then signal ERROR set message_text ="Saw is wrong! ";

END IF;

END;

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

Код триггера: CREATE DEFINER = "root"@"localhost" TRIGGER `_before_ins_tr2` BEFORE INSERT ON `saw_house`

FOR EACH ROW

BEGIN

DECLARE ERROR CONDITION FOR SQLSTATE "45000";

IF (NEW. saw<=0) then signal ERROR set message_text ="Saw is wrong! ";

END IF;

END;

Показания дома. Код запроса: SELECT

`house`. `adres`, `schet_house`. `type`, `saw_house`. `saw`, `saw_house`. `date`

FROM

`house`, `schet_house`, `saw_house`

WHERE saw_house. id_house= house. id_house

Запрос поиска показаний по фамилии человека. Код запроса: SELECT saw,date

FROM saw

WHERE id_kvart = (SELECT id_kvart FROM kvart WHERE FIO = \"" name "\")"

Запрос поиска счетчиков квартир по фамилии. Код запроса: SELECT type,serial, id_schet

FROM schet

WHERE id_kvart = (SELECT id_kvart FROM kvart WHERE FIO = \"" name "\")"

Показать ид человека по ФИО. Код запроса: SELECT id_kvart FROM kvart WHERE FIO = \"" name "\"

3. Создание клиентского приложения

Написание клиентского приложения производилось в программе QTCREATOR 3.0 с использованием библиотек Qt 5.2 Соединение с базой данных производилось через MYSQL ODBC драйвер версии 5.3 Структура исходных файлов проекта представлена на рисунке 3. Исходный код приложения приведен в приложении Б.

Рисунок 3 - структура исходных файлов проекта.

Класс MAINWINDOW описывает главное окно приложения, в котором производится отображение и основные манипуляции с данными базы данных для работы директора мебельного производства. В этом классе описаны диалоговые окна для работы с данными (добавление, редактирование и удаление), которые невозможно было реализовать встроенными возможностями таблиц.

Также в нем происходит соединение с базой данных и реализуются необходимые запросы к базе данных и отображаются результаты в виде таблицы.

Класс main описывает диалоговое окно, запрашивающее информацию для соединения с базой данных.

4. Тестирование клиентского приложения

Описание тестируемой программы

Для модульного тестирования основных методов разработанной системы классов использовалась Qt Creator 3.2.0 - свободная интегрированная среда разработки приложений на языках программирования C, C и ряда других.

Тестирование клиентского приложения включает: Тест №1. Тестирование и отладка работы клиентского приложения.

Рисунок 4 - Главное окно программы

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

Права Менеджера: просмотр таблиц.

Права Директора мебельной фабрики: Полный набор прав.

Рисунок 5 - Вход в БД с ограниченными правами.

Рисунок 6 - Таблицы доступные для Менеджера.

Рисунок 7 - Увеличенные привелегии.

Пароль для администратора "root1234”.

Рисунок 8 - Администратор обладает полным набором прав.

Итог, конлтролеру доступен просмотр таблиц. Другие данные ему не доступны.

Под учетной записью администратора проведем тестирование методов поиска и выборки.

Тест №2.

Тестирование работы запросов к базе данных. Результаты выполнения запросов представлены на рисунках 9-25.

Рисунок 9 - Представление "Установленные счетчики пользователей"

Рисунок 10 - Таблица "Квартиры"

Рисунок 11 - Таблица "Счетчики"

Рисунок 12 - Таблица "Показания счетчиков"

Рисунок 13 - Таблица "Квитанции"

Рисунок 14 - Таблица "Дома"

Рисунок 15 - Таблица "Управляющие компании"

Демонстрация работы пунктов меню "Правка":

Рисунок 1.10 - Уведомление

Рисунок 16 - Добавление нового поля и сохранение изменений

Рисунок 17 - Выполнение запроса, который ищет все показания счетчика холодной воды конкретного человека

Рисунок 18 - Выполнение запроса, который ищет все счетчики конкретного человека

Рисунок 19 - Выполнение запроса, который ищет все показания общедомовых счетчиков.

Рисунок 20 - Выполнение запроса, который показывает ИД человека по ФИО

Рисунок 21 - Выполнение запроса, который ищет все счетчики конкретного человека

Рисунок 22 - До выполнения процедуры, которая обновляет показания

Рисунок 23 - Выполнение процедуры, которая обновляет показания

Рисунок 24 - После выполнения процедуры, который перераспределяет деньги предприятия

Рисунок 25 - При попытке добавления отрицательной зарплаты

Необходимые запросы к базе данных работают корректно.

Тестирование функций программы прошло успешно. Ошибок в работе программы не выявлено.

Заключение

Разработана база данных решающая задачи предметной области: - Хранение и использование данных о счетчиках.

- Хранение и использование показаний счетчиков.

Создано клиентское приложение с графическим для удобной работы с созданной базой данных. Достоинства клиентского приложения: - Поддержка символов русского алфавита при работе с данными.

- Наличие графического интерфейса.

- Многопользовательский доступ с ограничениями прав доступа для различных пользователей.

Недостатки клиентского приложения: - Может корректно работать только на операционных системах семейства Microsoft Windows версии 7 или более поздней.

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

Список использованных источников

1. MYSQL 5.0. Библиотека программиста: Питер - СПБ.: Питер, 2010. - 253с.

2. MYSQL. Справочник по языку.: Пер. с англ. - М.: Издательский дом "Вильяме", 2005. - 432 с. - Парал. тит. англ.

3. Шлее М.; Qt 4.8 Профессиональное программирование на C . - СПБ.: БХВ-Петербург, 2012. - 912 с.

4. Электронный портал сообщества разработчиков PHPCLUB.ru [Электронный ресурс]. - Режим доступа: , свободный.

5. Официальный сайт проекта Qt [Электронный ресурс]. - Режим доступа: , свободный.

Приложение А SQL-скрипт разработанной базы данных

/*

Created: 14.12.2015

Modified: 18.01.2016

Model: Phisical

Database: MYSQL 5.5

*/

Create tables section - ------------------------------------------------

Table schet

CREATE TABLE `schet`

(

`type` Longtext NOT NULL, `serial` Char (255), `ip` Int, `id_schet` Char (255) NOT NULL, `id_kvart` Int NOT NULL

)

;

ALTER TABLE `schet` ADD PRIMARY KEY (`id_schet`,`id_kvart`)

;

Table kvart

CREATE TABLE `kvart`

(

`id_kvart` Int NOT NULL, `FIO` Longtext, `N_kvart` Int, `id_house` Int

)

;

CREATE INDEX `IX_kvart_in_house` ON `kvart` (`id_house`)

;

ALTER TABLE `kvart` ADD PRIMARY KEY (`id_kvart`)

;

Table house

CREATE TABLE `house`

(

`adres` Longtext NOT NULL, `id_house` Int NOT NULL

)

;

ALTER TABLE `house` ADD PRIMARY KEY (`id_house`)

;

Table ucompany

CREATE TABLE `ucompany`

(

`name_ucompany` Longtext NOT NULL, `id_company` Int NOT NULL, `id_kvitan` Bigint

)

;

CREATE INDEX `IX_ucompany_in_kvitan` ON `ucompany` (`id_kvitan`)

;

ALTER TABLE `ucompany` ADD PRIMARY KEY (`id_company`)

;

Table tarif

CREATE TABLE `tarif`

(

`mnojitel` Float (24) NOT NULL, `id_tarif` Int NOT NULL, `id_company` Int NOT NULL, `type_oplata` Int, `id_kvitan` Bigint

)

;

CREATE INDEX `IX_uc_tarif_in_kvitan` ON `tarif` (`type_oplata`,`id_kvitan`)

;

ALTER TABLE `tarif` ADD PRIMARY KEY (`id_tarif`,`id_company`)

;

Table kvitan

CREATE TABLE `kvitan`

(

`id_kvitan` Bigint NOT NULL, `date_kvitan` Date NOT NULL, `id_kvart` Int NOT NULL, `id_house` Int NOT NULL

)

;

CREATE INDEX `IX_kvitan_for_kvart` ON `kvitan` (`id_kvart`)

;

CREATE INDEX `IX_kvitan_for_house` ON `kvitan` (`id_house`)

;

ALTER TABLE `kvitan` ADD PRIMARY KEY (`id_kvitan`)

;

Table kvitan_tarif

CREATE TABLE `kvitan_tarif`

(

`oplata1` Float (24) NOT NULL, `type_oplata` Int NOT NULL, `id_kvitan` Bigint NOT NULL

)

;

ALTER TABLE `kvitan_tarif` ADD PRIMARY KEY (`type_oplata`,`id_kvitan`)

;

Table saw

CREATE TABLE `saw`

(

`id_saw` Bigint NOT NULL, `saw` Float (24), `date` Date, `id_schet` Char (255) NOT NULL, `id_kvart` Int NOT NULL

)

;

ALTER TABLE `saw` ADD PRIMARY KEY (`id_saw`,`id_schet`,`id_kvart`)

;

Table saw_house

CREATE TABLE `saw_house`

(

`id_saw` Bigint NOT NULL, `saw` Float (24), `date` Date, `id_schet` Char (255) NOT NULL, `id_house` Int NOT NULL

)

;

ALTER TABLE `saw_house` ADD PRIMARY KEY (`id_saw`,`id_schet`,`id_house`)

;

Table schet_house

CREATE TABLE `schet_house`

(

`type` Longtext, `serial` Char (255) NOT NULL, `ip` Int, `testimony` Float (24) NOT NULL, `id_schet` Char (255) NOT NULL, `id_house` Int NOT NULL

)

;

ALTER TABLE `schet_house` ADD PRIMARY KEY (`id_schet`,`id_house`)

;

Create relationships section - ------------------------------------------------

ALTER TABLE `kvitan_tarif` ADD CONSTRAINT `tarif_in_kvitan` FOREIGN KEY (`id_kvitan`) REFERENCES `kvitan` (`id_kvitan`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

ALTER TABLE `schet` ADD CONSTRAINT `schet _in_kvart` FOREIGN KEY (`id_kvart`) REFERENCES `kvart` (`id_kvart`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

ALTER TABLE `kvitan` ADD CONSTRAINT `kvitan_for_kvart` FOREIGN KEY (`id_kvart`) REFERENCES `kvart` (`id_kvart`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

ALTER TABLE `tarif` ADD CONSTRAINT `ucompany_tarif` FOREIGN KEY (`id_company`) REFERENCES `ucompany` (`id_company`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

ALTER TABLE `kvart` ADD CONSTRAINT `kvart_in_house` FOREIGN KEY (`id_house`) REFERENCES `house` (`id_house`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

ALTER TABLE `ucompany` ADD CONSTRAINT `ucompany_in_kvitan` FOREIGN KEY (`id_kvitan`) REFERENCES `kvitan` (`id_kvitan`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

ALTER TABLE `tarif` ADD CONSTRAINT `uc_tarif_in_kvitan` FOREIGN KEY (`type_oplata`, `id_kvitan`) REFERENCES `kvitan_tarif` (`type_oplata`, `id_kvitan`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

ALTER TABLE `kvitan` ADD CONSTRAINT `kvitan_for_house` FOREIGN KEY (`id_house`) REFERENCES `house` (`id_house`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

ALTER TABLE `saw` ADD CONSTRAINT `saw_of_schet` FOREIGN KEY (`id_schet`, `id_kvart`) REFERENCES `schet` (`id_schet`, `id_kvart`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

ALTER TABLE `schet_house` ADD CONSTRAINT `schet_in_house` FOREIGN KEY (`id_house`) REFERENCES `house` (`id_house`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

ALTER TABLE `saw_house` ADD CONSTRAINT `saw_of_schet_house` FOREIGN KEY (`id_schet`, `id_house`) REFERENCES `schet_house` (`id_schet`, `id_house`) ON DELETE RESTRICT ON UPDATE RESTRICT

;

Приложение Б

(Обязательное)

Исходный код клиентского приложения

Листинг программы на языке С

// mainwindow. h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

#include

#include

#include

#include

#include

#include class MAINWINDOW: public QMAINWINDOW

{ Q_OBJECT private: QSQLDATABASE db;

// QSQLTABLEMODEL *model;

QSQLRELATIONALTABLEMODEL *model;

QSQLQUERYMODEL *qmodel;

QTABLEVIEW *TABLEVIEW;

QTABLEVIEW *TABLEVIEW1;

QPUSHBUTTON *Button1, *Button2;

QLABEL* Label1;

QLABEL* Label2;

QLABEL* Label3;

QLINEEDIT* Edit1;

QLINEEDIT* Edit2;

QLINEEDIT* Edit3;

QMENU *MENUTABLE, *MENUEDIT,*MENUQUERY;

private slots: void kvart ();

void slot_schet ();

void saw ();

void slot_kvitan ();

void house ();

void saw_house ();

void slot_schet_hs ();

void upk ();

void slot_tarif_up ();

void slot_tarif_kvit ();

void view ();

void DATAEDIT1 ();

void DATAEDIT2 ();

void DATAEDIT3 ();

void slot_query1 ();

void slot_query2 ();

void slot_query3 ();

void on_Button1_clicked ();

void on_Button2_clicked ();

void on_Button3_clicked ();

public: bool authyes;

MAINWINDOW (QWIDGET *parent = 0);

void auth (QSTRING login,QSTRING pass);

~MAINWINDOW ();

};

#endif // MAINWINDOW_H

// main. cpp

#include "mainwindow. h"

#include

#include int main (int argc, char *argv [])

{

QAPPLICATION a (argc, argv);

MAINWINDOW w;

QSTRING str;

do{ bool pass;;

str = QINPUTDIALOG:: GETTEXT (0, "Авторизация", "Пароль:", QLINEEDIT:: Password, "root1234",&pass);

if (! pass) { exit (true);

} if (str == "root1234")

{

MAINWINDOW *w = new MAINWINDOW (0);

w->resize (550, 250);

w->show ();

}

} while ( (str! = "root1234"));

return a. exec ();

}

// mainwindow. cpp

#include "mainwindow. h"

#include

#include

#include

#include

#include

#include

#include

#include

#include

MAINWINDOW:: MAINWINDOW (QWIDGET *parent)

: QMAINWINDOW (parent)

{ db=QSQLDATABASE:: ADDDATABASE ("QODBC");

db. SETHOSTNAME ("localhost");

db. SETPORT (3309);

db. SETDATABASENAME ("db32");

db. SETUSERNAME ("root");

db. SETPASSWORD ("root1234");

if (! db. open ())

QMESSAGEBOX:: critical (parent,QOBJECT:: tr ("Database Error"),db. LASTERROR (). text ());

else

{

MENUTABLE = new QMENU ("Таблицы");

MENUTABLE->ADDACTION ("Установленные счетчики пользователей", this, SLOT (view ()));

MENUTABLE->ADDACTION ("Квартиры", this, SLOT (kvart ()));

MENUTABLE->ADDACTION ("Счетчики", this, SLOT (slot_schet ()));

MENUTABLE->ADDACTION ("Показания", this, SLOT (saw ()));

MENUTABLE->ADDACTION ("Квитанции", this, SLOT (slot_kvitan ()));

MENUTABLE->ADDACTION ("Дома", this, SLOT (house ()));

MENUTABLE->ADDACTION ("Показания дома", this, SLOT (saw_house ()));

MENUTABLE->ADDACTION ("Счетчики дома", this, SLOT (slot_schet_hs ()));

MENUTABLE->ADDACTION ("Управляющая компания", this, SLOT (upk ()));

MENUTABLE->ADDACTION ("Тариф УП", this, SLOT (slot_tarif_up ()));

MENUTABLE->ADDACTION ("Тариф Квитанции", this, SLOT (slot_tarif_kvit ()));

MENUEDIT = new QMENU ("Правка");

MENUEDIT->ADDACTION ("Добавить", this, SLOT (DATAEDIT1 ()));

MENUEDIT->ADDACTION ("Удалить", this, SLOT (DATAEDIT2 ()));

MENUEDIT->ADDACTION ("Сохранить изменения", this, SLOT (DATAEDIT3 ()));

MENUEDIT->SETENABLED (false);

MENUQUERY = new QMENU ("Запросы");

MENUQUERY->ADDACTION ("Добавить показание", this, SLOT (slot_query1 ()));

MENUQUERY->ADDACTION ("Поиск показания", this, SLOT (slot_query2 ()));

MENUQUERY->ADDACTION ("Поиск счетчика", this, SLOT (slot_query3 ()));

MENUQUERY->SETENABLED (false);

MENUBAR () - >ADDMENU (MENUTABLE);

MENUBAR () - >ADDMENU (MENUEDIT);

MENUBAR () - >ADDMENU (MENUQUERY);

}

}

MAINWINDOW:: ~MAINWINDOW () { } void MAINWINDOW:: kvart ()

{ model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("kvart");

model->SETHEADERDATA (0, Qt:: Horizontal,"ИД");

model->SETHEADERDATA (1, Qt:: Horizontal,"ФИО");

model->SETHEADERDATA (2, Qt:: Horizontal,"Номер квартиры");

model->SETHEADERDATA (3, Qt:: Horizontal,"ИД_Дома");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (true);

MENUQUERY->SETENABLED (true);

} void MAINWINDOW:: slot_schet () { model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("schet");

model->SETHEADERDATA (0, Qt:: Horizontal,"Тип");

model->SETHEADERDATA (1, Qt:: Horizontal,"Сериальный номер");

model->SETHEADERDATA (2, Qt:: Horizontal,"IP");

model->SETHEADERDATA (3, Qt:: Horizontal,"ИД Счетчка");

model->SETHEADERDATA (4, Qt:: Horizontal,"ИД_Квартиры");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (true);

MENUQUERY->SETENABLED (true);

} void MAINWINDOW:: slot_kvitan () { model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("kvitan");

model->SETHEADERDATA (0, Qt:: Horizontal,"Номер квитанции");

model->SETHEADERDATA (1, Qt:: Horizontal,"Дата");

model->SETHEADERDATA (2, Qt:: Horizontal,"ИД квартиры");

model->SETHEADERDATA (3, Qt:: Horizontal,"ИД Дома");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (true);

MENUQUERY->SETENABLED (true);

} void MAINWINDOW:: saw_house () { model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("saw_house");

model->SETHEADERDATA (0, Qt:: Horizontal,"ИД");

model->SETHEADERDATA (1, Qt:: Horizontal,"Показания");

model->SETHEADERDATA (2, Qt:: Horizontal,"Дата");

model->SETHEADERDATA (3, Qt:: Horizontal,"ИД_квартиры");

model->SETHEADERDATA (4, Qt:: Horizontal,"ИД_Дома");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (true);

MENUQUERY->SETENABLED (false);

} void MAINWINDOW:: slot_schet_hs () { model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("schet_house");

model->SETHEADERDATA (0, Qt:: Horizontal,"Тип");

model->SETHEADERDATA (1, Qt:: Horizontal,"Сериальный номер");

model->SETHEADERDATA (2, Qt:: Horizontal,"IP");

model->SETHEADERDATA (3, Qt:: Horizontal,"ИД Счетчка");

model->SETHEADERDATA (4, Qt:: Horizontal,"ИД_Квартиры");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (false);

MENUQUERY->SETENABLED (false);

} void MAINWINDOW:: upk () { model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("ucompany");

model->SETHEADERDATA (0, Qt:: Horizontal,"Имя");

model->SETHEADERDATA (1, Qt:: Horizontal,"ИД");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (false);

MENUQUERY->SETENABLED (false);

} void MAINWINDOW:: slot_tarif_up () { model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("tarif");

model->SETHEADERDATA (0, Qt:: Horizontal,"МНОЖИТЕЛЬ");

model->SETHEADERDATA (1, Qt:: Horizontal,"ИД_Тарифа");

model->SETHEADERDATA (2, Qt:: Horizontal,"ИД_Компании");

model->SETHEADERDATA (3, Qt:: Horizontal,"ТИП_Счетчика");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (false);

MENUQUERY->SETENABLED (false);

} void MAINWINDOW:: slot_tarif_kvit () { model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("kvitan_tarif");

model->SETHEADERDATA (0, Qt:: Horizontal,"Оплата");

model->SETHEADERDATA (1, Qt:: Horizontal,"Тип оплаты");

model->SETHEADERDATA (2, Qt:: Horizontal,"ИД_Квитанции");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (false);

MENUQUERY->SETENABLED (false);

} void MAINWINDOW:: house () { model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("house");

model->SETHEADERDATA (0, Qt:: Horizontal,"Адрес");

model->SETHEADERDATA (1, Qt:: Horizontal,"ИД_Дома");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (false);

MENUQUERY->SETENABLED (false);

} void MAINWINDOW:: saw ()

{ model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("saw");

model->SETHEADERDATA (0, Qt:: Horizontal,"ИД");

model->SETHEADERDATA (1, Qt:: Horizontal,"Показания");

model->SETHEADERDATA (2, Qt:: Horizontal,"Дата");

model->SETHEADERDATA (3, Qt:: Horizontal,"ИД_квартиры");

model->SETHEADERDATA (4, Qt:: Horizontal,"ИД_Дома");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (true);

MENUQUERY->SETENABLED (true);

} void MAINWINDOW:: view ()

{ model = new QSQLRELATIONALTABLEMODEL ();

model->SETTABLE ("view1");

model->SETHEADERDATA (0, Qt:: Horizontal,"Тип счетчика");

model->SETHEADERDATA (1, Qt:: Horizontal,"ФИО");

model->SETHEADERDATA (2, Qt:: Horizontal,"Адрес");

model->select ();

model->SETEDITSTRATEGY (QSQLTABLEMODEL:: ONMANUALSUBMIT);

TABLEVIEW = new QTABLEVIEW (this);

TABLEVIEW->SETMODEL (model);

QVBOXLAYOUT *layout = new QVBOXLAYOUT ();

layout->ADDWIDGET (TABLEVIEW);

TABLEVIEW->show ();

QWIDGET *box = new QWIDGET ();

box->SETLAYOUT (layout);

SETCENTRALWIDGET (box);

MENUEDIT->SETENABLED (false);

MENUQUERY->SETENABLED (false);

} void MAINWINDOW:: DATAEDIT1 () // добавить

{ model->INSERTROW (model->ROWCOUNT ());

QMESSAGEBOX:: information (0,"СООБЩЕНИЕ","После добавления, необходимо сохранить изменения!!!");

} void MAINWINDOW:: DATAEDIT2 () // удалить

{ if (TABLEVIEW->CURRENTINDEX (). ISVALID ())

{ model->REMOVEROW (TABLEVIEW->CURRENTINDEX (). row ());

model->SUBMITALL ();

} else QMESSAGEBOX:: information (0,"СООБЩЕНИЕ","Выберите удалямую строку!!!");

} void MAINWINDOW:: DATAEDIT3 () // сохранить изменения

{ if (TABLEVIEW->CURRENTINDEX (). ISVALID ())

{ if (model->SUBMITALL () ==false)

{ QMESSAGEBOX:: critical (0,"СООБЩЕНИЕ", "Некорректное действие.

Данные могут быть потеряны " model->LASTERROR (). text ());

model->REVERTALL ();

} else QMESSAGEBOX:: information (0,"СООБЩЕНИЕ","Изменения сохранены");

}

} void MAINWINDOW:: on_Button2_clicked ()

{ QSTRING name = Edit1->text ();

qmodel = new QSQLQUERYMODEL ();

qmodel->SETQUERY ("SELECT type,serial, id_schet FROM schet WHERE id_kvart = (SELECT id_kvart FROM kvart WHERE FIO = \"" name "\")");

qmodel->SETHEADERDATA (0, Qt:: Horizontal,"ТИП");

qmodel->SETHEADERDATA (1, Qt:: Horizontal,"Серийный номер");

qmodel->SETHEADERDATA (2, Qt:: Horizontal,"ИД Счетчика");

TABLEVIEW1->SETMODEL (qmodel);

TABLEVIEW1->show ();

} void MAINWINDOW:: on_Button1_clicked ()

{ QSTRING name = Edit1->text ();

qmodel = new QSQLQUERYMODEL ();

qmodel->SETQUERY ("SELECT saw,date FROM saw WHERE id_kvart = (SELECT id_kvart FROM kvart WHERE FIO = \"" name "\")");

qmodel->SETHEADERDATA (0, Qt:: Horizontal,"Показание");

qmodel->SETHEADERDATA (1, Qt:: Horizontal,"Дата покахания");

TABLEVIEW1->SETMODEL (qmodel);

TABLEVIEW1->show ();

} void MAINWINDOW:: slot_query2 () {

MENUEDIT->SETENABLED (false);

QVBOXLAYOUT *layout2 = new QVBOXLAYOUT ();

QWIDGET *box1 = new QWIDGET ();

Button1 = new QPUSHBUTTON ("Поиск показаний");

Label1 = new QLABEL (" Фамилия Имя Отчество: ");

Edit1 = new QLINEEDIT ();

QHBOXLAYOUT *Layout1 = new QHBOXLAYOUT ();

Layout1->ADDWIDGET (Label1);

Layout1->ADDWIDGET (Edit1);

Layout1->ADDWIDGET (Button1);

layout2->ADDLAYOUT (Layout1);

TABLEVIEW1 = new QTABLEVIEW (this);

TABLEVIEW1->RESIZECOLUMNSTOCONTENTS ();

layout2->ADDWIDGET (TABLEVIEW1);

box1->SETLAYOUT (layout2);

SETCENTRALWIDGET (box1);

connect (Button1, SIGNAL (clicked ()), this, SLOT (on_Button1_clicked ()));

} void MAINWINDOW:: slot_query3 () {

MENUEDIT->SETENABLED (false);

QVBOXLAYOUT *layout2 = new QVBOXLAYOUT ();

QWIDGET *box1 = new QWIDGET ();

Button1 = new QPUSHBUTTON ("Поиск счетчика");

Label1 = new QLABEL (" ФИО клиента: ");

Edit1 = new QLINEEDIT ();

QHBOXLAYOUT *Layout1 = new QHBOXLAYOUT ();

Layout1->ADDWIDGET (Label1);

Layout1->ADDWIDGET (Edit1);

Layout1->ADDWIDGET (Button1);

layout2->ADDLAYOUT (Layout1);

TABLEVIEW1 = new QTABLEVIEW (this);

TABLEVIEW1->RESIZECOLUMNSTOCONTENTS ();

layout2->ADDWIDGET (TABLEVIEW1);

box1->SETLAYOUT (layout2);

SETCENTRALWIDGET (box1);

connect (Button1, SIGNAL (clicked ()), this, SLOT (on_Button2_clicked ()));

} void MAINWINDOW:: slot_query1 ()

{ MENUEDIT->SETENABLED (false);

QVBOXLAYOUT *layout2 = new QVBOXLAYOUT ();

QWIDGET *box1 = new QWIDGET ();

Button2 = new QPUSHBUTTON ("Изменить");

Label1 = new QLABEL ("Введите ИД человека которому нужно поправить показание: ");

Label2 = new QLABEL ("Номер показания: ");

Label3 = new QLABEL ("Показание: ");

Edit1 = new QLINEEDIT ();

Edit2 = new QLINEEDIT ();

Edit3 = new QLINEEDIT ();

QHBOXLAYOUT *Layout1 = new QHBOXLAYOUT ();

Layout1->ADDWIDGET (Label1);

Layout1->ADDWIDGET (Edit1);

Layout1->ADDWIDGET (Label2);

Layout1->ADDWIDGET (Edit2);

Layout1->ADDWIDGET (Label3);

Layout1->ADDWIDGET (Edit3);

Layout1->ADDWIDGET (Button2);

layout2->ADDLAYOUT (Layout1);

TABLEVIEW1 = new QTABLEVIEW (this);

TABLEVIEW1->RESIZECOLUMNSTOCONTENTS ();

layout2->ADDWIDGET (TABLEVIEW1);

box1->SETLAYOUT (layout2);

SETCENTRALWIDGET (box1);

connect (Button2, SIGNAL (clicked ()), this, SLOT (on_Button3_clicked ()));

} void MAINWINDOW:: on_Button3_clicked ()

{

QSTRING a = Edit1->text ();

QSTRING b = Edit2->text ();

QSTRING c = Edit3->text ();

qmodel = new QSQLQUERYMODEL ();

qmodel->SETQUERY ("call UPDATESAW (\"" a "\"," b ",\"" c "\"); ");

}

Размещено на
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?