
- •Домашнее задание
- •1.2. Содержание работы
- •1.3. Исходные данные для задачи
- •1.4. Рекомендуемые инструменты
- •1.5. Рекомендуемые источники
- •Аннотация
- •Описание выполненной работы
- •1.1 Анализ исходных данных
- •1.2. Разработка функциональных требований к подсистеме
- •1.3. Разработка модели классов
- •2.1.3. Код создания таблицы "enum"
- •2.1.4. Код создания таблицы "product"
- •2.1.5. Код создания таблицы "param"
- •2.1.6. Код создания таблицы "class_param"
- •2.1.7. Код создания таблицы "prod_param"
- •2.2. Реализация основных функций
- •2.2.1. Функция создания параметра
- •2.2.2. Функция редактирования параметра
- •2.2.3. Функция удаления параметра
- •2.2.4. Функция создания класса параметра
- •2.2.5. Функция изменения класса параметра
- •2.2.6. Функция удаления класса параметра
- •2.2.7. Функция наследования класса параметра
- •2.2.8. Функция изменения приоритета вывода класса параметра
- •2.2.9. Функция создания привязки параметра к изделию
- •2.2.10. Функция изменения привязки параметра и изделия
- •2.2.11. Функция нахождения id параметров у изделия
- •2.2.12. Функция поиска изделий заданного класса параметра
- •2.2.13. Функция поиска изделия с заданным параметром в заданном интервале
2.2.4. Функция создания класса параметра
функция: create_class_param - функция создания нового класса параметра
-- вход:
-- 1. terminal_classifier_name_class - имя класса
-- 2. terminal_classifier_name_short_class - короткое имя класса
-- 3. param_name - имя параметра
-- 4. parent_class_param_name - (опционально) - имя класса родителя
-- выход: нет
-- эффекты:
-- 1. новая запись в таблице class_param
-- требования:
-- 1. если указано имя родителя, оно должно существовать
-- 2. параметр должен существовать
def create_class_param(terminal_classifier_name_class, terminal_classifier_name_short_class, param_name, parent_class_param_name):
try:
cursor.execute("SELECT id FROM param WHERE param_name = ?", (param_name,))
param_id = cursor.fetchone()
if not param_id:
print(f'Ошибка в create_class_param: параметра с именем {param_name} не существует в таблице param')
return 0
else:
param_id = param_id[0]
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (parent_class_param_name,))
parent_class_id = cursor.fetchone()
if not parent_class_id:
print(f'В create_class_param: класса параметра (родителя) с именем {parent_class_param_name} не существует в таблице terminal_classifier, будет вставлено значение None')
parent_class_id = None
else:
parent_class_id = parent_class_id[0]
# Получаем максимальное значение priority для данного class_id
cursor.execute(''' SELECT COUNT(*) FROM class_param WHERE param_class_name = ? ''', (terminal_classifier_name_class,))
res = cursor.fetchone()[0]
if res is None:
res = 0
else:
cursor.execute(''' SELECT MAX(priority) + 1 FROM class_param WHERE param_class_name = ? ''', (terminal_classifier_name_class,))
res = cursor.fetchone()[0]
if res is None:
res = 0
cursor.execute('''SELECT unit_id FROM param WHERE param_name = ? ''', (param_name,))
unit_id = cursor.fetchone()
if not unit_id:
print(f'Единицы измерения с заданным {unit_id} не найдено. Будет вставлено NULL')
else:
unit_id = unit_id[0]
cursor.execute('''
INSERT INTO terminal_classifier(id_parent, terminal_classifier_name, terminal_classifier_short_name, id_unit, priority)
VALUES (?, ?, ?, ?, ?)
''', (parent_class_id, terminal_classifier_name_class, terminal_classifier_name_short_class, unit_id, res))
cursor.execute('''
INSERT INTO class_param(param_class_name, param_class_short_name, class_param_id, param_id, priority)
VALUES (?, ?, ?, ?, ?)
''', (terminal_classifier_name_class, terminal_classifier_name_short_class, parent_class_id, param_id, res))
conn.commit()
except sqlite3.Error as e:
# В случае ошибки откатываем транзакцию
print(f"An error occurred: {e}")
conn.rollback()
return 0