
- •Задание на работу
- •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.2. Процедура, создающая запись в таблице «prod_position_union»:
функция: create_prod_position_union - добавление записи в таблицу prod_position_union
-- вход:
-- 1. new_object_id - id объекта для экземпляра продукции
-- 2. new_component_id - id объекта для компонента экземпляра продукции
-- 3. new_quantity - новое количество для компонентов
-- выход: 1 - успех / 0 - ошибка
-- эффекты:
-- 1. создание новой записи в таблице prod_position_union
-- требования:
-- 1. передаваемые id объектотв должны существовать
def create_prod_position_union(new_object_id, new_component_id, new_quantity):
try:
cursor.execute('SELECT id_category FROM product WHERE id = ?', (new_object_id,))
obj_class_id = cursor.fetchone()
if obj_class_id is None:
raise ValueError("Object ID not found")
cursor.execute('SELECT id_category FROM product WHERE id = ?', (new_component_id,))
comp_class_id = cursor.fetchone()
if comp_class_id is None:
raise ValueError("Component ID not found")
cursor.execute('''
SELECT 1
FROM acceptable_components
WHERE class_id = ? AND component_id = ?
''', (obj_class_id[0], comp_class_id[0]))
if cursor.fetchone() is None:
raise ValueError("Invalid composition for the object!")
cursor.execute('''
INSERT INTO prod_position_union (prod_id, comp_id, quantity)
VALUES (?, ?, ?)
''', (new_object_id, new_component_id, new_quantity))
conn.commit()
print('таблица prod_position_union успешно обновлена новым значением.')
return 1 # Success
except Exception as e:
print(f"Error: {e}")
return 0 # Failure
2.5.3. Процедура, удаляющая запись в таблице «prod_position_union»:
функция: delete_prod_position_union - удаление записи из таблицы prod_position_union
-- вход:
-- 1. prod_id - id объекта для экземпляра продукции
-- 2. comp_id - id объекта для компонента экземпляра продукции
-- выход: 1 - успех / 0 - ошибка
-- эффекты:
-- 1. удаление записи в таблице prod_position_union
-- требования:
-- 1. передаваемые id объектов должны существовать
def delete_prod_position_union(prod_id, comp_id):
cursor.execute('''
DELETE FROM prod_position_union
WHERE prod_id = ? AND comp_id = ?
''', (prod_id, comp_id))
deleted_rows = cursor.rowcount
conn.commit()
print(f'в таблице prod_position_union успешно удалено значение - {prod_id, comp_id}')
return 1 if deleted_rows == 1 else 0
2.5.4. Процедура, удаляющая запись в таблице «acceptable_components»:
функция: delete_acceptable_component - удаление записи из таблицы acceptable_component
-- вход:
-- 1. cl_id - id класса для экземпляра продукции
-- 2. component_cl_id - id класса для компонента экземпляра продукции
-- выход: 1 - успех / 0 - ошибка
-- эффекты:
-- 1. удаление записи в таблице acceptable_component
-- требования:
-- 1. передаваемые id объектов должны существовать
def delete_acceptable_component(cl_id, component_cl_id):
deleted_count = 0
try:
cursor.execute('SELECT id FROM product WHERE id_category = ?', (cl_id,))
obj_ids = [row[0] for row in cursor.fetchall()]
cursor.execute('SELECT id FROM product WHERE id_category = ?', (component_cl_id,))
comp_ids = [row[0] for row in cursor.fetchall()]
print('obj_ids - ', obj_ids)
print('comp_ids - ', comp_ids)
# Delete all associated position compositions
for obj_id in obj_ids:
for comp_id in comp_ids:
if (is_prod_position_union(obj_id, comp_id)):
deleted_count += delete_prod_position_union(obj_id, comp_id)
# Delete from acceptable_components
cursor.execute('''
DELETE FROM acceptable_components
WHERE class_id = ? AND component_id = ?
''', (cl_id, component_cl_id))
conn.commit()
print(f'успешно удалено {deleted_count} строк из таблицы acceptable_components')
return deleted_count
except Exception as e:
print(f"Error: {e}")
return deleted_count