Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

metoda_labs_DBO_26_09_2013

.pdf
Скачиваний:
284
Добавлен:
01.03.2016
Размер:
3.05 Mб
Скачать

101

оформления заказа")); 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 изображена сущность ГОРОД с примерными

экземплярами «Киев» и «Харьков». Эта примитивная диаграмма несет важную информацию. Она показывает, что в БД будут содержаться однотипные структуры данных (экземпляры сущности), описывающие города.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]