
metoda_labs_DBO_26_09_2013
.pdf101
оформления заказа")); orderModel->setHeaderData(3, Qt::Horizontal,
QString::fromLocal8Bit("Оплачен"));
// Получение данных. orderModel->setFilter("id_customer = 1"); orderModel->select();
// Связь QTableView с моделью ui->tableView_2->setModel(orderModel); // Не показывать поле "id_customer"
ui->tableView_2->setColumnHidden(4, true); // Параметры выбора элементов в QTableView
ui-> tableView_2->setSelectionMode(QAbstractItemView::SingleSelection); ui-> tableView_2->setSelectionBehavior(QAbstractItemView::SelectRows);
//Установка такой ширины столбцов, которой будет достаточно для
//размещения в них текста без необходимости вывода многоточия ui-> tableView_2->resizeColumnsToContents();
//Связывание модели выборки. Класс QItemSelectionModel используется
//для отслеживания выборок в представлениях. Связанный с моделью
//выборки представления таблицы слот currentCustChanged() будет
//вызываться при всяком перемещении пользователя от одной записи к
//другой в таблице заказчиков
QObject::connect(ui->tableView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex, const QModelIndex)),this, SLOT(currentCustChanged(const QModelIndex)));
}
Слот currentCustChanged() вызывается при каждой смене текущего заказчика. Это происходит при переходе пользователя к другой записи таблицы заказчиков «Customers» (щелкая мышкой по соответствующей строке или используя клавиши Up и Down). Ниже приводится код слота currentCustChanged().
void MainWindow::currentCustChanged(const QModelIndex &index)
{
if (index.isValid())
{
// Получить текущую запись модели
QSqlRecord rec = customModel->record(index.row()); // Получить идентификатор заказчика id_customer QString id = rec.value("id_customer").toString();
// Установить фильтр и выбрать соответствующие записи заказов orderModel->setFilter(QString("id_customer = \'%1\'").arg(id));
}
else
{
//Если заказчик недействителен (например, если заказчиков
//вообще нет), то идентификатор id_customer таблицы
//заказов Orders устанавливается в значение -1 (недействительный
//идентификатор, которому не соответствует никакая запись). orderModel->setFilter("id_customer = \'\'");
}
orderModel->select();
}
5.2 Порядок выполнения работы
1.Ознакомиться с таоретическими сведениями к лабораторной работе.
2.Установить QT Creator.
3.Установить библиотеки QT.

102
4.Установить драйвер ODBC для PostgreSQL (драйвер можно скачать по адресу: http://www.postgresql.org/ftp/odbc/versions/msi/).
5.Создать подключение источника данных с помощью ОDBC.
6.Создать новый проект в QT типа QT Widget – GUI приложение Qt
7.В меню Проекты выбрать конфигурацию сборки Релиз. Конфигурацию сборки qmake также установить в значение Релиз
(рисунок 5.10).
Рисунок 5.10 – Настройка параметров сборки проекта
8.В файл проекта (файл с расширением .pro) добавить строчку
QT += sql
9. Подключить модуль QtSql командой #include <QtSql>, прописав ее в заголовочном модуле главной формы.
10.Там же, в разделе private, объявить глобальную переменную типа
QSqlDatabase.
11.Разработать интерфейс для выполнения простых непараметрических SQL-запросов Select к БД, разработанной на предыдущих лабораторных работах (простой пример интерфейса приведен на рисунке 5.7).
12.Реализовать возможность выполнения непараметрических SQLзапросов Select (пункт 5.1.4 методический указаний).
Варианты запросов приведены в таблице 5.2.
103
Таблица 5.2 – Варианты заданий для выполнения непараметрических
SQL-запросов Select
№ |
|
Название разрабатываемой БД и запросы. |
1 |
|
Торговля |
|
1. |
Получить список изделий, которые в данный момент времени отсутствуют на |
|
|
складе. |
|
2. |
Получить общую стоимость и количество проданных за последние три месяца |
|
|
изделий всех имеющихся в прайс-листе наименований. |
|
3. |
Получить данные об изделиях, проданных по безналичному расчету. Вывести |
|
|
количество единиц каждого наименования. |
2 |
|
Коммунальные платежи. |
|
1. |
Получить списки клиентов, не оплативших на данный момент времени более 1 |
|
|
услуги. По каждому клиенту выдать общую сумму задолженности. |
|
2. |
Получить перечень предоставляемых коммунальных услуг с указанием |
|
|
тарифов, среднемесячных объемов потребления. |
|
3. |
Получить списки клиентов, у которых потребление данного вида |
|
|
коммунальных услуг за последний месяц превышает среднее значение. |
3 |
|
Услуги. |
|
|
|
1. |
По каждому типу работ получить его долю в процентном выражении от общего |
|
|
|
числа зарегистрированных заказов. |
|
2. |
По каждому мастеру получить общее количество выполненных заказов и |
|
|
суммарную стоимость выполненных при этом работ. Данные упорядочить по |
|
|
убыванию суммарной стоимости. |
|
3. |
Получить список первых 10 клиентов от 20 до 45 лет с максимальным |
|
|
количеством заказов. Для каждого из них вывести также суммарную стоимость |
|
|
заказов. |
4 |
|
Начисление зарплаты. |
|
1. |
Получить ведомость выплаты зарплаты за последний месяц, в которой для |
|
|
каждого работника указать: фамилию и инициалы, должность, начисленную |
|
|
сумму, сумму удержаний, сумму к выдаче. Данные упорядочить по должности |
|
|
и фамилии сотрудников. |
|
2. |
Для каждой категории работников, указанных в штатном расписании, получить |
|
|
суммарное количество пропущенных рабочих дней без учета отпускных, а |
|
|
также среднемесячный размер выплаченных премий. Результат упорядочить по |
|
|
убыванию количества пропущенных рабочих дней. |
|
3. |
Для каждой категории работников, указанных в штатном расписании получить |
|
|
количество работников со средним, средним специальным и высшим |
|
|
образованием. |
5 |
|
Поставки. |
|
1. |
Получить список поставщиков данного типа продукции, упорядоченный в |
|
|
порядке убывания оптовой цены этой продукции. |
|
2. |
Получить список договоров, заключенных за последние три месяца, с |
|
|
истекшими сроками поставки. Данные вывести в порядке убывания задержки |
|
|
поставки. |
|
3. |
Получить среднемесячное количество договоров, заключаемых по каждому |
|
|
виду продукции. |
6 |
|
Билетная касса. |

104
1.Получить информацию на данный момент времени обо всех рейсах, выполняемых в указанный пункт назначения, дата и время прибытия которых в этот пункт находятся в указанном диапазоне значений. По каждому рейсу вывести также общее количество мест и количество проданных билетов.
2.Для каждого рейса получить среднее число зарегистрированных пассажиров за все время эксплуатации. Данные вывести в порядке убывания значений.
3.Для каждого из типов транспортных средств получить его долю в общем пассажиропотоке и суммарное количество рейсов за неделю.
7 |
Отдел кадров. |
1.Получить список сотрудников, занимающих указанную должность, упорядоченный по времени принятия на работу и ФИО сотрудников.
2. Получить упорядоченный по датам список сотрудников, прошедших повышение квалификации. Для каждого сотрудника вывести номер специальности и номер свидетельства.
3.По каждому типу взыскания получить общее количество наложенных взысканий для всех типов должностей.
8 |
Отель. |
1.Получить список клиентов, проживавших в отеле в указанный период. Список должен быть упорядочен по длительности проживания.
2.Получить список клиентов, проживающих в данный момент в отеле. Строки в списке должны быть сгруппированы по категориям номеров и упорядочены по дате регистрации.
3.Получить данные о дополнительных услугах, оказанных с начала текущего года, по категориям номеров. Размеры дополнительных услуг вывести в денежном и процентном выражении в отношении к общей сумме оплаты для данной категории.
9 |
Производство. |
1.Получить список выпускаемой на предприятии продукции по годам, упорядоченный по себестоимости.
2.Получить данные о планируемых на год объемах расхода сырья по типам выпускаемой продукции. Данные упорядочить по величине потерь сырья при изготовлении.
3.По каждому типу продукции получить данные об объемах выпуска с начала текущего года в процентном выражении от плана, а также данные о количестве бракованной продукции в процентном выражении от общего объема продукции данного вида.
10 |
Банк. |
1.Получить списки клиентов банка, юридических и физических лиц, упорядоченные по величине остатков на счетах. Каждый из списков должен начинаться соответствующим заголовком – «Юридические лица» или «Физические лица». Вывести наименование для юридических лиц или фамилию и инициалы для физических лиц.
2.Получить список юридических лиц, упорядоченный по суммарным объемам платежей, произведенных с начала текущего года.
3.По каждому виду платных услуг, оказываемых банком физическим лицам, вывести общую сумму, полученную банком с начала текущего года. Получить также итоговое значение в целом.
11 |
Музыкальный магазин. |
6.Получить данные о трех группах с наибольшим количеством проданных дисков за последние 2 года.
7.По каждому стилю получить суммарные объемы продаж за прошедший год.
8.Получить среднюю сумму, потраченную одним клиентом на покупку дисков за

105
последний месяц.
13.Разработать интерфейс для выполнения параметрических SQLзапросов Select к БД, разработанной на предыдущих лабораторных работах (простой пример интерфейса приведен на рисунке 5.8). Варианты запросов приведены в таблице 5.3.
Таблица 5.3 – Варианты заданий для выполнения параметрических
SQL-запросов Select
№ |
|
Название разрабатываемой БД и запросы. |
1 |
|
Торговля |
|
1. |
Получить список изделий производителя Х проданных в заданную дату У. |
|
|
Вывести количество проданных единиц каждого наименования. Упорядочить |
|
|
список в порядке убывания количества проданных единиц. |
|
2. |
Получить данные об изделиях, закупочная цена которых не превышает Х грн. |
|
|
Результат упорядочить по убыванию цены. |
2 |
|
Коммунальные платежи. |
|
1. |
Получить списки клиентов, не оплативших на момент времени Х услугу У. По |
|
|
каждому клиенту выдать общую сумму задолженности. |
|
2. |
Получить перечень предоставляемых коммунальных услуг клиенту Х. |
3 |
|
Услуги. |
|
|
|
1. |
Получить список услуг клиента Х. Для каждого типа услуги посчитать |
|
|
|
суммарную стоимость. Данные упорядочить в порядке убывания суммарной |
|
|
стоимости. |
|
2. |
Получить список клиентов и их заказов, которые выполнил мастер Х за |
|
|
заданный интервал времени (вводится как параметр). Данные упорядочить по |
|
|
возрастанию даты выполнения заказа. |
4 |
|
Начисление зарплаты. |
|
1. |
Получить ведомость выплаты зарплаты за указанный промежуток времени |
|
|
(вводится как параметр) для работника Х: фамилию и инициалы, должность, |
|
|
начисленную сумму, сумму к выдаче. Данные упорядочить по дате выдачи |
|
|
зарплаты. |
|
2. |
Получить упорядоченный по фамилиям список работников с заданным |
|
|
образованием Х. |
5 |
|
Поставки. |
|
1. |
Получить список продукции, поставляемой поставщиком Х, упорядоченный в |
|
|
порядке убывания оптовой цены этой продукции. |
|
2. |
Получить список договоров, по которым поставляется продукция Х, |
|
|
заключенных в указную дату У. |
6 |
|
Билетная касса. |
|
1. |
По номеру рейса Х получить информацию обо всех его пассажирах, купивших |
|
|
билеты на заданную дату У (дата и время отправления по билету). Данные |
|
|
упорядочить по фамилии пассажиров. |
|
2. |
Получить список всех рейсов и количество свободных мест, которые на |
|
|
текущую дату следуют в заданный пункт назначения Х. Упорядочить по |
|
|
убыванию количества свободных мест. |
7 |
|
Отдел кадров. |
|
1. |
Получить список сотрудников, которые в указанный промежуток времени |
|
|
(вводится как параметр) проходили повышение квалификации. Данные |
|
|
упорядочить по времени прохождения квалификации и ФИО сотрудников. |

106
2.По типу взыскания (вводится как параметр) получить список сотрудников. По каждому сотруднику посчитать количество взысканий данного типа. Данные упорядочить в порядке убывания количества взысканий и по возрастанию ФИО сотрудников.
8 |
Отель. |
1.Получить список клиентов, поселившихся в отель в указанную дату (вводится как параметр). Список должен быть упорядочен по ФИО клиента.
2.Получить список номеров, стоимость проживания в которых не превышает указанного значения (вводится как параметр), и которые свободны в указанную дату (вводится как параметр). Список должен быть упорядочен по стоимости номера.
9 |
Производство. |
1.По наименованию продукции получить упорядоченный список странимпортеров.
2.Получить список продукции, приобретенной импортером Х в указанный промежуток времени (вводится как параметр).
10 |
Банк. |
1.Получить списки клиентов банка, юридических и физических лиц, сумма кредита которых не превышает указанного значения, упорядоченные по величине кредита.
2.По дате выдачи кредита и указанной процентной ставке (вводятся как параметры) вывести всех клиентов банка, заключивших кредитный договор. Список упорядочить по юридическому наименованию клиента.
11 |
Музыкальный магазин. |
1.Получить данные о дисках заданного музыкального стиля (стиль вводиться как параметр).
2.Получить список 5 клиентов, купивших наибольшее количество дисков в указанный промежуток времени (вводится как параметр). Данные упорядочить в порядке убывания суммарной стоимости покупок.
12.Реализовать возможность выполнения параметрических SQL-запросов Select (пункт 5.1.5 методический указаний).
13.Разработать формы для выполнения параметрических SQL-запросов
INSERT, UPDATE, DELETE для всех таблиц БД.
14.Реализовать возможность манипулирования данными в БД (выполнение команд INSERT, UPDATE, DELETE). Где необходимо
– использовать транзакции.
15.Разработать форму и реализовать возможность просмотра данных в режиме «главный-детальный». Варианты приведены в таблице 5.4.
Таблица 5.4 – Варианты заданий для реализации просмотра данных в режиме «главный-детальный»
№Название разрабатываемой БД и таблицы.
1 |
Торговля |
|
Изделие-Накладные |
|
|
2 |
Коммунальные платежи. |
|
Клиент-Платежи |
|
|
3 |
Услуги. |
|
|
|
Клиент-Заказы |
|
|
107 |
|
|
|
4 |
|
Начисление зарплаты. |
|
Сотрудник-Табель рабочего времени |
|
|
|
|
5 |
|
Поставки. |
|
Поставщие-Поставки |
|
|
|
|
6 |
|
Билетная касса. |
|
Рейс-Билеты |
|
|
|
|
7 |
|
Отдел кадров. |
|
Должность-Сотрудники |
|
|
|
|
8 |
|
Отель. |
|
Администратор-Заказы |
|
|
|
|
9 |
|
Производство. |
|
Импортер-Продукция |
|
|
|
|
10 |
|
Банк. |
|
Клиент-Кредиты |
|
|
|
|
11 |
|
Экспорт/импорт. |
|
Предприятие-Информация о доходах за все года |
|
|
|
|
12 |
|
Музыкальный магазин. |
|
Покупатель-Диски |
|
5.3 |
Содержимое отчета |
Отчет о выполнении лабораторной работы должен содержать:
название и тему лабораторной работы;
цель лабораторной работы;
краткие теоретические сведения;
ход выполнения работы;
выводы.
Раздел «Ход выполнения работы» должен содержать инфологическую модель БД на языке таблица-связь, листинг программы и экраны форм, демонстрирующие работу приложения согласно пунктам порядка выполнения работы.
5.4 Контрольные вопросы
В данном разделе приведено лишь несколько примеров контрольных вопросов, остальные будут приблизительно такого же содержания.
1.В чем суть парадигмы «модель-контроллер-вид»? Особенности реализации этой парадигмы в системе Interview Framework SDK Qt 4.
108
2.Какова архитектура клиентского приложении БД, использующего
Interview Framework?
3.На какие уровни делятся классы модуля QtSql?
4.Что такое ODBC? Как создать подключение источника данных с помощью ODBC?
5.Как выполняется настройка соединения с БД?
6.Для чего предназначен класс QSqlQuery?
7.Как выполняется непараметрический SQL-запрос и обрабатывается его результат?
8.Как передать параметры в параметрический SQL-запрос?
9.Что такое транзакция? Как ее реализовать средствами Qt?
10.Как средствами Qt реализовать просмотр данных в режиме «главный-детальный»?
109
6 ЛАБОРАТОРНАЯ РАБОТА №6 ПРОЕКТИРОВАНИЕ РЕЛЯЦИОННЫХ БАЗ ДАННЫХ НА
ОСНОВЕ МЕТОДА ER-ДИАГРАММ
Цель работы: Изучить технологию автоматизированного проектирования реляционной базы данных с помощью визуального редактора Azzurri Clay.
6.1 Краткие теоретические сведения
Под проектированием базы данных (БД) следует понимать процесс создания схемы базы данных и определения необходимых ограничений целостности. Весь процесс проектирования можно разделить на 3 этапа:
концептуальное (инфологическое) проектирование;
логическое проектирование;
физическое проектирование.
Концептуальное проектирование – это построение семантической модели предметной области (ПрО), то есть информационной модели наиболее высокого уровня абстракции. Такая модель отображает реальный мир в некоторые понятные человеку концепции, полностью независимые от параметров среды хранения данных, т.е. без ориентации на какую-либо конкретную СУБД и модель данных. Термины «семантическая модель», «концептуальная модель» и «инфологическая модель» являются синонимами.
Чаще всего концептуальная модель БД включает в себя:
описание информационных объектов, или понятий ПрО и связей между ними;
описание ограничений целостности, т.е. требований к допустимым значениям данных и к связям между ними.
На сегодняшний день существует множество подходов к построению таких моделей: графовые модели, семантические сети, модель "сущностьсвязь" и т.д. Наиболее популярной из них является модель "сущность-связь".
Логическое (даталогическое) проектирование – создание схемы БД на основе конкретной модели данных, например, иерархической, реляционной, объектной и т.д. Для реляционной модели данных логическая модель представляет собой набор отношений обычно с указанием первичных ключей, а также «связей» между отношениями, представляющих собой внешние ключи.
Преобразование концептуальной модели в логическую модель, как правило, осуществляется по формальным правилам. На этапе логического проектирования учитывается специфика конкретной модели данных, но может не учитываться специфика конкретной СУБД.

110
Физическое проектирование – создание схемы БД для конкретной СУБД. Специфика конкретной СУБД может включать в себя ограничения на именование объектов БД, ограничения на поддерживаемые типы данных и т.п. Кроме того, специфика конкретной СУБД при физическом проектировании включает выбор решений, связанных с физической средой хранения данных (выбор методов управления дисковой памятью, разделение БД по файлам и устройствам, методов доступа к данным), создание индексов и т.д.
6.1.1 Концептуальная модель «сущность-связь»
Модель «сущность-связь» (англ. Entity-Relationship model), или ER-
модель, предложенная П. Ченом в 1976 г., является наиболее известным представителем класса концептуальных (семантических, инфологических) моделей предметной области. ER-модель обычно представляется в графической форме, с использованием оригинальной нотации П. Чена, называемой ER-диаграмма.
Основные преимущества ER-моделей:
наглядность;
модели позволяют проектировать базы данных с большим количеством объектов и атрибутов;
ER-модели реализованы во многих системах автоматизированного проектирования БД.
Основными элементами ER-модели являются:
объекты (сущности);
атрибуты объектов;
связи между объектами.
Сущность – это реальный или представляемый объект, информация о котором должна сохраняться и быть доступной. В диаграммах ER-модели сущность представляется в виде прямоугольника, содержащего имя сущности. При этом имя сущности – это имя типа, а не некоторого конкретного экземпляра этого типа. Для большей выразительности и лучшего понимания имя сущности может сопровождаться примерами конкретных экземпляров этого типа (рисунок 6.1).
ГОРОД
например, Киев,
Рисунок 6.1 – Пример типа сущности На рисунке 6.1 изображена сущность ГОРОД с примерными
экземплярами «Киев» и «Харьков». Эта примитивная диаграмма несет важную информацию. Она показывает, что в БД будут содержаться однотипные структуры данных (экземпляры сущности), описывающие города.
При определении типа сущности необходимо гарантировать, что каждый экземпляр сущности может быть отличим от любого другого