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

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

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

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

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

1. Автосервис:
    - список услуг (админка)
    - запись на сервис (мобилка) с выбором списка услуг
    <!-- 
    Кириллов
    https://github.com/9002015pro/-Description-of-the-subject-area
     -->

2. Онлайн-пекарня (интернет магазин)
    - список продукции (админка)
    - онлайн-заказ (мобильное приложение)
    <!-- 
    Игимбаев
    http://gogs.kolei.ru/t1mba/Bd
     -->

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

4. Бронирование столика в ресторане
    - список залов и столиков (количество мест) (админка)
    - онлайн бронь (мобильное приложение) с учетом овербукинга
    <!-- 
    Бастраков
    https://github.com/Cergyy/Kursach
     -->

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

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

7. Сотовый оператор
    - список тарифов и опций (админка)
    - выбор тарифа и опций (мобилка)
    <!-- 
    Евсеев
    https://github.com/Lairon1/Description-of-the-subject-area-lissen-/blob/main/README.md
    -->

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

9. Заказ ЖД-билетов
    - список поездов с расписанием
    - бронирование на нужную дату и кол-во пассажиров
    <!-- 
    Малинин
    https://github.com/Nikita-Malinin/sql/tree/main/Malinin
     -->

10. Покупка билета в кино
    - список фильмов, залов, мест
    - бронирование билетов
    <!-- 
    Смирнов Евгений
    https://github.com/starostai21/Kursach
     -->

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

12. Стоматолог
    - список услуг, врачей
    - запись 
    <!-- 
    Григорьев
    https://github.com/grigorevyaroslav/Kurs
     -->

13. Аптека.ру
    - список лекарств
    - онлайн-покупка
    <!-- 
    Шарапова
    https://github.com/sharapik1/Kurs/tree/kurs
     -->

14. Строй.материалы
    - список товаров
    - онлайн-покупка
    <!-- 
    Кропотова
    http://gogs.kolei.ru/ykropotova/kyrsovaya_rabota
     -->

15. Доставка еды (на двоих)
    - список ресторанов, список блюд, список доставщиков (деливери, яндекс)
    - формирование заказа (мобилка)
    - доставка заказа (мобилка)
    <!-- 
    Егошин
    https://github.com/Egoshin21/zxcv
     -->

16. Парикмахерская
    - список услуг, парикмахеров
    - запись
    <!-- 
    Колесников
    http://gogs.kolei.ru/DKolesnikov/coursework
     -->

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

18. Книжный магазин
    - список книг
    - онлайн заказы    
    <!-- 
    Пермякова
    https://github.com/Sveta944/Kursovaya
     -->

19. Студия маникюра (Иванова)

20. Велотовары (Попов)

## Важно!!!

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-комментарии. Не очевидный код (разработка и тестирование) должен содержать комментарии
* заключение, в котором содержатся выводы и рекомендации относительно возможностей практического применения полученных результатов;