
- •Домашнее задание
- •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.7. Функция наследования класса параметра
функция: inherit_class_parameters - функция наследования класса параметра
-- вход:
-- 1. new_class_to_inherit__name - имя нового класса
-- 2. new_class_to_inherit__short_name - короткое имя нового класса
-- 3. parent_class__name - имя класса, от которого будет идти наследование
-- выход: нет
-- эффекты:
-- 1. добавление нового наследованного класса
-- требования:
-- 1. класс, от которого происходит наследование должен существовать
def inherit_class_parameters(new_class_to_inherit__name, new_class_to_inherit__short_name, parent_class__name):
try:
# Получаем parent_id
cursor.execute('''
SELECT id FROM class_param WHERE param_class_name = ?
''', (parent_class__name,))
parent_id_row = cursor.fetchone()
if parent_id_row is None:
print(f'Ошибка в inherit_class_parameters: класса параметра с именем для наследования не найдено')
return 0 # Если id родителя в таблице class_param не найдено
# Получаем параметры из CLASS_PARAM для parent_id
cursor.execute('''
SELECT class_param_id, param_id FROM class_param WHERE param_class_name = ? ORDER BY priority
''', (parent_class__name,))
param_rows = cursor.fetchall()
print(f'param_rows - {param_rows}')
for param_row in param_rows:
class_param_id, param_id = param_row
# Проверяем, существует ли уже параметр для данного cl_id
cursor.execute('''
SELECT 1 FROM class_param WHERE param_class_name = ? AND param_id = ?
''', (new_class_to_inherit__name, param_id))
exists = cursor.fetchone()
cursor.execute('''
SELECT param_name FROM param WHERE id = ?''', (param_id,))
param_name = cursor.fetchone()[0]
print(f'exists ? - {exists}')
if exists:
print(f'Класс параметра с именем {new_class_to_inherit__name} уже существует.')
if not exists:
create_class_param(new_class_to_inherit__name, new_class_to_inherit__short_name, param_name, parent_class__name)
conn.commit()
except sqlite3.Error as e:
print(f"An error occurred in inherit_class_parameters: {e}")
conn.rollback()
return 0
2.2.8. Функция изменения приоритета вывода класса параметра
функция: edit_class_param_output_priority - функция изменения приоритета вывода класса параметра
-- вход:
-- 1. class_id
-- 2. id
-- 3. priority
-- выход: нет
-- эффекты:
-- 1. изменение приоритета вывода класса параметра
-- требования:
-- 1. класс должен существовать
def edit_class_param_output_priority(class_id, id, priority):
try:
# Выполнение запроса для получения количества записей с указанным priority и id класса
cursor.execute("""
SELECT count(*)
FROM class_param
WHERE priority = ? AND class_param_id = ?
""", (priority, class_id))
# Получение результата запроса
cnt = cursor.fetchone()[0]
if cnt == 0:
# Если таких записей нет, обновляем priority для указанной записи
cursor.execute("""
UPDATE class_param
SET priority = ?
WHERE class_param_id = ? AND id = ?
""", (priority, class_id, id))
else:
# Если такие записи есть, увеличиваем output_priority для всех записей с priority >= переданного в функцию priority
cursor.execute("""
UPDATE class_param
SET priority = priority + 1
WHERE priority >= ? AND class_param_id = ?
""", (priority, class_id))
# Затем обновляем priority для указанной записи
cursor.execute("""
UPDATE class_param
SET priority = ?
WHERE class_param_id = ? AND id = ?
""", (priority, class_id, id))
conn.commit()
print(f'Приоритет изменен.')
return priority
except sqlite3.Error as e:
print(f"An error occurred in edit_class_param_output_priority: {e}")
conn.rollback()
return 0