
- •Задание на работу
- •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»:
2.5.8. Процедура рекурсивного получения списка допустимых компонентов нижнего уровня для данного класса из таблицы «acceptable_components»:
функция: find_acceptable_components_by_class_recursive - получение списка допустимых классов-компонентов для данного класса реркусивно
-- вход:
-- 1. cl_id - id класса для продукции
-- выход: допустимые классы-компоненты
-- эффекты:
-- нет.
-- требования:
-- 1. передаваемое id класса должно существовать
def find_acceptable_components_by_class_recursive(class_id):
try:
def find_components(class_id, result):
cursor.execute("SELECT component_id FROM acceptable_components WHERE class_id = ?", (class_id,))
components = cursor.fetchall()
for component in components:
component_id = component[0]
result.add(component_id)
find_components(component_id, result)
result = set()
find_components(class_id, result)
# Fetch component names for the result set
component_names = []
for component_id in result:
cursor.execute("SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ?", (component_id,))
component_name = cursor.fetchone()
if component_name:
component_names.append((component_id, component_name[0]))
print(f'результат подходящих компонент для id {class_id} - ({component_names})')
return component_names
except Exception as e:
print(f"Error occurred while finding acceptable components: {e}")
return []
2.5.9. Процедура получения списка компонентов для данного объекта (продукции) из таблицы «prod_position_union»:
функция: find_components_by_object - получение списка компонентов для данного объекта (продукции) из таблицы prod_position_union
-- 1. object_id - id объекта для продукции
-- выход: список компонентов объектов для данного объекта
-- эффекты:
-- нет.
-- требования:
-- 1. передаваемое id продукции должно существовать
def find_components_by_object(object_id):
try:
cursor.execute('''
SELECT comp_id, quantity FROM prod_position_union WHERE prod_id = ?
''', (object_id,))
components = cursor.fetchall()
result = []
for comp_id, quantity in components:
cursor.execute("SELECT product_name, quantity FROM product WHERE id = ?", (comp_id,))
name = cursor.fetchone()
if name:
result.append((['id', comp_id], ['product_name', name[0]], ['quantity', quantity]))
print(f'для продукции с id = {object_id} компоненты - ({result})')
return result
except Exception as e:
print(f"Error occurred while finding components by object: {e}")
return []
2.5.10. Процедура рекурсивного получения списка компонентов нижнего уровня для данного объекта (продукции) из таблицы «prod_position_union»:
функция: find_components_by_object_recursive - получение списка компонентов для данного объекта (продукции) из таблицы prod_position_union рекурсивно
-- 1. object_id - id объекта для продукции
-- выход: список компонентов объектов для данного объекта
-- эффекты:
-- нет.
-- требования:
-- 1. передаваемое id продукции должно существовать
def find_components_by_object_recursive(object_id):
try:
# Recursive function to find components
def find_components(obj_id, result):
cursor.execute("SELECT comp_id, quantity FROM prod_position_union WHERE prod_id = ?", (obj_id,))
components = cursor.fetchall()
for comp_id, quantity in components:
result[comp_id] = result.get(comp_id, 0) + quantity
find_components(comp_id, result)
result = {}
find_components(object_id, result)
# Fetch component names for the result
final_result = []
for comp_id, total_quantity in result.items():
cursor.execute("SELECT product_name FROM product WHERE id = ?", (comp_id,))
name = cursor.fetchone()
if name:
final_result.append((comp_id, name[0], total_quantity))
print(f'для объекта с id = {object_id} компоненты, найденные рекурсивно: {final_result}')
return final_result
except Exception as e:
print(f"Error occurred while finding components recursively: {e}")
return []