Uploaded by Viktoria Chernova

Курсовая ОднорукийБандит

advertisement
Государственное бюджетное профессиональное образовательное учреждение
«Южно-Уральский государственный колледж»
ПЦК «Информационных технологий»
Курсовая работа
по междисциплинарному курсу
01.02 Прикладное программирование
Тема: Разработка игрового автомата «Однорукий бандит» на языке C# в
среде разработки VisualStudio
Выполнил:
Студент группы ПК320Д
Гельмель Д.В./___________
«19» декабря 2017г.
Проверил:
Исакова В.В./____________
«19» декабря 2017г.
Работа защищена
«19» декабря 2017г.
с оценкой________________
Челябинск 2017
Государственное бюджетное профессиональное образовательное учреждение
«Южно-Уральский государственный колледж»
ПЦК «Информационных технологий»
Задание
Для
курсового
проектирования
по
МДК
программированиестуденту IIIкурса320 группы
01.02
Прикладное
Специальность 09.02.03 Программирование в компьютерных системах
Гельмеля Дениса Владимировича
Тема проекта: Разработка игрового автомата «Однорукий бандит» на языке
C# в среде разработки VisualStudio
Оглавление
Введение....................................................................................................................................................... 4
1.
Теоретическая часть ......................................................................................................................... 5
2.
Этапы разработки программы. ...................................................................................................... 8
3.
Разработка интерфейса программы. ............................................................................................. 9
4.
Руководство пользователя. ...........................................................................................................10
5.
Руководство программиста. ..........................................................................................................11
6.
Заключение. ......................................................................................................................................15
7.
Список литературы. .......................................................................................................................16
8.
Приложение А. Код программы. ..................................................................................................17
ПКД-09.02.03-2017-320-КП
Изм.
Лист
№ докум.
Разраб.
Гельмель Д.В
Провер.
Исакова В.В.
Реценз.
Н. Контр.
Утверд.
Руководитель
Подпись Дата
Создание игрового автомата
«Однорукий бандиит» на языке
C# в среде разработки Visual
Studio
Лит.
Лист
Листов
3
21
ГБПОУ «ЮУГК»
Введение
Интерес к программированию постоянно растёт. Это связанно с развитием и
внедрением в повседневную жизнь информационных технологий. Среди
пользователей персональных компьютеров в настоящее время наиболее
популярная операционная система Windows, и естественно, что тот, кто
хочет программировать будет писать программы именно под Windows чтобы
продукт был максимально распространён.
Целью данной курсовой работы является написание простого игрового
автомата «Однорукий бандит» на языке программирования C# в среде
разработки VisualStudio 2017. Однорукий бандит, или по правильному –
слот-машина, это игровой автомат, который работает по принципу
вращающегося барабана. Цель игры – это после брошенной ставки в
монетоприемник крутить барабан, нажимая на кнопку или дергая рычаг,
который и приводит в действие механизм игрового автомата. Чем лучше
выпадет игровая комбинация, тем больше выигрыш получит игрок. При этом
сумма собственно выигрыша может во много раз превосходить сумму ставки,
что и привлекает игроков пробовать удачу именно на одноруком бандите.Все
без исключения игровые автоматы такого типа разделяются на два основных
вида. Это механические слоты, которые мы и можем наблюдать в
магазинчиках и даже на улице, собственно они и дали название типу
автоматов – однорукие бандиты. Здесь имеется рычаг для запуска механизма,
который похож на руку, отсюда и название. Обычно они имеют три барабана,
который крутятся после запуска и создают от одной до пяти игровых линий,
которые могут оказаться выигрышными. Чаще всего такие автоматы
работают на жетонах от небольшой ставки, но чем больше жетонов вы
бросите в автомат, тем больше шансов на выигрыш. Ставку на прокрутку
одного запуска такого однорукого бандита выбираете именно вы, и можно
иногда даже при самой минимальной ставке сорвать куш. Это и привлекает
всех любителей быстрого выигрыша, и часто ставки срабатывают.В то же
время, есть и другой вид одноруких бандитов, который запускаются от
кнопок. Принцип их работы точно такой же, и именно такие игровые
автоматы стали популярными у нас в стране в конце 90-х годов. Также в
последнее время механические игровые автоматы постепенно стали
заменяться видео-слотами. Это современный вид игрового автомата, который
имеет экран с изображением барабанов. Выигрышных комбинаций на таком
устройстве может быть больше, так как в видео-слоте одновременно имеется
до пяти барабанов и от одной до пятидесяти игровых линий. Кроме этого,
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
4
компьютерная основа работы дает возможность каждому игроку получить
самый широкий спектр возможностей для реализации своих игровых
амбиций. Это повышает интерес к игре, так как каждый игрок может
получить постоянно выпадающие игровые раунды и дополнительные
бонусные нажатия на кнопки, а вероятность выигрыша увеличивается в разы,
так как разнообразие комбинаций просто огромное! В настоящее время такие
однорукие бандиты запрещены к установке в публичных местах, и чтобы
поиграть, нужно отправляться в специализированные игровые клубы.
1. Теоретическая часть
История создания языка программирования C#.
Данная курсовая работа выполнена на языке программирования C# в среде
разработки VisualStudio 2017. Язык C# («си-шарп») ― объектноориентированный язык программирования (ООП), появился на свет в июне
2000 году в результате кропотливой работы большой группы разработчиков
корпорации Microsoft («майкрософт»), возглавляемойАндерсом
Хейлсбергом(AndersHejlsberg).Этот человек известен как автор одного из
первых компилируемых языков программирования для персональных
компьютеровIBM («ай-би-эм») ―TurboPascal(«турбо -паскаль»), изящная
реализация которого послужила образцом для создания всех последующих
компиляторов.Появление языка C# и инициативы .NET отнюдь не случайно
пришлось на начало лета 2000 г. Именно к этому моменту компания
Microsoft подготовила промышленные версии новых компонентных
технологий и решений в области обмена сообщениями и данными, а также
создания Internet-приложений (COM+, ASP+, ADO+, SOAP,
BiztalkFramework). Несомненно, лучшим способом продвижения этих
новинок является создание инструментария для разработчиков с их
полноценной поддержкой. В этом и заключается одна из главных задач
нового языка C#. Кроме тогоMicrosoft не могла больше расширять все те же
инструменты и языки разработки, делая их все более и более сложными для
удовлетворения конфликтующих между собой требований поддержки
современного оборудования и обеспечения обратной совместимости с теми
продуктами, которые были созданы в начале 1990-х гг. во время первого
появления Windows. Наступает момент, когда необходимо начать с чистого
листа для того, чтобы создать простой, но имеющий сложную структуру
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
5
набор языков, сред и средств разработки, которые позволят разработчику
легко создавать современные программные продукты.
С# и .NET являются той самой отправной точкой. Если говорить упрощенно,
то .NET представляет собой новую платформу, новый API для
программирования в Windows, а С# е новый язык, созданный с нуля, для
работы с этой платформой, а также для извлечения всех выгод из прогресса
сред разработки и нашего понимания принципов объектно-ориентированного
программирования в течение последних 20 лет.
Необходимо отметить, что обратная совместимость не потеряна.
Существующие программы будут выполняться, а платформа .NET была
спроектирована таким образом, чтобы она могла работать с имеющимся
программным обеспечением. Связь между компонентами в Windows сейчас
почти целиком осуществляется при помощи СОМ. С учетом этого .NET
обладает способностью (а) создавать оболочки (wrappers) вокруг
существующих компонентов СОМ, так что компоненты .NET могут
общаться с ними, и (б) создавать оболочки вокруг компонентов .NET, что
позволяет им выглядеть как обычные СОМ-компоненты.
Авторы C# стремились создать язык, сочетающий простоту и
выразительность современных объектно-ориентированных языков (вроде
Java) c богатством возможностей и мощью C++. По словам Андерса
Хейлсберга, C# позаимствовал большинство своих синтаксических
конструкций из C++. В частности, в нем присутствуют такие удобные типы
данных, как структуры и перечисления (другой потомок C++ -- Java -- лишен
этих элементов, что создает определенные неудобства при
программировании). Синтаксические конструкции С# унаследованы не
только от C++, но и от VisualBasic. Например, в С#, как и в VisualBasic,
используются свойства классов. Как C++, С# позволяет производить
перегрузку операторов для созданных вами типов Java не поддерживает ни
ту, ни другую возможность). С# — это фактически гибрид разных языков.
При этом С# синтаксически не менее (если не более) чист, чем Java, так же
прост, как VisualBasic, и обладает практически той же мощью и гибкостью,
что и C++.
Описание среды разработки MicrosoftVisulStudio 2017.
Среда разработки MicrosoftVisualStudio – это набор инструментов и средств,
предназначенных для разработчиков программ, с широким набором
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
6
поддерживаемых языков программирования. Visual C++ является частью
VisualStudio. Интегрированную среду разработки
(IntegratedDevelopmentEnvironment, IDE) VisualStudio используют и другие
средства разработки, напримерMicrosoft С#.VisualStudio включает в себя
редактор исходного кода с поддержкой технологии IntelSense и
возможностью простейшего редактирования кода. Встроенный отладчик
может работать как отладчик уровня исходного кода, так и отладчик
машинного уровня. Остальные встраиваемые инструменты включают в себя
редактор форм для упрощения создания графического интерфейса
приложения, веб-редактор, дизайнер классов и дизайн схемы базы
данных. VisualStudio позволяет создавать и подключать дополнения
(плагины) для расширения функциональности практически на каждом
уровне, включая добавление поддержки системы контроля версий исходного
кода добавление новых наборов инструментов или инструментов для прочих
аспектов процесса разработки программного обеспечения.
Внешний вид среды разработки.
(Рисунок 1. Интерфейс VisualStudio)
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
7
(Рисунок 2. Интерфейс отладчика)
2. Этапы разработки программы.
1. Определение входных и выходных данных, требований к программе.
На первом этапе определяются входные и выходные данные программы,
способ ее взаимодействия (интерфейса) с пользователем, язык и среда
программирования, в которой она будет разрабатываться, а также требования
к аппаратному и системному программному обеспечению компьютеров, на
которых будет работать приложение.
2. Разработка алгоритма.
На этом шаге производится определение последовательности действий,
ведущих к решению задачи и запись их в одной из указанных в форм.
3. Кодирование(программирование).
Третий этап - это перевод алгоритма на язык программирования и создание
исходного текста программы в одной из систем программирования.
Программа на любом языке состоит из операторов - так называются
отдельные действия, разрешенные в языке. Число операторов в любом языке
ограничено и правила их написания жестко заданы.
4. Компиляция и отладка.
Исходный текст на Паскале не будет непосредственно исполняться
компьютером - для работы программы ее требуется откомпилировать, т. е.,
перевести в машинный код. Эту работу выполняет специальная программакомпилятор или оболочка языка. В результате преобразования компилятором
исходного текста программы в машинный код получается исполняемый файл
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись
Дата
Лист
8
с расширением exe, который можно запустить (выполнить) в той
операционной системе (ОС), для которой разработан компилятор.
5. Тестирование.
Тестированием называют проверку правильности работы программы на
наборах "пробных" (тестовых) данных с заранее известным результатом.
Конечно же, тестирование всей программы сразу возможно лишь для
несложных учебных задач. Реальные программы, как правило, тестируются
"по частям" - отдельными функциями и модулями.
6. Документирование и поддержка.
Этот этап включает в себя создание справочной системы и документации к
программе, возможно, расширение ее функциональности, выпуск новых
версий, исправление ошибок, которые практически неизбежны в любой
сложной программной системе. В наших учебных задачах этап поддержки
будет отсутствовать.
3. Разработка интерфейса программы.
На форме следующие элементы интерфейса:
Button - кнопка запрограммированная для начала или перезапуска игрового
автомата.
Label - для отображения счета.
Label - для отображения крутящихся барабанов.
Timer - для начала и остановки крутящихся барабанов.
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
9
4. Руководство пользователя.
(Рисунок 3. Скриншот игрового автомата)
Начало игры начинается после нажатия клавиши «Стартуем».
В процессе игры выпадает какая-либо комбинация и игрок получает приз.
(Рисунок 4. Выигрыш приза)
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
10
Выигранный приз записывается в «Ваш счет» и по ходу игры обновляется с
каждым выигранным призом.
5. Руководство программиста.
namespace WindowsFormsApp1
{
public partial class ОднорукийБандит : Form
{
int cash = 100;
public ОднорукийБандит()
{
InitializeComponent();
}
private void timer5_Tick(object sender, EventArgs e)
{
t2.Enabled = false; //Отключаем таймер2
stop2.Enabled = false;
}
private void t1_Tick(object sender, EventArgs e)
{
Random rand = new Random(); //Подключаем генератор случайных чисел
int dig = rand.Next(8); //Вводим переменную типа integer "dig" которая возвращает
неотрицательное случайное целое число
l1.Text = System.Convert.ToString(dig); //Выводим эту переменную в l1
}
private void t2_Tick(object sender, EventArgs e)
{
Random rand = new Random();
int dig = rand.Next(8);
l2.Text = System.Convert.ToString(dig);
}
private void t3_Tick(object sender, EventArgs e)
{
Random rand = new Random();
int dig = rand.Next(8);
l3.Text = System.Convert.ToString(dig);
}
private void startbutton1_Click(object sender, EventArgs e)
{
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
11
labelcash.Text = System.Convert.ToString(cash);
t1.Enabled = true; //Активируем таймер1
t2.Enabled = true; //Активируем таймер2
t3.Enabled = true; //Активируем таймер3
stop1.Enabled = true; //Активируем таймер4
stop2.Enabled = true; //Активируем таймер5
stop3.Enabled = true; //Активируем таймер6
}
private void stop1_Tick(object sender, EventArgs e)
{
t1.Enabled = false; //Отключем таймер1
stop1.Enabled = false;
}
private void stop3_Tick(object sender, EventArgs e)
{
t3.Enabled = false; //Отключаем таймер3
stop3.Enabled = false;
//Пишем выигрышные комбинации
if ((l1.Text == "1") && (l2.Text == "1"))
{
if (l3.Text != "1")
{
MessageBox.Show("Вы выиграли $100"); //Выводит сообщение о выигрыше
cash += 100; //Прибавляем к первоначальному счету выигрыш
}
}
if ((l1.Text == "2") && (l2.Text == "2"))
{
if (l3.Text != "2")
{
MessageBox.Show("Вы выиграли $200");
cash += 200;
}
}
if ((l1.Text == "3") && (l2.Text == "3"))
{
if (l3.Text != "3")
{
MessageBox.Show("Вы выиграли $300");
cash += 300;
}
}
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
12
if ((l1.Text == "4") && (l2.Text == "4"))
{
if (l3.Text != "4")
{
MessageBox.Show("Вы выиграли $400");
cash += 400;
}
}
if ((l1.Text == "5") && (l2.Text == "5"))
{
if (l3.Text != "5")
{
MessageBox.Show("Вы выиграли $500");
cash += 500;
}
}
if ((l1.Text == "6") && (l2.Text == "6"))
{
if (l3.Text != "6")
{
MessageBox.Show("Вы выиграли $600");
cash += 600;
}
}
if ((l1.Text == "7") && (l2.Text == "7"))
{
if (l3.Text != "7")
{
MessageBox.Show("Вы выиграли $700");
cash += 700;
}
}
if ((l1.Text == "1") && (l2.Text == "1") && (l3.Text == "1"))
{
MessageBox.Show("Вы выиграли $1000");
}
if ((l1.Text == "2") && (l2.Text == "2") && (l3.Text == "2"))
{
MessageBox.Show("Вы выиграли $1500");
}
if ((l1.Text == "3") && (l2.Text == "3") && (l3.Text == "3"))
{
MessageBox.Show("Вы выиграли $2000");
}
if ((l1.Text == "4") && (l2.Text == "4") && (l3.Text == "4"))
{
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
13
MessageBox.Show("Вы выиграли $2500");
}
if ((l1.Text == "5") && (l2.Text == "5") && (l3.Text == "5"))
{
MessageBox.Show("Вы выиграли $3000");
}
if ((l1.Text == "6") && (l2.Text == "6") && (l3.Text == "6"))
{
MessageBox.Show("Вы выиграли $3500");
}
if ((l1.Text == "7") && (l2.Text == "7") && (l3.Text == "7"))
{
MessageBox.Show("Вы выиграли ДЖЕКПОТ $5000");
}
if ((l1.Text == "7") || (l2.Text == "7") || (l3.Text == "7"))
{
MessageBox.Show("Вы выиграли $70");
cash += 70;
}
if ((l1.Text == "1") || (l2.Text == "1") || (l3.Text == "1"))
{
MessageBox.Show("Вы выиграли $10");
cash += 10;
}
if ((l1.Text == "1") && (l2.Text == "7"))
{
MessageBox.Show("Вы выиграли $60");
}
if ((l1.Text == "1") && (l3.Text == "7"))
{
MessageBox.Show("Вы выиграли $60");
}
if ((l2.Text == "1") && (l3.Text == "7"))
{
MessageBox.Show("Вы выиграли $60");
}
labelcash.Text = System.Convert.ToString(cash); //Обновляем наш имеющийся счет
}
}
}
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
14
6. Заключение.
В ходе работы был создан игровой автомат «Однорукий бандит».
В ходе выполнения данной работы на основе различных источников были
повышены знания в области ООП. И навыки программирования на языке C#.
В процессе тестирования приложения ошибок не обнаружено.
Приложение может работать на низко производительных компьютерах и не
требует дополнительного оборудования, не занимает много места на
компьютере. В дальнейшем программа может быть доработана с
добавлением новых функций, например, «Ваша ставка», «Ваш ДЖЕКПОТ».
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
15
7. Список литературы.
http://life-prog.ru/1_50335_etapi-razrabotki-programmi.html
http://webgamer.ru/chto-takoe-odnorukij-bandit/
https://studfiles.net/preview/3277949/
http://www.shapovalov.org/publ/7-1-0-77
http://mylektsii.ru/11-41680.html
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
16
8. Приложение А. Код программы.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class ОднорукийБандит : Form
{
int cash = 100;
public ОднорукийБандит()
{
InitializeComponent();
}
private void timer5_Tick(object sender, EventArgs e)
{
t2.Enabled = false; //Отключаем таймер2
stop2.Enabled = false;
}
private void t1_Tick(object sender, EventArgs e)
{
Random rand = new Random(); //Подключаем генератор случайных чисел
int dig = rand.Next(8); //Вводим переменную типа integer "dig" которая возвращает
неотрицательное случайное целое число
l1.Text = System.Convert.ToString(dig); //Выводим эту переменную в l1
}
private void t2_Tick(object sender, EventArgs e)
{
Random rand = new Random();
int dig = rand.Next(8);
l2.Text = System.Convert.ToString(dig);
}
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
17
private void t3_Tick(object sender, EventArgs e)
{
Random rand = new Random();
int dig = rand.Next(8);
l3.Text = System.Convert.ToString(dig);
}
private void startbutton1_Click(object sender, EventArgs e)
{
labelcash.Text = System.Convert.ToString(cash);
t1.Enabled = true; //Активируем таймер1
t2.Enabled = true; //Активируем таймер2
t3.Enabled = true; //Активируем таймер3
stop1.Enabled = true; //Активируем таймер4
stop2.Enabled = true; //Активируем таймер5
stop3.Enabled = true; //Активируем таймер6
}
private void stop1_Tick(object sender, EventArgs e)
{
t1.Enabled = false; //Отключем таймер1
stop1.Enabled = false;
}
private void stop3_Tick(object sender, EventArgs e)
{
t3.Enabled = false; //Отключаем таймер3
stop3.Enabled = false;
//Пишем выигрышные комбинациии
if ((l1.Text == "1") && (l2.Text == "1"))
{
if (l3.Text != "1")
{
MessageBox.Show("Вы выиграли $100"); //Выводит сообщение о выигрыше
cash += 100; //Прибавляем к первоначалному счету выигрыш
}
}
if ((l1.Text == "2") && (l2.Text == "2"))
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
18
{
if (l3.Text != "2")
{
MessageBox.Show("Вы выиграли $200");
cash += 200;
}
}
if ((l1.Text == "3") && (l2.Text == "3"))
{
if (l3.Text != "3")
{
MessageBox.Show("Вы выиграли $300");
cash += 300;
}
}
if ((l1.Text == "4") && (l2.Text == "4"))
{
if (l3.Text != "4")
{
MessageBox.Show("Вы выиграли $400");
cash += 400;
}
}
if ((l1.Text == "5") && (l2.Text == "5"))
{
if (l3.Text != "5")
{
MessageBox.Show("Вы выиграли $500");
cash += 500;
}
}
if ((l1.Text == "6") && (l2.Text == "6"))
{
if (l3.Text != "6")
{
MessageBox.Show("Вы выиграли $600");
cash += 600;
}
}
if ((l1.Text == "7") && (l2.Text == "7"))
{
if (l3.Text != "7")
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
19
{
MessageBox.Show("Вы выиграли $700");
cash += 700;
}
}
if ((l1.Text == "1") && (l2.Text == "1") && (l3.Text == "1"))
{
MessageBox.Show("Вы выиграли $1000");
}
if ((l1.Text == "2") && (l2.Text == "2") && (l3.Text == "2"))
{
MessageBox.Show("Вы выиграли $1500");
}
if ((l1.Text == "3") && (l2.Text == "3") && (l3.Text == "3"))
{
MessageBox.Show("Вы выиграли $2000");
}
if ((l1.Text == "4") && (l2.Text == "4") && (l3.Text == "4"))
{
MessageBox.Show("Вы выиграли $2500");
}
if ((l1.Text == "5") && (l2.Text == "5") && (l3.Text == "5"))
{
MessageBox.Show("Вы выиграли $3000");
}
if ((l1.Text == "6") && (l2.Text == "6") && (l3.Text == "6"))
{
MessageBox.Show("Вы выиграли $3500");
}
if ((l1.Text == "7") && (l2.Text == "7") && (l3.Text == "7"))
{
MessageBox.Show("Вы выиграли ДЖЕКПОТ $5000");
}
if ((l1.Text == "7") || (l2.Text == "7") || (l3.Text == "7"))
{
MessageBox.Show("Вы выиграли $70");
cash += 70;
}
if ((l1.Text == "1") || (l2.Text == "1") || (l3.Text == "1"))
{
MessageBox.Show("Вы выиграли $10");
cash += 10;
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
20
}
if ((l1.Text == "1") && (l2.Text == "7"))
{
MessageBox.Show("Вы выиграли $60");
}
if ((l1.Text == "1") && (l3.Text == "7"))
{
MessageBox.Show("Вы выиграли $60");
}
if ((l2.Text == "1") && (l3.Text == "7"))
{
MessageBox.Show("Вы выиграли $60");
}
labelcash.Text = System.Convert.ToString(cash); //Обновляем наш имеющийся счет
}
}
}
КП.09.02.03.220.16.00 ПЗ
Изм. Лист
№ документа
Подпись Дата
Лист
21
Download