
- •Домашнее задание
- •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.24. Заполнение базы данных контрольным примером
функция: fill_data_example - заполнение базы данных контрольным примером
-- вход: нет
-- выход: нет
-- эффекты:
-- 1. заполнение базы данных
-- требования:
-- 1. сущестовование базы данных и соотвествующих таблиц
def fill_data_example():
add_category("неопределенные")
add_category("изделия")
##
add_subcategory("изделия", "столы")
add_subcategory("столы", "столы-металл")
add_product("стол_arizone", "столы-металл", 110, 2500)
add_product("стол_garden_story", "столы-металл", 54, 5665)
#
add_subcategory("столы", "столы-дерево")
add_product("стол_эстер", "столы-дерево", 124, 6460)
add_product("стол_кентуки", "столы-дерево", 1340, 2400)
##
add_subcategory("изделия", "стулья")
add_subcategory("стулья", "стулья-пластик")
add_product("стул_rambo", "стулья-пластик", 435, 1580)
add_product("стул_keter", "стулья-пластик", 252, 1300)
#
add_subcategory("стулья", "стулья-металл")
add_product("стул_arizone", "стулья-металл", 245, 3400)
add_product("стул_giardino", "стулья-металл", 25, 2400)
##
add_subcategory("изделия", "кресла")
add_subcategory("кресла", "кресла-кресло_кокон")
add_product("кресло-m-group", "кресла-кресло_кокон", 24, 12000)
add_product("кресло-гамак", "кресла-кресло_кокон", 14, 15500)
#
add_subcategory("кресла", "кресла-двухместное_кресло")
add_product("кресло-gemini_promob", "кресла-двухместное_кресло", 4, 8999)
add_product("кресло-парящая_кровать", "кресла-двухместное_кресло", 54, 9999)
2.3. Тестирование разработанных процедур
2.3.1. Тестирование проверки категории на существование
2.3.2. Тестирование проверки изделия на существование
2.3.3. Тестирование добавления категории
2.3.4. Тестирование добавления подкатегории
2.3.5. Тестирование добавления изделия
2.3.6. Тестирование получения всех категорий
2.3.7. Тестирование получения всех изделий
2.3.8. Тестирование обновления цены изделия
2.3.9. Тестирование обновления количества изделия
2.3.10. Тестирование изменения категории изделия
2.3.11. Тестирование удаления изделия
2.3.12. Тестирование удаления категории
2.3.13. Тестирование удаление подкатегории
2.3.14. Тестирование проверки на цикл при изменении родителя подкатегории
Специально сделаем цикл стулья - стулья-пластик
Было:
Стало:
Проверим
категории без цикла:
2.3.15. Тестирование изменения родителя подкатегории
Поменяем родителя таким образом, что категория “стулья” станет дочерней у “стулья-металл” (изначально наоборот).
Начальное
состояние:
Пробуем:
Итог:
Цикла не возникло.
В
следующем примере сделаем категорию
корневой, передав в качестве аргумента
название этой категории. Сделаем
категорию “стулья” - одной из корневых:
Результат
- категория “стулья” стала одной из
корневых (в поле id_parent значение NULL):
2.3.16. Тестирование изменения имени категории
2.3.17. Тестирование изменения имени изделия
2.3.18. Тестирование получения всех родителей подкатегории
2.3.18.1. На подкатегории
Для наглядности работы рекурсивности добавим к категории “кресла-кресло_кокон_new” подкатегорию “кресла-кресло_кокон_new_child”.
2.3.18.2. На категории
Возьмем категорию “стулья”.
Результат ожидаем, ведь у категории “стулья” нет родителей.
2.3.19. Тестирование получения всех детей категории
2.3.19.1. На подкатегории
Ожидаемый результат, тк у “кресла-кресло_кокон_new_child” нет дочерних элементов
2.3.19.2 На категории
2.3.19.2.1. Прямой порядок вывода
Ожидаемый результат, ведь у категории “стулья” как раз 4 дочерних элемента:
2.3.19.2.2. Обратный порядок вывода
2.2.20. Тестирование получения всех изделий у категории
2.2.21. Тестирование удаления всех таблиц
Имеются 2 таблицы (не считая системной sqlite_sequence):
Category
Product
Имеем в итогу пустую базу данных (не считая системной таблицы sqlite_sequence):
3. Заключение
В ходе выполнения домашней работы был проведён анализ предметной области, выделен класс изделия, класс категории. Были проектированы, разработаны и протестированы средства работы с классификатором изделий. Использовалась библиотека типа sql "sqlite3", входящий в пакет языка программирования python3.
4. Список использованных источников
Приемы объектно-ориентированного проектирования. Паттерны проектирования: Изд-во «ПИТЕР», 2008
В.А.Дубенецкий, А.Г. Кузнецов Проектирование информационных систем с использованием UML: учебно-методическое пособие. СПбГЭТУ «ЛЭТИ», 2016. 62 с.