
- •Задание на работу
- •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.5. Процедура, меняющая количество в таблице «prod_position_union»:
функция: edit_prod_position_union_quantity - изменение количества компонент у позиции в таблице prod_position_union
-- вход:
-- 1. obj_id - id объекта для экземпляра продукции
-- 2. comp_id - id объекта для компонента экземпляра продукции
-- 3. new_quantity - новое количество для компонентов
-- выход: 1 - успех / 0 - ошибка
-- эффекты:
-- 1. обновление количества компонент у записи в таблице prod_position_union
-- требования:
-- 1. передаваемые id объектов должны существовать
def edit_prod_position_union_quantity(obj_id, comp_id, new_quantity):
cursor.execute('''
UPDATE prod_position_union
SET quantity = ?
WHERE prod_id = ? AND comp_id = ?
''', (new_quantity, obj_id, comp_id))
updated_rows = cursor.rowcount
conn.commit()
print(f"значение позиции {(obj_id, comp_id)} установлено в {new_quantity}")
return 1 if updated_rows == 1 else 0
2.5.6. Процедура наследование допустимых составов в таблице «acceptable_components»:
функция: inherit_acceptable_components - наследоваение допустимых составов в таблице acceptable_components
-- вход:
-- 1. cl_id - id класса для которого произойдет наслеование допустимых составов класса продукции.
-- выход: количество насследованных параметров
-- эффекты:
-- 1. наследование допустимых составов в таблице acceptable_components для id переданного класса
-- требования:
-- 1. передаваемые id класса должны существовать
def (cl_id):
inserted_count = 0
try:
cursor.execute('SELECT id_parent FROM terminal_classifier WHERE id = ?', (cl_id,))
parent_cl_id = cursor.fetchone()
if parent_cl_id is None:
raise ValueError("Parent class ID not found")
cursor.execute('''
SELECT component_id FROM acceptable_components
WHERE class_id = ?
''', (parent_cl_id[0],))
components = cursor.fetchall()
# Insert acceptable components for the child class
for (component_id,) in components:
cursor.execute('''
INSERT OR IGNORE INTO acceptable_components (class_id, component_id)
VALUES (?, ?)
''', (cl_id, component_id))
inserted_count += cursor.rowcount
conn.commit()
print(f'произведено {inserted_count} наследований')
except Exception as e:
print(f"Error: {e}")
return inserted_count
2.5.7. Процедура получения списка допустимых компонентов для данного класса из таблицы «acceptable_components»:
функция: find_acceptable_components_by_class - получение списка допустимых классов-компонентов для данного класса
-- вход:
-- 1. cl_id - id класса для продукции
-- выход: допустимые классы-компоненты
-- эффекты:
-- нет.
-- требования:
-- 1. передаваемое id класса должно существовать
def find_acceptable_components_by_class(class_id):
try:
cursor.execute("SELECT component_id FROM acceptable_components WHERE class_id = ?", (class_id,))
component_ids = cursor.fetchall()
if not component_ids:
return []
# Prepare the result list with names of components
result = []
for component_id in component_ids:
cursor.execute("SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ?", (component_id[0],))
name = cursor.fetchone()
if name:
result.append((component_id[0], name[0]))
print(f'для класса с id = {class_id}, составные части: {result}')
return result
except Exception as e:
print(f"Error occurred while finding acceptable components by class: {e}")
return []