Сделай Сам Свою Работу на 5

Новый лист.3. Разработка системы





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

Для технической платформы для проекта был выбран АСК «Интеллектуальный Склад» от компании «Сатурн-Терминал».

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

Компания «Сатурн-Терминал» предоставляет:

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

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

- документацию по предоставляемому к системе программному обеспечению;

- документацию по обучению персонала по установке, наладке и работе с техническим и программным оснащением системы.

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



3.2 Описание предметной области с помощью языка моделирования UML

Для описания процессов был выбран UML - унифицированный язык моделирования.

3.2.1 Диаграмма прецедентов действий (Use Case diagram)

Рисунок 9 - Диаграмма прецедентов

 

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

- выписывает приемный акт(в 2-х экземплярах);

- регистрирует товар в системе;

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

Также он формирует необходимые документы на бумажном носителе:

- накладная;

- приемный акт;

- карточка товара.

3.2.2 Диаграмма классов (Class diagram)

Рисунок 10 - Диаграмма классов

 

На данной диаграмме изображены классы системы. Центральным классом является блок «Система», которая взаимодействует с блоком «Графический интерфейс», обменивается данными с блоком «БД» и «Интерфейс робота», а также загружает/вносит данные с блоком «Учет». В свою очередь блок «Учет» имеет связи с блоками «Объекты» и «Поиции».



3.2.3 Диаграммы последовательности (Sequence diagrams)

 

Рисунок 11 - Диаграмма последовательности «Загрузка и внесение товаров в учет»

На данной диаграмме изображен процесс загрузки товаров, точнее внесение товаров(объектов) в систему.

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

3.2.4 Диаграммы состояний и активности (Statechart and activity diagrams)

Рисунок 12 - Диаграмма состояний «Графический Интерфейс»

На данной диаграмме изображены состояния графического интерфейса системы.

Из начального состояния «Интерфейс управления системой», или иными словами главного окна программы, возможен переход в другие состояния:

- управление объектами;

- управление учетом;

- управление позициями.

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

Рисунок 13 - Диаграмма состояний «Перемещение объекта на складе»

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



Изначально выводиться графический интерфейс «управление учетом». Далее оператор системы, задав необходимые параметры, выполняет поиск объекта для перемещения. Систем, произведя поиск по заданным параметрам выводит результат своей работы. Далее, после команды оператора системы, выполняется цепочка операций:

- поиск позиции по габариту и весу;

- поиск по позиции по расположению;

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

- отображение результатов;

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

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

 

 

Рисунок 14 - Диаграмма активностей «Изменение информации»

На данной диаграмме изображен процесс изменения информации об объектах в системе. Изначально выводиться интерфейс «управление объектами». Далее выполняется вывод списком объектов в системе. После чего оператор системы выбирает объект для изменения, система выводит интерфейс редактирования, и вводит изменения в объект. Операция ввода новой информации продолжается до того момента, пока не будет введена вся необходимая информация по объекту. Если вся необходимая информация по объекту введена, то система выводит сообщение об успешном выполнении операции изменения, иначе выводит сообщение об ошибке.

3.2.5 Диаграмма компонентов (Component diagram)

Рисунок 15 - Диаграмма компонентов

 

На данной диаграмме изображены компоненты системы:

- главная форма;

- управление объектами;

- управление учетом;

- управление позициями;

- база данных.

Все компоненты привязаны к базе данных. Вся информация из базы данных связана с соответствующими компонентами графического интерфейса.

3.2.6 Диаграмма топологий

Рисунок 16 - Диаграмма топологий

На данной диаграмме изображены основные узлы системы.

Это:

- сервер роботизированной системы;

- сервер базы данных;

- клиент(клиентская часть системы);

- администратор системы(клиент администратора);

- коммутационное оборудование сети Интернет.

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

 

3.3 Разработка программного модуля.

3.3.1 Определение целей и задач, решаемые программным изделием

Цели и задачи, решаемые программным изделием:

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

- реализация возможности регистрации мест хранения, их местоположения, вмещаемых им габаритов и веса хранимого объекта;

- реализация возможности ведения учета хранимых объектов на складе;

- реализация совместимости с программным обеспечением поставщика основной автоматизированной системы.

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

Данная функция необходима для предотвращения ошибок и корректной работы программы и базы данных.

Разрабатывая алгоритм функционирования разрабатываемого приложения, были применены объектно-ориентированная парадигма программирования, в которой основными концепциями являются понятия объектов и классов.

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

Для непосредственного взаимодействия приложения с базой данных язык запросов SQL стандарта ANSI от 1998 года.

 

 

3.3.2 Алгоритм выгрузки и загрузки товаров на складе

Рисунок 18 – Алгоритм загрузки

 

Рисунок 19 – Алгоритм разгрузки

 

3.3.3 Диаграмма поиска оптимальной позиции на складе

IDEF0 — Function Modeling — методология функционального моделирования и графическая нотация, предназначенная для формализации и описания бизнес-процессов. Отличительной особенностью IDEF0 является её акцент на соподчинённость объектов. В IDEF0 рассматриваются логические отношения между работами, а не их временна́я последовательность (WorkFlow).

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

 

Описание выглядит как «чёрный ящик» с входами, выходами, управлением и механизмом, который постепенно детализируется до необходимого уровня. Также для того чтобы быть правильно понятым, существуют словари описания активностей и стрелок. В этих словарях можно дать описания того, какой смысл вы вкладываете в данную активность либо стрелку.

Также отображаются все сигналы управления, которые на DFD (Диаграмме Потоков Данных) не отображались. Данная модель используется при организации бизнес-проектов и проектов, основанных на моделировании всех процессов: как административных, так и организационных.

Рисунок 20 – Диаграмма

 

3.3.4 Структура базы данных

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

Данная база имеет 3 таблицы:

- Объекты;

- Позиции склада;

- Учет хранения объектов на складе.

Далее приведем структуру перечисленных выше таблиц.

Рисунок 21 – Структура таблицы «Объекты»

Рисунок 22 – Структура таблицы «Позиции»

Рисунок 23 – Структура таблицы «Учет»

Как видно из приведенных выше структур таблиц, все таблицы хранят только необходимую информацию по объектам, позициям и учету хранимых объектов.

 

Рисунок 24 – Связи между таблицами

 

3.3.6 Графический интерфейс

Также был разработан графический интерфейс программного модуля.

Далее приведем несколько снимков экрана для демонстрации графического интерфейса и работы программы.

Рисунок 25 – Окно программы, вкладка «Объекты»

 

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

Рисунок 26 – Окно программы, вкладка «Занести объект»

 

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

 

Рисунок 27 – Окно программы, вкладка «Занести объект»

 

На рисунке 27 представлен процесс успешного внесения объекта на позицию склада.

Рисунок 28 – Окно программы, вкладка «Занести объект»

 

На рисунке 28 представлен процесс отмены внесения объекта на позицию склада, так как выбранная позиция уже имеет объект и второй объект не подходит по габаритам на оставшееся свободное пространство на позиции склада.

Рисунок 29 – Окно программы, вкладка «Выдать объект»

 

На рисунке 29 представлен процесс выдачи объекта с позиции склада. В данном разделе реализованы функция проверки наличия объекта на складе. В случае произведения операции выдачи объекта, который был зарегистрирован, но еще не внесен на позицию склада, модуль выдаст соответствующее сообщение об ошибке.

Рисунок 30 – Окно программы, вкладка «Выдать объект»

 

На рисунке 30 представлен процесс выдачи объекта с позиции склада. Если объект найден на одной из позиций склада, то производиться выдача данного объекта с позиции склада.

 

3.3.7 Структурная схема системы

Рисунок 31 – Структурная схема системы

 

3.3.8 Выводы о результатах программного проектирования

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

Данный вывод основывается на следующих фактах.

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

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

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

 

Заключение

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

- Анализ предметной области роботизированных систем для складского хранения;

- Постановка задач и целей для реализации проекта роботизированного склада;

- Обзор и выбор современных решений в данной области автоматизации;

- Разработка программного модуля для учета хранимой на складе продукции.

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

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

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

 

 

Список литературы

 

1. Автоматизированные информационные технологии в экономике: Учебник /Под ред. проф. Г.А. Титоренко.-М.: Компьютер, ЮНИТП, 2007 – 400 с.

2. Гайдамакин Н.А. Автоматизированные информационные системы, базы и банки данных. М: Гелиос АРВ, 2009.

3. Евдокимов В.В. и др. Экономическая информатика. /Учебник для вузов./ Под ред.д.э.н., профессора В.В. Евдокимова.-СПб.: Санкт-Петербург, 2007,-592 с.: ил.

4. Информационные системы в экономике. Базы данных: Учебное пособие. Чебоксары, 2007.

5. Петров В.Н. Информационные системы. СПб.: Питер, 2007.

6. Волгин В. В. Логистика хранения товаров. Практическое пособие; Дашков и Ко, 2010. - 368 c.

7. Дыбская В. В. Управление складированием в цепях поставок; Альфа-Пресс, 2009. - 720 c.

8. Таран С. А. Как организовать склад. Практические рекомендации профессионала; Альфа-Пресс, 2008. - 240 c.

9. Фразелли Эдвард Мировые стандарты складской логистики; Альпина Паблишер, 2012. - 330 c.

10. Гуриков С. Р. Введение в программирование на языке Visual C#; Форум, Инфра-М, 2013. - 448 c.

11. Мартин Р. С., Мартин М. Принципы, паттерны и методики гибкой разработки на языке C#; Символ-Плюс, 2011. - 768 c.

12. Шнайдер, Роберт Microsoft SQL Server 6.5. Проектирование высокопроизводительных баз данных; М.: Лори, 2010. - 361 c.

13. Яргер, Р.Дж.; Риз, Дж.; Кинг, Т. MySQL и mSQL: Базы данных для небольших предприятий и Интернета; СПб: Символ-Плюс, 2013. - 560 c.

14. Роботизированные технологические комплексы / Г.И. Костюк, О.О. Баранов, И.Г. Левченко, В.А. Фадеев - Учеб. Пособие. - Харьков. Нац. аэрокосмический университет "ХАИ", 2003. - 214с.

 

Приложение.

Исходный код

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using MySql.Data.MySqlClient;

 

namespace Склад

{

class MySQLClass //класс взаимодействия с БД

{

private string[] resultarray = new string[1];// массив для результата запроса

 

private string ConnectionString = null;// строка соединения

private string DataSource = null;//источник данных

private string UserID = null;//логин

private string Password = null;// пароль

private string DataBaseName = null; имя БД

объекты соединения и выборки данных

private MySqlConnection Connection = null;

private MySqlCommand Command = null;

private MySqlDataReader DataReader = null;

private MySqlDataAdapter DataAdapter = null;

private DataSet DataSet = null;

объекты обработки и передачи данных

private MySqlDataAdapter[] DataAdapters = null;

private MySqlCommandBuilder[] CommandBuilders = null;

private DataTable[] DataTables = null;

private string[] DataGridViews = null;

private string[] SelectCommands = null;

конструктор класса

public MySQLClass(string UserID, string Password, string DataBaseName, string DataSource, string[] datagridviews, string[] selectcommands)

{

try

{

this.UserID = UserID;

this.Password = Password;

this.DataBaseName = DataBaseName;

this.DataSource = DataSource;

this.ConnectionString = "Data source=" + this.DataSource + ";UserId=" + this.UserID + ";Password=" + this.Password + ";database=" + this.DataBaseName + ";charset=utf8;";

Connection = new MySqlConnection(ConnectionString);

Command = new MySqlCommand();

Command.CommandText = "";

Command.Connection = this.Connection;

DataAdapter = new MySqlDataAdapter(Command.CommandText, this.Connection);

DataSet = new DataSet();

this.DataGridViews = new string[datagridviews.Length];

this.SelectCommands = new string[datagridviews.Length];

this.DataTables = new DataTable[datagridviews.Length];

this.DataAdapters = new MySqlDataAdapter[datagridviews.Length];

this.CommandBuilders = new MySqlCommandBuilder[datagridviews.Length];

 

for (int i = 0; i != datagridviews.Length; i++)

{

this.DataGridViews[i] = datagridviews[i];

this.SelectCommands[i] = selectcommands[i];

this.DataTables[i] = new DataTable();

this.DataAdapters[i] = new MySqlDataAdapter(selectcommands[i], this.Connection);

this.CommandBuilders[i] = new MySqlCommandBuilder(DataAdapters[i]);

//this.DataAdapters[i].UpdateCommand = CommandBuilders[i].GetUpdateCommand();

//this.DataAdapters[i].InsertCommand = CommandBuilders[i].GetInsertCommand();

//this.DataAdapters[i].DeleteCommand = CommandBuilders[i].GetDeleteCommand();

}

 

//DataAdapters[0].SelectCommand.CommandText = Command.CommandText;

}

catch (MySqlException exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

 

 

Соединение с БД

public bool TryConnectToDataBase()

{

try

{

Command.CommandText = "SHOW DATABASES";

Command.Connection.Open();

DataReader = Command.ExecuteReader();

 

if (DataReader.HasRows)

{

return true;

}

else

{

return false;

}

}

catch (MySqlException exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return false;

}

finally

{

DataReader.Close();

if (Command.Connection.State == System.Data.ConnectionState.Open)

{

Command.Connection.Close();

}

}

 

}

Вывод данных в графический интерфейс

public int DataFromBaseToDataGridView(DataGridView datagridview, string operation)

{

int index = 0;

 

try

{

index = Array.IndexOf<string>(DataGridViews, datagridview.Name);

DataAdapters[index].SelectCommand.CommandText = SelectCommands[index];

 

switch (operation)

{

case "select":

DataTables[index].Clear();

DataAdapters[index].Fill(DataTables[index]);

//MessageBox.Show(DataAdapters[index].SelectCommand.CommandText);

datagridview.DataSource = DataTables[index];

break;

case "update":

DataTable changes = ((DataTable)datagridview.DataSource).GetChanges();

 

if (changes != null)

{

DataAdapters[index].UpdateCommand = CommandBuilders[index].GetUpdateCommand();

DataAdapters[index].InsertCommand = CommandBuilders[index].GetInsertCommand();

DataAdapters[index].DeleteCommand = CommandBuilders[index].GetDeleteCommand();

DataAdapters[index].Update(changes);

((DataTable)datagridview.DataSource).AcceptChanges();

}

DataTables[index] = null;

DataTables[index] = new DataTable();

DataAdapters[index].Fill(DataTables[index]);

 

datagridview.DataSource = DataTables[index];

//DataAdapters[index].Update(DataTables[index]);

break;

case "user_select":

DataAdapters[index].SelectCommand.CommandText = Command.CommandText;

DataTables[index].Clear();

DataAdapters[index].Fill(DataTables[index]);

datagridview.DataSource = DataTables[index];

break;

default:

break;

}

return DataTables[index].Rows.Count;

}

catch (Exception exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return 0;

}

finally

{

if (Command.Connection.State == System.Data.ConnectionState.Open)

{

Command.Connection.Close();

}

}

}

Обновление данных в БД

public int UpdateDataBaseFromDataGridView(DataGridView datagridview)

{

int index = 0;

 

try

{

datagridview.EndEdit();

index = Array.IndexOf<string>(DataGridViews, datagridview.Name);

DataAdapters[index].UpdateCommand = CommandBuilders[index].GetUpdateCommand();

DataAdapters[index].InsertCommand = CommandBuilders[index].GetInsertCommand();

//MessageBox.Show(DataAdapters[index].SelectCommand.CommandText + DataAdapters[index].SelectCommand.Connection.ToString());

return DataAdapters[index].Update(DataTables[index]);

}

catch (MySqlException exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return 0;

}

finally

{

if (Command.Connection.State == System.Data.ConnectionState.Open)

{

Command.Connection.Close();

}

}

}

Удаление данных

public int DeleteDataFromDataGridView(DataGridView datagridview)

{

int index = 0;

 

try

{

datagridview.EndEdit();

 

index = Array.IndexOf<string>(DataGridViews, datagridview.Name);

DataAdapters[index].DeleteCommand = CommandBuilders[index].GetDeleteCommand();

return DataAdapters[index].Update(DataTables[index]);

}

catch (MySqlException exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return 0;

}

finally

{

if (Command.Connection.State == System.Data.ConnectionState.Open)

{

Command.Connection.Close();

}

}

}

Выполнение запроса без возврата данных к базе

public int RunExecuteCommand()

{

try

{

Command.Connection.Open();

return Command.ExecuteNonQuery();

 

}

catch (MySqlException exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return 0;

}

finally

{

if (Command.Connection.State == System.Data.ConnectionState.Open)

{

Command.Connection.Close();

}

}

 

}

Выполнение запроса с возвратом результата к БД

public int RunResultCommand(ref string[] result)

{

int i = 0, k = 0;

 

try

{

DataAdapter.SelectCommand.CommandText = Command.CommandText;

DataSet.Reset();

DataAdapter.Fill(DataSet);

Command.Connection.Open();

DataReader = Command.ExecuteReader();

 

Array.Resize<string>(ref result, 0);

 

if (DataReader.HasRows)

{

Array.Resize<string>(ref result, DataSet.Tables[0].Rows.Count * DataSet.Tables[0].Columns.Count);

 

k = 0;

 

while (DataReader.Read())

{

for (i = 0; i != DataSet.Tables[0].Columns.Count; i++)

{

result[k] = DataReader.GetString(i);

k++;

}

}

return DataSet.Tables[0].Rows.Count;

}

else

{

return 0;

}

 

}

catch (MySqlException exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return 0;

}

finally

{

DataReader.Close();

if (Command.Connection.State == System.Data.ConnectionState.Open)

{

Command.Connection.Close();

}

}

 

}

Проверка уникальности значения в таблице

public bool CheckFieldValue(string table, string field, string value)

{

try

{

Command.CommandText = "SELECT `" + field + "` FROM `" + table + "` WHERE (`" + field + "` = '" + value + "')";

 

if (RunResultCommand(ref resultarray) >= 1)

{

if (resultarray[0].ToUpper() == value.ToUpper())

{

return true;

}

else

{

return false;

}

}

else

{

return false;

}

}

catch (Exception exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return false;

}

}

Вывод значения конкретного поля таблицы

public string GetFieldValueByOneParametr(string table, string field, string paramfield, string param)

{

try

{

Command.CommandText = "SELECT `" + field + "` FROM `" + table + "` WHERE (`" + paramfield + "` = '" + param + "')";

RunResultCommand(ref resultarray);

 

 

if (resultarray.Length > 0 && resultarray.Length < 2)

{

return resultarray[0];

}

else if (resultarray.Length >= 2)

{

MessageBox.Show("Более одного значения по параметру", "Нарушение уникальности данных", MessageBoxButtons.OK, MessageBoxIcon.Error);

return "";

}

else

{

return "";

}

}

catch (Exception exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return "";

}

}

 

public string GetLastInsertedID()

{

try

{

return Command.LastInsertedId.ToString();

}

catch (Exception exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return "";

}

}

Обновить соединение с БД

public void RefreshConnectionString()

{

this.ConnectionString = "Data source=" + this.DataSource + ";UserId=" + this.UserID + ";Password=" + this.Password + ";database=" + this.DataBaseName + ";charset=utf8;";

this.Connection.ConnectionString = ConnectionString;

}

Проверка целостности БД

public bool Check_DataBase(string DataBaseName)

{

try

{

Command.CommandText = "SHOW DATABASES";

Command.Connection.Open();

DataReader = Command.ExecuteReader();

 

if (DataReader.HasRows)

{

while (DataReader.Read())

{

if (DataReader.GetString(0) == DataBaseName) { return true; }

}

 

return false;

}

else

{

return false;

}

 

}

catch (MySqlException exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return false;

}

finally

{

DataReader.Close();

if (Command.Connection.State == System.Data.ConnectionState.Open)

{

Command.Connection.Close();

}

}

}

Проверка целостности таблицы

public bool Check_Tables(string DataBaseName, string[] tables)

{

try

{

int i = 0;

bool[] check = new bool[tables.Length];

string message = "";

 

Command.CommandText = "SHOW TABLES FROM " + DataBaseName;

Command.Connection.Open();

DataReader = Command.ExecuteReader();

 

if (DataReader.HasRows)

{

for (i = 0; i != check.Length; i++)

{

check[i] = false;

//MessageBox.Show(tables[i] + " " + check[i].ToString());

}

 

while (DataReader.Read())

{

check[Array.IndexOf<string>(tables, DataReader.GetString(0))] = true;

//MessageBox.Show(DataReader.GetString(0));

}

 

for (i = 0; i != check.Length; i++)

{

if (!check[i])

{

message += "Не найдена таблица " + tables[i] + "\n";

}

}

 

if (message != "")

{

MessageBox.Show(message, "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return false;

}

else

{

return true;

}

 

}

else

{

return false;

}

 

}

catch (MySqlException exception)

{

MessageBox.Show(exception.ToString(), "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

return false;

}

finally

{

DataReader.Close();

if (Command.Connection.State == System.Data.ConnectionState.Open)

{

Command.Connection.Close();

}

}

}

Свойства класса(исключают прямой доступ к полям класса)

public string dataSource

{

get { return DataSource; }

set { DataSource = value; }

}

 

public string userID

{

get { return UserID; }

set { UserID = value; }

}

 

public string password

{

get { return Password; }

set { Password = value; }

}

 

public string dataBaseName

{

get { return DataBaseName; }

set { DataBaseName = value; }

}

 

public string CommandText

{

get { return Command.CommandText; }

set { Command.CommandText = value; }

}

}

}

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Text.RegularExpressions;

 

namespace Склад

{

public partial class Form1 : Form

{

 

string[] ResultArray = new string[1];

string[] tables = { "positions", "goods", "enter_exit"};

string[] datagridviews = { "dataGridView1", "dataGridView2", "dataGridView3", "dataGridView4", "dataGridView5", "dataGridView6" };

string[] selectcommands = { "SELECT * FROM `positions`", "SELECT * FROM `goods`", "SELECT * FROM `goods`", "SELECT * FROM `positions`", "SELECT * FROM `goods`", "SELECT * FROM `enter_exit`" };

 

MySQLClass DB = null;

Вывод формы графического интерфейса

public Form1()

{

InitializeComponent();

DB = new MySQLClass("root", "", "sklad", "localhost", this.datagridviews, this.selectcommands);

}

Загрузка формы

private void Form1_Load(object sender, EventArgs e)

{

if (DB.TryConnectToDataBase())

{

if (DB.Check_DataBase("sklad"))

{

if (DB.Check_Tables("sklad", tables))

{

DB.DataFromBaseToDataGridView(dataGridView1, "select");

DB.DataFromBaseToDataGridView(dataGridView2, "select");

DB.DataFromBaseToDataGridView(dataGridView3, "select");

DB.DataFromBaseToDataGridView(dataGridView4, "select");

DB.DataFromBaseToDataGridView(dataGridView5, "select");

DB.DataFromBaseToDataGridView(dataGridView6, "select");

}

}

else

{

MessageBox.Show("Корневая База Данных не найдена", "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

else

{

MessageBox.Show("Подключение к Базе Данных не удалось", "Ошибка MySQL DataBase Class Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

Очистка полей формы от ввода данных

private void button1_Click(object sender, EventArgs e)

{

textBox1.Text = "";

textBox2.Text = "";

textBox3.Text = "";

textBox4.Text = "";

textBox20.Text = "";

textBox19.Text = "";

DB.DataFromBaseToDataGridView(dataGridView1, "select");

}

Проверка ввода в поле

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

{

if (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8))

{

e.Handled = true;

}

}

Проверка ввода в поле

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)

{

if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (((TextBox)sender).Text.IndexOf(".") == -1) && (((TextBox)sender).Text.Length != 0)))

{

if (e.KeyChar != (char)Keys.Back)

{

e.Handled = true;

}

}

}

Проверка ввода в поле

private void textBox4_KeyPress(object sender, KeyPressEventArgs e)

{

if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (((TextBox)sender).Text.IndexOf(".") == -1) && (((TextBox)sender).Text.Length != 0)))

{

if (e.KeyChar != (char)Keys.Back)

{

e.Handled = true;

}

}

}

Очистка полей формы от данных

private void button5_Click(object sender, EventArgs e)

{

textBox5.Text = "";

textBox6.Text = "";

textBox7.Text = "";

textBox8.Text = "";

textBox21.Text = "";

textBox22.Text = "";

}

Ввод новой позиции

private void button2_Click(object sender, EventArgs e)

{

if (textBox5.Text != "" && textBox6.Text != "" && textBox7.Text != "" && textBox21.Text != "" && textBox22.Text != "" && textBox8.Text == "")

{

DB.CommandText = "INSERT INTO `positions` (`id`, `name`, `volume_x`, `volume_y`, `volume_z`, `weight`)VALUES(NULL, '" + textBox7.Text.Trim() + "'," + textBox6.Text.Trim() + "," + textBox21.Text.Trim() + "," + textBox22.Text.Trim() + "," + textBox5.Text.Trim() + ")";

 

if (DB.RunExecuteCommand() >= 1)

{

 

DB.DataFromBaseToDataGridView(dataGridView1, "select");

}

}

else

{

MessageBox.Show("Вы заполнили не все данные", "Ошибка ввода данных", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

 

}

 

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

{

if(e.RowIndex >=0)

{

textBox7.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();

textBox8.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();

textBox6.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();

textBox5.Text = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString();

textBox21.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();

textBox22.Text = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString();

}

}

Редактирование уже существующих позиций

private void button3_Click(object sender, EventArgs e)

{

if (textBox5.Text != "" && textBox6.Text != "" && textBox7.Text != "" && textBox8.Text != "" && textBox21.Text != "" && textBox22.Text != "")

{

DB.CommandText = "UPDATE `positions` SET `name` = '" + textBox7.Text.Trim() + "', `volume_x` = " + textBox6.Text.Trim() + ", `volume_y` = " + textBox21.Text.Trim() + ", `volume_z` = " + textBox22.Text.Trim() + ", `weight` = " + textBox5.Text.Trim() + " WHERE (`id` = " + textBox8.Text.Trim() + ")";

 

if (DB.RunExecuteCommand() >= 1)

{

textBox5.Text = "";

textBox6.Text = "";

textBox7.Text = "";

textBox8.Text = "";

textBox21.Text = "";

textBox22.Text = "";

DB.DataFromBaseToDataGridView(dataGridView1, "select");

}

}

else

{

MessageBox.Show("Вы заполнили не все данные", "Ошибка ввода данных", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

 

Проверка ввода в поле

private void textBox6_KeyPress(object sender, KeyPressEventArgs e)

{

if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (((TextBox)sender).Text.IndexOf(".") == -1) && (((TextBox)sender).Text.Length != 0)))

{

if (e.KeyChar != (char)Keys.Back)

{

e.Handled = true;

}

}

}

Проверка ввода в поле

private void textBox5_KeyPress(object sender, KeyPressEventArgs e)

{

if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (((TextBox)sender).Text.IndexOf(".") == -1) && (((TextBox)sender).Text.Length != 0)))

{

if (e.KeyChar != (char)Keys.Back)

{

e.Handled = true;

}

}

}

Удаление позиции

private void button4_Click(object sender, EventArgs e)

{

if (textBox5.Text != "" && textBox6.Text != "" && textBox7.Text != "" && textBox8.Text != "" && textBox21.Text != "" && textBox22.Text != "")

{

if (DB.CheckFieldValue("positions", "id", textBox8.Text))

{

if (MessageBox.Show("Удалить запись? После удаления, произведите удаление связанных записей", "Подтвердить удаление записи", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)

{

DB.CommandText = "DELETE FROM `positions` WHERE(`id` = " + textBox8.Text + ")";

if (DB.RunExecuteCommand() >= 1)

{

textBox5.Text = "";

textBox6.Text = "";

textBox7.Text = "";

textBox8.Text = "";

textBox21.Text = "";

textBox22.Text = "";

DB.DataFromBaseToDataGridView(dataGridView1, "select");

}

}

}

else

{

MessageBox.Show("Такого значения нет в Базе Данных", "Некорректные данные при удалении", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

}

else

{

MessageBox.Show("Вы заполнили не все данные", "Ошибка ввода данных", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

Поиск позиции по коду

private void textBox1_TextChanged(object sender, EventArgs e)

{

if (textBox1.Text != "")

{

DB.CommandText = "SELECT * FROM `positions` WHERE(`id` = '" + textBox1.Text + "')";

DB.DataFromBaseToDataGridView(dataGridView1, "user_select");

}

else

{

DB.CommandText = "SELECT * FROM `positions`";

DB.DataFromBaseToDataGridView(dataGridView1, "select");

}

}

Поиск позиции по габаритам

private void textBox3_TextChanged(object sender, EventArgs e)

{

if (textBox3.Text != "" && textBox19.Text != "" && textBox20.Text != "")

{

DB.CommandText = "SELECT * FROM `positions` WHERE(`volume_x` = '" + textBox3.Text + "' AND `volume_y` = '" + textBox19.Text + "' AND `volume_z` = '" + textBox20.Text + "')";

DB.DataFromBaseToDataGridView(dataGridView1, "user_select");

}

else

{

DB.CommandText = "SELECT * FROM `positions`";

DB.DataFromBaseToDataGridView(dataGridView1, "select");

}

}

Поиск позиции по весу

private void textBox4_TextChanged(object sender, EventArgs e)

{

if (textBox4.Text != "")

{

DB.CommandText = "SELECT * FROM `positions` WHERE(`weight` = '" + textBox4.Text + "')";

DB.DataFromBaseToDataGridView(dataGridView1, "user_select");

}

else

{

DB.CommandText = "SELECT * FROM `positions`";

DB.DataFromBaseToDataGridView(dataGridView1, "select");

}

}

Поиск позиций по расположению

private void textBox2_TextChanged(object sender, EventArgs e)

{

if (textBox2.Text != "")

{

DB.CommandText = "SELECT * FROM `positions` WHERE(`name` = '" + textBox2.Text + "')";

DB.DataFromBaseToDataGridView(dataGridView1, "user_select");

}

else

{

DB.CommandText = "SELECT * FROM `positions`";

DB.DataFromBaseToDataGridView(dataGridView1, "select");

}

}

Очитка полей формы

private void button10_Click(object sender, EventArgs e)

{

textBox13.Text = "";

textBox14.Text = "";

textBox15.Text = "";

textBox16.Text = "";

textBox17.Text = "";

textBox23.Text = "";

textBox24.Text = "";

}

Очистка полей формы

private void button6_Click(object sender, EventArgs e)

{

textBox9.Text = "";

textBox10.Text = "";

textBox11.Text = "";

textBox12.Text = "";

textBox18.Text = "";

textBox25.Text = "";

textBox26.Text = "";

}

Проверка ввода в поле

private void textBox11_KeyPress(object sender, KeyPressEventArgs e)

{

if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (((TextBox)sender).Text.IndexOf(".") == -1) && (((TextBox)sender).Text.Length != 0)))

{

if (e.KeyChar != (char)Keys.Back)

{

e.Handled = true;

}

}

}

Проверка ввода в поле

private void textBox9_KeyPress(object sender, KeyPressEventArgs e)

{

if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (((TextBox)sender).Text.IndexOf(".") == -1) && (((TextBox)sender).Text.Length != 0)))

{

if (e.KeyChar != (char)Keys.Back)

{

e.Handled = true;

}

}

}

Проверка ввода в поле

private void textBox16_KeyPress(object sender, KeyPressEventArgs e)

{

if (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8))

{

e.Handled = true;

}

}

Проверка ввода в поле

private void textBox14_KeyPress(object sender, KeyPressEventArgs e)

{

if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (((TextBox)sender).Text.IndexOf(".") == -1) && (((TextBox)sender).Text.Length != 0)))

{

if (e.KeyChar != (char)Keys.Back)

{

e.Handled = true;

}

}

}

Проверка ввода в поле

private void textBox13_KeyPress(object sender, KeyPressEventArgs e)

{

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.