Разработка пользовательского интерфейса — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

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

2020-04-01 117
Разработка пользовательского интерфейса 0.00 из 5.00 0 оценок
Заказать работу

 

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

Интерфейс - в широком смысле слова, это способ взаимодействия между объектами. Интерфейс в техническом смысле слова задаёт параметры, процедуры и характеристики взаимодействия объектов.

Различают:

Интерфейс пользователя - набор методов взаимодействия компьютерной программы и пользователя этой программы.

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

Физический интерфейс - способ взаимодействия физических устройств. Чаще всего речь идёт о компьютерных портах.

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

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

Это не только экран, который видит пользователь. К этим элементам относятся:

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

используемая системой метафора элементы управления системой;

навигация между блоками системы;

визуальный дизайн экранов программы;

средства отображения информации, отображаемая информация и форматы;

устройства и технологии ввода данных;

диалоги, взаимодействие и транзакции между пользователем и компьютером;

обратная связь с пользователем;

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

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

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

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

Окно авторизации пользователя представлено на рисунке 11.

 

Рисунок 11 - Окно авторизации пользователя

 

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

- клиент;

- автомобиль;

- договор;

- продажа;

- оплата;

- услуга;

- заказанная услуга;

- поставка;

- запчасть;

- поставщик;

- сотрудник;

- должность;

- зарплата;

- отчетность.

Также на основном окне пользователь может посмотреть какие операции, когда и в какое время были выполнены. Это представлено на рисунке 12.

 

 

Рисунок 12 - Основное окно программы

 

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

Убедиться в этом можно, посмотрев на рисунок 13.


Рисунок 13 - Окно поиска

 

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

Окно договора представлено на рисунке 14.

 

 

Рисунок 14 - Окно договора

 

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

Окно заказанной услуги представлено на рисунке 15.

 

 

Рисунок 15 - Окно заказанной услуги

 

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

Окно выполненная работа представлено на рисунке 16.

 

 

Рисунок 16 - Окно заказанной работы

 

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

Окно оплаты представлено на рисунке 17.

 

 

Рисунок 17 - Окно оплаты

 

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

 

 

Рисунок 18 - Окно поиска

 

Также в программе предусмотрено добавление данных, это видно из рисунка 19.

 

 

Рисунок 19 - Окно добавления

 

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

Окно редактирования данных представлено на рисунке 20.

 

Рисунок 20 - Окно редактирования

 

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

Окно поставок представлено на рисунке 21.

 

 

Рисунок 21 - Окно поставок

 

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

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

 

 

Рисунок 22 - Окно начисления заработной платы

 

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

Окно формирования отчета представлено на рисунке 23.

 

 

Рисунок 23 - Окно формирования отчёта

 

В программе предусмотрена смена пароля и логина. Окно смены пароля и логина представлено на рисунке 24.

 

 

Рисунок 24 - Смена пароля и логина.

 

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


Работа с БД

 

Для разработки приложения необходимо было создать базу данных, а так же создать безопасное соединение с приложением. Для разработки базы данных был использован MySQL Workbench Community Edition - инструмент для визуального проектирования баз данных, интегрирующий проектирование, моделирование, создание и эксплуатацию БД в единое бесшовное окружение для системы баз данных MySQL. Данная версия программы распространяется под свободной лицензией и содержит весь необходимый набор функций, а именно:

-        Позволяет наглядно представить модель базы данных в графическом виде;

-        Наглядный и функциональный механизм установки связей между таблицами, в том числе "многие ко многим" с созданием таблицы связей;

-        Reverse Engineering - восстановление структуры таблиц из уже существующей на сервере БД (связи восстанавливаются в InnoDB <http://ru.wikipedia.org/wiki/InnoDB>);

-        Удобный редактор SQL запросов, позволяющий сразу же отправлять их серверу и получать ответ в виде таблицы;

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

После создания базы данных необходимо установить соединение с приложением. Так как был использован язык программирования C#, для соединения с СУБД необходима библиотека-коннектор. В качестве библиотеки была выбрана mysql-connector-net 6.8.3 Так же для соединения используется класс MySqlComm. Он представляет инструкцию Transact-SQL или хранимую процедуру, выполняемую над базой данных. Для использования MySQL необходимо подключить MySql. Data. MySqlClient.

Далее необходимо создать новое подключение. Создаем переменную Conn, которая будет использоваться для выполнения запросов к БД, указываем localhost и номер порта для соединения, а так же логин и пароль базы данных:

static MySqlConnection Conn = new MySqlConnection ("Data Source = localhost; Port= 3306; User Id= admin; Password= *******; ");

Создаем переменную Query, которая будет содержать непосредственно текст запроса:static MySqlCommand Query = new MySqlCommand ();

Запрос на выбор используемой базы данных:

{. Open ();

// открывает соединение}(MySqlException SSDB_Exception)

{

// Ошибка - выходим. Show ("Проверьте настройки соединения, невозможно соединиться с базой данных! \nОшибка: " + SSDB_Exception. Message);;

}

Query.commandText = "USE STO; "; // текст запроса, выбираем использование базы данных "STO”. ExecuteNonQuery ();

 

Данная строка присутствует после каждого запроса. Команда ExecuteNonQuery выполняет инструкцию SQL применительно к свойству Connection и возвращает количество измененных строк.

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

Запрос на выборку данных:.commandText = "SELECT * FROM КЛИЕНТ";

Запрос на добавление данных в базу:.commandText = "INSERT INTO КЛИЕНТ (ИД_клиента, ФИО_клиента) VALUES ('" + IdKlienta + "','" + textBox1. Text + "'); ";

Запрос на обновление данных:.commandText = "UPDATE КЛИЕНТ SET ФИО_клиента = '" + textBox1. Text + "' WHERE ИД_ клиента = '" + IdKlienta +"'";

Запрос на удаление данных:.commandText = "DELETE FROM КЛИЕНТ WHERE ИД_ клиента = '" + IdKlienta + "'";

Чтобы вывести данные в табличном виде на экран необходимо сформировать источник данных, добавить туда данные, извлеченные из БД и заполнить ими соответствующий элемент на форме:dataSet = new DataSet ();table = dataSet. Tables. Add ();. Load (Query. ExecuteReader (), LoadOption. OverwriteChanges, table);. DataSource = table;

Выборка может быть двух видов: когда запрос возвращает нам одно значение и когда запрос возвращает нам набор значений. Обрабатывать их соответственно можно по-разному. Если запрос нам возвращает одно значение:znachenie = MyCommand. ExecuteScalar (). ToString ();

Если запрос возвращает множество значений:;=myCommand. ExecuteReader ();(MyDataReader. Read ()) {string result = MyDataReader. GetString (0); // Получаем строку int id = MyDataReader. GetInt32 (1); // Получаем целое число} MyDataReader. Close (); После завершения использования БД необходимо закрывать соединение командой con. Close.


Заключение

 

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

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

- обоснован выбор средств разработки БД: СУБД и языка программирования;

- создана концептуальная модель данных;

- разработана БД учета автозапчастей и предоставляемых услуг автосервиса;

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

Выбирая СУБД главными критериями выбора были следующие: тип лицензии продукта; скорость работы; наличие полной документации. Всем этим критериям соответствует выбранная СУБД MySQL. Для соединения СУБД c программой была использована библиотеки mysql-connector-net 6.8.3 Каждая таблица спроектированной БД проверена на соответствие требованиям 3 нормальной форме для достижения минимальной избыточности данных.

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

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

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

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

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

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

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

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

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


Библиографический список

 

1. Радченко, М. Г.1С: Предприятие 8.1 Практическое пособие разработчика / М.Г. Радченко. - Питер 1С-Паблишинг, 2007. - 512 с.

. Бартеньев, О. В.1С: Предприятие: программирование для всех / О.В. Бартеньев. - Диалог-МИФИ, 2005. - 464 с.

. Малков, О.Б. Работа с СУБД MySQL: учеб. пособие / О.Б. Малков, М.В. Девятерикова. - Омск: Изд-во ОмГТУ, 2010. - 84 с.

. Кузнецов, М.С. Самоучитель MySQL 5/М.С. Кузнецов, И.И. Симдянов. - БХВ-Петербург, 2006. - 546 с.

. Бен-Ари, М. Языки программирования: практ. сравнит. анализ: Учеб. по яз. программирования / М. Бен-Ари, В.С. Штаркман, М.Н. Яковлева. - М.: Мир, 2000. - 366 с.

. Павловская, Т.А. С#. Программирование на языке высокого уровня: Учеб. для вузов / Т.А. Павловская. - СПб.: Питер, 2009. - 432 с.

. Шилдт, Г. С# полное руководство / Г. Шилдт. - Вильямс, 2011. - 1056 с.

. Неш, Т, С# 2008: ускоренный курс для профессионалов / Т. Неш. - Диалектика - Вильямс, 2008. - 576 с.

. Павловская, Т.А. С/C++. Программирование на языке высокого уровня: Учеб. для вузов / Т.А. Павловская. - СПб.: Питер, 2011. - 461 с.

. Эккель, Б. Философия Java. Библиотека программиста / Б. Эккель. - 4-е изд. - СПб.: Питер, 2011. - 640 с.

. Томас, М. Базы данных. Проектирование, реализация, сопровождение / М. Томас. - Москва-Санкт-Петербург-Киев, 2007. - 1111 с.

. Диго, С.М. База данных: проектирование и использование: учебник / С. М Диго. - М.: Финансы и статистика, 2005. - 546 с.

. Дейтл, К. Дж. Введение в системы баз данных: [пер. с анг.] / К. Дж. Дейт. - 6-е изд. - СПб.: Изд. Дом Вильямс, 2000. - 786 с.

. Елькин Б.И. Дипломное проектирование: методические указания для студентов обучающихся по специальности 230101 и направления подготовки бакалавров 230100/Б.И. Елькин, В.И. Потапов, О.П. Шафеева. - Омск: Изд-во ОмГТУ, 2007. - 64 с.


Приложение

System;System. Data;MySql. Data. MySqlClient;System. Windows. Forms;STO

{partial class OsnForm: Form

{static MySqlConnection Connection =MySqlConnection ("Data Source=localhost; Port= 3306; User Id= root; Password= 21061992; "); // определение подключенияstatic MySqlCommand Query = new MySqlCommand ();OsnForm ()

{();. Connection = Connection;

{. Open ();.commandText = "USE autoshop; "; // выбор используемой базы. ExecuteNonQuery ();

}(Exception ex)

{. Show (ex. Message, @"Проверьте подключение к базе данных");

}

}void OsnForm_FormClosing (object sender, FormClosingEventArgs e) // закрытие приложения

{

{();. Exit (0);

}(Exception)

{

}

}void Loading () // процедура загрузки таблицы

{

{.commandText = "SELECT * FROM текущие_операции ORDER BY Дата DESC, Время DESC";. ExecuteNonQuery ();dataSet = new DataSet ();table = dataSet. Tables. Add ();. Load (Query. ExecuteReader (), LoadOption. OverwriteChanges, table);. DataSource = table;. Columns [0]. Visible = false;

}(Exception ex)

{. Show (ex. Message, @"Не удалось загрузить таблицу");

}

}void OsnForm_Load (object sender, EventArgs e)

{();

// MessageBox. Show (DateTime. Now. ToString ("yyyy-MM-dd"));

// MessageBox. Show (DateTime. Now. ToShortTimeString ());

}

// открытие формvoid bMaster_Click (object sender, EventArgs e)

{

{. Close ();form = new Master ();. Show ();();

}(Exception)

{

}

}void bKlient_Click (object sender, EventArgs e)

{

{. Close ();form = new Klient ();. Show ();();

}(Exception)

{

}

}void bAvto_Click (object sender, EventArgs e)

{

{. Close ();form = new Avto ();. Show ();();

}(Exception)

{

}

}void bPostavshik_Click (object sender, EventArgs e)

{

{. Close ();form = new Postavshik ();. Show ();();

}(Exception)

{

}

}void bZayavka_Click (object sender, EventArgs e)

{

{. Close ();form = new Zayavka ();. Show ();();

}(Exception)

{

}

}void bZapchasti_Click (object sender, EventArgs e)

{

{. Close ();form = new Zapchasti ();. Show ();();

}(Exception)

{

}

}void bPostavki_Click (object sender, EventArgs e)

{

{. Close ();form = new Postavki ();. Show ();();

}(Exception)

{

}

}void bOplata_Click (object sender, EventArgs e)

{

{. Close ();form = new Oplata ();. Show ();();

}(Exception)

{

}

}void bProdano_Click (object sender, EventArgs e)

{

{. Close ();form = new Dogovor ();. Show ();();

}(Exception)

{

}

}void bStoyanka_Click (object sender, EventArgs e)

{

{. Close ();form = new Doljnost ();. Show ();();

}(Exception)

{

}

}void bUslugi_Click (object sender, EventArgs e)

{

{. Close ();form = new Uslugi ();. Show ();();

}(Exception)

{

}

}void button1_Click (object sender, EventArgs e)

{

{. Close ();form = new LoginParol ();. Show ();();

}(Exception)

{

}

}

// поискvoid DTP_ValueChanged (object sender, EventArgs e)

{

{(RemoveSpaces. Remove (tBSPrice. Text)! = ": ")

{.commandText = "SELECT * FROM текущие_операции WHERE Вид_операции LIKE '%" +. Text. Trim () + "%' AND Дата LIKE '%" + DTP. Value. ToString ("yyyy-MM-dd") +

"%' AND Время LIKE '%" + tBSPrice. Text + "%' ORDER BY Дата DESC, Время DESC";. ExecuteNonQuery ();

}

{.commandText = "SELECT * FROM текущие_операции WHERE Вид_операции LIKE '%" +. Text. Trim () + "%' AND Дата LIKE '%" + DTP. Value. ToString ("yyyy-MM-dd") + "%' ORDER BY Дата DESC, Время DESC";. ExecuteNonQuery ();

}dataSet = new DataSet ();table = dataSet. Tables. Add ();. Load (Query. ExecuteReader (), LoadOption. OverwriteChanges, table);. DataSource = table;. Columns [0]. Visible = false;

}(Exception)

{

}

}void tBSName_TextChanged (object sender, EventArgs e)

{

{(RemoveSpaces. Remove (tBSPrice. Text)! = ": ")

{.commandText = "SELECT * FROM текущие_операции WHERE Вид_операции LIKE '%" +. Text. Trim () + "%' AND Время LIKE '%" + tBSPrice. Text + "%' ORDER BY Дата DESC, Время DESC";. ExecuteNonQuery ();

}

{.commandText = "SELECT * FROM текущие_операции WHERE Вид_операции LIKE '%" + tBSName. Text. Trim () + "%' ORDER BY Дата DESC, Время DESC";. ExecuteNonQuery ();

}dataSet = new DataSet ();table = dataSet. Tables. Add ();. Load (Query. ExecuteReader (), LoadOption. OverwriteChanges, table);. DataSource = table;. Columns [0]. Visible = false;

}(Exception)

{

}

}void button2_Click (object sender, EventArgs e) // открытие формы зарплата

{

{. Close ();form = new Zarplata ();. Show ();();

}(Exception)

{

}

}void button3_Click (object sender, EventArgs e) // открытие формы заказанные услуги

{

{. Close ();form = new ZakUsl ();. Show ();();

}(Exception)

{

}

}void bReport_Click (object sender, EventArgs e) // открытие формы отчетности

{

{. Close ();form = new Reports ();. Show ();();

}(Exception)

{

}

}

}

}


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

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

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

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

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



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

0.155 с.