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

Дорабатываем курсовой проект за 3-й курс. В рамках этого курсового нужно сделать:

1. Инструкция по развертыванию инфраструктуры (DevOps)

    - Установка сервера MySql

        Расписать какие есть варианты (локальная железка или виртуальный сервер). Выбрать один из вариантов и обосновать его. 

        Написать инструкцию по развёртыванию выбранного варианта

    - инструкция по настройке подключения десктопного приложения к базе данных (скорее всего придется вынести строку подключения по внешний файл настроек)

    - у кого есть API: написать инструкцию по развертыванию на выбранном сервере

1. Обеспечение безопасности

    - в десктопном приложении сдалать авторизацию по ролям (админ/простой пользователь)
    - скрыть удаление/редактирование для простых пользователей

1. Обеспечение качества

    - разработайте тестовые сценарии
    - реализуйте модульные тесты по разработанным тестовым сценариям






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

>Допускается командная работа: одна предметная область, общая диаграмма прецедентов, общая ER-диаграмма и база данных. Дальше каждый разрабатывает свою подсистему.

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

### Минимальные требования ("на троечку")

- бизнес анализ
    - описание предметной области
    - диаграмма прецедентов для всей системы
    - диаграмма последовательности для одного прецедента (выбирает преподаватель после разработки диаграммы прецедентов)
- ER диаграмма
- словарь данных
- скрипт для создания базы данных
- десктопное приложение для администрирования БД
    - авторизация
    - добавление
    - редактирование
    - удаление
    - поиск
    - фильтрация
    - сортировка

### На "хорошо"    

- разработка библиотеки классов (если в предметной области есть какая-то вычислительная задача, то вынести ее в библиотеку)
- написание тестовых сценариев для тестирования библиотеки классов
- реализация модульных тестов по разработанным сценариям

### На "отлично"

- АПИ-сервер
- мобильное приложение (android) или веб-приложение (vue/react), получающее данные через АПИ-сервер (просмотр/заказ) -->

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

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

    - база данных (MYSQL):
        * создание DDL-скрипта для базы данных.

    - разработка (C#)
        * отображение основного списка товаров/услуг с:
            - условной раскраской (по доступности/цене... уточнить у преподавателя);
            - выводом изображений
            - сортировкой (уточнить у преподавателя)
            - фильтрацией (по справочному полю)
            - поиском (по нескольким полям)
            - вычисляемыми полями (по связям)
            - счетчиками общего количества записей и отображаемых

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

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

    - разработка (мобильное или WEB приложение)
        * реализовать приложение для записи на услугу/заказ товара         

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