МиСПрИС_Задание2_3_Петрова_Романова_Заболотников_9373
.pdfТестирование:
На рис. 5 – 19 приведены скриншоты тестов работы программы.
Рисунок 5 – Добавление нового продукта
Рисунок 6 – Связь между классами и параметрами
Рисунок 7 – Автоматическое добавление списков параметров по классу
Рисунок 8 – Добавление типовых параметров
11
Рисунок 9 – Заполнение параметров значениями
Рисунок 10 – Создание копии типового продукта
Рисунок 11 – Проверка создания копии типового продукта
Рисунок 12 – После заполнения только типовых параметров
12
Рисунок 13 – Значения типовых параметров типового изделия
Рисунок 14 – Значения типовых параметров для вариации изделия
Рисунок 15 – Все параметры для типового изделия
Рисунок 16 – Все параметры для вариации
13
Рисунок 17 – Формирование нового заказа
Рисунок 18 – Добавление позиций в заказ
Рисунок 19 – Вывод всех позиций заказа
14
Выводы.
В ходе данной работы была разработана объектная модель для решения задач управления заказами на изделия с вариантами исполнения. Также была разработана модель данных для реализации представленной объектной модели и придуманы SQL-процедуры для работы с заказами на изделия с вариантами исполнения. Выполнено тестирование фрагментов реализации каркаса, результаты которого подтвердили работоспособность представленных проектных решений.
15
ПРИЛОЖЕНИЕ А
----------------------------------------------------------------------
Сопровождающие процедуры и дополнения к таблицам
----------------------------------------------------------------------
> Зайка:
--Удаление варианта из Вариантов Конфигураторов
CREATE OR REPLACE function delete_VarConf (
VarIdToDelete integer) RETURNS VOID
as $$ begin
if(select count(*) from VarConf where VarIdToDelete = id_variation)
is not null then
DELETE FROM VarConf WHERE id_variation = VarIdToDelete;
else
raise exception 'VarConf with this id does not exist. DB wasnt updated.';
end if;
end $$ LANGUAGE plpgsql;
> Зайка:
-- Добавление элементов в таблицу VarConf
CREATE OR REPLACE function add_VarConf ( nameOfVarConf text) RETURNS VOID
as $$
declare flag int default 0; begin
select id_variation from VarConf where name_variation = nameOfVarConf into flag;
if flag is not null then
raise exception 'VarConf with this names already exists'; else
INSERT INTO VarConf(name_variation) VALUES ($1); end if;
end $$ LANGUAGE plpgsql;
CREATE TABLE Type_Param--Таблица Типов Параметров
(
id_paramType serial NOT NULL PRIMARY KEY, --Идентификатор Типа Параметра
16
name_paramType text NOT NULL --Наименование Типа Параметра
)
-- Перечисление таблица
CREATE TABLE enumeration
(
id_enum serial NOT null PRIMARY KEY, -- ID перечисления name_enum text NOT NULL --Имя перечисления
)
-- Значение перечисления строковое таблица
CREATE TABLE enum_value
(
id_value serial NOT null PRIMARY KEY, -- ID значения
num integer NOT NULL, -- Порядковый номмер значения в перечислении name_value text NOT NULL, --Имя значения
id_enum integer NOT NULL, --ID перечисления
CONSTRAINT id_enum FOREIGN KEY (id_enum)
REFERENCES enumeration(id_enum) MATCH simple -- Ограничение для ссылки только на существующее id
ON UPDATE cascade --На обновление таблицы перечисления нет
реакции
ON DELETE cascade -- Если удаляется объект перечисления, то удалятся и все значения, которые на него ссылались
)
create unique index union_num_iden on enum_value(num, id_enum); --
Создадим индекс для уникальности пар (num, id_enum)
create unique index union_name_iden on enum_value(name_value, id_enum); --Создадим индекс для уникальности пар (name_value, id_enum)
CREATE TABLE Parameters--Таблица Параметров
(
id_param serial NOT NULL PRIMARY KEY, --Идентификатор Класса name_param text NOT NULL, --Наименование параметров
flagConf bool not null, --Флаг конфигурации
id_paramType integer not null, --Ссылка на тип парраметра id_enum integer, -- Cссылка на перечисление
17
id_uom integer not null, -- Ссылка на ЕИ
CONSTRAINT id_uom FOREIGN KEY (id_uom)
REFERENCES Unit_Of_Measure (id_uom) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE CASCADE
)
alter table parameters drop column flagConf;
alter table parameters alter column id_uom drop not null;
ALTER TABLE Parameters ADD CONSTRAINT idParaType FOREIGN KEY (id_paramType)
REFERENCES public.Type_Param (id_paramType) MATCH SIMPLE ON UPDATE NO ACTION
ON DELETE cascade;
ALTER TABLE Parameters ADD CONSTRAINT id_enum FOREIGN KEY (id_enum) REFERENCES public.enumeration (id_enum) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE cascade;
CREATE TABLE Prod_Param--Таблица Параметров
(
id_pair serial NOT NULL PRIMARY KEY, --Идентификатор пары (Продут и Параметр)
id_prod integer NOT null, -- Ссылка на продукт id_param integer not null, -- Ссылка на параметр
id_enum_value integer, --ссылка на значение перечисления max_value integer not null,
min_value integer not null, value double precision,
CONSTRAINT id_enum_value FOREIGN KEY (id_enum_value) REFERENCES enum_value (id_value) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE CASCADE
)
ALTER TABLE Prod_Param ADD CONSTRAINT id_param FOREIGN KEY (id_param) REFERENCES public.Parameters (id_param) MATCH SIMPLE
18
ON UPDATE NO ACTION
ON DELETE cascade;
ALTER TABLE Prod_Param ADD CONSTRAINT id_prod FOREIGN KEY (id_prod) REFERENCES public.Product (id_product) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE cascade;
create unique index prodParamUnique on Prod_Param(id_prod, id_param); --Создадим индекс для уникальности пар (num, id_enum)
CREATE TABLE Class_Param--Таблица Параметров
(
id_pair serial NOT NULL PRIMARY KEY, --Идентификатор пары (Класс и Параметр)
id_class integer NOT null, -- Ссылка на Класс id_param integer not null, -- Ссылка на параметр max_value integer, --максимально допустимое значчение min_value integer, --минимально допустимое значчение
CONSTRAINT id_class FOREIGN KEY (id_class)
REFERENCES classificator (id_class) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE CASCADE
)
ALTER TABLE Class_Param ADD CONSTRAINT id_param FOREIGN KEY (id_param) REFERENCES public.Parameters (id_param) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE cascade;
create unique index classPar on Class_Param(id_class, id_param); --
Создадим индекс для уникальности пар (id_class, id_param)
CREATE TABLE SHD--Таблица Параметров
(
id_shd serial NOT NULL PRIMARY KEY, --Идентификатор СХД nameShd text NOT null -- Наименование СХД
)
19
CREATE TABLE ORDERR--Таблица Заказов
(
id_order serial NOT NULL PRIMARY KEY, -- ид Заказа id_shd integer NOT null, -- Ссылка на заказчика date_reg date not null, --Дата регистрации заказа
CONSTRAINT id_shd FOREIGN KEY (id_shd)
REFERENCES SHD (id_shd) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE CASCADE
)
CREATE TABLE Pos_Order--Таблица позиций в заказах
(
id_pair serial NOT NULL PRIMARY KEY, --Идентификатор пары (Заказ и Продукт)
id_order integer NOT null, -- Ссылка на Заказ id_prod integer not null, -- Ссылка на Продукт num integer not null, --Номер позиции
q integer not null, -- Колличество
CONSTRAINT id_order FOREIGN KEY (id_order)
REFERENCES ORDERR (id_order) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE CASCADE
)
ALTER TABLE Pos_Order ADD CONSTRAINT id_prod FOREIGN KEY (id_prod) REFERENCES public.Product (id_product) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE cascade;
create unique index PosOrder on Pos_Order(id_order, num); --Создадим индекс для уникальности пар (id_order, num)
CREATE TABLE TypeProd_Param--Таблица позиций в заказах
(
id_pair serial NOT NULL PRIMARY KEY, --Идентификатор пары (Заказ и Продукт)
id_prod integer NOT null, -- Ссылка на Заказ id_param integer not null, -- Ссылка на Продукт
20