Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 сем / 3 / мисприс-2.3_1374_Наволоцкий_Зырянов_Харитонов.docx
Скачиваний:
19
Добавлен:
29.03.2025
Размер:
1.79 Mб
Скачать

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

Создадим диаграмму вариантов использования с именем Работа c заказами изделий с вариантами исполнения.

На рис. 1 приведена диаграмма ВИ Работа c заказами изделий с вариантами исполнения.

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

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

Модель классов для ВИ Задание варианта исполнения

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

Описание компонентов диаграммы

Используем шаблон для работы со справочником изделий. Это решение позволит вести классификатор и справочник заказываемых изделий с указанием параметров изделий. Введем альтернативную классификацию изделий по использованию в конфигураторе. Введение классов Изделие без конфигурации, Типовое изделие с конфигуратором, Вариант исполнения позволит задать различные правила для работы с изделиями. Изделия класса Изделие без конфигурации могут быть включены в заказ непосредственно из справочника. Изделия класса Типовое изделие с конфигуратором не могут быть включены в заказ, но имеют в своем описании список параметров конфигурации без указания их значений. Изделие класса Вариант исполнения создается динамически в процессе формирования позиции заказа. Чтобы указать вариант исполнения в позиции заказа, необходимо выбрать типовое изделие, указать значения его параметров конфигурации, создать экземпляр варианта исполнения и включить его в позицию заказа.

Но при этом, придется повторить процедуру добавления в позицию заказа с новым появившимся id варианта исполнения. Так же надо не забыть указать параметры этому варианту исполнению, иначе возникнет ошибка.

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

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

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

Описание компонентов диаграммы

Берем за основу модель хранения для справочника изделий.

Для классификации изделий по основанию Использование конфигуратора. вводим квалификатор configurable_type. Для него зададим 3 значения:

1) (0) «Изделие без конфигуратора»

2) (1) «Типовое изделие с конфигуратором»

3) (2) «Вариант исполнения»

Использование конфигуратора.

Для указания того, что параметр продукции является параметром конфигурации в сущность prod_param добавляем поле is_configurable:

1 – параметр является параметром конфигурации;

0 – параметр не является параметром конфигурации.

4. Разработка физической модели данных и поддерживающих процедур

Модификация таблиц для хранения объектов (изделий) и их параметров для поддержки конфигураций:

добавлено поле которое указывает является ли данный параметр конфигурируемым is_configurable

def create_prod_param_table():

cursor.execute('''

CREATE TABLE IF NOT EXISTS prod_param (

id INTEGER PRIMARY KEY AUTOINCREMENT,

prod_id INTEGER NOT NULL,

param_id INTEGER NOT NULL,

is_configurable BOOLEAN NOT NULL DEFAULT FALSE,

int_value INTEGER,

str_value TEXT,

real_value REAL,

enum_value TEXT,

class_value INTEGER,

UNIQUE (prod_id, param_id),

FOREIGN KEY (param_id) REFERENCES param(id) ON DELETE CASCADE,

FOREIGN KEY (prod_id) REFERENCES product(id) ON DELETE CASCADE

)

''')

conn.commit()

Добавлено поле configurable_type которое указывает какого типа конфигурируемости данный объект

def create_product_table():

cursor.execute('''

CREATE TABLE IF NOT EXISTS product (

id INTEGER PRIMARY KEY AUTOINCREMENT,

id_category INTEGER,

configurable_type INTEGER NOT NULL DEFAULT 0,

product_name_short TEXT,

product_name TEXT NOT NULL,

quantity INTEGER,

price REAL,

unit_value REAL,

place INTEGER,

FOREIGN KEY (id_category) REFERENCES terminal_classifier(id) ON DELETE CASCADE

)

''')

conn.commit()

Скрипт для создания таблицы заказов:

def create_orders_table():

cursor.execute("""

CREATE TABLE IF NOT EXISTS orders (

id INTEGER PRIMARY KEY AUTOINCREMENT,

customer INTEGER NOT NULL,

contact_person INTEGER,

order_time TEXT NOT NULL,

order_completion_time TEXT,

FOREIGN KEY (customer) REFERENCES terminal_classifier(id),

FOREIGN KEY (contact_person) REFERENCES product(id)

);

""")

conn.commit()

Скрипт для создания таблицы позиций заказов:

def create_orders_pos_table():

cursor.execute("""

CREATE TABLE IF NOT EXISTS orders_pos (

order_id INTEGER NOT NULL,

prod_id INTEGER NOT NULL,

quantity INTEGER NOT NULL,

PRIMARY KEY (order_id, prod_id),

FOREIGN KEY (order_id) REFERENCES orders(id),

FOREIGN KEY (prod_id) REFERENCES product(id)

);

""")

conn.commit()

Соседние файлы в папке 3