<< Пред. стр. 2 (из 4) След. >>
Для таблицы изделий - по названию изделия; Для таблицы размеров - по названию размера;
Для таблицы заказчиков - по названию заказчика.
3.4. Сортировка по основному полю.
В базе данные хранятся в несортированном виде. Сортировка производится в клиентской части при получении ей набора данных.
В программе производятся следующие сортировки:
Для таблицы предприятий - по названию предприятия и ключу предприятия;
Для таблицы экономических показателей - по ключу экономического показателя;
Для таблицы материальной базы предприятия - по ключу показателя материальной базы;
Для таблицы режимов предприятия - по названию режима;
Для таблицы архива заказов - по названию изделия;
Для таблицы изделий - по названию изделия;
Для таблицы размеров - по названию размера;
Для таблицы заказчиков - по названию заказчика и ключу заказчика.
3.5. Формирование отчётов.
Формирование отчётов производится средствами клиентской части. Всего в программе предусмотрено 9 различных отчётов.
Вид отчёта о предприятиях представлен на рис. 14.
Рис. 14. Отчёт о предприятиях.
Вид отчёта об экономических показателях представлен на рис. 15.
Рис. 15. Отчёт об экономических показателях.
Вид отчёта о показателях материальной базы предприятия представлен на рис. 16.
Рис. 16. Отчёт о показателях материальной базы предприятия.
Вид отчёта о режимах предприятия представлен на рис. 17.
Рис. 17. Отчёт о режимах предприятия.
Вид отчёта об архиве заказов предприятия представлен на рис. 18.
Рис. 18. Отчёт об архиве заказов предприятия.
Вид отчёта об изделиях предприятия представлен на рис. 19.
Рис. 19. Отчёт об изделиях предприятия.
Вид отчёта о размерах изделия представлен на рис. 20.
Рис. 20. Отчёт о размерах изделия.
Вид отчёта о заказчиках изделия представлен на рис. 21.
Рис. 21. Отчёт о заказчиках изделия.
Также можно распечатать составной отчёт об изделиях, включающий данные о собственно изделиях, их размерах и заказчиках.
Вид общего отчёта по изделиям представлен на рис. 22.
Рис. 22. Общий отчёт по изделиям.
3.6. Хранение данных в течение длительного времени.
Хранение данных в течение длительного времени обеспечивается свойствами выбранных средств (Delphi 6.0 и SQL-сервер InterBase 6.0). Сохранность данных может быть гарантирована их регулярным резервным копированием. Такая возможность предусмотрена сервером.
4. РАЗРАБОТКА СТРУКТУРЫ ПРОГРАММНОГО ПРОДУКТА
Для реализации программного продукта была выбрана модель "клиент-сервер" (рис. 23). Это означает, что программа состоит из клиентской и серверной частей, которые могут исполняться на отдельных машинах, объединённых в сеть. Клиентская часть реализована средствами среды разработки Borland Delphi 6, а серверная - средствами SQL-сервера баз данных InterBase 6.0.
Рис. 23. Модель "клиент-сервер".
Функциональная схема программного продукта изображена на рис. 24.
Рис. 24. Функциональная схема программного продукта.
База знаний предприятий состоит из следующих модулей:
Модуль базы фактов;
Модуль подсистемы наполнения базы фактов;
Модуль подсистемы формирования отчётов;
Модуль подсистемы проверки базы фактов;
Модуль ввода данных;
Модуль ввода запросов;
Клиентская часть обеспечивает интерфейс ввода данных, которые, после их ввода пользователем, в виде SQL-запроса пересылаются серверу. Сервер, обрабатывая запрос, производит запись данных в базу фактов.
Для того, чтобы вывести данные на экран и на печать, по запросу клиентской части производится выбор необходимых данных и пересылка. Затем клиентская часть производит форматирование данных и вывод их в отчёт, который затем можно распечатать.
Подсистема проверки базы фактов включает в себя проверку на полноту знаний. По запросу клиентской части сервер предоставляет данные о количестве записей. Клиентская часть анализирует эти данные, и, с помощью средств ввода данных, предоставляет пользователю возможность исправить обнаруженные недостатки.
5. РАЗРАБОТКА СЕРВЕРНОЙ ЧАСТИ
5.1. Общее описание.
Серверная часть программы, реализованная средствами сервера InterBase, состоит из 8 таблиц, 26 хранимых процедур, 8 генераторов.
Данные хранятся в таблицах в несортированном виде. Имеются следующие таблицы:
Таблица предприятий;
Таблица экономических показателей предприятия;
Таблица показателей материальной базы предприятия;
Таблица режимов предприятия;
Таблица архива заказов предприятия;
Таблица изделий;
Таблица размеров изделий;
Таблица заказчиков.
Количество таблиц и поля в них соответствуют разработанной модели знаний.
Хранимые процедуры обеспечивают добавление данных в таблицы, их модификацию и удаление. Также ими обеспечивается выдача сервером данных о количестве записей для проверки базы знаний на полноту.
Применение хранимых процедур позволяет упростить клиентскую часть, снизить требования к компьютеру клиента, а также пропускной способности сети.
Реализованы следующие хранимые процедуры:
CHECK_FOR_FULL_ENTR - проверка на полноту таблиц, связанных с таблицей предприятий;
CHECK_FOR_FULL_IZD - проверка на полноту таблиц, связанных с таблицей изделий;
P_ARCHIVE_DELETE - удаление записей из таблицы "Архив заказов";
P_ARCHIVE_INSERT - добавление записей в таблицу "Архив заказов";
P_ARCHIVE_MODIFY - изменение записей в таблице "Архив заказов";
P_ECPARAMS_DELETE - удаление записей из таблицы "Экономические показатели";
P_ECPARAMS_INSERT - добавление записей в таблицу "Экономические показатели";
P_ECPARAMS_MODIFY - изменение записей в таблице "Экономические показатели";
P_ENTR_DELETE - удаление записей из таблицы "Предприятия";
P_ENTR_INSERT - добавление записей в таблицу "Предприятия";
P_ENTR_MODIFY - изменение записей в таблице "Предприятия";
P_IZDELIE_DELETE - удаление записей из таблицы "Изделия";
P_IZDELIE_INSERT - добавление записей в таблицу "Изделия";
P_IZDELIE_MODIFY - изменение записей в таблице "Изделия";
P_MATBASE_DELETE - удаление записей из таблицы "Материальная база";
P_MATBASE_INSERT - добавление записей в таблицу "Материальная база";
P_MATBASE_MODIFY - изменение записей в таблице "Материальная база";
P_SECURITY_DELETE - удаление записей из таблицы "Режимы предприятия";
P_SECURITY_INSERT - добавление записей в таблицу "Режимы предприятия";
P_SECURITY_MODIFY - изменение записей в таблице "Режимы предприятия";
P_SIZES_DELETE - удаление записей из таблицы "Размеры изделия";
P_SIZES_INSERT - добавление записей в таблицу "Размеры изделия";
P_SIZES_MODIFY - изменение записей в таблице "Размеры изделия";
P_ZAKAZCHIK_DELETE - удаление записей из таблицы "Заказчики";
P_ZAKAZCHIK_INSERT - добавление записей в таблицу "Заказчики";
P_ZAKAZCHIK_MODIFY - изменение записей в таблице "Заказчики";
Также средствами сервера обеспечивается целостность базы фактов. Это достигается тем, что при любом изменении данных производится запуск транзакции. Если хотя бы одна операция, входящая в транзакцию, не может быть успешно завершена, происходит отмена изменений и откат к предыдущему целостному состоянию. Если все операции, входящие в транзакцию, завершаются успешно, происходит запись изменений в базу.
При удалении записи происходит автоматическая проверка на наличие связанных с ней записей и их удаление в подчинённых таблицах.
Генераторы при каждом обращении к ним обеспечивают выдачу уникальных целочисленных значений. С их помощью можно обеспечить уникальных значений в тех ключевых полях таблиц, в которые необходимо автоматически заносить значение.
Определим типы и размеры полей в таблицах:
Предприятия:
EntKey - INTEGER (4 байта);
Name - VARCHAR (60 байт);
Address - VARCHAR строка (60 байт);
Phone - VARCHAR строка (30 байт);
Comment - VARCHAR (300 байт).
Таким образом, объём одной записи равен 454 байта.
Экономические показатели:
Number - INTEGER (4 байта);
Value1 и Value2 - VARCHAR (30 байт);
Comment - VARCHAR (300 байт);
EntKey - INTEGER (4 байта).
Объём одной записи равен 368 байт.
Материальная база:
Number - INTEGER (4 байта);
Value1 и Value2 - VARCHAR (30 байт);
Comment - VARCHAR (300 байт);
EntKey - INTEGER (4 байта).
Объём одной записи равен 368 байт.
Режимы предприятия:
SecKey - INTEGER (4 байта);
Name - VARCHAR (20 байт);
Comment - VARCHAR (300 байт);
EntKey - INTEGER (4 байта).
Объём одной записи равен 328 байт.
Архив:
Number - INTEGER (4 байта);
IzdName - VARCHAR строка (60 байт);
KolZak - INTEGER (4 байта);
Comment - VARCHAR (300 байт);
EntKey - INTEGER (4 байта).
Объём одной записи равен 372 байта.
Изделие:
IzdKey - INTEGER (4 байта);
Name - VARCHAR (40 байт);
Vid_Sb - VARCHAR (30 байт);
EntKey - INTEGER (4 байта);
IsgDate - TIMESTAMP (8 байт);
KolZak - INTEGER (4 байта).
Объём одной записи равен 90 байт.
Размеры:
SizeKey - INTEGER (4 байта);
Name - VARCHAR (30 байт);
Description - VARCHAR (300 байт);
IzdKey - INTEGER (4 байта).
Объём одной записи равен 338 байт.
Заказчик:
EntKey - INTEGER (4 байта);
Name - VARCHAR (60 байт);
Address - VARCHAR (60 байт);
Phone - VARCHAR (30 байт);
Comment - VARCHAR (300 байт);
IzdKey - INTEGER (4 байта).
Объём одной записи равен 458 байт.
Видно, что при выбранных размерах полей объём ни одной записи не превышает 1 килобайта, что соответствует требованиям технического задания.
При заданном в техническом задании максимальном количестве записей 10000 штук в таблице максимальный объём данных равен:
(454+368+368+328+372+90+338+458)*10000 = 27760000 байт = 26.47 Мбайт
Таким образом, максимальный объём данных не превышает 100 Мбайт, что также соответствует требованиям технического задания.
Также сервер InterBase предоставляет такие средства администрирования, как механизм управления пользовательскими полномочиями, средства резервного копирования, "сборки мусора" и т. д.
5.2. Типичные процедуры.
Хранимые процедуры представляют собой подпрограммы, реализованные на языке SQL.
Пример процедуры добавления данных для таблицы "Предприятия":
ALTER PROCEDURE P_ENTR_INSERT
(
PNAME VARCHAR(60) CHARACTER SET WIN1251, /*Название предприятия*/
PADDRESS VARCHAR(60) CHARACTER SET WIN1251, /*Адрес предприятия*/
PPHONE VARCHAR(30) CHARACTER SET WIN1251, /*Телефон предприятия*/
PCOMMENT VARCHAR(300) CHARACTER SET WIN1251 /*Комментарий*/
)
AS
BEGIN
INSERT INTO ENTERPRISES (NAME,ADDRESS,PHONE,COMMENT,ENTKEY) //добавление данных в таблицу
VALUES (:PNAME, :PADDRESS, :PPHONE, :PCOMMENT, 0);
END
В данной процедуре поступающие на вход данные добавляются в таблицу "Предприятия". При добавлении данных происходит автоматическое обращение к соответствующему генератору, и в поле ключа заносится уникальное значение.
Пример хранимой процедуры выдачи информации о количестве связанных записей с каждой записью таблицы "Предприятия", хранящихся в её подчинённых таблицах (т. е. выполняющей проверку на полноту):
ALTER PROCEDURE CHECK_FOR_FULL_ENTR
RETURNS
(
ENTK INTEGER, /*Ключ записи в таблице "Предприятия"*/
ECPARS INTEGER, /*Количество записей в таблице "Экономические показатели"*/
MBASE INTEGER, /*Количество записей в таблице "Материальная база"*/
SEC INTEGER, /*Количество записей в таблице "Режимы предприятия"*/
ARCH INTEGER, /*Количество записей в таблице "Архив"*/
IZD INTEGER /*Количество записей в таблице "Изделия"*/
)
AS
BEGIN
FOR SELECT ENTKEY FROM ENTERPRISES /*Для каждой записи из таблицы "Предприятия"...*/
INTO :ENTK /*Выдаём ключ*/
DO
BEGIN
SELECT COUNT(NUMBER) FROM ECONOMICPARAMS
WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице "Экономические показатели"*/
INTO :ECPARS;
SELECT COUNT(NUMBER) FROM MATHERIALBASE
WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице "Материальная база"*/
INTO :MBASE;
SELECT COUNT(SECKEY) FROM SECURITY
WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице "Режимы предприятия"*/
INTO :SEC;
SELECT COUNT(NUMBER) FROM ARCHIVE
WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице "Архив"*/
INTO :ARCH;
SELECT COUNT(IZDKEY) FROM IZDELIE
WHERE ENTKEY=:ENTK /*Выдаём кол-во связанных записей в таблице "Изделия"*/
INTO :IZD;
SUSPEND; /*Передаём параметры (т. е. строку таблицы) клиенту */
END
END
При обращении к процедуре для каждой записи таблицы предприятия производится подсчёт связанных с ней записей в подчинённых таблицах. На выходе процедуры - таблица с числовыми значениями.
Аналогично выполняется подсчёт в таблицах, связанных с таблицей "Изделия".
6. РАЗРАБОТКА КЛИЕНТСКОЙ ЧАСТИ
6.1. Общее описание.
Код клиентской части состоит из 33 модулей, из них 24 - формы различного назначения и 9 - отчёты.
Клиентская часть связывается с серверной посредством механизма Borland Database Engine (BDE). Этот механизм предоставляет стандартные средства взаимодействия с различными серверами баз данных, и позволяет сделать клиентскую часть максимально независимой от выбранного сервера. Для связи с сервером InterBase выбран драйвер SQL-links, так как он обеспечивает большую производительность по сравнению с драйвером интерфейса ODBC (Open Database Connectivity). Кроме того, можно менять расположение базы данных без необходимости перекомпиляции клиентского приложения. Достаточно только изменить путь в свойствах псевдонима BDE. Соединение клиентской части с серверной может проходить по протоколам TCP/IP, SPX, NetBEUI.
Все компоненты приложения, работающие с данными, для удобства вынесены в отдельный модуль приложения (EntrDataModule). Его вид представлен на рис. 25.
Рис. 25. Модуль данных клиентской части.
Компонент dbEnterprises обеспечивает связь с удалённой базой данных. Остальные компоненты, работающие с данными, взаимодействуют с базой с помощью этого компонента.
Компоненты в модуле:
EnterprisesQuery - обеспечивает взаимодействие с таблицей "Предприятия";
EntrModifyStoredProc, EntrDeleteStoredProc, EntrInsertStoredProc - обеспечивают модификацию данных в таблице "Предприятия", взаимодействуя с хранимыми процедурами на сервере;
- EnterprisesDataSource - обеспечивает интерфейс для вывода данных пользователю;
EcParamsQuery - обеспечивает взаимодействие с таблицей "Экономические параметры";
EcParamsModifyStoredProc, EcParamsDeleteStoredProc, EcParamsInsertStoredProc - обеспечивают модификацию данных в таблице "Экономические параметры", взаимодействуя с хранимыми процедурами на сервере;
EcParamsDataSource - обеспечивает интерфейс для вывода данных пользователю;
MatBaseQuery - обеспечивает взаимодействие с таблицей "Материальная база";
MatBaseModifyStoredProc, MatBaseDeleteStoredProc, MatBaseInsertStoredProc - обеспечивают модификацию данных в таблице "Материальная база", взаимодействуя с хранимыми процедурами на сервере;
MatBaseDataSource - обеспечивает интерфейс для вывода данных пользователю;
SecurityQuery - обеспечивает взаимодействие с таблицей "Режимы предприятия";
SecurityModifyStoredProc, SecurityDeleteStoredProc, SecurityInsertStoredProc - обеспечивают модификацию данных в таблице "Режимы предприятия", взаимодействуя с хранимыми процедурами на сервере;
SecurityDataSource - обеспечивает интерфейс для вывода данных пользователю;
ArchiveQuery - обеспечивает взаимодействие с таблицей "Архив";
ArchiveModifyStoredProc, ArchiveDeleteStoredProc, ArchiveInsertStoredProc - обеспечивают модификацию данных в таблице "Архив", взаимодействуя с хранимыми процедурами на сервере;
ArchiveDataSource - обеспечивает интерфейс для вывода данных пользователю;
IzdelieQuery - обеспечивает взаимодействие с таблицей "Изделия";
IzdelieModifyStoredProc, IzdelieDeleteStoredProc, IzdelieInsertStoredProc - обеспечивают модификацию данных в таблице "Изделия", взаимодействуя с хранимыми процедурами на сервере;
IzdelieDataSource - обеспечивает интерфейс для вывода данных пользователю;
SizesQuery - обеспечивает взаимодействие с таблицей "Размеры";
SizesModifyStoredProc, SizesDeleteStoredProc, SizesInsertStoredProc - обеспечивают модификацию данных в таблице "Размеры", взаимодействуя с хранимыми процедурами на сервере;
SizesDataSource - обеспечивает интерфейс для вывода данных пользователю;
ZakQuery - обеспечивает взаимодействие с таблицей "Заказчики";
ZakModifyStoredProc, ZakDeleteStoredProc, ZakInsertStoredProc - обеспечивают модификацию данных в таблице "Заказчики", взаимодействуя с хранимыми процедурами на сервере;
ZakDataSource - обеспечивает интерфейс для вывода данных пользователю;
CheckEntrQuery - обеспечивает взаимодействие с хранимой процедурой проверки количества записей в таблицах, связанных с таблицей "Предприятия";
CheckEntrDataSource - обеспечивает интерфейс для вывода данных пользователю;
CheckIzdQuery - обеспечивает взаимодействие с хранимой процедурой проверки количества записей в таблицах, связанных с таблицей "Изделия";
CheckIzdDataSource - обеспечивает интерфейс для вывода данных пользователю;
В формах проекта содержатся лишь компоненты, необходимые для взаимодействия с пользователем.
В проекте содержатся следующие формы:
1) MainForm - главная форма приложения;
2) InputEntrForm - форма ввода данных для занесения их в таблицу "Предприятия";