
- •Домашнее задание
- •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. Разработка основных процедур
2.2.1. Проверка категории на существование
функция: проверка на существование категории
-- вход: category_name - название категории
-- выход: булевое значение отвечающее за результат функции (true/false)
-- эффекты: нет
-- требования: нет
def is_category_exists(category_name):
cursor.execute("SELECT COUNT(*) FROM category WHERE category_name = ?", (category_name,))
count = cursor.fetchone()[0]
res = count > 0
return res
2.2.2. Проверка изделия на существование
функция: проверка на существование изделия
-- вход: product_name - название изделия
-- выход: булевое значение отвечающее за результат функции (true/false)
-- эффекты: нет
-- требования: нет
def is_product_exist(product_name):
cursor.execute("SELECT COUNT(*) FROM product WHERE product_name = ?", (product_name,))
count = cursor.fetchone()[0]
res = count > 0
return res
2.2.3. Добавление категории
функция: добавление новой категории
-- вход:
-- category_name - название категории
-- id_parent - id родительской категории (можеть быть None)
-- выход: нет
-- эффекты:
-- 1. Добавление новой категории в таблицу Категории
-- 2. Возврат ошибки, если категория с таким названием уже существует
-- требования:
-- 1. Название категории должно быть уникальным
def add_category(category_name, id_parent=None):
try:
if id_parent is not None:
cursor.execute('''
INSERT INTO category (category_name, id_parent)
VALUES (?, ?)
''', (category_name, id_parent))
else:
cursor.execute('''
INSERT INTO category (category_name, id_parent)
VALUES (?, NULL)
''', (category_name,))
conn.commit()
except Exception as _ex:
print(f'Error {_ex} - такое название категории уже есть!')
2.2.4. Добавление подкатегории
функция: add_subcategory - добавление подкатегории
-- вход:
-- 1. category_name - имя категории
-- 2. subcategory_name - имя добавляемой подкатегории
-- выход: нет
-- эффекты:
-- 1. добавление подкатегории
-- требования:
-- 1. название категории должно быть уникально
-- 2. родительская категория должна существовать
def add_subcategory(category_name, subcategory_name):
try:
if is_category_exists(category_name):
# Получаем Id категории
cursor.execute("SELECT id FROM category WHERE category_name = ?", (category_name,))
id_parent_to_set = cursor.fetchone()[0]
add_category(subcategory_name, id_parent_to_set)
conn.commit()
print("Подкатегория успешно добавлена.")
else:
print("Указанная категория/подкатегория не существует.")
except Exception as _ex:
print(f"Произошла ошибка при добавлении подкатегории: {_ex}")
2.2.5. Добавление изделия
функция: add_product - добавление изделия
-- вход:
-- 1. product_name - название изделия
-- 2. category_name - название категории для изделия
-- 3. quantity - количество изделия
-- 4. price - цена изделия
-- выход: нет
-- эффекты:
-- 1. добавление изделия
-- требования:
-- 1. название изделия должно быть не нулевым
-- 2. категория для изделия должна существовать
def add_product(product_name, category_name, quantity, price):
try:
if is_category_exists(category_name):
# Получаем id подкатегории по ее названию
cursor.execute("SELECT id FROM category WHERE category_name = ?", (category_name,))
category_id = cursor.fetchone()[0]
# Добавляем новое изделие в таблицу Изделие
cursor.execute("INSERT INTO product (id_category, product_name, quantity, price) VALUES (?, ?, ?, ?)",
(category_id, product_name, quantity, price))
conn.commit()
print("Изделие успешно добавлено.")
else:
print("Указанная подкатегория не существует.")
except Exception as _ex:
print(f"Произошла ошибка при добавлении изделия: {_ex}")