# Курсовой проект

Курсовой проект служит для закрепления и систематизации знаний и умений **ПМ.05**.

## Что должно быть реализовано

- база данных
- десктопное приложение для администрирования БД
    - авторизация
    - добавление
    - редактирование
    - удаление
    - поиск
    - фильтрация
    - сортировка
- АПИ-сервер на PHP
- мобильное приложение, получающее данные через АПИ-сервер (просмотр/заказ)
- интеграция со сторонними сервисами (доставка)

## Темы курсовых проектов

1. Автосервис: **Андреев**
    - список услуг (админка)
    - запись на сервис (мобилка) с выбором списка услуг

2. Онлайн-пекарня (интернет магазин) **Одегова**
    - список продукции (админка)
    - онлайн-заказ (мобильное приложение)

3. Фитнесс-центр **Герасимова**
    - список услуг (админка)
    - запись на занятие (учесть овербукинг) с выбором услуг

4. Бронирование столика в ресторане
    - список залов и столиков (количество мест) (админка)
    - онлайн бронь (мобильное приложение) с учетом овербукинга

5. Автомойка **Акесов**
    - список услуг
    - онлайн запись

6. Запись к врачу **Носкова**
    - список врачей (у каждого свой график работы)
    - запись (мобилка)

7. Сотовый оператор **Сидоркин**
    - список тарифов и опций (админка)
    - выбор тарифа и опций (мобилка)

8. Транспортная компания (служба доставки) **Бессонов, Васильев**
    - парк транспортных средств (поезд, самолет, авто)
    - заказ доставки (вес, расстояние)

9. Заказ ЖД-билетов
    - список поездов с расписанием
    - бронирование на нужную дату и кол-во пассажиров

10. Покупка билета в кино
    - список фильмов, залов, мест
    - бронирование билетов

11. Шиномонтаж **ведерников**
    - список услуг 
    - онлайн-запись

12. Стоматолог **Сергеев Максим**
    - список услуг, врачей
    - запись 

13. Аптека **Сергеев Александр**
    - список лекарств
    - онлайн-покупка

14. Строй.материалы **Суслов**
    - список товаров
    - онлайн-покупка

15. Доставка еды (на двоих) **Васильев**
    - список ресторанов, список блюд, список доставщиков (деливери, яндекс)
    - формирование заказа (мобилка)
    - доставка заказа (мобилка)

16. Парикмахерская **Галиулин**
    - список услуг, парикмахеров
    - запись

17. Книга рецептов
    - список блюд, ингредиенты
    - отображение с расчетом калорийности (мобилка)

18. Книжный магазин **Видякин**
    - список книг
    - онлайн заказы    

19. Каршеринг **Длужицкий**

20. Автосалон **Кузьминых**

21. Онлайн-магазин товаров для рукоделия **Никонова**

22. Аксесуары для дома **Садовина**

23. Игровой клуб **Бандяк**

## Важно!!!

USE-case и ER диаграммы рисуются для всей предметной области. 
 
## Методические рекомендации

### Общие положения

Курсовой проект выполняется в виде публичного репозитория на общедоступном сервере контроля версий (github, gitlab...). Пояснительная записка располагается в файле `readme.md` и, соответственно, должна быть написана в формате *MarkDown*.

Тема курсового проекта выбирается из списка, либо, по желанию студента. 

### Требования к структуре курсового проекта

* титульный лист. Разметку HTML можно взять из этого репозитория;
* содержание;
* введение, в котором раскрываются актуальность и значение темы, формулируются цели и задачи работы, объект, предмет и методы исследования;
* теоретическая часть, в которой содержатся теоретические основы разрабатываемой темы:
    - анализ предметной области: опрос, анкетирование (разработать как минимум одну анкету)
    - разработать UseCase-диаграмму для основных пользователей системы. 
        - полную диаграмму в формате PDF положить в репозиторий
        - "свой" кусок картинкой прицепить к пояснительной записке (картинки в *MarkDown* внедряются разметкой: `![<alt>](<имя картинки с относительным путём в вашем репозитории>)`). Например, все свои ресурсы вы храните в подкаталоге `src`, тогда для картинки с названием `erd.png` команда будет выглядеть так: `![ER-диаграмма](./src/erd.png)`
    - разработать спецификацию к UseCase (к 3 самым важным прецедентам). Формат **MarkDown**
    - для ЧЁТНЫХ номеров: разработать диаграмму состояний (в формате PDF)
    - для НЕЧЁТНЫХ номеров: разработать диаграмму последовательности (в формате PDF)
    - проектирование ERD. Необходимо спроектировать максимально полную ERD для предметной области. Обязательна 3 нормальная форма с обеспечением ссылочной целостности.
        - полную диаграмму в формате PDF положить в репозиторий
        - "свой" кусок картинкой прицепить к пояснительной записке
    - разработать словарь данных (MarkDown).
* практическая часть, которая состоит из проектирования, описания его реализации
    - база данных (MYSQL):
        * создание базы данных. На этом этапе реализовать только основной функционал подсистемы (подойти к преподавателю и утвердить набор обязательных таблиц)
        * подготовить 3 файла с данными (в РАЗНЫХ форматах csv, txt, xls): 5 записей для справочников, 10 - для данных (список товаров/услуг/клиентов...). Для данных предусмотреть поле для изображения и, соответственно, каталог с изображениями.
            + таблица с основными данными (продукты)
            + таблица с составными данными (материалы для продуктов)
            + таблица связей (продукты + материалы)
        * импортировать данные в базу данных (в пояснительной записке привести SQL-команды, используемые при импорте)
    - разработка (C#)
        * отображение основного списка товаров/услуг с:
            - условной раскраской (по доступности/цене... уточнить у преподавателя);
            - выводом изображений
            - сортировкой (уточнить у преподавателя)
            - фильтрацией (по справочному полю)
            - поиском (по нескольким полям)
            - вычисляемыми полями (по связям)
            - счетчиками общего количества записей и отображаемых

            Пример разметки "списком" есть [тут](https://github.com/kolei/de)

            все действия должны быть "живые", т.е. для фильтрации и поиска не нужно нажимать каких-то специальных кнопок.
            
        * добавление, удаление, редактирование записей списка товаров/услуг в отдельных модальных окнах, где это возможно. Если товар уже продавали (услугу оказывали), то выводить уведомление о невозможности удаления.
        * отображение дополнительного списка (продажи/оказанные услуги)
    - разработка (PHP)
        * реализовать API для базы данных
        * написать инструкцию по развертыванию сервера
    - разработка (мобильное приложение)
        * реализовать приложение для записи на услугу/заказ товара         
    - тестирование
        * разработать библиотеку классов (реализовать в ней метод для расчета вычисляемого поля в основной таблице)
        * разработать модульные тесты для метода из библиотеки классов (не менее 10)
        * разработка тестовых сценариев для удаления товара/услуги (не менее 5)
    - XML-комментарии. Не очевидный код (разработка и тестирование) должен содержать комментарии
* заключение, в котором содержатся выводы и рекомендации относительно возможностей практического применения полученных результатов;