Скачиваний:
27
Добавлен:
29.03.2025
Размер:
1.25 Mб
Скачать

Введение

Материальная спецификация изделий является неотъемлемой часть данных об изделии. Эти данные требуются для материального обеспечения изготовления, закупок, хранения. Объем этих данных определяется сложностью изделий и из разнообразием. Материальная спецификация может содержать до нескольких миллионов компонентов, состав компонентов и нормы их расхода непрерывно изменяются при модификации изделий и технологии их изготовления. В этой связи автоматизация процессов работы с материальными спецификациями изделий несомненно актуальна. Задача 4-1 позволяет освоить основные приемы и решения данной проблемы.

2. Описание выполненной работы

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

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

На рис. 1 приведена диаграмма прецедентов Материальная спецификация изделий.

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

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

Для работ с классами изделий используем решение, представленное на рис. 2. Данная модель позволяет формировать спецификацию изделия, включая в его состав изделия любых классов. Также устанавливаются ограничения на допустимые классы в составе изделия с помощью класса «Допустимый класс в составе». Базовые операции создания/удаления/редактирования и др. в модели опускаются.

Рис. 2. Проектная модель классов для прецедента Управление спецификацией изделий

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

На рис. 3 представлена диаграмма ERD, описывающая сущности и связи модели хранения.

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

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

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

def create_acceptable_components_table():

cursor.execute('''

CREATE TABLE IF NOT EXISTS acceptable_components (

id INTEGER PRIMARY KEY AUTOINCREMENT,

class_id INTEGER NOT NULL,

component_id INTEGER NOT NULL,

UNIQUE(class_id, component_id),

FOREIGN KEY (class_id) REFERENCES terminal_classifier(id) ON DELETE CASCADE,

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

)

''')

conn.commit()

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

def create_prod_position_union_table():

cursor.execute('''

CREATE TABLE IF NOT EXISTS prod_position_union (

id INTEGER PRIMARY KEY AUTOINCREMENT,

prod_id INTEGER NOT NULL,

comp_id INTEGER NOT NULL,

quantity INTEGER NOT NULL CHECK (quantity > 0),

UNIQUE(prod_id, comp_id),

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

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

)

''')

conn.commit()

2.5.1. Процедура, создающая запись в таблице «acceptable_components»:

функция: create_acceptable_component - добавление записи в таблицу acceptable_components

-- вход:

-- 1. new_class_id - id класса для экземпляра продукции.

-- 2. new_component_id - id класса для компонента экземпляра продукции.

-- выход: 1 успех / 0 ошибка

-- эффекты:

-- 1. создание новой записи в таблице acceptable_components

-- требования:

-- 1. передаваемые id классов должны существовать

def create_acceptable_component(new_class_id, new_component_id):

if (not (is_category_id_exists(new_class_id) and is_category_id_exists(new_component_id))):

print("Error: в таблице terminal_classifier нет одного из переданных аргументов!")

return 0 # Failure

try:

cursor.execute('''

INSERT INTO acceptable_components (class_id, component_id)

VALUES (?, ?)

''', (new_class_id, new_component_id))

conn.commit()

return 1 # Success

except sqlite3.IntegrityError:

return 0 # Failure

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