Добавил:
я зроблений з цукру Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗАДАНИЕ 1.3. Приемы моделирования Справочников / ЗАДАНИЕ 1.3. Приемы моделирования Справочников.docx
Скачиваний:
15
Добавлен:
31.05.2023
Размер:
558.32 Кб
Скачать

Аннотация

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

SUMMARY

The results of the design and fragments of the implementation of the framework that supports work at the execution stage with reference books of various products using the designer of product classes with a specification of the composition and types of product parameters using the example of various product reference books are presented. The results of testing the developed procedures with examples of specifications of various product directories are presented.

Оглавление

1. Разработка функциональных требований к подсистеме 6

2. Разработка модели классов 7

3. Разработка модели хранения 9

4. Разработка поддерживающих процедур 9

5.Тестирование 13

1. Разработка функциональных требований к подсистеме

Для разработки концептуального проекта будем использовать редактор StarUML.

Создадим следующие варианты использования:

Рис. 1. Диаграмма прецедентов для задачи Ведение справочника изделий

2. Разработка модели классов

Модель классов для прецедента Ведение справочника параметров

Рис. 2. Модель классов для описания параметров

Рис. 3. Модель метаклассов для ВИ Описание параметров классов изделий

Модель метаклассов для прецедента Ведение справочника изделий:

Рис. 4. Диаграмма классов для ВИ Ведение справочника изделий

Для задания значений параметров экземпляров изделий введена ассоциативная сущность Значения параметра. Ассоциация Параметры изделия определяет список значений параметров конкретного изделия. Ассоциация Значение параметра перечисления используется только для параметров типа Перечисление. Для значений численных параметров введен атрибут Значение.

3. Разработка модели хранения

Рис. 5. ERD для проекта Работа со справочником изделий

4. Разработка поддерживающих процедур

create or replace function ins_param(NAME varchar(50), SHORT_NAME varchar(10), TYPE BOOL, EI_CODE VARCHAR(3), ENUM_ID INTEGER) returns varchar(30) /*функция: Функция добавления нового параметра в таблицу параметров вход:name - название параметра, type - является ли параметр перечислением, ei_code - код ЕИ выход: Сообщение о результате операции эффекты:*/ as $$ begin insert into PARAMETER(NAME, SHORT_NAME, ENUM_TYPE, EI_CODE, ENUM_ID) values (NAME, SHORT_NAME, TYPE, EI_CODE, ENUM_ID); return 'Done!'; end; $$ LANGUAGE plpgsql; create or replace function ins_class_param(ID_CLASS INTEGER, ID_PARAMETER INTEGER, MIN_VALUE REAL, MAX_VALUE REAL) returns varchar(30) /*функция: Функция добавления параметра класса вход:MIN_VALUE - мин. возможное значение численного параметра, MAX_VALUE - макс. выход: Сообщение о результате операции эффекты:*/ as $$ begin insert into CLASS_PARAMETERS(ID_CLASS, ID_PARAMETER, MIN_VALUE, MAX_VALUE) values (ID_CLASS, ID_PARAMETER, MIN_VALUE, MAX_VALUE); return 'Done!'; end; $$ LANGUAGE plpgsql; create or replace function check_param_value(PRODUCT_ID INTEGER, PARAM_ID INTEGER, VALUE VARCHAR(30)) returns INTEGER /*функция: Функция проверки добавляемого параметра вход: выход: возвращает 0, если проверка успешна, 1 - если параметра или класса не существует, 2 - если значение нарушает ограничения эффекты:*/ as $$ DECLARE MIN_VAUE REAL; MAX_VAUE REAL; CLASS_ID INTEGER; TYPE BOOL; begin SELECT ENUM_TYPE FROM parameter WHERE ID_PAR = PARAM_ID INTO TYPE; IF TYPE = TRUE THEN RETURN 0; end if; SELECT ID_CLASS FROM product WHERE ID_PROD = PRODUCT_ID INTO CLASS_ID; if CLASS_ID NOT IN (SELECT ID_CLASS FROM CLASS_PARAMETERS WHERE ID_CLASS = CLASS_ID AND ID_PARAMETER = PARAM_ID) THEN RETURN 1; end if; SELECT MIN_VALUE FROM CLASS_PARAMETERS WHERE ID_CLASS = CLASS_ID AND ID_PARAMETER = PARAM_ID INTO MIN_VAUE; SELECT MAX_VALUE FROM CLASS_PARAMETERS WHERE ID_CLASS = CLASS_ID AND ID_PARAMETER = PARAM_ID INTO MAX_VAUE; IF VALUE::REAL >= MIN_VAUE AND VALUE::REAL <= MAX_VAUE THEN RETURN 0; ELSE RETURN 2; end if; end; $$ LANGUAGE plpgsql; create or replace function ins_product_param(PRODUCT_ID INTEGER, PARAM_ID INTEGER, VALUE VARCHAR(30)) returns varchar(30) /*функция: Функция добавления значения для параметра изделия вход: выход: Сообщение о результате операции эффекты:*/ as $$ DECLARE CHECK_RES INTEGER; begin SELECT * FROM check_param_value(PRODUCT_ID, PARAM_ID, VALUE) INTO CHECK_RES; IF CHECK_RES = 2 THEN return 'Value is not correct!'; END IF; IF CHECK_RES = 1 THEN return 'This product or parameter does not exist in PRODUCT_CLASS!'; END IF; insert into PRODUCT_PARAM(PRODUCT_ID, PARAM_ID, VALUE) values (PRODUCT_ID, PARAM_ID, VALUE); return 'Done!'; end; $$ LANGUAGE plpgsql; create or replace function change_product_param(PROD_ID INTEGER, PAR_ID INTEGER, NEW_VALUE VARCHAR(30)) returns varchar(30) /*функция: Функция изменения значения параметра изделия вход: выход: Сообщение о результате операции эффекты:*/ as $$ DECLARE CHECK_RES INTEGER; begin SELECT * FROM check_param_value(PROD_ID, PAR_ID, NEW_VALUE) INTO CHECK_RES; IF CHECK_RES = 2 THEN return 'Value is not correct!'; END IF; IF CHECK_RES = 1 THEN return 'This product or parameter does not exist in PRODUCT_CLASS!'; END IF; UPDATE PRODUCT_PARAM SET VALUE = NEW_VALUE WHERE PRODUCT_ID = PROD_ID AND PARAM_ID = PAR_ID; return 'Done!'; end; $$ LANGUAGE plpgsql; create or replace function get_product_param(PROD_ID INTEGER) returns TABLE ( ID_PROD integer, SHORT_NAME VARCHAR(10), NAME VARCHAR(50), VALUE VARCHAR(30), EI VARCHAR(30) ) /*функция: Функция вывода всех параметров продукции вход: выход: Таблица всех параметров указанного продукта эффекты:*/ as $$ begin RETURN QUERY SELECT PRODUCT_ID, P.SHORT_NAME, P.NAME, product_param.VALUE, E.NAME FROM product_param INNER JOIN parameter p on p.id_par = product_param.param_id INNER JOIN ei e on E.CODE = p.ei_code WHERE PRODUCT_ID = PROD_ID; end; $$ LANGUAGE plpgsql; create or replace function get_product_on_param(PAR_ID INTEGER, PAR_VALUE VARCHAR(30)) returns TABLE ( PROD_NAME varchar(50), ID_PROD integer, SHORT_NAME VARCHAR(10), NAME VARCHAR(50), VALUE VARCHAR(30), EI VARCHAR(30) ) /*функция: Получаем список продукции по значению указанного параметра вход: выход: эффекты:*/ as $$ begin RETURN QUERY SELECT PR.NAME, product_id, P.SHORT_NAME, P.NAME, product_param.VALUE, E.NAME FROM product_param INNER JOIN parameter p on p.id_par = product_param.param_id INNER JOIN ei e on E.CODE = p.ei_code INNER JOIN product PR ON PRODUCT_ID = PR.id_prod WHERE PAR_ID = product_param.param_id AND PAR_VALUE = product_param.VALUE; end; $$ LANGUAGE plpgsql; create or replace function get_class_param(CLASS_ID INTEGER) returns TABLE ( ID_CLASS integer, CLASS_NAME varchar(50), SHORT_NAME VARCHAR(10), NAME VARCHAR(50), EI VARCHAR(30) ) /*функция: Функция вывода всех параметров класса изделий вход: выход: эффекты:*/ as $$ begin RETURN QUERY SELECT CS.ID_CLASS, PR.NAME, P.SHORT_NAME, P.NAME, E.NAME FROM CLASS_PARAMETERS AS CS INNER JOIN parameter p on p.id_par = CS.ID_PARAMETER INNER JOIN ei e on E.CODE = p.ei_code INNER JOIN PRODUCT_CLASS PR ON CLASS_ID = PR.ID_CLASS WHERE CS.id_class = CLASS_ID; end; $$ LANGUAGE plpgsql;