Академический Документы
Профессиональный Документы
Культура Документы
ОТЧЕТ ПО ПРАКТИКЕ
ОП Т.795011
2020
1
2
Содержание
1 Программа практики 3
2 Объектно-ориентированный анализ и проектирование системы 4
2.1 Сущность задачи 4
2.2 Проектирование модели 5
3 Вычислительная система 11
3.1 Требования к аппаратным и операционным ресурсам 11
3.2 Инструменты разработки 11
4 Проектирование задачи 13
4.1 Требования к приложению 13
4.2 Концептуальный прототип 14
4.3 Организация данных 16
4.4 Функции и элементы управления 19
4.5 Проектирование справочной системы приложения 21
5 Описание программного средства 23
5.1 Общие сведения 23
5.2 Функциональное назначение 23
5.3 Входные и выходные данные 24
6 Программирование на языке С# в среде VisualStudio 25
6.1 Технические требования 25
6.2 Функциональное тестирование 25
7 Применение 31
7.1 Назначение программы 31
7.2 Условия применения 31
7.3 Справочная система 31
Заключение 36
Список информационных источников 37
Приложение А Текст программных модулей 38
ОП Т.795011
Изм. Лист № докум. Подпись Дата
Разраб. Гром А.А. Лит. Лист Листов
Провер. Малафей Д.И Отчет по практике 2 54
Т. Контр. В.Ю.гмротомв по разработке и
Н. Контр. сопровождению КБП
Утверд.
3
1 Программа практики
4
2 Объектно-ориентированный анализ и проектирование системы
6
2.2 Проектирование модели
7
Рисунок 1.2 – ERD-диаграмма по Чену
8
– плита;
– стиральная машина;
– телевизор.
Диаграмма вариантов использования – диаграмма, отражающая отношения
между актерами и прецедентами и являющаяся составной частью модели прецедентов,
позволяющей описать систему на концептуальном уровне.
Прецедент – возможность моделируемой системы (часть её функциональности),
благодаря которой пользователь может получить конкретный, измеримый и нужный ему
результат. Прецедент соответствует отдельному сервису системы, определяет один из
вариантов её использования и описывает типичный способ взаимодействия пользователя с
системой. Варианты использования обычно применяются для спецификации
внешних требований к системе.
Основное назначение диаграммы – описание функциональности и поведения,
позволяющее заказчику, конечному пользователю и разработчику совместно обсуждать
проектируемую или существующую систему.
Отношение расширения – определяет взаимосвязь экземпляров отдельного варианта
использования с более общим вариантом, свойства которого определяются на основе
способа совместного объединения данных экземпляров; отношение является направленным
и указывает, что применительно к отдельным вариантам использования выполнены
конкретные условия и что один из вариантов может присоединять к своему поведению
некоторое дополнительное поведение, определенное для другого варианта; отношение
расширения между вариантами использования обозначается пунктирной линией со стрелкой,
направленной от варианта использования, который является расширением .
Отношение включения – указывает, что некоторое заданное поведение для одного
варианта использования включается в качестве составного компонента в последовательность
поведения другого варианта использования. Данное отношение является направленным
бинарным отношением, при котором, когда экземпляр первого варианта использования в
процессе своего выполнения достигает точки включения в последовательность поведения
экземпляра второго варианта использования, он выполняет последовательность действий,
определяющий поведение второго варианта, после чего продолжает выполнение действий
своего поведения. Один вариант может быть включен в несколько других вариантов, а также
включать в себя другие варианты.
На данной диаграмме имеется два «актёра» – пользователь и администратор.
Пользователь имеет такие варианты использования как:
– регистрация;
– авторизация;
– просмотр объявления;
– добавление объявления;
– просмотр характеристик объявления;
– просмотр телефона продавца;
– поиск объявления.
Администратор имеет такие варианты использования как
– просмотр списка объявления;
– просмотр списка пользователей;
– изменение характеристик объявления;
– удаление объявления;
– удаление пользователя.
В основном при создании диаграммы рассматривались такие связи как «расширения»,
т.е. при выборе и выполнении одного определенного варианта, у пользователя или
администратора расширяется диапазон выбора различных функций (добавляются
дополнительные поведения).
Диаграмма вариантов использования располагается на листе 1 в графической части.
Диаграмма классов – структурная диаграмма языка моделирования UML,
демонстрирующая общую структуру иерархии классов системы, их коопераций, атрибутов
9
(полей), методов, интерфейсов и взаимосвязей между ними. Широко применяется не только
для документирования и визуализации, но также для конструирования посредством прямого
или обратного проектирования.
Целью создания диаграммы классов является графическое представление статической
структуры декларативных элементов системы (классов, типов и т. п.) Она содержит в себе
также некоторые элементы поведения (операции), однако их динамика должна быть
отражена на диаграммах других видов (диаграммах коммуникации, диаграммах состояний).
Для удобства восприятия диаграмму классов можно также дополнить
представлением пакетов, включая вложенные.
Отношение агрегации имеет место между несколькими классами в том случае, если
один из классов представляет собой некоторую сущность, включающую в себя в качестве
составных частей другие сущности. Отношение композиции служит для выделения
специальной формы отношения, при которой составляющие части в некотором смысле
находятся внутри целого.
Классы «Приложение» и «Недвижимость» соединены между собой отношением
композиции. «Приложение» и «Пользователь», «Сортировка» и «Недвижимость» –
отношением агрегации. «Недвижимость» и «Вывод информации» – отношением ассоциации.
Обусловлено это тем, что отношение композиции связывает классы, которые обязательны и
являются основными компонентами программы. В то время как те классы, которые связаны
отношением агрегации, наоборот, являются вторыми по приоритету (необязательны).
Классы, связанные отношением ассоциации, показывают, что объекты одной сущности
(класса) связаны с объектами другой сущности таким образом, что можно перемещаться от
объектов одного класса к другому.
Диаграмма классов программы представлены в виде таблице 1.1.
Таблица 1.1 – Диаграмма классов
Название класса Поля класса Функции класса
Пользователь Name, Surname, Register (Name, Surname,
Username, Password Username, Password), Login
(Username, Password);
Приложение Login (Username,
-
Password);
Недвижимость Название, Год, Этаж,
Площадь, Количество
Add(), Del();
комнат, Телефон, Описание,
Цена, Улица
Сортировка SortPrice(), SortName(),
- SortKolvo(), SortEtash(),
SortYear(), SortPloshad();
Вывод информации - ShowInfo ();
Диаграмма классов располагается на листе 2 в графической части.
Диаграмма последовательности – диаграмма, на которой для некоторого набора
объектов на единой временной оси показан жизненный цикл какого-либо определённого
объекта (создание-деятельность-уничтожение некой сущности) и взаимодействие актеров
(действующих лиц) в рамках какого-либо определённого прецедента (отправка запросов и
получение ответов). Используется в языке UML.
Основными элементами диаграммы последовательности являются обозначения
объектов (прямоугольники с названиями объектов), вертикальные «линии жизни»,
отображающие течение времени, прямоугольники, отражающие деятельность объекта или
исполнение им определенной функции (прямоугольники на пунктирной «линии жизни»), и
стрелки, показывающие обмен сигналами или сообщениями между объектами.
На данной диаграмме показана последовательность действий при регистрации или
авторизации в программу. Также показан специальный блок действий, который показывает
альтернативные варианты поведения в программе. В альтернативном блоке показано, как
взаимодействует между собой приложение, база данных и функции приложения. Таким
10
образом можно просмотреть, как поведет себя программа, если пользователь введёт
неверные данные при регистрации.
Диаграмма последовательности располагается на листе 3 в графической части.
Диаграмма деятельности – UML диаграмма, на которой показаны действия, состояния
которых описано на диаграмме состояний. Под деятельностью понимается спецификация
исполняемого поведения в виде координированного последовательного и параллельного
выполнения подчинённых элементов – вложенных видов деятельности и отдельных
действий, соединённых между собой потоками, которые идут от выходов одного узла ко
входам другого. Диаграммы деятельности используются при моделировании бизнес-
процессов, технологических процессов, последовательных и параллельных вычислений. В
диаграмме присутствует начало и конец какого-либо действия. Отмечается начало действия
– закрашенным черным кружком и на границе кружка – черная линия. Конец действия – чуть
более уменьшенный черный кружок и с небольшим отступом на границах – красная линия.
Диаграмма деятельности располагается на листе 4 в графической части.
Диаграмма компонентов – элемент языка моделирования UML, статическая
структурная диаграмма, которая показывает разбиение программной системы на
структурные компоненты и связи (зависимости) между компонентами. В качестве
физических компонентов могут выступать файлы, библиотеки, модули, исполняемые файлы,
пакеты.
С помощью диаграммы компонентов представляются инкапсулированные классы
вместе с их интерфейсными оболочками, портами и внутренними структурами (которые
тоже могут состоять из компонентов и коннекторов).
Компоненты связываются через зависимости, когда соединяется требуемый
интерфейс одного компонента с имеющимся интерфейсом другого компонента. Таким
образом иллюстрируются отношения клиент-источник между двумя компонентами.
Зависимость показывает, что один компонент предоставляет сервис, необходимый
другому компоненту. Зависимость изображается стрелкой от интерфейса или порта клиента
к импортируемому интерфейсу.
Когда диаграмма компонентов используется, чтобы показать внутреннюю структуру
компонентов, предоставляемый и требуемый интерфейсы составного компонента могут
делегироваться в соответствующие интерфейсы внутренних компонентов.
Делегация показывает связь внешнего контракта компонента с внутренней
реализацией этого поведения внутренними компонентами.
На данной диаграмме показан состав программных компонентов, в роли которых
может выступать исходный, бинарный и исполняемый код, а также установить зависимости
между ними. На диаграмме представлен стереотип source – файл с исходным текстом
программы. К данному стереотипу относятся такие файлы
– «AdminPanel.cs» – файл админ панели;
– «InfoPanel.cs» – файл информации объявления;
– «ElProperty.cs» – файл списка объявления.
К стереотипу executable – программа (исполняемый файл), относятся такие файлы:
– «SIGN_IN.cs» – файл окна авторизации;
– «SIGN_UP.cs» – файл окна регистрации;
– «Add.cs» – файл окна добавления объявления;
– «Form1.cs» – файл главного окна программы.
К стереотипу document – остальные файлы (файл справки), относится файл:
«ReferanceSystem.cs» – файл справочной системы.
11
3 Вычислительная система
13
4 Проектирование задачи
При нажатии на кнопку SIGN IN откроется окно с полями для ввода данных. На
рисунке 3.3 предоставляется макет окна входа в программу.
15
После авторизации на главную страницу появится кнопка Добавить объявление, при
нажатии которой откроется окно с полями ввода данных объявления. На рисунке 4.5, 4.6
предоставляется макет окна программы.
При нажатии на кнопку Регистрация откроется окно с полями для ввода данных. На
рисунке 4.6 предоставляется макет окна регистрации.
17
Имя поля Тип поля Размер поля, байт Описание поля
Firstname varchar 255 Фамилия пользователя
connection.Open();
command.ExecuteNonQuery();
connection.Close();
this.Hide();
SIGN_IN sIGN_IN = new SIGN_IN();
sIGN_IN.Show();
}
else
{
if (TextBoxName.Text == "Name")
TextBoxName.BorderColor = Color.Red;
if (TextBoxSurname.Text == "Surname")
TextBoxSurname.BorderColor = Color.Red;
if (TextBoxPassword.Text == "Password")
TextBoxPassword.BorderColor = Color.Red;
if (TextBoxUsername.Text == "Username")
TextBoxUsername.BorderColor = Color.Red;
panelInfo.Visible = true;
labelMessenge.ForeColor = Color.Red;
19
labelMessenge.Text = "Есть пустые поля";
}
}
catch
{
panelInfo.Visible = true;
labelMessenge.ForeColor = Color.Red;
labelMessenge.Text = "Пользователь с таким UserName уже
зарегестрирован";//вывод ошибки
connection.Close();
}
}
Для выполнения функции «Добавить объявление» необходимо щелчок мыши по
кнопке «Опубликовать». Данная реализация функции была реализована в средства Visual
Studio Professional 2019. Функция позволяет пользователю разместить свое объявление в
программе. Код представлен ниже [9].
private void btnAdd_Click(object sender, EventArgs e)
{
try
{
Photo1 = PhotoBD(PictureBox);
Photo2 = PhotoBD(PictureBox2);
Photo3 = PhotoBD(PictureBox3);
Photo4 = PhotoBD(PictureBox4);
OleDbCommand command = new OleDbCommand($"INSERT INTO Announcement
(uUsername, aAdress, aFloorEnd, aFloor, aCountRoom, aTipProperty, aSeller, aPhone,
aNameOwner, aTotalArea, aKitchenArea, aTipRepairs, aDiscription, aPrice, aPrice30, aPhoto,
aPhoto2, aPhoto3, aPhoto4) VALUES ({gunaLabel5.Text}, '{TextBoxAdress.Text}',
{gunaNumeric3.Value}, {gunaNumeric1.Value}, {gunaNumeric2.Value}, '{ComboBoxTio.Text}',
'{ComboBoxSeller.Text}', '{TextBoxPhone.Text}', '{TextBoxNameSell.Text}', '{TextBox1.Text}',
'{TextBox2.Text}', '{ComboBox1.Text}', '{TextBoxDiscription.Text}',
{int.Parse(TextBoxPrice.Text)}, {int.Parse(TextBoxPrice30.Text)}, @photo, @photo2, @photo3,
@photo4)", connection);//запрос SQL на добавления нового объявления
command.Parameters.AddWithValue("@photo", Photo1);
command.Parameters.AddWithValue("@photo2", Photo2);
command.Parameters.AddWithValue("@photo3", Photo3);
command.Parameters.AddWithValue("@photo4", Photo4);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
ElVisible();
this.Close();
}
catch(NullReferenceException nex)
{
MessageBox.Show(nex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
connection.Close();
}
20
Для корректной работы с приложением требуется обеспечить пользователя
справочной системой, в которой будут приведены приемы работы с приложением,
включающие данные о том, что произойдёт после нажатия на определенную кнопку или при
выборе пункта меню.
Справочная система необходима для ознакомления с программой. В ней должна
присутствовать информация, которая может напомнить принцип работы программы.
Структура справочной системы:
– введение – предварительные сообщения общего характера, предпосылаемые
произведению, с целью ввести пользователя в курс программы;
– типы недвижимости – описаны все типы недвижимости какие пользователь может
найти в программе;
– основной интерфейс программы – описаны главные функции программы;
– контекстное меню – описано как пользоваться меню программы;
– параметры объявления – описано что где располагается в характеристиках
объявления;
– добавление объявления – описано что надо для добавления объявления и как
опубликовать объявление;
– о программе – описано что собой представляет программа.
Справочная система программного средства представляет собой отдельное окно с
полным описанием основных функций программы. Чтобы загрузить справочную систему,
нужно нажать кнопку со знаком вопроса в правой части ленты. В справочной системе даны
ответы на типичные вопросы, возникающие при работе с приложением, что, несомненно,
должно помочь при освоении программного средства.
Справочная система будет разработана в Visual Studio Professional 2019.
21
5 Описание программного средства
5.1 Общие сведения
22
5.3 Входные и выходные данные
23
6 Методика испытаний
24
Тест-кейс для авторизации приведена в таблице 6.1.
25
Рисунок 6.3 – Главное окно программы
Ожидаемый: открытие
информации объявления.
Просмотр 1. Нажать на объявление
«1к 23/123м 3/8» Фактический: фактический
2 информации
объявления «улица Леси Украинки 4 к1» результат представлен на
рисунке 5.4, соответствует
ожидаемому результату, все
условия соблюдены.
26
Рисунок 6.4 – Фактический результат
28
Тест-кейс для проведения авторизации приведена в таблице 6.4.
29
Рисунок 6.9 – Фактический результат
30
Продолжение таблицы 6.5 – Тест-кейс для добавления объявления.
№ Модель / Функция Шаги воспроизведения Результат
12. В поле «Общая площадь»
ввести «59»
13. В поле «Площадь кухни»
ввести «9»
14. В поле «Ремонт» ввести
«Евроремонт»
15. В поле «Описание»
ввести «Продается 2к квартира с
отличным ремонтом для
покупателей со вкусом к
жизни!!! В квартире сделан
качественный ремонт в одном
стилистическом направлении.
Очень удобная планировка:
комнаты светлые и просторные, Окно с заполненными
комфортная кухня с рабочей данными представлен на
поверхностью у окна и рисунке 5.10
просторная прихожая. Ремонт
3
Добавление Фактический: фактический
объявления выполнен с использованием
результат представлен на
самых качественных материалов,
рисунке 5.11, соответствует
сантехника премиум класса,
ожидаемому результату, все
плитка – производитель Италия.
условия соблюдены.
Пол – пакетная доска,
производитель Швеция.
Установлена техника лучших
мировых производителей.
Межкомнатные двери –
невидимки.»
16. В поле «Цена за сутки»
ввести «50»
17. В поле «Цена за 30 дней»
ввести «800»
18. В поле «Цена за 30 дней»
ввести «800»
19. Нажать на кнопку
«Опубликовать»
31
Рисунок 6.10 – Окно добавление объявления
32
Таблица 5.6 – Тест-кейс для проведения сортировки
№ Модель / Функция Шаги воспроизведения Результат
33
Рисунок 6.13 – Фактический результат
34
7 Применение
35
Рисунок 7.1 – Введение
36
На рисунке 7.4 представлено контекстное меню.
37
На рисунке 7.6 представлено добавление объявления.
38
Заключение
39
Список информационных источников
40
Приложение А
(обязательное)
Текст программных модулей
//Form1.cs
using System;
using System.Data.OleDb;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace TheProperty
{
public partial class Form1 : Form
{
OleDbConnection connection = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb;"); //строка
подключения к базе данных
public Form1()
{
InitializeComponent();
SearchPanel.Location = new Point(21, 11);
this.ActiveControl = UserName;
PrintAnnouncement("SELECT * FROM Announcement"); //запрос в базу данных
_obj = this;
}
Point lastPoint;
private void TopPanel_MouseDown(object sender, MouseEventArgs e)
{
this.ActiveControl = UserName;
lastPoint = new Point(e.X, e.Y);
}
42
{
tableLayoutPanel1.Visible = false;
SearchPanel.Location = new Point(60, 11);
AdminPanel Item = new AdminPanel();
Item.Dock = DockStyle.Fill;
Info.Controls.Add(Item);
PrintCount(Item);
}
43
}
tableLayoutPanel1.Controls.Clear();
while (reader.Read())
{
ElProperty Item = new ElProperty();
44
$"aCountRoom>={gunaNumeric4.Value} and aCountRoom <= {gunaNumeric3.Value} or
"+
$"aSeller='{ComboBoxSeller.Text}' or " +
$"aFloorEnd={gunaNumeric5.Value}");//запрос в базу данных
}
//SIGN_UP.cs
using System;
using System.Data.OleDb;
using System.Drawing;
using System.Windows.Forms;
namespace TheProperty
{
public partial class SIGN_UP : Form
{
OleDbConnection connection = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb;");//строка
подключения к базе данных
public SIGN_UP()
{
InitializeComponent();
this.ActiveControl = Label;
}
45
{
if (TextBoxName.Text != "Name" && TextBoxSurname.Text != "Surname" &&
TextBoxUsername.Text != "Username" && TextBoxPassword.Text != "Password")//проверка на
заполненые данные
{
OleDbCommand command = new OleDbCommand("INSERT INTO [User]
(uName, uSurname, uUsername, uPassword) VALUES ('" + TextBoxName.Text + "', '" +
TextBoxSurname.Text + "', '" + TextBoxUsername.Text + "', '" + TextBoxPassword.Text + "')",
connection);//запрос добавления в базу данных пользователя
connection.Open();
command.ExecuteNonQuery();
connection.Close();
this.Hide();
SIGN_IN sIGN_IN = new SIGN_IN();
sIGN_IN.Show();
}
else
{
if (TextBoxName.Text == "Name")
TextBoxName.BorderColor = Color.Red;
if (TextBoxSurname.Text == "Surname")
TextBoxSurname.BorderColor = Color.Red;
if (TextBoxPassword.Text == "Password")
TextBoxPassword.BorderColor = Color.Red;
if (TextBoxUsername.Text == "Username")
TextBoxUsername.BorderColor = Color.Red;
panelInfo.Visible = true;
labelMessenge.ForeColor = Color.Red;
labelMessenge.Text = "Есть пустые поля";
}
}
catch
{
panelInfo.Visible = true;
labelMessenge.ForeColor = Color.Red;
labelMessenge.Text = "Пользователь с таким UserName уже зарегестрирован";
//вывод ошибки
connection.Close();
}
}
Point lastPoint;
private void SIGN_UP_MouseDown(object sender, MouseEventArgs e)
{
lastPoint = new Point(e.X, e.Y);
46
}
47
TextBoxUsername.ForeColor = Color.Black;
}
}
//SIGN_IN.cs
using System;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Windows.Forms;
namespace TheProperty
{
public partial class SIGN_IN : Form
{
OleDbConnection connection = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb;");//строка
подключения в базу данных
public SIGN_IN()
{
InitializeComponent();
this.ActiveControl = Label;
48
}
oleDbDataAdapter.Fill(dataTable);
49
if (TextBoxPassword.Text == "Password")
TextBoxPassword.BorderColor = Color.Red;
if (TextBoxUser.Text == "Username")
TextBoxUser.BorderColor = Color.Red;
ErrorPanel.Visible = true;
Messenge.ForeColor = Color.Red;
Messenge.Text = "Есть пустые поля";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
}
}
Point lastPoint;
private void SIGN_IN_MouseDown(object sender, MouseEventArgs e)
{
lastPoint = new Point(e.X, e.Y);
}
50
TextBoxPassword.Text = "";
TextBoxPassword.ForeColor = Color.Black;
}
}
//ElProperty.cs
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data.OleDb;
using System.IO;
namespace TheProperty
{
public partial class ElProperty : UserControl
{
public OleDbConnection myConnection = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb;");//строка
подключения к базе данных
public ElProperty()
{
InitializeComponent();
}
51
myConnection.Open();
OleDbDataReader reader = command.ExecuteReader();
reader.Close();
myConnection.Close();
}
catch
{
myConnection.Close();
}
}
}
}
}
52
private void gunaPictureBox4_Click(object sender, EventArgs e)
{
if (changet2)
{
gunaPictureBox4.Image = Properties.Resources.eye_32px;
}
else
{
gunaPictureBox4.Image = Properties.Resources.eye_64px;
}
changet2 = !changet2;
}
53
'{ComboBoxTio.Text}', '{ComboBoxSeller.Text}', '{TextBoxPhone.Text}',
'{TextBoxNameSell.Text}', '{TextBox1.Text}', '{TextBox2.Text}', '{ComboBox1.Text}',
'{TextBoxDiscription.Text}', {int.Parse(TextBoxPrice.Text)}, {int.Parse(TextBoxPrice30.Text)},
@photo, @photo2, @photo3, @photo4)", connection);//запрос добавления объявления в базу
данных
command.Parameters.AddWithValue("@photo", Photo1);
command.Parameters.AddWithValue("@photo2", Photo2);
command.Parameters.AddWithValue("@photo3", Photo3);
command.Parameters.AddWithValue("@photo4", Photo4);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
ElVisible();
this.Close();
}
catch(NullReferenceException nex)
{
MessageBox.Show(nex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
connection.Close();
}
54
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
}
}
55