Следующим этапом разработки БД, осуществлялось создание генераторов. Он является специальным объектом базы данных, который генерирует уникальные последовательные числа.
На следующем рисунке 15, показан фрагмент написания запроса на создание генератора «gen_id_clients», в котором задается значение 7.
Рисунок 15 - Написание SQL
запроса
Аналогичным образом создавался второй генератор.
На рисунке 16 представлены все созданные генераторы , со своими значениями.
Рисунок 16 - Список созданных генераторов
После создания генератора , был написан запрос
на создание триггера , который будет заполнять автоматически «Номер клиента (id_clients)»,
из таблицы «Клиенты (clients)»
,представленный на рисунке 17.
Рисунок 17 - Написание SQL
запроса
На рисунке 18 показаны созданные триггеры,
второй триггер был создан аналогично написанному запросу представленным выше.
Рисунок 18 - Список созданных триггеров
На следующем этапе разработки БД осуществлялось создание представлений, предназначенные для просмотра объединённых таблиц, либо вычисления агрегатных функций.
Для создания представления был написан код в редакторе SQL, в представлении будет выводится информация о клиентах из таблицы «Клиенты» и скидки их карт из таблицы «Карты_клиентов», на рисунке 19 приведен SQL-скрипт просмотра.
Остальные представления создавались аналогичным
образом. На рисунке 20 приведен список созданных представлений.
Рисунок 19 - SQL-скрипт просмотра
Рисунок 20 - Список созданных представлений
Далее осуществлялось создание хранимых процедур. Хранимые процедуры представляют собой программы, хранящиеся на сервере в двоичном виде, как часть базы данных. Создав хранимую процедуру ,ее можно будет вызвать в любое время из приложения. Хранимые процедуры на добавление удаление и изменение будут представлены из трех разных таблиц.
На рисунке 21 приведен SQL запрос на создание процедуры с помощью которой после выполнения можно добавить информацию в таблицу «Clietns».
Процедуры добавления данных для остальных таблиц создавались аналогичным образом.
На рисунке 23 представлен фрагмент написания SQL
запроса на создание процедуры удаления данных из таблицы «Refill»
,где удаление данных будет производиться согласно номеру покупки топлива, с
помощью его ввода.
Рисунок 21 - SQL
запрос
Рисунок 22 - SQL
запрос
Рисунок 22 - SQL
запрос
Процедуры удаления данных для остальных таблиц создавались аналогичным образом.
На рисунке 27 приведен фрагмент написания SQL запроса на создание процедуры модификации данных. В котором осуществляется замена данных из таблицы «Clients».
Процедуры изменения данных для остальных таблиц создавались аналогичным образом.
Список созданных хранимых процедур представлен
на рисунке 23.
Рисунок 23 - Список всех хранимых процедур
.2 Разработка программного обеспечения
.2.1 Создание Win-приложения.
Для создание Win приложения, использовался программный продукт C++ Builder. Первым делом был создан проект, далее в «DataModule» были помещены необходимые компоненты, для реализации будущего приложения.
На рисунке 24 представлен «DataModule»
в котором хранились все созданные компоненты в течении разработки приложения.
Рисунок 24. Компоненты в DataModule.
В компоненте «DataBase1»
были применены свойства, в которых был указан путь к созданной ранее БД в
утилите IBExpert
а так же сервер, на рисунке 25 представлен фрагмент применения свойств.
Рисунок 25. Применение свойств
Свойства IBDataBase
и IBTransaction Были настроены с
помощью инспектора объектов следующим образом, как представлено на рисункe
26.
Рисунок 26. Настроенные компоненты IBDatabase и
IBTransaction
На форму были помещены все визуальные
компоненты, которые необходимы для работы с БД. На рисунке 27 представлена
форма, в которой будут отображаться все представления, созданные в IBExpert.
Для представлений в Форме, были применены такие компоненты как IBTable
и DataSource, в компоненте IBTable
в свойствах изначально была применена подключенная БД, далее выбран в свойстве TableName
была выбрана таблица которая будет далее выводится на экран с помощью
компоненты DBGrid. После
этого IBTable
была связана непосредственно с DataSource.
Все остальные представления были созданы аналогичным образом.
.2.2 Добавление, удаление и изменение данных в таблицах базы данных
Следующим этапом разработки win-приложения была реализация хранимых процедур. Для реализации первой хранимой процедуры «CLIENTS_ADD» для добавления клиента в базу данных был использован компонент IBStoredProc, в котором была добавлена БД и непосредственно хранимая процедура CLIENTS_ADD из созданной БД в IBExpert. Далее в DataModule были помещены такие компоненты как IBQuery и DataSource, после чего была осуществлена связь между этими компонентами. В компненте IBQuery для отображения таблицы в первую очередь был написан запрос , рис 27.
Рисунок 27 - Написание запроса на вывод таблицы
«Клиенты»
Далее на форму были помещены компоненты для выполнения добавления данных в таблицу «Клиенты», такие как Edit и Button.
Для кнопки «Добавить» первоначально был написан
код, показанный на рисунке 28.
Рисунок 28 - Код для кнопки «Добавить»
Для остальных таблиц были совершены аналогичные операции.
Далее была реализована хранимая процедура для изменения данных в таблице «Клиенты». Для этого были применены те же компоненты описанные выше для таблицы «Клиенты». В данном случае при выборе кнопки изменить, добавить или удалить, в компонент IBStoredProc первоначально вписывается хранимая процедура которая будет выполняться в будущем, далее уже прописываются поля по которым будет изменяться информация. На рисунке 29 приведен код кнопки «Изменить».
Для остальных таблиц были совершены аналогичные операции.
Для реализации хранимой процедуры удаления
данных, для начала был написан код, в котором первоначально в компоненту IBStoredProc
в свойстве StoredProcName
выбирается хранимая процедура из созданной БД в IBExpert.
На рисунке 30 представлен код кнопки на удаление данных из таблицы «Клиенты».
Удаление данных будет осуществляться по всей строке, при вводе номера клиента.
Рисунок 29 - Код для кнопки «Именить»
Рисунок 30 - Код для удаления данных
Для остальных таблиц были совершены аналогичные
операции.
.2.3 Фильтрация, поиск и сортировки данных в таблицах базы данных c использованием технологии BDE
Следующим этапом разработки являлись функции
сортировки, фильтрации и поиска данных. Для выполнения операции сортировки в
таблице «Топливо» , был написан следующий код, представленный на рисунке 31. В
этом коде будут сортироваться два поля «Тип топлива» и «Цена», так же будут
предложены два выбора направления сортировки того или иного поля.
Рисунок 31 - Код для сортировки
Для остальных таблиц были совершены аналогичные операции.
Так же была разработана кнопка сброса, которая
позволяет вернуть позиции данных в прежнее состояние ,на рисунке 32 представлен
код кнопки «Сброс».
Рисунок 32 - Код кнопки «Сброс»
Далее была создана операция фильтрации данных, на рисунке 33 представлен код в котором будет фильтроваться название, введенной карты клиентом из таблицы «Card_clients».
Для реализации поиска были применены те же
компоненты описанные выше. Для поиска на форму так же были добавлены компоненты
для ввода данных и применения поиска. На рисунке 34 представлен код кнопки
«Поиск». Данный поиск будет осуществляться в таблице «Refill»
по номеру покупки топлива.
Рисунок 33 - Код кнопки для фильтрации
Рисунок 34 - Код кнопки «Поиск»
Для остальных таблиц были совершены аналогичные
операции.
.2.4 Составление отчетов
Для реализации отчетов первоначально была создана форма в которой будут храниться компоненты необходимые для формирования отчетов. В новую форму был добавлен компонент QuickRep1 который будет отображать отчет в дальнейшем. Далее в свойстве этой компоненты был применен DataModule2->DataSource19, который обращается к таблице «Кленты». На рисунке 35 приведен фрагмент отчета.
Далее в форме с таблицей была добавлена кнопка
«Сформировать отчет» в который был написан следующий
код:->QuickRep1->Preview();
Рисунок 35. Компоненты для формирования отчета
3. Тестирование информационной системы
.1 Пользовательский интерфейс
.1.1 Интерфейс Win-приложения
Рисунок 36. Форма с представлениями
Рисунок 37 - Заполнение данных
На рисунке 37 приставлен фрагмент запыления данных для добавления в таблицу «Клиенты».
Далее была нажата кнопка Добавить, после чего можно заметить добавленные данные в таблице «Клиенты», рис 38.
Рисунок 38 - Результат добавления данных
Рисунок 39. Заполнение данных для изменения
На рисунке 39 представлен фрагмент заполнения данных для их изменения в таблице «Клиенты».
На рисунке 39 видно что будет осуществляться
изменение клиента под номером 1, на рисунке 40 представлен результат, после
нажатия на кнопку «Изменить».
Рисунок 40 - Результат изменения данных
На рисунке 41 приставлен фрагмент заполнения
строки номера клиента которого хотим удалить, в нашем случае клиент под номером
19.
Рисунок 41 - Заполнение сроки «Номер клиента»
Далее была нажата кнопка «Удалить», после чего
можно заметить результат удаления, рис 42.
Рисунок 42. Результат удаления клиента под
номером 19
На рисунке 43 приведен фрагмент применения
сортировки по убыванию в поле «тип топлива».
Рисунок 43 - Результат выполнения сортировки
На рисунке 44 приведен фрагмент сортировки по
возрастанию поля «Цена».
Рисунок 44 - Результат выполнения сортировки
На рисунке 45 приведен фрагмент ввода названия
карты, которая будет в дальнейшем фильтроваться.
Рисунок 45 - Ввод названия карты
Рисунок 46 - Результат нажатия кнопки
«Применить»
Далее была нажата кнопка «Применить», после чего на рисунке 46 можно заметить результат выполнения операции.
Далее будет осуществляться поиск по номеру покупки топлива в таблице «Покупка топлива». На рисунке 47 приведен фрагмент заполнения номера покупки топлива.
Рисунок 47 - Ввод данных для поиска
Рисунок 48 - Результат выполнения поиска
На рисунке 48 представлен результат выполнения поиска, можно заметить что курсор слева наведен именно на тот номер покупки, который был введен ранее.
На рисунке 49 приведен фрагмент созданной кнопки
«Сформировать отчет» в таблице «Клиенты».
Рисунок 49 - Созданная кнопка для формирования
отчета
Рисунок 50 - Сформированный отчет по клиентам
На рисунке 50 представлен фрагмент
сформированного отчета по клиентам.
Заключение
В данной курсовой работе была осуществлена задача по проектированию и созданию удаленной базы данных, а также win-приложений для ее администрирования с использованием клиент-серверной технологии. Программирование на стороне сервера было осуществлено в СУБД FireBird 2.1 с помощью утилиты IBExpert, а клиентская часть приложения - в C++Builder с помощью технологии доступа к данным InterBaseExpress (IBX) свободно распространяемая система управления базами данных, использующая клиент-серверную технологию. Помимо создания таблиц и связей между ними Firebird поддерживает создание доменов, хранимых процедур, представлений, триггеров, индексов, исключений.
В ходе выполнения курсовой работы были
приобретены практические и теоретические знания и навыки в области создания
удаленных баз данных, а также создания win-приложений.
Таким образом, задачи, поставленные в начале курсовой работы, были выполнены, а
цель - достигнута.
Список использованных источников
1. Голуб А. Правила программирования на С и С++. - Москва 2001 г. - 241с.
2. Пахомов Б.И. С/С++ и Borland C++ Builder для начинающих. - СПб.: БХВ-Петербург, 2005. - 640 с.: ил.
3. Селко Дж. SQL для профессионалов Программирование. Второе издание. - Издательство «Лори», 2004. - 442 с.: ил.
4.
Базы данных и СУБД: учеб. Пособие /В.М. Михелёв. - Белгород: Изд-во БелГУ,
2007. - 200с.
Приложение 1
Описание созданных компонентов, в виде таблицы, в win - приложении
|
Компонент |
Применение |
|
|
Query1 |
Используется SQL код для выводя и модификации данных «Clients» |
|
|
Query2 |
Используется SQL код для выводя и модификации данных «card_clients» |
|
|
Query3 |
Используется SQL код для выводя и модификации данных «Fuel» |
|
|
Query8 |
Используется SQL код для выводя и модификации данных «Refill» |
|
|
Query9 |
Используется SQL код для выводя и модификации данных «Personnel» |
|
|
Query4 |
Используется SQL код выбора процедуры выборки таблицы «Clients» |
|
|
Query5 |
Используется SQL код выбора процедуры выборки таблицы «Сфкв_clients» |
Используется SQL код выбора процедуры выборки таблицы «fuel» |
|
Query7 |
Используется SQL код выбора процедуры выборки таблицы «refill» |
|
|
StoreProc1 |
Использует процедуры для таблицы «Clients» |
|
|
StoreProc2 |
Использует процедуры для таблицы «Card_clients» |
|
|
StoreProc3 |
Использует процедуры для таблицы «fuel» |
|
|
StoreProc4 |
Использует процедуры для таблицы «personnel» |
|
|
StoreProc5 |
Использует процедуры для таблицы «refill» |
|
|
Table1 |
Использует таблицу «Clients» для представления |
|
|
Table2 |
Использует таблицу «Card_clients» для представления |
|
|
Table3 |
Использует таблицу «fuel» для представления |
|
|
Table4 |
Использует таблицу «personnel» для представления |
|
|
Table5 |
Использует таблицу «refill» для представления |
|
|
Table10 |
Используется для отчета по таблице «Clients» |
|
|
Table11 |
Используется для отчета по таблице «Card_clients» |
|
|
Table12 |
Используется для отчета по таблице «fuel» |
|
|
Table13 |
Используется для отчета по таблице «personnel» |
|
|
Table14 |
Используется для отчета по таблице «refill» |
|
|
DataSourse1 |
Используется для связи Table1 с Grid1 |
|
|
DataSourse2 |
Используется для связи Table2 с Grid1 |
|
|
DataSourse3 |
Используется для связи Table3 с Grid1 |
|
|
DataSourse4 |
Используется для связи Table4 с Grid1 |
|
|
DataSourse7 |
Используется для связи Table5 с Grid1 |
|
|
DataSourse5 |
Используется для связи Query1 с Grid2 |
|
|
DataSourse6 |
Используется для связи Query 2 с Grid3 |
|
|
DataSourse8 |
Используется для связи Query3 с Grid4 |
|
|
DataSourse17 |
Используется для связи Query 8 с Grid5 |
|
|
DataSourse18 |
Используется для связи Query9 с Grid6 |
|
|
DataSourse19 |
Используется для связи Table10 с QuickRep1 |
|
|
DataSourse20 |
Используется для связи Table11 с QuickRep2 |
|
|
DataSourse21 |
Используется для связи Table12 с QuickRep3 |
|
|
DataSourse22 |
Используется для связи Table13 с QuickRep4 |
|
|
DataSourse23 |
Используется для связи Table14 с QuickRep5 |
|
|
DataSourse9 |
Используется для связи Table6 с Grid6 |
|
|
DataSourse10 |
Используется для связи Query 4 с Grid6 |
|
|
DataSourse11 |
Используется для связи Table7 с Grid7 |
|
|
DataSourse12 |
||
|
DataSourse13 |
Используется для связи Table8 с Grid8 |
|
|
DataSourse14 |
Используется для связи Query 6 с Grid9 |
|
|
DataSourse15 |
Используется для связи Table9 с Grid9 |
|
|
DataSourse16 |
Используется для связи Query 7 с Grid9 |