Автоматизация процесса учета продаж — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Автоматизация процесса учета продаж

2021-02-05 83
Автоматизация процесса учета продаж 0.00 из 5.00 0 оценок
Заказать работу

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


 

Глава 2. Разработка интерфейса к базе данных анализа продаж.

Проектирование и реализация базы данных.

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

Рисунок 1 – Логическая схема базы данных анализа продаж

На схеме видно, что у нас имеется пять таблиц: «Продажи», «Клиенты», «Заказы», «Товары», «Группа товаров». В нашем случае таблица «Продажи» является главной, а остальные таблицы являются справочниками, которые содержат информацию для заполнения в главную таблицу.

Самая главная таблица – «Продажи» содержит поля:

· Номер продажи – номер продажи, который содержит в себе всю информацию и присваивается автоматически.

· ID клиента – номер клиента, который был автоматически присвоен при добавлении информации о клиенте в базу данных.

· Статус заказа – показатель, который отвечает за статус заказа, позволяет понять, оплачен заказ или нет.

· Дата продажи – дата, когда был оформлен заказ.

В таблице «Заказы» имеются поля:

· ID продажи – номер продажи, который присваивается заказу.

· ID товара – номер товара, добавленного в заказ.

· Количество товара – количество товара, добавленного в заказ.

В таблице «Клиенты» имеются поля «Имя клиента», «Номер телефона» и «Адрес», которые содержат информацию о имени клиента, его номере телефона и адресе.

В таблице «Товары» имеются поля:

· Название товара – название данной единицы товара.

· Цена – цена данной единицы товара.

· ID группы товаров – номер группы товаров, к которой относится товар.

В таблице «Группа товаров» содержится поле «Название группы товаров», которые содержит название группы товаров.

Отталкиваясь от логической схемы, необходимо при помощи приложений «Microsoft SQL Server Management Studio 18» и «Microsoft SQL Server 18» создать саму базу данных. Для этого создадим физическую схему:

Рисунок 2 – Физическая схема базы данных анализа продаж.

Физическая схема - это схема, используемая для описания того, как данные должны быть представлены в базе данных. На схеме (рис. 2) указана точно такая же логическая схема, только на языке SQL. Что бы лучше понять поля физической схемы, рассмотрим их подробнее:

UID обозначает уникальный идентификатор поля, который помогает обозначить поле. Остальные поля Date, C_Id, Approved, P_Count, P_Id и т.д. являются наименованиями столбцов таблицы. Все, что идет после наименования столбцов – тип данных значений в столбце.

Пройдемся по каждому типу данных:

Int – целочисленный тип данных, которых может содержать в себе только числа.

Date – тип данных для дат.

Nvarchar (число) – произвольный набор символов, предел которого указан в скобках.

Float – число с плавающей запятой, который используется для хранения дробных чисел.

Структура приложения.

В программе «Microsoft Visual Studio 2017» будет создано приложение для эксплуатации уже созданной базы данных. Приложение представляет собой создание форм, которые взаимодействуют друг с другом, а также выводят данные из базы данных. Каждая форма имеет своё название, как обычное, для восприятия, так и название для написания необходимого для этой формы кода.

Будут созданы следующие формы:

loginForm – форма для ввода имени сервера базы данных, а также просмотра информации об управлении данными в программе;

tableSales – главная форма с выводом информации о продажах из таблицы «Продажи», оснащена кнопками «Добавить запись», «Справочник», которая позволяет получить доступ в другие справочники, «Отчет», который позволяет выбрать отчет из списка, «Выход», которая закрывает программу, при клике по ячейке правой кнопкой мыши выводит список действий со строкой, при клике по ячейке заказа или имени клиента левой кнопкой мыши выводит более точную информацию о заказе или клиенте;

tableOrders – форма с выводом информации о заказах из справочника «Заказы», оснащена кнопками «Добавить запись» и «Выход», по аналогии с формой tableSales позволяет по клику правой кнопкой мыши выполнять действия со строками, если такие доступны;

tableClients – форма с выводом информации о клиентах из справочника «Клиенты», оснащена кнопками «Добавить запись» и «Выход», а также выводом списка действий со строкой при нажатии правой кнопки мыши;

tableProducts – форма с выводом информации о товарах и группах товаров из справочников «Товары» и «Группа товаров», оснащена кнопками «Добавить запись», которая позволяет добавлять запись в любой из двух справочников, и «Выход», управление со строками также производится по клику правой кнопкой мыши;

RowAction – форма, которая позволяет пользователю вводить или менять записи из различных справочников, оснащена набором элементов ввода для каждого справочника, а также кнопками «Добавить», «Изменить» и «Отмена»;

ShowTable – дополнительная форма, которая выводит справочник для выбора значения в формах RowAction, ProductClientReport, ProductGroupReport;

ProductClientReport – форма для формирования отчета о продажах в разрезе товаров или клиентов, оснащена набором элементов для ввода данных, а также кнопками «Сохранить отчет», который позволяет сохранить выведенные данные, «Выход» и «Сформировать отчет», который по введенным данным выводит обработанную информацию;

ProductGroupReport – форма для формирования отчета о продажах по видам товаров, оснащена набором элементов для ввода данных, а также кнопками «Сохранить отчет», «Выход» и «Сформировать отчет»;

MostBuyingReport – форма для формирования отчета по самым частым клиентам, оснащена набором элементов для ввода данных, а также кнопками «Сохранить отчет», «Выход» и «Сформировать отчет»;

MostPopularReport – форма для формирования отчета по продажам самых популярных товаров, оснащена набором элементов для ввода данных, а также кнопками «Сохранить отчет», «Выход» и «Сформировать отчет»;

LastThirtyDays – форма для вывода последних заказов клиентов за последний месяц.

Рисунок 3 – Схема структуры приложения

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

Теперь рассмотрим каждый метод каждой формы отдельно. Начнем с одинаковых и очень схожих методов на всех формах.

Рисунок 4 – Блок-схема кнопки выхода

Блок-схема кнопки выхода (рис. 4) показывает закрывает текущую открытую форму. Присутствует на формах tableOrders, tableClients, tableProducts, ProductClientReport, ProductGroupReport, MostPopularReport, MostBuyingReport, LastThirtyDays.

Рисунок 5 – Блок-схема кнопки добавления строки

Блок-схема кнопки добавления строки на примере кнопки на форме tableSales (рис. 5), которая открывает форму, которая позволяет добавлять данные в справочник. Переменная Creation.FormNumber определяет номер справочника, который используется для вывода нужного интерфейса. В нашем случае номер 1 обозначает справочник «Продажи», номер 2 – «Клиенты», номер 3 – «Товары», номер 4 – «Группа товаров», номер 5 – «Заказы». Переменная Creation.SalesAddEdit показывает, какая именно операция происходит с записью: если стоит значение true, то происходит добавление, если стоит false – изменение. Этот метод с небольшими изменениями расположен в формах tableSales, tableClients, tableProducts, tableOrders.

Рисунок 6 – Блок-схема кнопки изменения строки

Блок-схема кнопки изменения строки на примере кнопки на форме tableSales (рис. 6), которая открывает форму, которая позволяет изменять данные в справочнике. Переменная Creation.FormNumber по аналогии с кнопкой добавления содержит в себе номер справочника, переменные Temp1, Temp2, Temp3, Temp4 хранят в себе информацию для переноса данных в объекты ввода. Переменная Creation.STClientsID хранит номер клиента, которые затем используется для действий со строкой. Этот метод с небольшими изменениями расположен в формах tableSales, tableClients, tableProducts, tableOrders.

 

Рисунок 7 – Блок-схема открытия контекстного меню

Блок-схема открытия контекстного меню на примере формы tableSales (рис. 7), которая разворачивает контекстное меню с пунктами для выбора строки при правом клике мышкой по ячейке таблицы. Проводя проверку по значениям выбранной строки, контекстное меню присваивает кнопкам активное или неактивное положение. В нашем случае кнопка изменения не будет работать, если заказ оплачен, кнопка удаления не будет работать, если в заказе есть какие-либо товары. Этот метод с небольшими изменениями расположен в формах tableSales, tableClients, tableProducts, tableOrders.

 

Запросы для tableSales:

SQLorder = "select count (*) from Orders inner join Sales on Sales.Id = Orders.S_Id where Sales.Id = " + tSales[0, tSales.CurrentRow.Index].Value.ToString();

Запросы для tableClients:

SQLorder = "select count (*) from Clients inner join Sales on Clients.Id = Sales.C_Id where Clients.Name ='" + tClients.CurrentCell.Value.ToString() + "'";

Запросы для tableProducts (Справочник «Товары»):

SQLorder = "select count (*) from Products, Orders, Sales where Orders.S_Id = Sales.Id and Sales.Approved = 1 and Orders.P_Id = Products.Id and Products.Name = '" + tProducts.CurrentCell.Value.ToString() + "'";

SQLorder = "select count (*) from Products, Orders, Sales where Orders.S_Id = Sales.Id and Orders.P_Id = Products.Id and Products.Name = '" + tProducts.CurrentCell.Value.ToString() + "'";

Запросы для tableProducts (Справочник «Группа товаров»):

SQLorder = "select count (*) from Products, ProductGroup, Orders, Sales where Orders.S_Id = Sales.Id and Products.PG_Id = ProductGroup.Id and Sales.Approved = 1 and Orders.P_Id = Products.Id and ProductGroup.Name = '" + tProductGroup.CurrentCell.Value.ToString() + "'";

SQLorder = "select count (*) from Products, ProductGroup, Orders, Sales where Orders.S_Id = Sales.Id and Products.PG_Id = ProductGroup.Id and Orders.P_Id = Products.Id and ProductGroup.Name = '" + tProductGroup.CurrentCell.Value.ToString() + "'";

SQLorder = "select count (*) from Products, ProductGroup where Products.PG_Id = ProductGroup.Id and ProductGroup.Name = '" + tProductGroup.CurrentCell.Value.ToString() + "'";

Рисунок 8 – Блок-схема кнопки удаления строки

Блок-схема кнопки удаления строки на примере кнопки на форме tableSales (рис. 8), которая удаляет выделенную строку и обновляет данные в таблице. Этот метод с небольшими изменениями расположен в формах tableSales, tableClients, tableProducts, tableOrders.

Запрос для tableSales:

tDelete = new SqlCommand("delete from Sales where Id = " + tSales[0, tSales.CurrentRow.Index].Value.ToString(), dbConnection);

Запрос для tableClients:

tDelete = new SqlCommand("delete from Clients where Id = " + tClients[0, tClients.CurrentRow.Index].Value.ToString(), dbConnection);           

Запрос для tableProducts (Справочник «Товары»):

tDelete = new SqlCommand("delete from Products where Id = " + tProducts[0, tProducts.CurrentRow.Index].Value.ToString(), dbConnection);           

Запрос для tableProducts (Справочник «Группа товаров»):

tDelete = new SqlCommand("delete from ProductGroup where Id = " + tProductGroup[0, tProductGroup.CurrentRow.Index].Value.ToString(), dbConnection);           

           

Рисунок 9 – Блок-схема метода UpdateTable()

Метод UpdateTable() на примере формы tableSales (рис. 9) загружает новые данные из базы данных, очищая все переменные и устанавливая размеры элементов на форме. Вызывается при загрузке и активации формы. Этот метод с небольшими изменениями расположен в формах tableSales, tableClients, tableProducts, tableOrders.

Запрос для tableSales:

dtSalesUpload = new SqlCommand("select Sales.Id, Clients.Name, Sales.Approved, Sales.Date, NULL, Clients.Id from Sales inner join Clients on Clients.Id = Sales.C_Id", dbConnection);

Запросы для tableClients:

SQLorder = "select Clients.Id, Clients.Name, Clients.Phone, Clients.Address from Clients where Clients.Id = " + Creation.AInfoClients;

SQLorder = ("select Id, Name, Phone, Address from Clients");

Запросы для tableProducts (Справочник «Товары»):

SQLorder = "select Products.Id, Products.Name, Products.Price, ProductGroup.Name from ProductGroup inner join Products on ProductGroup.Id = Products.PG_Id where Products.Name = '" + Creation.AInfoProducts + "'";

SQLorder = "select Products.Id, Products.Name, Products.Price, ProductGroup.Name from ProductGroup inner join Products on ProductGroup.Id = Products.PG_Id";

Запрос для tableProducts (Справочник «Группа товаров»):

SqlCommand dtPGUpload = new SqlCommand("select Id, ProductGroup.Name from ProductGroup", dbConnection);

               

           

               

           

               

           

Рисунок 10 – Блок-схема кнопки составления отчета

Блок-схема кнопки составления отчета (рис. 10), которая проводит выборку данных по выбранным фильтрам из базы данных. Данный метод с небольшими изменениями используется в формах ProductClientReport, ProductGroupReport, MostPopularReport, MostBuyingReport.

Запросы ProductClientReport:

SQLorder = "select Id, sum(Total), Date from(select Sales.Id, (Orders.P_Count * Products.Price) as Total, Sales.Date from Orders, Sales, Products, Clients where Sales.Id = Orders.S_Id and Products.Id = Orders.P_Id and Clients.Id = Sales.C_Id and Sales.Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "' and Clients.Id = '" + Creation.STClientsId + "' and Sales.Approved = 1 group by Sales.Id, Orders.P_Count, Products.Price, Sales.Date) as Main group by Id, Date";

SQLorder = "select Id, sum(Total), Date from(select Sales.Id, (Orders.P_Count * Products.Price) as Total, Sales.Date from Orders, Sales, Products, Clients where Sales.Id = Orders.S_Id and Products.Id = Orders.P_Id and Clients.Id = Sales.C_Id and Sales.Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "' and Clients.Id = '" + Creation.STClientsId + "' and Sales.Approved = 0 group by Sales.Id, Orders.P_Count, Products.Price, Sales.Date) as Main group by Id, Date";                          

SQLorder = "select Id, sum(Total), Date from(select Sales.Id, (Orders.P_Count * Products.Price) as Total, Sales.Date from Orders, Sales, Products, Clients where Sales.Id = Orders.S_Id and Products.Id = Orders.P_Id and Clients.Id = Sales.C_Id and Sales.Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "' and Clients.Id = '" + Creation.STClientsId + "' group by Sales.Id, Orders.P_Count, Products.Price, Sales.Date) as Main group by Id, Date";

Запросы ProductGroupReport:

SQLorder = "select ProductGroup.Name, sum(Total) from (select ProductGroup.Name, Orders.P_Count as Total from Orders, ProductGroup, Products, Sales where Orders.P_Id = Products.Id and Products.PG_Id = ProductGroup.Id and Sales.Id = Orders.S_Id and ProductGroup.Name = '" + Creation.STPGroup + "' and Sales.Approved = 1 and Sales.Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "') as Main, ProductGroup where ProductGroup.Name = '" + Creation.STPGroup + "' group by ProductGroup.Name";

SQLorder = "select ProductGroup.Name, sum(Total) from (select ProductGroup.Name, Orders.P_Count as Total from Orders, ProductGroup, Products, Sales where Orders.P_Id = Products.Id and Products.PG_Id = ProductGroup.Id and Sales.Id = Orders.S_Id and ProductGroup.Name = '" + Creation.STPGroup + "' and Sales.Approved = 0 and Sales.Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "') as Main, ProductGroup where ProductGroup.Name = '" + Creation.STPGroup + "' group by ProductGroup.Name";

SQLorder = "select ProductGroup.Name, sum(Total) from (select ProductGroup.Name, Orders.P_Count as Total from Orders, ProductGroup, Products, Sales where Orders.P_Id = Products.Id and Products.PG_Id = ProductGroup.Id and Sales.Id = Orders.S_Id and ProductGroup.Name = '" + Creation.STPGroup + "' and Sales.Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "') as Main, ProductGroup where ProductGroup.Name = '" + Creation.STPGroup + "' group by ProductGroup.Name";

Запросы MostPopularReport:

SQLorder = "select Products.Name, sum(Orders.P_Count) as Total from Orders, Products, Sales where Orders.P_Id = Products.Id and Sales.Id = Orders.S_Id and Sales.Approved = 1 and Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "' group by Products.Name order by Total DESC";

SQLorder = "select Products.Name, sum(Orders.P_Count) as Total from Orders, Products, Sales where Orders.P_Id = Products.Id and Sales.Id = Orders.S_Id and Sales.Approved = 0 and Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "' group by Products.Name order by Total DESC";

SQLorder = "select Products.Name, sum(Orders.P_Count) as Total from Orders, Products, Sales where Orders.P_Id = Products.Id and Sales.Id = Orders.S_Id and Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "' group by Products.Name order by Total DESC";

Запросы MostBuyingReport:

SQLorder = "select Clients.Name, count(Sales.Id) as Total from Sales, Clients where Sales.C_Id = Clients.Id and Sales.Approved = 1 and Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "' group by Clients.Name order by Total DESC";

SQLorder = "select Clients.Name, count(Sales.Id) as Total from Sales, Clients where Sales.C_Id = Clients.Id and Sales.Approved = 0 and Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "' group by Clients.Name order by Total DESC";

SQLorder = "select Clients.Name, count(Sales.Id) as Total from Sales, Clients where Sales.C_Id = Clients.Id and Date between '" + dtpPeriod1.Value.ToShortDateString() + "' and '" + dtpPeriod2.Value.ToShortDateString() + "' group by Clients.Name order by Total DESC";

Рисунок 11 – Блок-схема кнопки создания отчета в форме LastThirtyDays

В форме LastThirtyDays для создания (рис. 11) отчета используется полностью другой код, который просто выводит последние заказы клиентов за последний месяц.

Рисунок 12 – Блок-схема сохранения отчета в таблицу с расширением *.xlsx

Блок-схема сохранения отчета в таблицу с расширением *.xlsx (рис. 12) показана на примере сохранения отчета в форме ProductGroupReport. Аналогичный метод с небольшими изменениями используется для сохранения всех остальных отчетов.

Рисунок 13 – Блок-схема сохранения отчета в таблицу с разрешением *.csv

Также курсовой проект поддерживает сохранение в общепринятом табличном разрешении *.csv, который используется во многих предприятиях. Этот метод используется при выводе всех отчетов с небольшими изменениями.

Рисунок 14 – Блок-схема соединения форм отчета с базой данных

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

Рисунок 15 – Блок-схема загрузки формы ShowTable

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

Рисунок 16 – Блок-схема метода клика по ячейке справочника формы ShowTable

При клике по записи в справочнике в форме ShowTable, значения из таблицы переносятся в объект ввода, откуда была вызвана таблица.

Рисунок 17 – Блок-схема метода загрузки формы RowAction

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


Рисунок 18 – Блок-схема метода кнопки добавления/изменения в форме RowAction

После заполнения данных пользователем в форме RowAction, нажимается кнопка «Добавить» или «Изменить» в зависимости от выбранного до этого пункта. В зависимости от номера справочника Creation.FormNumber и значения переменной Creation.«Название справочника»AddEdit вызывается нужный пункт в switch, который выполняет все нужные действия или пишет пользователю, что введенные данные заполнены некорректно. Затем после окончания добавления или изменения записи форма закрывается, а справочник обновляется.

Рисунок 19 – Блок-схема метода CheckLettersOnly(string s)

Метод CheckLettersOnly(string s) позволяет проверять строку на корректность ввода: она проверяет, пустая ли строка, проверяет, есть ли какие-либо символы, кроме пробела и буквы, а затем возвращает значение, которое после проверки или продолжает действия по добавлению или изменению значений в базе данных, или выводит пользователю ошибку ввода.

 

Рисунок 20 – Блок-схема метода открытия справочника «Товары»

Данная конструкция позволяет нам открывать различные справочники при выборе кнопки с главной формы. Используется для вывода справочников «Клиенты», «Товары», «Группа товаров», «Заказы».

Рисунок 21 – Блок-схема метода клика на ячейку в таблице tSales

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

 


Поделиться с друзьями:

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

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.066 с.