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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 01.09.2016
Размер файла 953,3 K

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

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

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

"Алтайский государственный технический университет им. И.И. Ползунова"

Факультет информационных технологий

Кафедра информатики, вычислительной техники и информационной безопасности

Направление "Информатика и вычислительная техника"

Курсовая работа

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

по дисциплине "Базы данных"

Барнаул 2016

Содержание

  • Введение
  • 1. Описание предметной области
  • 2. Разработка и создание базы данных
  • 3. Создание клиентского приложения
  • 4. Тестирование клиентского приложения
  • Список использованных источников

Введение

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

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

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

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 [Электронный ресурс]. - Режим доступа: http://www.phpclub.ru/, свободный.

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

Приложение А

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 <QMainWindow>

#include <QPushButton>

#include <QLabel>

#include <QLineEdit>

#include <QtSql/QSqlRelationalTableModel>

#include <QtSql/QSqlTableModel>

#include <QTableView>

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 <QApplication>

#include <QInputDialog>

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 <QtSql>

#include <QtSql/QSqlError>

#include <QtSql/QSqlQuery>

#include <QMessageBox>

#include <QVBoxLayout>

#include <QWidget>

#include <QMenu>

#include <QMenuBar>

#include <QtSql/QSqlRelationalDelegate>

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,"CООБЩЕНИЕ","После добавления, необходимо сохранить изменения!!!");

}

void MainWindow:: dataEdit2 () // удалить

{ if (tableView->currentIndex (). isValid ())

{ model->removeRow (tableView->currentIndex (). row ());

model->submitAll ();

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

}

void MainWindow:: dataEdit3 () // сохранить изменения

{ if (tableView->currentIndex (). isValid ())

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

{ QMessageBox:: critical (0,"CООБЩЕНИЕ", "Некорректное действие. \n Данные могут быть потеряны " +

model->lastError (). text ());

model->revertAll ();

}

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

}

}

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 + "\'); ");

}

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


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

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

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

  • Логическая и физическая модели базы данных. Запрет на содержание неопределенных значений. Размещение базы данных на сервере. Реализация клиентского приложения управления базой данных. Модульная структура приложения. Основные экранные формы приложения.

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

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

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

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

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

  • Цели проектирования базы данных "Аэропорт": обработка информации о рейсах, расписании самолетов и билетах. Анализ предметной области. Принцип работы модели. Особенности реализации информационной системы. Среда программирования клиентского приложения.

    лабораторная работа [2,4 M], добавлен 07.01.2014

  • Описание предметной области "Спортивные соревнования". Проектирование концептуальной и логической модели данных. Добавление не вошедших в ER–диаграмму атрибутов. Разработка SQL запросов к базе данных. Описание работы, тестирование клиентского приложения.

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

  • Реализация проекта по оптимизации отделений почтовой связи. Направления деятельности в области кадровой политики. Автоматизация обработки получаемой техническим отделом информации. Разработка приложения клиент-сервер. Описание клиентского приложения.

    курсовая работа [34,3 K], добавлен 07.08.2013

  • Понятие баз данных и принципы проектирования информационных систем. Разработка программы для отслеживания финансовой стороны работы компании в среде Delphi 7. Создание таблиц и схемы данных. Разработка клиентского приложения и процедуры добавления данных.

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

  • Разработка клиентского приложения для работы с базой данных (БД) санатория. Классификации БД и приложений для работы с ними. Алгоритмическое и программное конструирование БД. Описание объектов предметной области, их атрибутов и связей между ними.

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

  • Назначение и характеристики пакета Designer/2000. Анализ предметной области для разработки информационной системы, определение ее целей и задач. Построение моделей данных, разработка базы данных и клиентского приложения. Практические навыки разработки.

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

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