Диплом: Разработка автоматизированной системы управления технологическими процессами в компании "MedicalDeviceSupport"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
52
Рисунок 2.7 - Дерево вызова процедур и программ
Далее рассмотрим некоторые алгоритмы и примеры кода, которые
позволяют осуществлять некоторые из функций разработанного
программного обеспечения:
53
Таблица 2.14 – Пример кода взаимодействия системы с базой данных
static class My_GetTable
{
static OleDbCommand My_OleDbComm = new OleDbCommand();
static OleDbConnection My_OleDbConn = new OleDbConnection();
static OleDbDataAdapter My_OleDbAdapter = new OleDbDataAdapter();
// Устанавливает соединение с базой данных
static public _DataTable Get(string quary_text)
{
My_OleDbConn.ConnectionString = UserConST;
My_OleDbComm.Connection = OleDbConn;
My_DataTable MainDataTable = new DataTable();
My_OleDbAdapter.SelectCommand = new OleDbCommand(quary, OleDbConn);
My_OleDbAdapter.Fill(dt);
try
{
My_OleDbConn.Open();
}
Catch {}
My_OleDbConn.Close();
return MainDataTable;
}
}
Данный метод, с помощью библиотеки oledb осуществляет доступ
приложения к базе данных. Рассмотрим основные поля oledb с таблицы 2.14:
My_OleDbCommand – Представляет оператор SQL или хранимую
процедуру, применяемую к источнику данных.
My_OleDbConnection – Представляет открытое подключение к
источнику данных.
My_OleDbDataAdapter – Представляет набор команд данных и
подключение базы данных, которые используются для
заполнения и обновления источника данных.
Таблица 2.15 – Пример кода авторизации
if (GetTabele.Get("SELECT * FROM Аккаунт WHERE Логин='" + tb_Login.Text + "' AND Пароль='" +
tb_Pass.Text + "'").Rows.Count > 0)
{if (F_Main.Created == true) F_Main.Close();
F_Main = new F_Main();
F_Main.Show();
this.Close(); }
else
{
DialogResult dres = MessageBox.Show("Неверный логин или пароль", "Ошибка авторизации",
MessageBoxButtons.OK, MessageBoxIcon.Information);
{
tb_Pass.PasswordChar = '\0';
tb_Pass.Text = "Пароль";
tb_Login.Text = "Логин";
}
}
54
Данный метод отвечает за авторизацию пользователей в системе, а
именно за проверку пары логин/пароль и в случаи их соответствия с ранее
внесенными в базу данных пользователями – выдачи прав на пользование
некоторыми функциями программы.
Рисунок 2.8 -схема авторизации
Таблица 2.16 – Запрос, отвечающий за внесения клиентов (заказчиков) в
систему
GetTabele.Get("INSERT INTO Заказчик (Имя, Фамилия, Отчество, [Дата рождения], Адрес,
[Номер телефона]) VALUES ('" + tb_Name.Text + "','" + tb_Surname.Text + "','" +
MiddleName + "','" + date + "','" + address + "','" + mtb_Phone.Text + "')");
Параметры tb_Name.Text – имя заказчика, tb_Surname.Text – фамилия
заказчика, MiddleName – отчество заказчика, date – дата рождения (не
обязательный параметр), address – адрес заказчика, mtb_Phone.Text – номер
телефона заказчика.
55
Таблица 2.17 – Запрос на выборку заказов с базы данных
"SELECT з.Код, з.Заказчик, то.[Тип обслуживания] , вп.[Вид проблемы] ,тт.[Тип
техники]"+
" , з.[Наименование техники], з.[Дата регистрации], з.Комментарий FROM Заказ
з, [Тип обслуживания] то, [Вид проблемы] вп, [Тип техники] тт," +
"з LEFT JOIN то ON з.[Тип обслуживания]=то.Код, з LEFT JOIN вп ON з.[Вид
проблемы]=вп.Код, з LEFT JOIN тт ON з.[Тип техники]=тт.Код"
Таблица 2.18 – Метод запуска сервера
var thread2 = new Thread(() =>
{
serviceHostClient = new
ServiceHost(typeof(Functional),
new Uri("http://localhost:9404/AccountingSystemMenager"));
serviceHostClient.AddServiceEndpoint(typeof(IFunctional), new BasicHttpBinding(), "");
serviceHostClient.Open();
});
thread2.Start();
Данный метод с помощью служб WCF осуществляет запуск
прослушивания соединения в поиске входящих запросов из клиентских
приложений.
В связи с тем, что к серверу одновременно может обращаться
несколько клиентов и вся логика работы с базой данных, такая как выборка
данных и их редактирование выполняет именно сервер, уместно было
воспользоваться такой возможностью как распараллеливание задач с
использованием технологии TPL. (Task Parallel Library). Данная библиотека
позволяет распараллелить задачи и выполнять их сразу на нескольких
процессорах, если на целевом компьютере имеется несколько ядер. Кроме
того, упрощается сама работа по созданию новых потоков. Поэтому начиная
с .NET 4.0. рекомендуется использовать именно TPL и ее классы для
создания многопоточных приложений, хотя стандартные средства и класс
Thread по-прежнему находят широкое применение.
В основе библиотеки TPL лежит концепция задач, каждая из которых
описывает отдельную продолжительную операцию. В библиотеке классов
.NET задача представлена специальным классом - классом Task, который
находится в пространстве имен System.Threading.Tasks. Данный класс
описывает отдельную задачу, которая запускается асинхронно в одном из
56
потоков из пула потоков. Хотя ее также можно запускать синхронно в
текущем потоке.
Таблица 2.19 – Пример использование TPL в коде
public IEnumerable<OrderModel> GetAllOrders(OrderModel orderModel)
{using (var db = new HospitalDeviceSupportDataContext())
{ var orders = db.Order.ToList();
if (orderModel != null)
{ if (orderModel.CustomerModel !=null && orderModel.CustomerModel.FullName != "")
{orders = orders.Where(x => orderModel.CustomerModel.FullName.Contains(x.Customer.Name) ||
orderModel.CustomerModel.FullName.Contains(x.Customer.SecondName) ||
orderModel.CustomerModel.FullName.Contains(x.Customer.Surname)).ToList();}
var resultList = new List<OrderModel>();
foreach (var order in orders)
{var orderAddModel = new OrderModel
{ Id = order.Id,
Number = order.Number,
CustomerModel = new CustomerModel
{ Email = order.Customer.Email,
Id = order.Customer.Id,
Name = order.Customer.Name,
Phone = order.Customer.Phone,
FullName = order.Customer.Name + " " + order.Customer.SecondName + " " +
order.Customer.Surname, },
TypeOfJobs = new TypeOfJobsModel
{ Id = order.TypeOfJobs.Id,
Name = order.TypeOfJobs.Name,
Price = order.TypeOfJobs.Price.Value },
DeviceModel = new DeviceModel
{ Id = order.Device.Id,
SerialNumber = order.Device.SerialNumber,
Manufactor = order.Device.Manufacturer,
Type = new TypeModel
{
Id = order.Device.DeviceType.Id,
Name = order.Device.DeviceType.Name
}},
StatusModel = new StatusModel
{ Id = order.Status.id,
Name = order.Status.Name}};
public Task<IEnumerable<OrderModel>> GetAllOrdersAsync(OrderModel orderModel)
{
return Task.Run(() => GetAllOrders(orderModel));
}
Данный метод реализует выборку заказов. Используя данный метод
возможно получить список всех заказов если в качестве параметра метод
принимает null или же определенны заказ особенности которого передаются
в качестве параметра.
Этот же метод содержит алгоритм калькуляции стоимости заказа
исходя из цены работ и цены затраченных материалов.
57
3. ТЕСТИРОВАНИЕ И ВНЕДРЕНИЕ ПРОГРАММНОГО
ПРОДУКТА
3.1. Общие характеристики разработанного продукта
3.1.1. Общие сведения
Система представляет собой клиент-серверное приложение
взаимодействующее с базой данных.
Для корректной работы необходимо иметь предустановленный MS
SQL SERVER 2016.
Система предоставляет возможность:
- Добавлять, редактировать, удалять поставщиков комплектующих
- Добавлять, редактировать, удалять комплектующие
- Добавлять, редактировать, удалять типы устройств
- Добавлять, редактировать, удалять устройства, которые необходимо
отремонтировать
- Добавлять, редактировать, удалять должности сотрудников
- Добавлять, редактировать, удалять в/из списка сотрудников, которые
осуществляют ремонт
- Добавлять, редактировать, удалять типы ремонтных работ
- Добавлять, редактировать заказы с учетом цены комплектующих и
типов работ, а также автоматически удалять заказы в случае удаления из
базы данных информации связанной с заказом такой как, комплектующие и
поставщики, типы работ и т.д.
- Проводить автоматическую калькуляцию цены ремонта в
зависимости от типа проделанных работ и использованных комплектующих.
- Генерировать накладную о результате проведенных работ.
58
3.1.2. Вызов и загрузка
Для того чтобы запустить сервер необходимо открыть приложение с
правами администратора и в режиме администратора авторизоваться:
Рисунок 3.1 – Авторизация в режиме сервера
Серверная часть автоматически устанавливает связь с БД и позволяет
получать наборы данных для клиента.
Для того чтобы подключится к серверу необходимо открыть
приложение и авторизоваться в режиме клиента:
Рисунок 3.2 – Авторизация в режиме клиента
59
3.1.3. Входные данные
Входные данные разработанного программного комплекса можно
описать следующим списком
Входные данные серверной части приложения:
Заказ на выполнение работ
Описание клиента (в терминах системы)
Описание сотрудника, закрепленного за выполнением заказа (в
терминах системы)
Данные о расходных материалах и комплектующих
(используемых в ходе выполнения работ по заказу)
Описание поставщика комплектующих или расходных
материалов (в терминах системы)
Фиксация выполненного заказа в качестве акта выполненных
работ
1) Для примера рассмотрим описание отдельного заказа:
Заказчик услуги: «Павел Прохорович Оригинальный»
Услуга: «Очистка контактных групп и замена элементов питания»
Тип техники: «Холтер давления»
Наименование: «Symens MP-540»
Серийный номер: W2351JJ7
Комментарий: «Замена контактных групп и разъемов не понадобилась,
проведены профилактические работы, элементы питания заменены на
новые»
Дата регистрации: «16.12.2017»
Входные данные клиентской части приложения:
Каталог комплектующих и расходных материалов
Список заказов закрепленных за отдельным тех. работником
(инженер, исполнитель заказа)
3.1.4. Выходные данные
60
В качестве выходных данных генерируется Excel – документ, который
содержит данные заказчика, данные устройства, данные о затраченных
комплектующих, итоговая цена ремонта или обслуживания. К выходным
данным также стоит относить консолидирующие таблицы заказов, которые
хранятся в базе, а также результаты фильтраций по критерию
«Выполненные» или «В работе».
3.2. Описание процесса отладки программы
3.2.1. Методы отладки
Сегодня тестирование это отдельная наука с набором своих методик,
подходов, правил и требований. В зависимости от стратегии выбранной
разработчиком, начальных особенностей архитектуры и других параметров
определяется стратегия тестирования.
Частично тестирование уже проводилось и описано в работе, это
касается построения моделей. В теории тестирования это называют
предпроектным моделированием или ранним тестированием на основе
формальной модели.
Если говорить о функциональном тестировании или тестировании
кода, то тут тоже имеется целый набор разнообразных методов.
Охарактеризуем наиболее широко используемые из этих методов[16,17].
Метод Сандвича
Главная идея метода заключается в том, что тестирование начинается с
двух сторон и сходится в некоторой внутренней точке. Точка состыковки
определяется в каждом случае индивидуально и существенно зависит от типа
программы и ее особенностей. Метод позволяет параллельно тестировать и
глобальную структуру программы (стратегический уровень) и отдельный
функционал (тактический уровень). Точка состыковки обычно находится на
уровне связывания интерфейса и вызова отдельных функциональных единиц
программы.
61
Метод позволяет достаточно быстро перейти к этапу внедрения, методу
свойственны преимущества нисходящих и восходящих подходов в
тестировании.
Метод «белого ящика»
Тестирование методом «белого ящика» обязательно предполагает
наличие полного кода проекта и доступ к структурным и ресурсным
элементам. Метод относится к статическому тестированию. В ходе
реализации этого метода обычно используют модульное тестирование,
покрытие условий и веток – написание тестов, позволяющих как минимум
однократно пройти все условия и ветвления в программе. Функциональное
тестирование в этом методе направленно на исследование внутренней
структуры модулей, корректности вызова отдельных функций, анализ
логических ошибок и коллизий внутри программного кода.
Метод «черного ящика»
Тестирование по методу «черный ящик» предполагает использование
только внешних интерфейсов. В самом простом варианте достаточно UI
пользовательского интерфейса, для более глубокого и основательного теста
нужно API – программный интерфейс, возможность вызова функций
программы из-вне с возможностью передачи различных параметров. Метод
черного ящика абсолютно не имеет отношения к коду и внутренней
структуре, анализ осуществляется только посредством внешнего
взаимодействия. Основная задача этого типа тестирования – проверить
адекватность реакции программы на входящие наборы данных, тестируется
поведение программы в различных ситуациях и соответствие реализации
функции ранее определенным требованиям. В этом методе очень важным
является проектирование самих тестов, так как мы не видим внутренних
процессов, тесты должны быть спроектированы таким образом, что бы при
минимальном количестве тестовых наборов покрыть максимальное
количество возможных ситуаций. Часто при проектировании тестов
используют так называемые классы эквивалентности – разбиение всех

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран