Автоматизация складских процессов

Требования к программной системе с точки зрения предметной области. Применение моделирования с использованием приложения RationalRose. Разработка интерфейса пользователей. Создание клиентского приложения. Информационная модель системы и ее описание.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 16.09.2020
Размер файла 1,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ИИТ БГУИРФакультет повышения квалификации и переподготовки

Кафедра МПСС

Дисциплина: СРЕДСТВА ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ ПРИЛОЖЕНИЙ

Пояснительная записка по курсовому проекту

Тема: Автоматизация складских процессов

Выполнил слушатель гр. 111111

Иванов Иван Иванович

Минск 2020

Задание

для курсового проекта

по дисциплине «СРЕДСТВА ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ ПРИЛОЖЕНИЙ»

Слушателюгр.111111Иванову Ивану Ивановичу______________

Вариант № 2, Тема проекта «Автоматизация складских процессов»_____

Срок сдачи: до 22.07.2020

Предметная область: Склад товаров. Товар хранится, в зависимости откатегории товара, на разных стеллажах. Если на стеллаже нет свободного места, тотовар временно помещается в «отстойник». Если нужно отгрузить товара больше, чеместь на складе, формируется заказ на закупку необходимого количества товара.

Приложение должно предоставлять пользователю возможность выполнятьследующие действия:

выводить сообщение, если остаток товара на складе меньше минимальнорекомендуемого;
выполнять поставку и отгрузку товара;

размещать товар на складе;

выводить сообщение об освобождении места на стеллаже, если естьсоответствующий товар в «отстойнике»;

выводить отчет по наличию и размещению товаров;

выводить отчет по поставке и отгрузке товара за указанный месяц Приложение должно выводить в виде диаграммы следующие данные (навыбор):

суммарное количество поступавших товаров по месяцам за заданный год;

количество наименований товаров, поступавших по месяцам за заданный год;

суммарную стоимость товаров, поступавших по месяцам за заданный год;

суммарную стоимость товаров по годам за заданный временной период

Перечень решаемых задач:

Обоснование среды разработки.

Отобразить диаграммы вариантов использования или сценарии выполнения основных предикатов.

Выполнить описание физической илогической структуры БД.

В приложении предусмотретьвыполнение указанных в задании действий и вывод указанных в задании диаграмм.

Создать руководство пользователя.

Задание выдал: ______________________ ______________

Задание получил: ____________________ ______________

Содержание

Введение

1. Описание предметной области и определение требований к системе с точки зрения предметной области

1.1 Описание предметной области

1.2 Требования к программной системе с точки зрения предметной области

2. Постановка задачи и обзор методов её решения

2.1 Постановка задачи

2.2 Обзор методов решения задачи

2.2.1 Моделирование предметной области для выявления сущностей, участников, процессов

2.2.2 Проектирование базы данных

2.2.3 Разработка интерфейса пользователей

2.2.4 Разработка серверного приложения

2.2.5 Разработка клиентского приложения

3. Модели представления системы и их описание

4. Информационная модель системы и её описание

Заключение

Список использованных источников

Приложение

Введение

При ведении складского учета на предприятии в современном мире высокое значение приобретает качество учета, скорость и точность передачи информации. При достижении определенных показателей традиционные бумажные и электронные носители не позволяют оперативно выполнять требуемые операции без создания “узких” мест регламентирующих возможный объем прохождения заказов.

В этом случае предприятию требуется единая информационная система (ИС) позволяющая формировать необходимую документацию доступную в текущем режиме всем участникам процесса. В рамках ИС на автоматизированных рабочих местах (АРМ) происходит формирование документов для формирования прихода и отгрузки товара с/на склад, прогнозирование не снижаемого остатка по определенным группам товара, формирование статистической отчетности за истекшие периоды по поставкам и отгрузкам товаров и заказов.

Задачи решаемые в рамках реализации ИС на предприятии:

Снижение человеческого фактора при внесении данных

Реализация учета в текущем режиме

Реализация необходимых статистических отчетов

Возможность заблаговременно выполнять подготовку к отгрузке

Основной целью курсового проекта является разработка программного продукта учитывающего вышесказанное и реализующего данный функционал с возможностью использования данных в других модулях ИС. Программа должна:

Обеспечивать работу множества пользователей в текущем режиме

Реализовывать логику процессов отгрузки и поставки товара

Формировать статистику интенсивности работы пользователей

Обеспечивать отказоустойчивость при ошибочных данных введенных пользователем

Использовать базу данных доступную другим модулям ИС

Для реализации программы будут применены следующие программные продукты:

Среда разработки программыMicrosoftVisualStudio 2013 с применением платформы пользовательского интерфейса для создания приложенийWPF.

Применение обусловлено необходимостью разработки приложения со значительным количеством экранных форм, простотой формирования отражения данных на экранных формах.

Система управления базами данных Microsoft SQL Server 2008 R2.

Применение обусловлено необходимостью использования базы данных совместимой с модулями ИС.

Среда разработки базы данных ErWinDataModeler.

Применение обусловлено необходимостью приведения сущностей предметной области в объекты СУБД SQL Server

Среда моделированияRationalRose 2003

Применение обусловлено необходимостью создания моделей и представлений предметной области для дальнейшего использования при разработке программы.

1. Описание предметной области и определение требований к системе с точки зрения предметной области

1.1 Описание предметной области

Склад продукции является подразделением компании и выполняет приемку, хранение и отгрузку продукции. Хранение продукции происходит на стеллажах согласно категории товара. При отсутствии места на стеллажах товар располагается в отстойниках.

Приемка и отгрузка продукции выполняется кладовщиками на основании заказов формируемых менеджерами торгового отдела.

Работой склада управляет начальник склада. При возникновении необходимости может формировать заказы для отгрузки и поставки товара. Отслеживает минимальные складские остатки по каждому товару.

Менеджеры торгового отдела формируют заказы на отгрузку и поставку товара, отслеживают необходимые минимальные остатки исходя из предстоящих отгрузок, используют статистические отчеты.

1.2 Требования к программной системе с точки зрения предметной области

С точки зрения предметной области система должна разделяться на следующие компоненты:

Учет поступления товаров.

Создание заказа на поставку со списком товаров и количеством.

Корректировку заказа.

Приемку товара с выбором места хранения с учетом категории товара.

Список заказов

Учет отгрузки товара.

Создание заказа на отгрузку товара со списком товара и количеством.

Корректировку заказа.

Отгрузку товара с выбором места хранения товара

Список заказов

Учет мест хранения товара.

Учет распределение товара по местам хранения.

Учет количества товара.

Оповещение при снижении складских остатков ниже критического значения.

Статистические отчеты.

Поставка товара за период

Отгрузка товара за период

Минимальные остатки товара

Администрирование приложения.

Создание новых пользователей

Распределение ролей пользователей

Корректировка существующих пользователей

2. Постановка задачи и обзор методов её решения

2.1 Постановка задачи

Работа по реализации приложения разделена на следующие задачи:

Моделирование предметной области для выявления сущностей, участников, процессов.

Проектирование базы данных на основании п.1

Разработка интерфейса пользователей

Разработка серверного приложения

Разработка клиентского приложения

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

2.2 Обзор методов решения задачи

2.2.1 Моделирование предметной области для выявления сущностей, участников, процессов

Моделирование производится с использованием приложения RationalRose. RationalRose представляет собой CASE средство проектирования и разработки информационных систем и программного обеспечения для управления предприятиями. Как и другие CASE средства (ARIS, BPwin, ERwin) его можно применять для анализа и моделирования бизнес процессов. Первая версия этого продукта была выпущена компанией RationalSoftware . В дальнейшем RationalRose был куплен IBM.

Принципиальное отличие RationalRose от других средств заключается в объектно-ориентированном подходе. Графические модели, создаваемые с помощью этого средства, основаны на объектно-ориентированных принципах и языке UML (UnifiedModelingLanguage). Инструменты моделирования RationalRose позволяют разработчикам создавать целостную архитектуру процессов предприятия, сохраняя все взаимосвязи и управляющие воздействия между различными уровнями иерархии.

RationalRose обеспечивает следующие возможности моделирования бизнес процессов:

Структурное представление элементов. Модели процессов и их элементы могут быть представлены в виде графической структуры, наглядно отображающий их состав и взаимосвязи.

Интеграция моделей. За счет применения единого языка UML, RationalRose позволяет объединить модели бизнес процесса, модели приложений и модели данных.

Интеграция с программными продуктами. Для расширения возможностей моделирования и анализа бизнес процессов в RationalRose реализована возможность интеграции с другими программными продуктами, например, MicrosoftVisualStudio.

2.2.2 Проектирование базы данных

Проектирование базы данных производится с применением приложения ERwinDataModeller. Приложение является одним из CASE средств, позволяющих моделировать бизнес процессы. Он относится к категории I-CASE. ERwin обеспечивает интеграцию моделей верхнего уровня с моделями нижнего уровня. Модели верхнего уровня разрабатываются на начальных стадиях проектирования информационных систем. Модели нижнего уровня разрабатываются на этапе создания программного кода и тестирования.

Основное предназначение ERwindatamodeler это моделирование данных, поэтому с точки зрения моделирования бизнес процессов его применение ограничено. Он позволяет создавать модели данных высокого уровня, выполнять автоматическое преобразование этих моделей в модели низкого уровня, генерировать схемы базы данных и описание данных на уровне программного кода.

В качестве стандартов моделирования в ERwindatamodeler применяются стандарты IDEF1X и IE (InformationEngineering), основанные на диаграммах «сущность-связь». Основные виды моделей бизнес процессов, которые можно создать с помощью ERwindatamodeler это - диаграмма потока данных, модель распределения, модель событие/состояние.

Модели данных, которые создаются помощью ERwindatamodeler, разделяются на две категории:

Логические модели. Эти модели предназначены для представления элементов в терминах бизнес процессов. Для моделирования применяются диаграмма «сущность-связь», K - B модель (модель, основанная на ключах) и FA модель (полностью определенная модель).

Физические модели. Эти модели предназначены для создания базы данных информационной системы. Они обеспечивают перевод понятий бизнес процессов на уровень понятий ИТ. Для моделирования применяются два вида моделей - трансформационная модель и схематичная модель базы данных (DBMS модель).

2.2.3 Разработка интерфейса пользователей

Полный цикл разработки интерфейса включает следующие этапы:

Исследование

Пользовательские сценарии

Структура интерфейса

Прототипирование интерфейса

Оформление всех экранов

На этапе исследования проводится сбор информации о продукте, клиенте, его конкурентах или близких аналогах, сбор статистики использования текущего интерфейса, анализ устройств предполагаемой целевой аудитории.

На основе предоставленного описания работы интерфейса создается список задач (пользовательских сценариев), которые может выполнять пользователь в рамках интерфейса.

Полученный список шагов на предыдущем этапе, ложится в основу структуры интерфейса. Становится известно количество экранов, их краткое содержание и положение в общей структуре.

Выполняется два схематичных прототипа: черновой и финальный. Черновой прототип представляет собой схематичные изображения экранов. При черновом варианте на схемах изображены зоны и описания этих зон.Следующим шагом идет финальный прототип, в котором схемы экранных форм все еще остаются связанными междудруг другом, но на них уже видны все кнопки, тексты, чекбоксы, формы и прочие элементы.

Планом для оформления всех экранов являются структура и схематичный прототип интерфейса. Все оформленные экраны собираются в интерактивный прототип, который создаст максимально приближенный опыт использования интерфейса без прибегания к услугам разработчиков.

2.2.4 Разработка серверного приложения

Серверное приложение должно обладать экранной формой, возможностями конфигурирования параметров настройки подключения к базе данных и параметров подключения клиентских приложений, сохранением и повторным использованием заданных настроек. Статистика работы приложения, включая клиентские подключения и подключения к базе данных, должна выводиться на экранную форму и сохраняться в лог-файле.

При реализации приложения необходимо использование многопоточной архитектуры. Из-за не значительной численности клиентских подключений принятые решения:

Отдельным потоком реализация экранной формы.

Отдельным потоком реализация ожидания подключения клиентских приложений.

Асинхронными задачами реализация обработки каждого нового подключения клиентского приложения.

Использование стандартных библиотек среды VS 2013 для доступа в базу данных.

Для разработки приложения используется среда WPF.

2.2.5 Разработка клиентского приложения

Для разработки приложения был выбран шаблон проектирования архитектуры MVVM (Model-View-ViewModel) для разделения логики приложения и отображения.

Приложение использует только данные принимаемые от сервера, хранения данных на носителях клиентского приложения не предусматривается.

При реализации клиентского приложения принято решение, что каждая экранная форма должна представлять отдельное окно.

При использовании приложения обязателен контроль входа пользователя с определением роли пользователя и доступа.

Для разработки приложения используется среда WPF.

3. Модели представления системы и их описание

Диаграмма сущностей предметной области.

Пользователями приложения являются работники склада (кладовщики и начальник склада) и работники торгового отдела (менеджеры). В рамках приложения основные выполняемые функции представлены ниже.

Диаграмма вариантов использования пользователями при входе в клиентское приложение.

Диаграмма вариантов использования пользователя кладовщик.

Сценарии выполнения.

Наименование варианта использования

Авторизация пользователя.

Актеры

Пользователь.

Цель исполнения

Авторизация пользователя при запуске клиентского приложения для доступа в главную экранную форму.

Краткое описание

Проведение проверки на возможность доступа пользователя в приложение, определение роли пользователя в приложении.

Тип

Базовый.

Начальные условия

Запущен исполняемый файл, на экране отображена экранная форма "Авторизация пользователя"

Типичных ход событий исполнения сценария варианта использования

Действия актеров

Отклик системы

1

Пользователь выбирает из списка доступных логинов необходимый.

2

На экранной форме отображается выбранный логин.

3

Пользователь в поле ввода пароля набирает пароль для доступа в приложение.

4

Выполняется проверка правильности введенного пароля на предмет минимальной длины и наличия запрещенных символов.

5

Пользователь нажимает кнопку "Войти в программу".

6

Выполняется запрос серверному приложению. В запросе выбранный логин и пароль.

7

Получен положительный ответ от серверного приложения. В приложении регистрируется отведенная роль данного пользователя. Закрывается экранная форма "Авторизация пользователя", запускается главная экранная форма клиентского приложения.

Точки ветвления исполнения сценария варианта использования

Точка ветвления №1

Действия актеров

Отклик системы

7

Получен отрицательный ответ от серверного приложения. На экран выводится сообщение о не верно введенном пароле.

Наименование варианта использования

Отгрузка товара.

Актеры

Кладовщик, Начальник склада.

Цель исполнения

Выполнение отгрузки товара со склада по заказу на отгрузку.

Краткое описание

Выполнение отгрузки товара со склада по заказу на отгрузку.

Тип

Базовый.

Начальные условия

Произведен вход в систему и идентификация пользователя. На экране отражается экранная форма "Операции - Отгрузка товара"

Типичных ход событий исполнения сценария варианта использования

Действия актеров

Отклик системы

1

Пользователь выбирает начальную и конечную дату для отображения заказов для отгрузки.

2

Пользователь выбирает по номеру заявку необходимую для отгрузки.

3

Пользователь нажимает кнопку "Открыть заказ"

4

Выполняется запрос серверному приложению о составе заказа.

6

Пользователь выбирает в списке состава заказа товар.

5

Запускается экранная форма "Отгрузка товара" с заполнением полей номер заказа, состояние отгрузки, состав заказа.

8

Пользователь выбирает место хранения товара.

7

В списке выбора мест хранения выбранного товара отображаются все доступные текущие места хранения для данного товара.

10

Пользователь нажимает кнопку "Добавить"

9

В поле количество вносится необходимое для отгрузки товара количество согласно заказа на отгрузку.

12

Пользователем циклично выполняются п.6, 8, 10 до полного распределения всех товаров.

11

В список распределенного товара вносится выбранный товар, количество и выбранное место хранения.

14

Пользователь нажимает кнопку "Отгрузить со склада"

13

Кнопка "Отгрузить со склада" становится активна

15

Кнопка "Отгрузить со склада" становится не активна. Выполняется запрос серверному приложению на уменьшение количества в выбранных местах хранения.

16

Выполняется запрос серверному приложению на изменение заказа с внесением даты отгрузки и логина текущего пользователя клиентского приложения.

18

Пользователь нажимает кнопку "Закрыть"

17

Внесение в поле статуса заказа "Товар успешно отгружен", изменение текста кнопки "Отмена" на текст "Закрыть"

19

Закрывается экранная форма "Отгрузка товара". Выполняется удаление отгруженного заказа из экранной формы "Операции - Отгрузка товара"

Точки ветвления исполнения сценария варианта использования

Точка ветвления №1

Действия актеров

Отклик системы

3

Пользователь дважды кликает на номере заявки для отгрузки.

4

Выполнение аналогично п.4 основного сценария.

Точка ветвления №2

Действия актеров

Отклик системы

10

Выполнение аналогично п.10 основного сценария.

9

В поле количество вносится возможное для отгрузки товара количество согласно выбранного места хранения.

Точка ветвления №3

Действия актеров

Отклик системы

15

Получение от сервера отрицательного ответа

17

Пользователь нажимает кнопку "Закрыть"

16

Внесение в поле статуса заказа "Товар НЕ отгружен", изменение текста кнопки "Отмена" на текст "Закрыть"

19

Закрывается экранная форма "Отгрузка товара".

Точка ветвления №4

Действия актеров

Отклик системы

16

Получение от сервера отрицательного ответа

17

Выполняется запрос серверному приложению на восстановление количества в выбранных местах хранения.

18

Внесение в поле статуса заказа "Товар НЕ отгружен", изменение текста кнопки "Отмена" на текст "Закрыть"

19

Закрывается экранная форма "Отгрузка товара".

Диаграмма активности при выполнении сценария “Авторизация пользователя”.

Диаграмма активности при выполнении сценария “Отгрузка товара”.

4. Информационная модель системы и её описание

В результате бизнес анализа выявлены следующие сущности:

Товар

Заказ для отгрузки

Заказ для поставки

Стеллаж

Отстойник

Отношения между сущностями и атрибуты отражены выше в диаграмме сущностей предметной области.

На основании выявленных атрибутов и связей реализована инфологическая модель информационной системы.

После этапа даталогического проектирования модель преобразована.

Руководство пользователя

Серверное приложение

Для запуска приложения необходим подключенный к сети предприятия или сети Интернет персональный компьютер с ОС MSWindows и СУБД MSSQLServerR2. ВСУБДMSSQLServerR2 должна быть сформирована база данных для использования приложением. Сценарий создания первичной базы данных (с тестовым заполнением значениями) представлен в приложении 1.

После запуска открывается главное окноприложения.Главное окно распределено на три зоны: настройки сервера, статистика текущих подключений, лог файл работы.

Настройки сервера.

Данные настройки позволяют администратору перед запуском сервера выполнить конфигурирование подключения к СУБД MS-SQL, установить необходимый порт для прослушки клиентских подключений, сохранить введенные настройки в файл Server.iniи выполнять запуск или остановку сервера.

Статистика текущих подключений

Данная информационная зона позволяет получать краткую информацию о работе сервера: количество подключенных пользователей, количество обработанных запросов, статус сервера, статус последней проверки подключения в СУБД.

Лог файл работы сервера.

Данная информационная зона позволяет получать развернутую информацию о работе сервера: время и тип запроса, обращения к СУБД, ответы клиентским приложениям, статус выполнения. В данном окне отображаются все события обмена данными между клиентским приложением, серверным приложением и СУБД.

Клиентское приложение

Для запуска приложения необходим подключенный к сети предприятия или сети Интернет персональный компьютер с ОС MSWindows.

После запуска приложения открывается окно авторизации пользователя. В данном окне пользователю необходимо выбрать свой логин и ввести персональный пароль для доступа в приложение.

Пароль не должен содержать специальных символов (знаков препинания, математических символов и т.п.) и должен быть не менее 4 символов. После ввода правильного пароля пользователь получает доступ в основное окно приложения.

В верхней части главного окна находится меню доступа к основным функциям приложения. Краткое описание пунктов меню:

Файл. Осуществляет доступ к служебным функциям - Выход из приложения, Профиль пользователя.

Операции. Осуществляет доступ к рабочим операциям - Отгрузка товара, Приемка товара, Создание заказа для приемки товара, Создание заказа для отгрузки товара.

Отчет. Осуществляет доступ к отчетам - Наличие товара, Размещение товара, Поставка товара за период, Отгрузка товара за период, Минимальные остатки, Заказанный товар.

График. Осуществляет доступ к графикам.

Администратор. Осуществляет доступ к служебным функциям пользователя с правами администрирования.

Профиль пользователя.

Позволяет текущему пользователю изменить пароль доступа в приложение, просмотреть назначенную для него роль в приложении с доступными функциями.

Приемка товара.

В открывшемся окне “Операции - Поступление товара” пользователь должен выбрать диапазон дат для отображения доступных заказов на поставку. При наличии в списке необходимого для приемки товара пользователь выбирает заказ, нажимает кнопку открыть заказ или дважды кликает на заказе в списке.

После выбора заказа пользователю открывается окно ”Поступление товара”. Данное окно предназначено для распределения товаров находящихся в заказе по местам хранения в зависимости от свободного места и категории товара.

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

В зависимости от выбранного товара в списке доступных мест хранения (центральная часть окна) пользователь выбирает необходимое для хранения место. Отражаемые места определяются категорией товара.

После выбора места хранения в поле количество по умолчанию вносится необходимое для распределения количество, при недостатке места на выбранном стеллаже вносится количество возможное для размещения.

После выполнения всех корректировок пользователь нажимает кнопку добавить. Выбранный товар переносится в список распределенного товара (правая часть экрана), при этом происходит уменьшение необходимого для распределения товара.

Выше перечисленные действия выполняются до полного завершения распределения всех необходимых для приемки товаров, после чего становится активной кнопка “Принять заказ на склад”.

При нажатии кнопки “Принять заказ на склад” выполняется обработка информации и, при успешном завершении, в поле состояние заказа вносится запись “Товар успешно принят на склад”, выбранному заказу присваивается текущая дата приемки и логин принявшего сотрудника.

После закрытия данного окна принятая заявка убирается из списка доступных для приемки.

Отгрузка товара.

В открывшемся окне “Операции - Отгрузка товара” и последующем окне “Отгрузка товара” последовательность действий пользователей аналогична разделу “Приемка товара”. Отличием является только список заявок - отражаются заявки для отгрузки.

Создание заказа для приемки товара.

В открывшемся окне “Операции - Заказ для приемки на склад” пользователь из доступных товаров выбирает необходимые для внесения в список заказа. Добавление возможно только при выборе товара и указании количества. программный приложение интерфейс информационный

После внесения всех необходимых для заказа товаров пользователь нажимает кнопку “Оформить заказ”. При успешном выполнении операции заказу присваивается номер и в поле состояния вносится запись “Заказ успешно внесен”.

После закрытия данного окна внесенный заказ будет доступен для использования другими пользователями.

Создание заказа для отгрузки товара.

В открывшемся окне “Операции - Заказ для отгрузки со склада” действия пользователя аналогичны разделу “ Операции - Заказ для приемки на склад ”.Отличием является только список заявок - отражаются заявки для отгрузки.

Отчет наличие товара.

Отчет отражает текущее наличие товара на складе без разделения по местам хранения.

Отчет размещение товара.

Отчет отражает текущее наличие товара на складе с разделением по местам хранения.

Отчет поставка товара.

Отчет отражает принятые на склад товары по заказам за отчетный период выбранный пользователем.

Отчет отгрузка товара.

Отчет отражает отгруженные со склада товары по заказам за отчетный период выбранный пользователем.

Отчет минимальные остатки товара.

Отчет отражает информацию о принятых минимальных остатках товара и текущим количеством на складе. При снижении остатка товара менее принятого минимального запаса выводится сообщение о необходимости выполнить заказ.

Справка. О программе.

Выводит информацию о приложении.

Администратор. Добавление нового пользователя.

Открывшееся окно позволяет добавить в систему нового пользователя. Для регистрации пользователя необходимо ввести новый логин, пароль и назначить роль пользователя.

После внесения всех данных нового пользователя становится активна кнопка “Подтвердить”.

Администратор. Изменение прав доступа пользователя.

Открывшееся окно позволяет выполнить редактирование существующего пользователя в части пароля и роли. Для этого необходимо выбрать из списка доступных пользователей, произвести корректировку и нажать кнопку “Подтвердить”

Заключение

При работе над курсовым проектом была разработана программа для ведения складского учёта. Программа поможет облегчить ведение учёта заказов и товаров, а также даст возможность получения отчётов разных видов по заказам. Программа рассчитана для использования специалистами по работе с клиентами и работниками складов.

В ходе выполнения курсовой работы были применены знания полученные при изучении курса “Средства визуального программирования приложений”.

В проекте использованы наиболее актуальные и современные технологии и методологии, применяемые при разработке современных программных продуктов основанных на принципах ООП.

Список использованных источников

1. Э.Троелсен, Ф.Джепикс: Язык программирования C# 7 и платформы .NET и .NET Core.

Приложение

Листинги запросов СУБД

Запрос на создание базы данных.

USE master;

GO

IF DB_ID('СкладКП') is not null DROP DATABASE СкладКП;

CREATE DATABASE СкладКП

ON(

NAME = СкладКП_dat,

FILENAME = 'E:\Миша\БГУИР\3 сессия\СВПП\КП\СкладБД\СкладКП.mdf',

SIZE = 10,

MAXSIZE = UNLIMITED,

FILEGROWTH = 5)

LOG ON(

NAME = СкладКП_log,

FILENAME = 'E:\Миша\БГУИР\3 сессия\СВПП\КП\СкладБД\СкладКП.ldf',

SIZE = 10,

MAXSIZE = UNLIMITED,

FILEGROWTH = 10);

GO

USE СкладКП;

GO

CREATE TABLE ТОВАР(

ID_ТоварintIDENTITY(1,1) not null PRIMARY KEY,

Название varchar(50) notnull,

Минимум intnotnull,--Минимальный остаток

Категорияvarchar(50) not null)

CREATE TABLE СТЕЛЛАЖ(

ID_СтеллажintIDENTITY(1,1) not null PRIMARY KEY,

Емкостьint not null,

Категорияvarchar(50) not null)

CREATE TABLE ТОВАР_НА_СТЕЛЛАЖ(

ID_ТнСintIDENTITY(1,1) not null PRIMARY KEY,

ID_Стеллажint not null FOREIGN KEY REFERENCES СТЕЛЛАЖ,

ID_Товарint not null FOREIGN KEY REFERENCES ТОВАР,

Количествоint not null)

CREATE TABLE ОТСТОЙНИК(

ID_ОтстойникintIDENTITY(1,1) not null PRIMARY KEY,

Емкостьint not null)

CREATE TABLE ТОВАР_В_ОТСТОЙНИКЕ(

ID_ТвОintIDENTITY(1,1) not null PRIMARY KEY,

ID_Отстойникint not null FOREIGN KEY REFERENCES ОТСТОЙНИК,

ID_Товарint not null FOREIGN KEY REFERENCES ТОВАР,

Количествоint not null)

CREATE TABLE ЗАКАЗ(

ID_ЗаказintIDENTITY(1,1) not null PRIMARY KEY,

ДатаЗаказ date not null,

ДатаПриемка date null,

ФИО_Менеджерvarchar(50) not null,

ФИО_Складvarchar(50) null)

CREATE TABLE ЗАКАЗАНО_ТОВАР(

ID_ЗТintIDENTITY(1,1) not null PRIMARY KEY,

ID_Заказint not null FOREIGN KEY REFERENCES ЗАКАЗ,

ID_Товарint not null FOREIGN KEY REFERENCES ТОВАР,

Количествоint not null)

CREATE TABLE ОТГРУЗКА(

ID_ОтгрузкаintIDENTITY(1,1) not null PRIMARY KEY,

ДатаЗаказ date not null,

ДатаОтгрузка date null,

ФИО_Менеджерvarchar(50) not null,

ФИО_Складvarchar(50) null)

CREATE TABLE ОТГРУЖЕНО_ТОВАР(

ID_ОТintIDENTITY(1,1) not null PRIMARY KEY,

ID_Отгрузкаint not null FOREIGN KEY REFERENCES ОТГРУЗКА,

ID_Товарint not null FOREIGN KEY REFERENCES ТОВАР,

Количествоint not null)

ALTER TABLE ТОВАР ADD CONSTRAINT Огран_Категория_ТОВАР CHECK (Категория IN ('А','Б','В'));

ALTER TABLE СТЕЛЛАЖ ADD CONSTRAINT Огран_Категория_СТЕЛЛАЖ CHECK (Категория IN ('А','Б','В'));

GO

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'А', 2000, 'Картошка'--8600=3000+3000+2600*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'В', 100, 'Брюква'--780=780*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'Б', 200, 'Тыква'--1300=1300*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'Б', 200, 'Капуста'--595=595*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'Б', 200, 'Кабачок'--655=105+550*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'В', 100, 'Малина'--300=220+80*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'В', 100, 'Клубника'--570=570*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'В', 100, 'Черешня'--650=350+300*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'А', 1000, 'Кукуруза'--3450=400+3000+50*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'А', 1500, 'Пшеница'--4500=1950+2550*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'А', 1000, 'Овес'--4750=4750*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'Б', 400, 'Огурец'--1950=1450+500*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'В', 400, 'Помидор'--1200=700+500*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'А', 500, 'Яблоки'--1890=250+1640*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'А', 500, 'Груши'--2200=2200*

INSERT INTO ТОВАР (Категория, Минимум, Название)

SELECT 'В', 100, 'Вишня'--0*

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 3000, 'А'--+

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 3000, 'А'--+

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 3000, 'А'--+

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 3000, 'А'--+

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 2000, 'А'--+

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 2000, 'Б'--1300+595+105

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 2000, 'Б'--550+1450

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 1000, 'Б'--500

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 1000, 'Б'

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 1000, 'В'--780+220

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 1000, 'В'--80+570+350

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 1000, 'В'--300+700

INSERT INTO СТЕЛЛАЖ (Емкость, Категория)

SELECT 1000, 'В'--500

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 1, 1, 3000

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 2, 1, 3000

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 3, 1, 2600

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 3, 9, 400

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 4, 9, 3000

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 5, 9, 50

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 5, 10, 1950

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 6, 3, 1300

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 6, 4, 595

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 6, 5, 105

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 7, 5, 550

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 7, 12, 1450

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 8, 12, 500

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 10, 2, 780

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 10, 6, 220

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 11, 6, 80

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 11, 7, 570

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 11, 8, 350

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 12, 8, 300

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 12, 13, 700

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 13, 13, 500

INSERT INTO ОТСТОЙНИК (Емкость) SELECT 5000--2550+1640

INSERT INTO ОТСТОЙНИК (Емкость) SELECT 5000--4750+250*

INSERT INTO ОТСТОЙНИК (Емкость) SELECT 5000--2200

INSERT INTO ОТСТОЙНИК (Емкость) SELECT 5000--0

INSERT INTO ОТСТОЙНИК (Емкость) SELECT 5000--0

INSERT INTO ТОВАР_В_ОТСТОЙНИКЕ (ID_Отстойник, ID_Товар, Количество)

SELECT 1, 10, 2550

INSERT INTO ТОВАР_В_ОТСТОЙНИКЕ (ID_Отстойник, ID_Товар, Количество)

SELECT 2, 11, 4750

INSERT INTO ТОВАР_В_ОТСТОЙНИКЕ (ID_Отстойник, ID_Товар, Количество)

SELECT 2, 14, 250

INSERT INTO ТОВАР_В_ОТСТОЙНИКЕ (ID_Отстойник, ID_Товар, Количество)

SELECT 1, 14, 1640

INSERT INTO ТОВАР_В_ОТСТОЙНИКЕ (ID_Отстойник, ID_Товар, Количество)

SELECT 3, 15, 2200

DECLARE @I integer, @J integer, @Ранд integer, @Ранд2 integer

DECLARE @ДатаРанд Date, @ДатаРанд2 Date

DECLARE @Менеджvarchar(50)

SET @I = 1

WHILE (@I< 60)

BEGIN

SET @J = 1

SET @Ранд = (SELECT CAST((RAND()*12) as integer));

IF @Ранд = 0 BEGIN SET @ДатаРанд = '01.01.2019'; SET @ДатаРанд2 = '10.01.2019'; END;

IF @Ранд = 1 BEGIN SET @ДатаРанд = '01.01.2019'; SET @ДатаРанд2 = '15.01.2019'; END;

IF @Ранд = 2 BEGIN SET @ДатаРанд = '01.02.2019'; SET @ДатаРанд2 = '15.02.2019'; END;

IF @Ранд = 3 BEGIN SET @ДатаРанд = '01.03.2019'; SET @ДатаРанд2 = '15.03.2019'; END;

IF @Ранд = 4 BEGIN SET @ДатаРанд = '01.04.2019'; SET @ДатаРанд2 = '15.04.2019'; END;

IF @Ранд = 5 BEGIN SET @ДатаРанд = '01.05.2019'; SET @ДатаРанд2 = '15.05.2019'; END;

IF @Ранд = 6 BEGIN SET @ДатаРанд = '01.06.2019'; SET @ДатаРанд2 = null; END;

IF @Ранд = 7 BEGIN SET @ДатаРанд = '01.07.2018'; SET @ДатаРанд2 = '15.07.2018'; END;

IF @Ранд = 8 BEGIN SET @ДатаРанд = '01.08.2018'; SET @ДатаРанд2 = '15.08.2018'; END;

IF @Ранд = 9 BEGIN SET @ДатаРанд = '01.09.2018'; SET @ДатаРанд2 = '15.09.2018'; END;

IF @Ранд = 10 BEGIN SET @ДатаРанд = '01.10.2018'; SET @ДатаРанд2 = '15.10.2018'; END;

IF @Ранд = 11 BEGIN SET @ДатаРанд = '01.11.2018'; SET @ДатаРанд2 = '15.11.2018'; END;

IF @Ранд = 12 BEGIN SET @ДатаРанд = '01.12.2018'; SET @ДатаРанд2 = '15.12.2018'; END;

SET @Ранд = (SELECT CAST((RAND()*3) as integer));

IF @Ранд = 0 SET @Менедж = 'ИвановА.П.';

IF @Ранд = 1 SET @Менедж = 'СидоровС.В.';

IF @Ранд = 2 SET @Менедж = 'СеменовЛ.С.';

IF @Ранд = 3 SET @Менедж = 'КузнецовП.К.';

if @ДатаРанд2 is not null

INSERT INTO ОТГРУЗКА (ДатаЗаказ, ДатаОтгрузка, ФИО_Менеджер, ФИО_Склад)

SELECT @ДатаРанд, @ДатаРанд2, @Менедж, 'ПупкинИ.И.';

ELSE

INSERT INTO ОТГРУЗКА (ДатаЗаказ, ДатаОтгрузка, ФИО_Менеджер, ФИО_Склад)

SELECT @ДатаРанд, @ДатаРанд2, @Менедж, null;

WHILE (@J < 8)

BEGIN

SET @Ранд = (SELECT CAST((RAND()*15) as integer));

IF @Ранд = 0 SET @Ранд = 1;

SET @Ранд2 = (SELECT CAST((RAND()*15) as integer));

IF @Ранд2 = 0 SET @Ранд2 = 1;

SET @Ранд2 = @Ранд2 * 100;

INSERT INTO ОТГРУЖЕНО_ТОВАР (ID_Отгрузка, ID_Товар, Количество)

SELECT @I, @Ранд, @Ранд2;

SET @J = @J + 1;

END

SET @I = @I + 1;

END

SET @I = 1

WHILE (@I< 90)

BEGIN

SET @J = 1

SET @Ранд = (SELECT CAST((RAND()*12) as integer));

IF @Ранд = 0 BEGIN SET @ДатаРанд = '01.01.2019'; SET @ДатаРанд2 = '15.01.2019'; END;

IF @Ранд = 1 BEGIN SET @ДатаРанд = '01.01.2019'; SET @ДатаРанд2 = '15.01.2019'; END;

IF @Ранд = 2 BEGIN SET @ДатаРанд = '01.02.2019'; SET @ДатаРанд2 = '15.02.2019'; END;

IF @Ранд = 3 BEGIN SET @ДатаРанд = '01.03.2019'; SET @ДатаРанд2 = '15.03.2019'; END;

IF @Ранд = 4 BEGIN SET @ДатаРанд = '01.04.2019'; SET @ДатаРанд2 = '15.04.2019'; END;

IF @Ранд = 5 BEGIN SET @ДатаРанд = '01.05.2019'; SET @ДатаРанд2 = '15.05.2019'; END;

IF @Ранд = 6 BEGIN SET @ДатаРанд = '01.06.2019'; SET @ДатаРанд2 = '15.06.2019'; END;

IF @Ранд = 7 BEGIN SET @ДатаРанд = '01.07.2019'; SET @ДатаРанд2 = '15.07.2019'; END;

IF @Ранд = 8 BEGIN SET @ДатаРанд = '01.08.2019'; SET @ДатаРанд2 = '15.08.2019'; END;

IF @Ранд = 9 BEGIN SET @ДатаРанд = '01.09.2019'; SET @ДатаРанд2 = '15.09.2019'; END;

IF @Ранд = 10 BEGIN SET @ДатаРанд = '01.10.2019'; SET @ДатаРанд2 = '15.10.2019'; END;

IF @Ранд = 11 BEGIN SET @ДатаРанд = '01.11.2019'; SET @ДатаРанд2 = '15.11.2019'; END;

IF @Ранд = 12 BEGIN SET @ДатаРанд = '01.12.2019'; SET @ДатаРанд2 = '15.12.2019'; END;

SET @Ранд = (SELECT CAST((RAND()*3) as integer));

IF @Ранд = 0 SET @Менедж = 'ИвановА.П.';

IF @Ранд = 1 SET @Менедж = 'СидоровС.В.';

IF @Ранд = 2 SET @Менедж = 'СеменовЛ.С.';

IF @Ранд = 3 SET @Менедж = 'КузнецовП.К.';

INSERT INTO ЗАКАЗ (ДатаЗаказ, ДатаПриемка, ФИО_Менеджер, ФИО_Склад)

SELECT @ДатаРанд, @ДатаРанд2, @Менедж, 'ПупкинИ.И.';

WHILE (@J < 8)

BEGIN

SET @Ранд = (SELECT CAST((RAND()*15) as integer));

IF @Ранд = 0 SET @Ранд = 1;

SET @Ранд2 = (SELECT CAST((RAND()*15) as integer));

IF @Ранд2 = 0 SET @Ранд2 = 1;

SET @Ранд2 = @Ранд2 * 100;

INSERT INTO ЗАКАЗАНО_ТОВАР (ID_Заказ, ID_Товар, Количество)

SELECT @I, @Ранд, @Ранд2;

SET @J = @J + 1;

END

SET @I = @I + 1;

END

WHILE (@I< 100)

BEGIN

SET @J = 1

SET @Ранд = (SELECT CAST((RAND()*4) as integer));

IF @Ранд = 0 SET @ДатаРанд = '10.05.2019';

IF @Ранд = 1 SET @ДатаРанд = '20.05.2019';

IF @Ранд = 2 SET @ДатаРанд = '10.06.2019';

IF @Ранд = 3 SET @ДатаРанд = '20.06.2019';

SET @Ранд = (SELECT CAST((RAND()*3) as integer));

IF @Ранд = 0 SET @Менедж = 'ИвановА.П.';

IF @Ранд = 1 SET @Менедж = 'СидоровС.В.';

IF @Ранд = 2 SET @Менедж = 'СеменовЛ.С.';

IF @Ранд = 3 SET @Менедж = 'КузнецовП.К.';

INSERT INTO ЗАКАЗ (ДатаЗаказ, ДатаПриемка, ФИО_Менеджер, ФИО_Склад)

SELECT @ДатаРанд, null, @Менедж, null;

WHILE (@J < 8)

BEGIN

SET @Ранд = (SELECT CAST((RAND()*15) as integer));

IF @Ранд = 0 SET @Ранд = 1;

SET @Ранд2 = (SELECT CAST((RAND()*15) as integer));

IF @Ранд2 = 0 SET @Ранд2 = 1;

SET @Ранд2 = @Ранд2 * 100;

INSERT INTO ЗАКАЗАНО_ТОВАР (ID_Заказ, ID_Товар, Количество)

SELECT @I, @Ранд, @Ранд2;

SET @J = @J + 1;

END

SET @I = @I + 1;

END

GO

USE СкладКП

GO

CREATE TABLE ПОЛЬЗОВАТЕЛИ(

ID_ПользовательintIDENTITY(1,1) not null PRIMARY KEY,

ФИОvarchar(50) not null,

Парольvarchar(50) not null,

Админ intnotnull,--0 нет, 1 да

Склад intnotnull,--0 нет, 1 кладовщик, 2 завскладом

Менеджер intnotnull)--0 нет, 1 менеджер, 2 начальник

INSERT INTO ПОЛЬЗОВАТЕЛИ (ФИО, Пароль, Админ, Склад, Менеджер)

SELECT 'Админ', 'Админ', 1, 0, 0--админ по умолчанию

UNION

SELECT 'ПупкинИ.И.', '1111', 0, 1, 0 --кладовщик

UNION

SELECT 'ПетровП.П.', '2222', 0, 2, 0 --завскладом

UNION

SELECT 'Иванов А.П.', '3333', 0, 0, 1 -менеджер

Запросысерверногоприложения.

--Запрос 1.TypeOfRequest = 05?NameProduct?Catecory?Count?Place?

--Запрос остатка по всем товарам по всем местам хранения

SELECT ТОВАР.Название, ТОВАР.Категория, SUM(ТОВАР_НА_СТЕЛЛАЖ.Количество)as 'Количество', 'Стеллаж' as 'Расположение'

FROM ТОВАР innerjoin ТОВАР_НА_СТЕЛЛАЖ onТОВАР.ID_Товар = ТОВАР_НА_СТЕЛЛАЖ.ID_Товар

GROUP BY ТОВАР.Название, ТОВАР.Категория

UNION

SELECT ТОВАР.Название, ТОВАР.Категория, SUM(ТОВАР_В_ОТСТОЙНИКЕ.Количество)as 'Количество', 'Отстойник' as 'Распол'

FROM ТОВАР innerjoin ТОВАР_В_ОТСТОЙНИКЕ onТОВАР.ID_Товар = ТОВАР_В_ОТСТОЙНИКЕ.ID_Товар

GROUP BY ТОВАР.Название, ТОВАР.Категория

--Запрос 2.TypeOfRequest = 06?NameProduct?Catecory?Count?Place?Id_TvO?

--Запрос размещения товара по всем товарам по всем местам хранения

SELECT ТОВАР.Название, ТОВАР.Категория, ТОВАР_НА_СТЕЛЛАЖ.Количество, 'Стеллаж №' + CAST(ТОВАР_НА_СТЕЛЛАЖ.ID_Стеллажasvarchar) as 'Расположение', ТОВАР_НА_СТЕЛЛАЖ.ID_ТнС

FROM ТОВАР innerjoin ТОВАР_НА_СТЕЛЛАЖ onТОВАР.ID_Товар = ТОВАР_НА_СТЕЛЛАЖ.ID_Товар

UNION

SELECT ТОВАР.Название, ТОВАР.Категория, ТОВАР_В_ОТСТОЙНИКЕ.Количество, 'Отстойник №' + CAST(ТОВАР_В_ОТСТОЙНИКЕ.ID_Отстойникasvarchar) as 'Расположение', ТОВАР_В_ОТСТОЙНИКЕ.ID_ТвО

FROM ТОВАР innerjoin ТОВАР_В_ОТСТОЙНИКЕ onТОВАР.ID_Товар = ТОВАР_В_ОТСТОЙНИКЕ.ID_Товар

--Запрос 3.TypeOfRequest = 08?IdOrderOut?DateOrderOut?NameProduct?Count?NameManager?DateDeployOut?NameSklad?

--Запрос отгрузка товара по всем товарам

SELECT Temp.ID_Отгрузка, ОТГРУЗКА.ДатаЗаказ, Temp.Название, Temp.Количество, ОТГРУЗКА.ФИО_Менеджер, ОТГРУЗКА.ДатаОтгрузка, ОТГРУЗКА.ФИО_Склад

FROM ОТГРУЗКА innerjoin (SELECT ОТГРУЖЕНО_ТОВАР.ID_Отгрузка, ТОВАР.Название, ОТГРУЖЕНО_ТОВАР.Количество

FROM ОТГРУЖЕНО_ТОВАР innerjoin ТОВАР onОТГРУЖЕНО_ТОВАР.ID_Товар = ТОВАР.ID_Товар) asTemponTemp.ID_Отгрузка = ОТГРУЗКА.ID_Отгрузка

WHERE (ОТГРУЗКА.ДатаОтгрузкаisnotnull) AND (ОТГРУЗКА.ДатаОтгрузка> '01.09.2018') AND (ОТГРУЗКА.ДатаОтгрузка< '01.10.2018')

--Запрос 4.TypeOfRequest = 07?IdOrderIn?DateOrderIn?NameProduct?Count?NameManager?DateDeployIn?NameSklad?

--Запрос приход товара по всем товарам

SELECT Temp.ID_Заказ, ЗАКАЗ.ДатаЗаказ, Temp.Название, Temp.Количество, ЗАКАЗ.ФИО_Менеджер, ЗАКАЗ.ДатаПриемка, ЗАКАЗ.ФИО_Склад

FROM ЗАКАЗ innerjoin (SELECT ЗАКАЗАНО_ТОВАР.ID_Заказ, ТОВАР.Название, ЗАКАЗАНО_ТОВАР.Количество

FROM ЗАКАЗАНО_ТОВАР innerjoin ТОВАР onЗАКАЗАНО_ТОВАР.ID_Товар = ТОВАР.ID_Товар) asTemponTemp.ID_Заказ = ЗАКАЗ.ID_Заказ

WHERE (ЗАКАЗ.ДатаПриемкаisnotnull) AND (ЗАКАЗ.ДатаПриемка> '01.02.2019') AND (ЗАКАЗ.ДатаПриемка< '01.03.2019')

--Запрос 5.TypeOfRequest = 09?NameProduct?Count?MinCount?

--Запрос минимальных остатков

SELECT ТОВАР.Название, SUM(Temp.Количество) as 'Количество', ТОВАР.Минимум

FROM ТОВАР fulljoin (SELECT ТОВАР.Название, SUM(ТОВАР_НА_СТЕЛЛАЖ.Количество)as 'Количество'

FROM ТОВАР fulljoin ТОВАР_НА_СТЕЛЛАЖ onТОВАР.ID_Товар = ТОВАР_НА_СТЕЛЛАЖ.ID_Товар

GROUP BY ТОВАР.Название

UNION

SELECT ТОВАР.Название, SUM(ТОВАР_В_ОТСТОЙНИКЕ.Количество)as 'Количество'

FROM ТОВАР fulljoin ТОВАР_В_ОТСТОЙНИКЕ onТОВАР.ID_Товар = ТОВАР_В_ОТСТОЙНИКЕ.ID_Товар

GROUP BY ТОВАР.Название) asTemponТОВАР.Название = Temp.Название

GROUP BY ТОВАР.Название, ТОВАР.Минимум

--Запрос 6. TypeOfRequest = 10?NameProduct?

--Запрос список доступных товаров

SELECT ТОВАР.Название

FROM ТОВАР

--Запрос .TypeOfRequest = 11?NameProduct?Count?DateZakaz?NameManager?

--Запрос списка заказов

INSERT INTO ЗАКАЗ (ДатаЗаказ, ФИО_Менеджер)

SELECT '02.07.2019', 'Иванов А.П.';

GO

INSERT INTO ЗАКАЗАНО_ТОВАР (ID_Заказ, ID_Товар, Количество)

SELECT

(SELECT ЗАКАЗ.ID_Заказ

FROM ЗАКАЗ

WHERE (ЗАКАЗ.ФИО_Менеджер = 'Иванов А.П.') AND (ДатаЗаказ = '02.07.2019')),

(SELECT ТОВАР.ID_Товар

FROM ТОВАР

WHERE ТОВАР.Название = 'Малина'),

500

--// TypeOfRequest = 13?IdOrderIn?DateOrderIn?NameProduct?Count?NameManager?Category?

--Запрос списка товара в заказе

SELECT ЗАКАЗ.ID_Заказ, ЗАКАЗ.ДатаЗаказ, Temp.Название, Temp.Количество, ЗАКАЗ.ФИО_Менеджер, Temp.Категория

FROM ЗАКАЗ innerjoin (SELECT ЗАКАЗАНО_ТОВАР.ID_Заказ, ТОВАР.Название, ЗАКАЗАНО_ТОВАР.Количество, ТОВАР.Категория

FROM ЗАКАЗАНО_ТОВАР innerjoin ТОВАР onЗАКАЗАНО_ТОВАР.ID_Товар = ТОВАР.ID_Товар) asTemponTemp.ID_Заказ = ЗАКАЗ.ID_Заказ

WHEREЗАКАЗ.ID_Заказ = 100

--//TypeOfRequest = 14?NumberZakaz?NameUserSklad?DateIn?

--Запрос обновления статуса заказа

UPDATE ЗАКАЗ

SET ЗАКАЗ.ДатаПриемка = '06.07.2019', ЗАКАЗ.ФИО_Склад = 'Админ'

WHEREЗАКАЗ.ID_Заказ = 100

--//TypeOfRequest = 15?Otstoinik?

--Запросдоступногоместавотстойниках

SELECT SUM(Temp2.Всего) as 'Всего', Temp2.Емкость, Temp2.ID_Отстойник, 0 as 'Категория'

FROM (SELECT Temp.Всего as 'Всего', ОТСТОЙНИК.Емкость, Temp.ID_Отстойник

FROM ОТСТОЙНИК inner join (SELECT ТОВАР.Категория, SUM(ТОВАР_В_ОТСТОЙНИКЕ.Количество) as 'Всего', ТОВАР_В_ОТСТОЙНИКЕ.ID_Отстойник

FROM ТОВАР innerjoin ТОВАР_В_ОТСТОЙНИКЕ onТОВАР.ID_Товар = ТОВАР_В_ОТСТОЙНИКЕ.ID_Товар

GROUP BY ТОВАР.Категория, ТОВАР_В_ОТСТОЙНИКЕ.ID_Отстойник) asTemp

onОТСТОЙНИК.ID_Отстойник = Temp.ID_Отстойник

UNION

SELECT 0, ОТСТОЙНИК.Емкость, ОТСТОЙНИК.ID_Отстойник

FROM ОТСТОЙНИК) as Temp2

GROUP BY Temp2.Емкость, Temp2.ID_Отстойник

--//TypeOfRequest = 15?Stellage?

--Запрос доступного места на стеллажах

SELECT SUM(Temp2.Всего) as 'Всего', Temp2.Емкость, Temp2.ID_Стеллаж, Temp2.Категория

FROM (SELECT Temp.Всегоas 'Всего', СТЕЛЛАЖ.Емкость, Temp.ID_Стеллаж, СТЕЛЛАЖ.Категория

FROM СТЕЛЛАЖ innerjoin (SELECT ТОВАР.Категория, SUM(ТОВАР_НА_СТЕЛЛАЖ.Количество) as 'Всего', ТОВАР_НА_СТЕЛЛАЖ.ID_Стеллаж

FROM ТОВАР innerjoin ТОВАР_НА_СТЕЛЛАЖ onТОВАР.ID_Товар = ТОВАР_НА_СТЕЛЛАЖ.ID_Товар

GROUP BY ТОВАР.Категория, ТОВАР_НА_СТЕЛЛАЖ.ID_Стеллаж) asTemp

onСТЕЛЛАЖ.ID_Стеллаж = Temp.ID_Стеллаж

UNION

SELECT 0, СТЕЛЛАЖ.Емкость, СТЕЛЛАЖ.ID_Стеллаж, СТЕЛЛАЖ.Категория

FROM СТЕЛЛАЖ) as Temp2

GROUP BY Temp2.Емкость, Temp2.ID_Стеллаж, Temp2.Категория

--//TypeOfRequest = 16?NameProduct?Count?TypeSklad?IdSklad?Type?

-- Type = 0

INSERT INTO ТОВАР_НА_СТЕЛЛАЖ (ID_Стеллаж, ID_Товар, Количество)

SELECT 1,(SELECT ТОВАР.ID_Товар

FROM ТОВАР

WHERE ТОВАР.Название = 'Малина'), 200

--//TypeOfRequest = 16?NameProduct?Count?TypeSklad?IdSklad?Type?Id_TvO_TvS?

-- Type = 1

UPDATE ТОВАР_В_ОТСТОЙНИКЕ

SET ТОВАР_В_ОТСТОЙНИКЕ.Количество = (SELECT ТОВАР_В_ОТСТОЙНИКЕ.Количество

FROM ТОВАР_В_ОТСТОЙНИКЕ

WHERE ТОВАР_В_ОТСТОЙНИКЕ.ID_ТвО = Id_TvO_TvS) - Count

WHERE ТОВАР_В_ОТСТОЙНИКЕ.ID_ТвО = Id_TvO_TvS

--***** ТРИГГЕРЫ *****

--Триггер удаления нулевых строк в таблице ТОВАР_В_ОТСТОЙНИКЕ

GO

CREATE TRIGGER ИзменениеКоличестваОтстойник ON ТОВАР_В_ОТСТОЙНИКЕ AFTER UPDATE

AS

DECLARE @ID integer, @Count integer

SELECT @ID = ID_ТвО, @Count = Количество

FROM INSERTED

IF (@Count <= 0)

BEGIN

DELETE FROM ТОВАР_В_ОТСТОЙНИКЕ

WHERE ТОВАР_В_ОТСТОЙНИКЕ.ID_ТвО = @ID

END

--Триггер удаления нулевых строк в таблице ТОВАР_НА_СТЕЛЛАЖ

GO

CREATE TRIGGER ИзменениеКоличестваСтеллаж ON ТОВАР_НА_СТЕЛЛАЖ AFTER UPDATE

AS

DECLARE @ID integer, @Count integer

SELECT @ID = ID_ТнС, @Count = Количество

FROM INSERTED

IF (@Count <= 0)

BEGIN

DELETE FROM ТОВАР_НА_СТЕЛЛАЖ

WHERE ТОВАР_НА_СТЕЛЛАЖ.ID_ТнС = @ID

END

GO

Листинги методов среды WPF

В приложении отражена часть листингов серверного приложения.

//Запусксервера

private void StartServerExecute(object sender, ExecutedRoutedEventArgs e)

{

if (ServerData.StatusServer != "Запущен")

{

this.Dispatcher.Invoke(new NewEvent((Event) =>LogEventServer.Add(Event)), Log("Стартработысервера", true));

//ПроверкадоступностиБДСкладКП

DataBaseAccessEvent(null, null);

// Устанавливаем для сокета локальную конечную точку

IPHostEntryipHost = Dns.GetHostEntry(ServerData.ServerIP);

IPAddressipAddr = ipHost.AddressList[0];

IPEndPointipEndPoint = new IPEndPoint(ipAddr, ServerData.ServerPort);

// СоздаемсокетTcp/Ip

sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

try

{

// Назначаем сокет локальной конечной точке

sListener.Bind(ipEndPoint);

sListener.Listen(3);

this.Dispatcher.Invoke(new NewEvent((Event) =>LogEventServer.Add(Event)), Log("Созданиесокетапрослушкиподключений", true));

//Потокдляпрослушкиновыхподключений

ThreadSocket = new Thread(new ParameterizedThreadStart(RequestCycle));

ThreadSocket.Start(sListener);

//Запуск таймера для регулярной проверки доступности БД

TimerDataBase = new DispatcherTimer();

TimerDataBase.Tick += new EventHandler(DataBaseAccessEvent);

TimerDataBase.Interval = new TimeSpan(0, 0, 1, 0, 0);

TimerDataBase.Start();

this.Dispatcher.Invoke(new NewEvent((Event) =>LogEventServer.Add(Event)), Log("ЗапусктаймерапроверкидоступностиБД", true));

//Отображениенаинформациинаэкране

TextBlockServerStatus.Foreground = new SolidColorBrush(Colors.Green);

ServerData.StatusServer = "Запущен";

ButtonStartStop.Content = "Остановитьсервер";

}

catch (Exception ex)

{

sListener.Close();

sListener = null;

TextBlockServerStatus.Foreground = new SolidColorBrush(Colors.Red);

ServerData.StatusServer = "Остановлен";

ButtonStartStop.Content = "Запуститьсервер";

this.Dispatcher.Invoke(new NewEvent((Event) =>LogEventServer.Add(Event)), Log("Созданиесокетапрослушкиподключений", false));

}

}

else

{

try

{

sListener.Close();

sListener = null;

ThreadSocket.Abort();

ThreadSocket.Join();

TimerDataBase.Stop();

this.Dispatcher.Invoke(new NewEvent((Event) =>LogEventServer.Add(Event)), Log("Остановкаработысервера", true));

}

catch (Exception ex)

{

sListener.Close();

sListener = null;

this.Dispatcher.Invoke(new NewEvent((Event) =>LogEventServer.Add(Event)), Log("Остановкаработысервера", false));

}

TextBlockServerStatus.Foreground = new SolidColorBrush(Colors.Red);

ServerData.StatusServer = "Остановлен";

ButtonStartStop.Content = "Запуститьсервер";

TextBlockSqlStatus.Foreground = new SolidColorBrush(Colors.Red);

ServerData.StatusSQL = "Проверка не выполнена";

ServerData.CountRequest = 0;

ServerData.CountUser = 0;

}

}

//Поток с циклом прослушки порта для подключений

public void RequestCycle(Object hAndler)

{

this.Dispatcher.Invoke(new NewEvent((Event) =>LogEventServer.Add(Event)), Log("Запускпотокапрослушкивходящихподключений", true));

Socket sListener = (Socket)hAndler;

Socket handler = null;

while (true)

{

try

{

// Ожидание входящего соединения

handler = sListener.Accept();

}

catch (Exception ex)

{

if (ThreadSocket.ThreadState != ThreadState.AbortRequested)

this.Dispatcher.Invoke(new NewEvent((Event) =>LogEventServer.Add(Event)), Log("Установкановогоподключенияклиента", false));

}

finally

{

if (ThreadSocket.ThreadState != ThreadState.AbortRequested)

{

//Запуск задачи обработки установленного подключения

ServerData.CountUser++;

Task NewTask = Task.Factory.StartNew(NewUserRequest, handler);

}

}

}

}

//ПроверкадоступностиБД

private void DataBaseAccessEvent(object sender, EventArgs e)

{

//ПроверкадоступностиБДСкладКП

SqlConnectionStringBuilderSqlBuilder = new SqlConnectionStringBuilder();

SqlBuilder.DataSource = ServerData.SqlServer;

SqlBuilder.UserID = ServerData.SqlNameUser;

SqlBuilder.Password = ServerData.SqlPasswordUser;


Подобные документы

  • Автоматизация системы снятия показаний счетчиков энергии. Разработка базы данных и клиентского приложения для структур жилищно-коммунального хозяйства, занимающихся составлением квитанций. Описание предметной области. Тестирование клиентского приложения.

    курсовая работа [953,3 K], добавлен 01.09.2016

  • Создание программы для автоматизации некоторых основных процессов, происходящих на заводе по производству пластиковых окон. Модель процессов предметной области, концептуальное проектирование базы данных. Описание пользователей, создание приложения.

    курсовая работа [35,0 K], добавлен 08.08.2011

  • Реализация проекта по оптимизации отделений почтовой связи. Направления деятельности в области кадровой политики. Автоматизация обработки получаемой техническим отделом информации. Разработка приложения клиент-сервер. Описание клиентского приложения.

    курсовая работа [34,3 K], добавлен 07.08.2013

  • Анализ информационной системы ИНЭК "Страховщик". Описание предметной области с использованием модели "сущность-связь". Моделирование бизнес-процессов с помощью IDEF0-диаграмм. Проектирование и разработка приложения в среде Delphi и создание интерфейса.

    отчет по практике [4,9 M], добавлен 28.12.2014

  • Инфологическая модель предметной области "Курьерская служба". Разработка интерфейса пользователя. Функциональное тестирование приложения "Грузоперевозки", его стресс-тестирование. Порядок загрузки данных, проверка работоспособности информационной системы.

    дипломная работа [6,6 M], добавлен 10.10.2016

  • Анализ предметной области. Выработка требований и ограничений. Серверная часть информационной системы. Запросы клиентского приложения. Триггеры для поддержки сложных ограничений целостности в базе данных. Пользовательский интерфейс клиентского приложения.

    курсовая работа [2,6 M], добавлен 21.02.2016

  • Разработка базы данных для информационной системы "Библиотека". Системный анализ, инфологическое, даталогическое и физическое проектирование. Программирование бизнес-логики, разработка клиентского приложения. Создание web-приложения, web-доступ.

    курсовая работа [3,3 M], добавлен 15.09.2014

  • Требования к составу и параметрам технических средств. Инфологическая (концептуальная) модель предметной области. Физическая и логическая модель базы данных. Создание структуры БД в СУБД MS ACCESS. Программирование приложения. Описание работы с системой.

    курсовая работа [572,2 K], добавлен 17.11.2014

  • Анализ предметной области "Конкурс поэтов" на основе объектно-ориентированного подхода. Разработка оконного приложения и описание информационной модели предметной области. Описание разработанных процедур С++ и результатов тестирования приложения.

    курсовая работа [355,9 K], добавлен 18.06.2013

  • Проектирование информационной системы отслеживания финансовой стороны работы автосервиса. Спецификация требований к системе. Проектирование прецедентов, определение классов приложения. Описание основных форм проектируемого интерфейса приложения.

    курсовая работа [865,9 K], добавлен 12.10.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.