Третья таблица «Детали» содержит сведения о номере детали, о наименовании детали, о технических характеристиках, о производителе.
В четвертой таблице «Инженеры» хранится информация о номере инженера, ФИО инженера, содержит телефон и адрес.
Для полей таблиц нужны различные типы данных. Задаем их согласно предполагаемым записям (см. таблицу 1, таблицу 2).
Таблица №1 – Создание доменов
Имя домена | Тип | Длина | Not Null | Ограничения |
D_INDEX | smallint | + | >0 | |
D_NAME | varchar | 50 | ||
D_STOIM | varchar | 10 | ||
D_DATE | DATE | <TODAY | ||
D_ADRES | varchar | 50 | ||
D_TELEPHONE | varchar | 15 |
Таблица 2 – Создание таблиц и определение их типов полей
Имя таблицы | Поле | Тип | Длина | Not Null | PK | Имя домена |
client | ID_CLIENT | smallint | + | + | D_INDEX | |
FIO_CL | varchar | 50 | D_NAME | |||
ADRES | varchar | 50 | D_ADRES | |||
TELEPHONE | varchar | 15 | D_TELEPHONE | |||
detail | ID_DETAIL | smallint | + | + | D_INDEX | |
NAME_DETAIL | varchar | 50 | D_NAME | |||
TECH_HAR | varchar | 50 | D_NAME | |||
PROIZVOD | varchar | 50 | D_NAME | |||
ingener | ID_ING | smallint | + | + | D_INDEX | |
FIO_ING | varchar | 50 | + | D_NAME | ||
TELEPHONE | varchar | 15 | D_TELEPHONE | |||
ADRES | varchar | 50 | D_ADRES | |||
raschet | Id_rasch | smallint | + | + | D_INDEX | |
Nalich_R | varchar | 50 | D_NAME | |||
Beznalich_R | varchar | 50 | D_NAME | |||
zakaz | Id_zak | smallint | + | + | D_INDEX | |
DATE_PR | DATE | D_DATE | ||||
ID_CLIENT | smallint | + | D_INDEX | |||
ID_ING | smallint | + | D_INDEX | |||
ID_DET | smallint | + | D_INDEX | |||
ID_RASCH | smallint | + | D_INDEX | |||
DATE_V | DATE | D_DATE | ||||
STOIMOST | VARCHAR | 10 | D_STOIM |
Создали таблицы с помощью запроса SQL. Это можно увидеть по рисунку 4, рисунку 5, рисунку 6, рисунку 7, рисунку 8.
Рисунок 4 - Создание таблицы “Клиенты”
Рисунок 5 - Создание таблицы “Детали ”
Рисунок 6 - Создание таблицы “Инженер”
Рисунок 7 - Создание таблицы “Расчеты”
Рис. 8 – Создание таблицы «Заказы»
Далее были созданы генераторы и триггеры. Генератор представляет собой механизм, создающий уникальную последовательность чисел и автоматически заполняющий заданное поле при вставке или обновлении записей. Генераторы, как правило, используются в хранимых процедурах для автоматического заполнения поля (полей), входящих в первичный ключ.
Триггер является функцией, выполняющейся при вставке, изменении или удалении записи. Триггеры могут определяться как для таблиц, так и для обновляемых представлений.
Рис. 9. Список генераторов
В результате было создано по 5 триггеров и генераторов:
Рис. 10. Генераторы и триггеры базы данных
Представление «Список клиентов» (CLIENT_INFO)
Рисунок 11 - Создание просмотра CLIENT_INFO
Рисунок 12 - Результат просмотра CLIENT_INFO
Аналогичным образом были созданы представления остальных таблиц.
Примеры создания хранимых процедур:
Процедура «Добавить клиента» (ADD_CLIENT)
Рисунок 13 - Создание хранимой процедуры ADD_ CLIENT
Процедура «Удалить заказ» (DEL_ZAK)
Рисунок 14 - Создание хранимой процедуры DEL_ZAK
Рисунок 15 - Список созданных хранимых процедур
Было создано исключение. Исключения представляют собой именованное сообщение об ошибке.
Рисунок 16 - Список созданных исключений
Исключение KEY_EX внедряется следующим образом:
Рисунок 17 - Исключение KEY_EX в хранимой процедуре. На примере процедуры ADD_ZAK.
2.3 Реализация программного средства «Автоматизированное рабочее место инженера по сервисному обслуживанию компьютерной техники»
C++Builder предоставляет разработчикам следующие компоненты для разроботки приложений:
· Компоненты управления данными Data Control, обеспечивающие отображение и редактирования записей на форме приложения.
· Компонентывкладки Standart (Button, Label, Edit, RadioButton, CheckBox, RadioGroup, Panel)
· Компоненты доступа к данным Data Access - адресуют фактические данные, хранящиеся в файле базы данных.
· Компоненты вкладки QReport (QuickRep, QRSubDetail, QRLabel, QRDBText, QRBand, QRSysData), создание отчетов
· КомпонентыInterbase (IBDatabase, IBTransaction, IBTable, IBStoredProc)
Наличие на форме большого количества невидимых компонентов в ряде случаев затрудняет проектирование пользовательского интерфейса. Кроме того, нередко бывает удобно отделить компоненты, отвечающие за доступ к данным и бизнес-логику информационной системы, от интерфейсных элементов, например, для обегчения ее дальнейшей модернизации. Для этой цели в C++ Builder имеется специальный тип, называемый модулем данных - TDataModule. На рис.18 представлен модуль данных разрабатываемого клиентского приложения.
Рисунок 18 - Компонент DataModule2
Рисунок 19 - Результат заполнения таблицы “Клиенты ”
Рисунок 20 - Результат заполнения таблицы “Заказы”
Рисунок 21 - Результат заполнения таблицы “Детали”
Рисунок 22 - Результат заполнения таблицы “Инженеры”
Рисунок 23 - Результат заполнения таблицы “Виды расчета”
Рассмотрим подробнее реализацию программного средства «Автоматизированное рабочее место инженера по сервисному обслуживанию компьютерной техники».
Рисунок 24 - Модульная структура программного обеспечения
Рисунок 25 - Просмотр содержимого таблицы “Клиенты”
Имя таблицы задается в свойствах компонента IBTable. В свойствах компонента DataSourceуказываем свойство DataSet->IBTable.
Чтобы данные отображались в компоненте DBGrid, в свойстве DataSource указывается DataModule2->DataSource.
Рисунок 26 – Результат работы процедуры добавления данных
Для внесения данных во все таблицы была использована одна форма, чтобы сократить время на внесение пользователем данных в таблицу и упростить контроль над правильностью введенных данных.
Пользователь может заполнять данные по таблицам “Заказы”, “Клиенты”, “Детали ”, “Инженеры”.
Ввод значения поля в таблицу осуществляется, например, такой строкой как:
DataModule2->IBStoredProc1->ParamByName("FIO_CL")->AsString=Form1->Edit1->Text;
Удаление записи из таблиц происходит посредством следующего кода:
DataModule2->IBStoredProc3->ParamByName("ID_CLIENT")->AsString=DBEdit1->Text;
Осуществляется каскадное удаление – из таблицы «Клиенты».
При нажатии на кнопку “Удалить” запись удаляется.
Рисунок 27 – Результат работы процедуры удаления данных
Рисунок 28 - Редактирование данных
Изменение записей в таблицах БД осуществляется программно:
DataModule2->IBStoredProc2->ParamByName("ID_CLIENT")->AsString=DBEdit1->Text;
DataModule2->IBStoredProc2->ParamByName("FIO_CL")->AsString=Edit4->Text;
Вывод данных в отчет также осуществляется программно с помощью компонента Button: