Обоснование выбора инструментальной среды разработки 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Обоснование выбора инструментальной среды разработки



КГБ ПОУ ХПЭТ

 

 

ОТЧЕТ ПО ПРАКТИКЕ

 

 

Вид практики: Учебная по ПМ-01 «Эксплуатация и модификация информационных систем»

 

 

ОП. 09.02.04. 31. 2016

 

 

Выполнил студент: Черепнин А.П.
Руководитель практики от техникума: Зайчук С.В.
Руководитель практики от предприятия: Евтушенко Л.Г.

 

Хабаровск

2016 г

 

СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ.. 3

1. Техническое задание. 4

2.План-график проектных работ. 5

3.Обоснование выбора инструментальной среды разработки. 6

4.Структурная схема приложения. 9

5.Макет экранных форм.. 10

6.Руководство программиста. 11

ЗАКЛЮЧЕНИЕ.. 15

СПИСОК ИСТОЧНИКОВ.. 16

ПРИЛОЖЕНИЯ.. 17

 

Изм.
Лист
№ документа
Подпись
Дата  
Лист
 
ОП 09.02.04.31.2016
Разраб.
Черепнин А.П.
Провер.  
Зайчук С.В.
Т. Контр.
 
Н. Контр.
 
Утв.
 
    ОТЧЕТ ПО УЧЕБНОЙ ПРАКТИКЕ
Лит.
Листов
 
ХПЭТ ИС-31(11)
Реценз.
 
Масса
Масштаб
 
 
1:1

 

У


ВВЕДЕНИЕ

 

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

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

Цели практики:

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

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

-формирование профессиональных компетенций.

Задачи практики:

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

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

- использование информационно-коммуникационных технологий;

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

- выполнение индивидуального задания (создание тестирующей программы);

- оформление отчета по практике.

 


1. Техническое задание

Техническое задание на разработку программы "Самотестер"

1. Введение

1.1. Наименование программы

Наименование программы: "Самотестер"

1.2. Назначение и область применения

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

2. Требования к программе

2.1. Требования к функциональным характеристикам

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

2.1.1. Самостоятельное тестирование пользователя по математике

2.1.2. Вывод информации о результатах тестирования с указанием количества правильных ответов

2.1.3 Ввод имени пользователя, с последующим указанием имени в результатах теста

3. Требования к программной документации

3.1. Предварительный состав программной документации

Состав программной документации должен включать в себя:

3.1.1. техническое задание;

3.1.2. программу и методики испытаний;

3.1.3. руководство программиста;

4. Стадии и этапы разработки

4.1. Стадии разработки

Разработка должна быть проведена в три стадии:

1. разработка технического задания;

2. рабочее проектирование;

3. внедрение.

4.2. Этапы разработки

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

 

1. разработка программы;

2. разработка программной документации;

3. испытания программы.

На стадии внедрения должен быть выполнен этап разработки подготовка и передача программы.

4.3. Содержание работ по этапам

На этапе разработки технического задания должны быть выполнены перечисленные ниже работы:

1. постановка задачи;

2. определение и уточнение требований к техническим средствам;

3. определение требований к программе;

4. определение стадий, этапов и сроков разработки программы и документации на неё;

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

1. разработка, согласование и утверждение и методики испытаний;

2. проведение приемо-сдаточных испытаний;

3. корректировка программы и программной документации по результатам испытаний.
На этапе подготовки и передачи программы должна быть выполнена работа по подготовке и передаче программы и программной документации в эксплуатацию на объектах Заказчика.

 

План-график проектных работ

Выполненная работа Начало работы Окончание работы
Разработка технического задания 13.07.2015 15.07.2015
Макет экранных форм 15.07.2015 16.07.2015
Разработка приложения 16.07.2015 27.07.2015
Тестирование программы 28.07.2015 29.07.2015
Оформление документации 30.07.2015 31.07.2015

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

Рисунок 1 - Структурная схема

Макет экранных форм

  1. Стартовая форма.

Рисунок 2 – Стартовая форма

На стартовой форме расположены: приветственное сообщение, сообщение о том, что нужно ввести своё имя, поле для ввода имени, кнопки для начала теста и просмотра справки.

 

 

  1. Форма справки.

Правила тестирования и пользования программой.
Кнопка возврата к тесту
Рисунок 3 – Форма справки
На форме справки расположено текстовое поле с инструкцией по прохождению теста и пользованию программой.

 

 

  1. Форма тестирования.

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

 

Поле вывода вопросов
Список вариантов ответов
Пред.Вопрос
След.Вопрос
Рисунок 4 – Форма тестирования

 

  1. Форма завершения теста.

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

Рисунок 5 – Форма завершения тестирования
Поле вывода результатов тестирования
Выход
Начать заново

 

Руководство программиста

ЗАКЛЮЧЕНИЕ

 

Во время прохождения практики я расширил свои навыки в среде разработки языка программирования C#.

Все цели практики были достигнуты:

¾ расширение, углубление и систематизация знаний, полученных в процессе теоретического обучения;

¾ закрепление практических навыков по разработке и модификации информационных систем;

¾ формирование профессиональных компетенций.

Выполнил все задачи практики, а именно:

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

¾ изучил нормативные и методические материалы, фундаментальной и периодической литературы в соответствии с индивидуальным заданием;

¾ использовал информационно-коммуникационные технологии;

¾ выбрал средство разработки программных продуктов;

¾ выполнил индивидуального задания (разработал тестирующую программу);

¾ оформил отчет по практике.


СПИСОК ИСТОЧНИКОВ

 

1. Джон Скит. C# для профессионалов: тонкости программирования, 3-е издание, новый перевод = C# in Depth, 3rd ed.. — М.: «Вильямс», 2014. — 608 с.

2. Кристиан Нейгел и др. C# 5.0 и платформа.NET 4.5 для профессионалов = Professional C# 5.0 and.NET 4.5. — М.: «Диалектика», 2013. — 1440 с.

3. Джозеф Албахари, Бен Албахари. C# 6.0. Справочник. Полное описание языка = C# 5.0 in a Nutshell: The Definitive Reference. — М.: «Вильямс», 2015. — 1008 с.

4. https://habrahabr.ru/

5. http://www.cyberforum.ru/

 


ПРИЛОЖЕНИЯ

 

ПРИЛОЖЕНИЕ 1

С 01.01. 1980 г.

Настоящий стандарт устанавливает требования к содержанию и оформлению программного документа «Руководство программиста», определённого ГОСТ 19.101-77.

Стандарт полностью соответствует СТ СЭВ 2095-80.

ОБЩИЕ ПОЛОЖЕНИЯ

1.1. Структуру и оформление документа устанавливают в соответствии с ГОСТ 19.105-78.

Составление информационной части (аннотации и содержания) является обязательным.

1.2. Руководство программиста должно содержать следующие разделы:

· назначение и условия применения программ;

· характеристика программы;

· обращение к программе;

· входные и выходные данные;

· сообщения.

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

СОДЕРЖАНИЕ РАЗДЕЛОВ

2.1. В разделе «Назначение и условия применения программ» должны быть указаны назначение и функции, выполняемые программой, условия, необходимые для выполнения программы (объем оперативной памяти, требования к составу и параметрам

 

периферийных устройств, требования к программного обеспечению и т.п.).

2.2. В разделе «Характеристика программы» должно быть приведено описание основных характеристик и особенностей программы (временные характеристики, режим работы, средства контроля правильности выполнения и самовосстанавливаемости программы и т.п.).

2.3. В разделе «Обращение к программе» должно быть приведено описание процедур вызова программы (способы передачи управления и параметров данных и др.).

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

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

2.6. В приложении к руководству программиста могут быть приведены дополнительные материалы (примеры, иллюстрации, таблицы, графики и т.п.).

 

* Переиздание (Ноябрь 1987 г.) с Изменением № 1, утвержденным в сентябре 1981 г (ИУС 11-81)

 


ПРИЛОЖЕНИЕ 2

 

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Xml;

using System.Xml.Linq;

 

namespace Самотестер

{

/// <summary>

/// Логика взаимодействия для MainWindow.xaml

/// </summary>

public partial class MainWindow: Window

{

string subjectName = "";//Переменная имени тестируемого

private int _step;// Локальная переменная шага тестирования

int countSteps;// Количество вопросов в тесте (получается динамически из выбранного файла тестирования)

XDocument mainXml = new XDocument(); // Инициализируем объект XML документа, для считывания файла теста

List<string> questionsList = new List<string>();// Список вопросов, наполняется из файла тестирования

List<XElement> answers = new List<XElement>();// Список ответов

List<int> score = new List<int>();// Кол-во набранных очков

 

//string testFilePath = "";

// Attributes

int step // Глобальная переменная шага

{

get

{

return _step;// Получаем значение локальной переменной шаг

}

 

set

{

var beforeStep = _step; // Устанавливаем предыдущий шаг

_step = value;// Устанавливаем текущий шаг

if (_step == countSteps + 1)// Проверка, равен ли текущий шаг общему кол-ву шагов, действие по кнопке начать заново

{

score.Clear();// Очищаем набранные очки

Otvet.Visibility = Visibility.Visible;// Показываем ListBox в который мы отображаем ответы текущего вопроса

_step = 0;//Снова переходим на нулевой шаг

}

if (_step == 0)// Проверяем, нулевой ли это у нас шаг

{

 

Prev.Content = "Выход";// Назначаем кнопке "Предыдущий вопрос" значение "Выход"

}

else if (_step < 0)// Проверяем шаг меньше ли нуля

{

Close();//Закрываем программу

}

else

{

Prev.Content = "Назад";// Назначение кнопке "Предыдущий вопрос", значения Назад "Предыдущий вопрос"

}

 

if (_step > 0)// Если шаг больше нулевого

{

var _answers = answers[_step - 1].Elements().ToList();// Записываем все варианты ответов на текущий вопрос в переменную

var selectedIndex = Otvet.SelectedIndex;// Смотрим какой вариант ответа был выбран в прошлом шаге

var index = beforeStep;

var val = (selectedIndex!= -1)? (_answers[selectedIndex].Attribute("true-answer")!= null && _answers[selectedIndex].Attribute("true-answer").Value == "true")? 1: 0: 0;// Проверяем был ли ответ правильным

if (score.Contains(_step))// Смотрим отвечали ли мы на вопрос ранее

{

score[_step] = val;// Устанавливаем для предыдущего вопроса ответили мы правильно

}

else

{

score.Add(val);// Устанавливаем для предыдущего вопроса ответили мы правильно

}

}

/*Выводим если ответили на последний вопрос результаты тестирования*/

if (_step == countSteps)

{

Next.Content = "Начать заново";

Prev.Content = "Выход";

string sum = score.Sum().ToString();

string numeric = GetDeclension(int.Parse(sum), "правильный ответ", "правильных ответа", "правильных ответов");

string message = "Уважаемый(ая) " + subjectName + ". Благодарим Вас за прохождение теста. Ваш результат " + sum + " " + numeric + " из " + countSteps;

Vopros.Text = message;

Otvet.Visibility = Visibility.Hidden;

}

else

{

Next.Content = "Далее";

loadStep(_step, beforeStep);

}

}

}

string testFilePath = "Resources/testTest.xml";

public MainWindow()

{

InitializeComponent();

Test.Visibility = Visibility.Hidden;

}

 

 

void loadStep(int _locStep, int beforeStep)

{

foreach (var curEl in mainXml.Root.Element("questions").Elements())

{

Vopros.Text = questionsList[_locStep];

Otvet.Items.Clear();

var currentAnswers = answers[_locStep];

foreach (var answer in currentAnswers.Elements())

{

Otvet.Items.Add(answer.Value);

}

}

}

public static string GetDeclension(int number, string nominativ, string genetiv, string plural)

{

number = number % 100;

if (number >= 11 && number <= 19)

{

return plural;

}

 

var i = number % 10;

switch (i)

{

case 1:

return nominativ;

case 2:

case 3:

case 4:

return genetiv;

default:

return plural;

}

 

}

 

private void prevButton_Click(object sender, RoutedEventArgs e)

{

if (Prev.Content.ToString().Trim() == "Выход")

{

Close();

return;

}

step--;

}

 

private void nextButton_Click(object sender, RoutedEventArgs e)

{

step++;

}

void xmlLoad()

{

mainXml = XDocument.Load(testFilePath);

var qstns = mainXml.Root.Element("questions").Elements();

countSteps = qstns.Count();

foreach (var question in qstns)

{

questionsList.Add(question.Element("text").Value);

answers.Add(question.Element("answers"));

}

}

 

private void Button_Click(object sender, RoutedEventArgs e)

 

{

subjectName = User.Text;

 

if (!string.IsNullOrEmpty(subjectName) &&!string.IsNullOrEmpty(testFilePath))

{

Start.Visibility = Visibility.Hidden;

Test.Visibility = Visibility.Visible;

xmlLoad();

step = 0;

}

else

{

MessageBox.Show("Не заполнены необходимые поля");

}

 

}

 

private void spravkaButton_Click(object sender, RoutedEventArgs e)

{

Hello.Visibility = Visibility.Hidden;

Spravka.Visibility = Visibility.Visible;

}

 

private void closeSpravkaButton_Click(object sender, RoutedEventArgs e)

{

Hello.Visibility = Visibility.Visible;

Spravka.Visibility = Visibility.Hidden;

}

}

}

 

 

КГБ ПОУ ХПЭТ

 

 

ОТЧЕТ ПО ПРАКТИКЕ

 

 

Вид практики: Учебная по ПМ-01 «Эксплуатация и модификация информационных систем»

 

 

ОП. 09.02.04. 31. 2016

 

 

Выполнил студент: Черепнин А.П.
Руководитель практики от техникума: Зайчук С.В.
Руководитель практики от предприятия: Евтушенко Л.Г.

 

Хабаровск

2016 г

 

СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ.. 3

1. Техническое задание. 4

2.План-график проектных работ. 5

3.Обоснование выбора инструментальной среды разработки. 6

4.Структурная схема приложения. 9

5.Макет экранных форм.. 10

6.Руководство программиста. 11

ЗАКЛЮЧЕНИЕ.. 15

СПИСОК ИСТОЧНИКОВ.. 16

ПРИЛОЖЕНИЯ.. 17

 

Изм.
Лист
№ документа
Подпись
Дата  
Лист
 
ОП 09.02.04.31.2016
Разраб.
Черепнин А.П.
Провер.  
Зайчук С.В.
Т. Контр.
 
Н. Контр.
 
Утв.
 
    ОТЧЕТ ПО УЧЕБНОЙ ПРАКТИКЕ
Лит.
Листов
 
ХПЭТ ИС-31(11)
Реценз.
 
Масса
Масштаб
 
 
1:1

 

У


ВВЕДЕНИЕ

 

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

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

Цели практики:

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

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

-формирование профессиональных компетенций.

Задачи практики:

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

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

- использование информационно-коммуникационных технологий;

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

- выполнение индивидуального задания (создание тестирующей программы);

- оформление отчета по практике.

 


1. Техническое задание

Техническое задание на разработку программы "Самотестер"

1. Введение

1.1. Наименование программы

Наименование программы: "Самотестер"

1.2. Назначение и область применения

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

2. Требования к программе

2.1. Требования к функциональным характеристикам

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

2.1.1. Самостоятельное тестирование пользователя по математике

2.1.2. Вывод информации о результатах тестирования с указанием количества правильных ответов

2.1.3 Ввод имени пользователя, с последующим указанием имени в результатах теста

3. Требования к программной документации

3.1. Предварительный состав программной документации

Состав программной документации должен включать в себя:

3.1.1. техническое задание;

3.1.2. программу и методики испытаний;

3.1.3. руководство программиста;

4. Стадии и этапы разработки

4.1. Стадии разработки

Разработка должна быть проведена в три стадии:

1. разработка технического задания;

2. рабочее проектирование;

3. внедрение.

4.2. Этапы разработки

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

 

1. разработка программы;

2. разработка программной документации;

3. испытания программы.

На стадии внедрения должен быть выполнен этап разработки подготовка и передача программы.

4.3. Содержание работ по этапам

На этапе разработки технического задания должны быть выполнены перечисленные ниже работы:

1. постановка задачи;

2. определение и уточнение требований к техническим средствам;

3. определение требований к программе;

4. определение стадий, этапов и сроков разработки программы и документации на неё;

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

1. разработка, согласование и утверждение и методики испытаний;

2. проведение приемо-сдаточных испытаний;

3. корректировка программы и программной документации по результатам испытаний.
На этапе подготовки и передачи программы должна быть выполнена работа по подготовке и передаче программы и программной документации в эксплуатацию на объектах Заказчика.

 

План-график проектных работ

Выполненная работа Начало работы Окончание работы
Разработка технического задания 13.07.2015 15.07.2015
Макет экранных форм 15.07.2015 16.07.2015
Разработка приложения 16.07.2015 27.07.2015
Тестирование программы 28.07.2015 29.07.2015
Оформление документации 30.07.2015 31.07.2015

Обоснование выбора инструментальной среды разработки

 

Для разработки программы я использовал среду разработки Microsoft Visual Studio, язык программирования C#. Синтаксис C# очень выразителен, но прост в изучении. Все, кто знаком с языками C, C++ или Java с легкостью узнают синтаксис с фигурными скобками, характерный для языка C#. Разработчики, знающие любой из этих языков, как правило, смогут добиться эффективной работы с языком C# за очень короткое время. Синтаксис C# делает проще то, что было сложно в C++, и обеспечивает мощные возможности, такие как типы значений Nullable, перечисления, делегаты, лямбда-выражения и прямой доступ к памяти, чего нет в Java. C# поддерживает универсальные методы и типы, обеспечивая более высокий уровень безопасности и производительности, а также итераторы, позволяющие при реализации коллекций классов определять собственное поведение итерации, которое может легко использоваться в клиентском коде. Выражения LINQ делают строго типизированный запрос очень удобной языковой конструкцией.

Как объектно-ориентированный язык, C# поддерживает понятия инкапсуляции, наследования и полиморфизма. Все переменные и методы, включая метод Main – точку входа приложения – инкапсулируются в определения классов. Класс может наследовать непосредственно из одного родительного класса, но может реализовывать любое число интерфейсов. Для методов, которые переопределяют виртуальные методы в родительском классе, необходимо ключевое слово override, чтобы исключить случайное повторное определение. В языке C# структура похожа на облегченный класс: это тип, распределяемый в стеке, реализующий интерфейсы, но не поддерживающий наследование.

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

· Инкапсулированные сигнатуры методов, называемые делегатами, которые поддерживают типобезопасные уведомления о событиях.

· Свойства, выступающие в роли методов доступа для закрытых переменных-членов.

· Атрибуты с декларативными метаданными о типах во время выполнения.

· Встроенные комментарии XML-документации.

 

· LINQ, предлагающий встроенные возможности запросов в различных источниках данных.

Если потребуется обеспечить взаимодействие с другим программным обеспечением Windows, таким как объекты COM или собственные библиотеки DLL Win32, в языке C# можно использовать процесс, который называется "Interop." Процесс Interop позволяет программам на C# выполнять практически любые действия, которые может выполнять исходное приложение на C++.Язык C# поддерживает даже указатели и понятие "небезопасного" кода для тех случаев, когда прямой доступ к памяти имеет крайне важное значение.

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

Следующие ресурсы по языку C# являются дополнительными:

· Общее введение в язык см. в главе 1 раздела Спецификация языка C#.

· Подробные сведения о конкретных понятиях языка C# содержатся в разделе Справочник по C#.

· Дополнительные сведения о LINQ см. в разделе LINQ (Language-Integrated Query).

· Последние статьи и ресурсы, подготовленные группой Visual C#, доступны в Центре разработчиков Visual C#.



Поделиться:


Последнее изменение этой страницы: 2016-04-07; просмотров: 855; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 174.129.93.231 (0.227 с.)