- •Задание на работу
- •1.1. Разработать проект каркаса для работы со спецификациями изделий
- •1.2. Содержание работы
- •Аннотация
- •Введение
- •2. Описание выполненной работы
- •2.1. Разработка функциональных требований к подсистеме
- •2.2. Разработка проектной модели классов
- •2.4. Разработка модели хранения
- •2.5. Разработка поддерживающих процедур
- •2.5.1. Процедура, создающая запись в таблице «acceptable_components»:
- •2.5.2. Процедура, создающая запись в таблице «prod_position_union»:
- •2.5.3. Процедура, удаляющая запись в таблице «prod_position_union»:
- •2.5.4. Процедура, удаляющая запись в таблице «acceptable_components»:
- •2.5.5. Процедура, меняющая количество в таблице «prod_position_union»:
- •2.5.6. Процедура наследование допустимых составов в таблице «acceptable_components»:
- •2.5.7. Процедура получения списка допустимых компонентов для данного класса из таблицы «acceptable_components»:
- •2.5.8. Процедура рекурсивного получения списка допустимых компонентов нижнего уровня для данного класса из таблицы «acceptable_components»:
- •2.5.9. Процедура получения списка компонентов для данного объекта (продукции) из таблицы «prod_position_union»:
- •2.5.10. Процедура рекурсивного получения списка компонентов нижнего уровня для данного объекта (продукции) из таблицы «prod_position_union»:
- •2.5.11. Процедура получения списка компонентов определенного класса для данного объекта (продукции) из таблицы «prod_position_union»:
- •2.5.12. Процедура рекурсивного получения списка компонентов нижнего уровня и определенного класса для данного объекта (изделия) из таблицы «prod_position_unioin»:
- •2.5.13. Процедура получения списка объектов, которые могут быть компонентами данного объекта (продукции):
- •2.5.14. Процедура рекурсивного получения списка объектов, которые могут быть компонентами нижнего уровня данного объекта (продукции):
- •2.6. Тестирование процедур
- •2.6.1. Тестирование процедуры, создающей запись в таблице «acceptable_components»:
- •2.6.2. Тестирование процедуры, создающей запись в таблице «prod_position_union»:
Введение
Материальная спецификация изделий является неотъемлемой часть данных об изделии. Эти данные требуются для материального обеспечения изготовления, закупок, хранения. Объем этих данных определяется сложностью изделий и из разнообразием. Материальная спецификация может содержать до нескольких миллионов компонентов, состав компонентов и нормы их расхода непрерывно изменяются при модификации изделий и технологии их изготовления. В этой связи автоматизация процессов работы с материальными спецификациями изделий несомненно актуальна. Задача 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
