
- •Домашнее задание
- •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.5. Функция изменения класса параметра
функция: edit_class_param - функция изменения класса параметра
-- вход:
-- 1. id - id класса параметра
-- 2. new_param_class_name - новое имя класса параметра
-- 3. new_param_class_short_name - новое короткое имя класса параметра
-- 4. new_param_id - (опционально) - новый параметр класса параметра (при передаче None - станет неопределенным)
-- 5. class_param_id - (опционально) - новый класс класса параметра (при передаче None - станет корнывым)
-- выход: нет
-- эффекты:
-- 1. изменения класса параметра
-- требования:
-- 1. если вводится new_param_id, оно должно существовать
-- 2. если вводится class_param_id, оно должно существовать
def edit_class_param(id, new_param_class_name, new_param_class_short_name, new_param_id=None, class_param_id=None):
try:
# Начало транзакции
conn.execute('BEGIN TRANSACTION')
cursor.execute('''SELECT param_class_name FROM class_param WHERE id = ? ''', (id,))
is_class_param_exist = cursor.fetchone()
if not is_class_param_exist:
print(f'Ошибка в edit_class_param: Параметра класса с id = {id} не существует.')
return 0
else:
param_class_name_old = is_class_param_exist[0]
cursor.execute('''SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ? ''', (param_class_name_old,))
id_class_param_in_tc = cursor.fetchone()[0]
if new_param_id:
cursor.execute('''SELECT param_name FROM param WHERE id = ? ''', (new_param_id,))
is_param_exist = cursor.fetchone()
if not is_param_exist:
print(f'Ошибка в edit_class_param: Параметра с id = {new_param_id} не существует.')
return 0
else:
cursor.execute('''SELECT id FROM param WHERE param_name = ? ''', ('неопределенный параметр',))
new_param_id = cursor.fetchone()[0]
if class_param_id:
cursor.execute('''SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ? ''', (class_param_id,))
is_terminal_class_name_exist = cursor.fetchone()
if check_cyclic_dependency_terminal_classifier(class_param_id, param_class_name_old):
print("Ошибка в edit_class_param: родитель и потомок образуют цикл. ")
return 0
if (is_terminal_class_name_exist[0] == param_class_name_old):
print(f'_terminal_class_name_ = {is_terminal_class_name_exist[0]}, param_class_name_old = {param_class_name_old} =>', sep='')
print(f'Нельзя назначить классу в родителя самого себя')
return 0
if not is_terminal_class_name_exist:
print(f'Ошибка в edit_class_param: Параметра класса с id = {id} не существует.')
return 0
if change_parent_of_category(param_class_name_old, is_terminal_class_name_exist[0]):
cursor.execute('''SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ? ''', ('неопределенный параметр класса',))
class_param_id = cursor.fetchone()[0]
cursor.execute("UPDATE class_param SET param_class_name = ?, param_class_short_name = ?, param_id = ?, class_param_id = ? WHERE id = ?", (new_param_class_name, new_param_class_short_name, new_param_id, class_param_id, id))
cursor.execute("UPDATE terminal_classifier SET terminal_classifier_name = ?, terminal_classifier_short_name = ?, id_parent = ? WHERE id = ?", (new_param_class_name, new_param_class_short_name, class_param_id, id_class_param_in_tc))
res = cursor.rowcount
# Фиксация изменений
conn.commit()
# Возвращение результата
if res == 1:
print(f'Параметр с id = {id} успешно обновлен.')
return 1
else:
return 0
else:
cursor.execute('''SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ? ''', ('неопределенный параметр класса',))
class_param_id = cursor.fetchone()[0]
cursor.execute("UPDATE class_param SET param_class_name = ?, param_class_short_name = ?, param_id = ?, class_param_id = ? WHERE id = ?", (new_param_class_name, new_param_class_short_name, new_param_id, class_param_id, id))
cursor.execute("UPDATE terminal_classifier SET terminal_classifier_name = ?, terminal_classifier_short_name = ?, id_parent = ? WHERE id = ?", (new_param_class_name, new_param_class_short_name, class_param_id, id_class_param_in_tc))
res = cursor.rowcount
# Фиксация изменений
conn.commit()
# Возвращение результата
if res == 1:
print(f'Параметр класса с id = {id} успешно обновлен.')
return 1
else:
return 0
except sqlite3.Error as e:
print(f"Ошибка в edit_class_param: {e}")
conn.rollback()
return 0