
- •Домашнее задание
- •1.1. Разработать каркас для процесса Работа с классификатором изделий.
- •1.2. Содержание работы
- •1.3. Исходные данные для задачи
- •1.4. Рекомендуемые инструменты
- •1.5. Рекомендуемые источники
- •Аннотация
- •1. Описание выполненной работы
- •1.1. Введение
- •1.2. Анализ исходных данных
- •2. Создание базы данных
- •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. Удаление изделия
- •2.2.12. Удаление категории
- •2.2.13. Удаление подкатегории
- •2.2.14. Проверка на цикл при изменении родителя подкатегории
- •2.2.15. Изменение родителя подкатегории
- •2.2.16. Изменение имени категории
- •2.2.17. Изменение имени изделия
- •2.2.18. Получение всех предков подкатегории
- •2.2.19. Получение всех подкатегорий категории
- •2.2.20. Вывод всех подкатегорий категории
- •2.2.21. Получение всех изделий категории
- •2.2.22. Удаление всех таблиц
- •2.2.23. Получение названия родителя у подкатегории
- •2.2.24. Заполнение базы данных контрольным примером
2.2.16. Изменение имени категории
функция: change_category_name - изменение имени категории
-- вход:
-- 1. old_name - текущее имя категории
-- 2. new_name - новое имя категории
-- выход: нет
-- эффекты:
-- 1. изменение имени категории
-- требования:
-- 1. категория должна существовать
-- 2. новое имя категории не должно быть занято
def change_category_name(old_name, new_name):
try:
if is_category_exists(old_name):
if not is_category_exists(new_name):
cursor.execute("SELECT id FROM category WHERE category_name = ?", (old_name,))
category_name_id = cursor.fetchone()[0]
cursor.execute("UPDATE category SET category_name = ? WHERE id = ?", (new_name, category_name_id))
print('Имя категории успешно изменено.')
else:
print('Указанное новое имя категории уже существует!')
else:
print('Указанная категория не существует.')
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при изменении имени категории: {_ex}")
2.2.17. Изменение имени изделия
функция: change_product_name - изменение имени изделия
-- вход:
-- 1. old_name - текущее имя изделия
-- 2. new_name - новое имя изделия
-- выход: нет
-- эффекты:
-- 1. изменение имени изделия
-- требования:
-- 1. изделие должно существовать
-- 2. новое имя не должно быть занято
def change_product_name(old_name, new_name):
try:
if is_product_exist(old_name):
if not is_product_exist(new_name):
cursor.execute("SELECT id FROM product WHERE product_name = ?", (old_name,))
product_name_id = cursor.fetchone()[0]
cursor.execute("UPDATE product SET product_name = ? WHERE id = ?", (new_name, product_name_id))
print('Имя изделия успешно изменено.')
else:
print('Указанное новое имя изделия уже существует!')
else:
print('Указанное изделие не существует.')
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при изменении имени изделия: {_ex}")
2.2.18. Получение всех предков подкатегории
функция: get_category_parents - получение всех предков подкатегории
-- вход:
-- 1. category_name - имя категории
-- выход:
-- 1. все предки подкатегории
-- эффекты: нет
-- требования:
-- 1. категория должна существовать
def get_category_parents(category_name):
if is_category_exists(category_name):
category_name_copy = category_name
try:
cursor.execute("SELECT id FROM category WHERE category_name = ?", (category_name,))
category_id = cursor.fetchone()[0]
# function for recursive search parents
def find_parents(category_id, parents_list):
id_parent = 0
cursor.execute("SELECT EXISTS(SELECT 1 FROM category WHERE id = ?)", (category_id,))
record_exists = cursor.fetchone()[0]
if record_exists:
cursor.execute("SELECT id_parent FROM category WHERE id = ?", (category_id,))
id_parent = cursor.fetchone()[0]
if id_parent == 0:
return
if category_id != 0 and id_parent != 0:
if id_parent != 0:
cursor.execute("SELECT category_name FROM category WHERE id = ?", (id_parent,))
parent_name = cursor.fetchone()
parents_list.append(parent_name)
find_parents(id_parent, parents_list)
parents_list = []
parents_list_res = []
# begin recursive search for parents
find_parents(category_id, parents_list)
for elem in parents_list:
if elem:
parents_list_res.append(elem[0])
if parents_list_res:
print(f'родительские элементы для категории "{category_name_copy}": \n {parents_list_res}')
else:
print(f'У категории "{category_name_copy}" нет родительских элементов')
except Exception as _ex:
print(f"Произошла ошибка при получении списка родителей категории: {_ex}")
else:
print('Категории не существует.')