Найти тему

Делаем программу брони столиков на C sharp.

Оглавление
Программа Брони столиков
Программа Брони столиков

Всем Хай! Ну что, будем погружаться тему массивов? Мне, если честно не комфортно. Вчера решил сразу пробежаться по всему блоку с уроками. Просто посмотреть уроки, особо не вникая. Сразу приуныл. Если раньше было понятно, что, куда и почему, то сейчас треть действий, который делает автор курса, не понятна. Но останавливаться мы не будем. Нам ведь игры делать нужно. Поэтому продолжим.

Код программы.

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

По традиции сначала код.

bool open = true;
int[] tables = { 4, 6, 9, 11, 3, 7, 5, 1 };
int setTable;
int setPlase;
while (open)
{
Console.SetCursorPosition(0, 15);
for (int i = 0; i < tables.Length; i++)
{
Console.WriteLine($"За столиком {i+1} осталось - {tables[i]} мест");
}
Console.SetCursorPosition(0, 0);
Console.WriteLine("Администрирование столиков");
Console.SetCursorPosition(0, 2);
Console.WriteLine($"Нажмите 1 - для заказа столика\nНажмите 2 - для выхода из программы");
switch (Convert.ToInt32(Console.ReadLine()))
{
case1:
Console.Write("Какой номер столика выбираете?: ");
setTable = Convert.ToInt32(Console.ReadLine()) - 1;
if (setTable < 0 || setTable >= tables.Length)
{
Console.WriteLine("Нет такого столика");
break;
}
Console.WriteLine("Сколько мест забронировать?: ");
setPlase = Convert.ToInt32(Console.ReadLine());
if (tables[setTable] < setPlase || setPlase < 0)
{
Console.WriteLine("Недостаточно мест");
break;
}
tables[setTable] -= setPlase;
break;
case 2:
open = false;
break;
}
Console.ReadKey();
Console.Clear();

Разбор кода.

Ввод основных данных.

Я думаю, вы увидели вначале булевую переменную «bool open= true». Да я использую её редко, но надеюсь, буду использовать её чаще. Ведь это просто удобно. Здесь она отвечает за закрытие программы. Но об этом чуть позже.

Дальше у нас идут три числовые переменные.

  1. int[] tables= { 4, 6, 9, 11, 3, 7, 5, 1 } – Это собственно массив в котором указаны свободные места за каждым столиком.
  2. int setTable – Это собственно выбор столика.
  3. int setPlase – Это указание количество мест которое нам нужно.

Это все переменные.

Обработка данных.

После перечисление переменных мы открываем бесконечный цикл «while» в условии которого у нас стоит наша переменная «open», которая по умолчание у нас «true». Поэтому цикл бесконечный.

Внутри цикла нас встречает строчка переноса курсора ниже обычного.

«Console.SetCursorPosition(0, 15)»

Это нужно чтобы список столов был всегда ниже введенных значений. Короче для комфорта. И теперь для работы с массивом нам обязательно нужен цикл. Забегу вперёд и скажу, что для работы с двумерным массивом нам нужно два цикла. Цикл нужен для того, чтобы можно было перебирать и выводить все значения, которые находятся в цикле.

Помним, что у каждого значения в массиве есть свой индекс. Это как номер квартиры в многоэтажке. И начинается это отсчёт с 0.

Поэтому мы начинаем перебор всех значений с 0, «int i= 0».

И цикл будет работать, пока не переберёт все значения «i< tables.Length».

Каждую итерацию прибавляя 1 к индексу в цикле, «i++».

Внутри цикла мы будем выводить номера столиков, используя индекс каждого значения, но чтобы номера не начинались с 0, мы прибавляем сразу 1 ко всем индексам, «{i+1}». И выводим все значения, которые у нас означают свободные места за столом.

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

Console.SetCursorPosition(0, 0);
Console.WriteLine("Администрирование столиков");

Использование "switch"

Для работы с меню нам нужен «switch», что бы в каждом «case» можно было прописать логику работы каждого пункта меню.

Хорошо, что у нас их всего два.

И в этот раз мы не будем создавать отдельную переменную для ввода значений. А сразу в условия «switch» пропишем возможность ввода данных.

«switch (Convert.ToInt32(Console.ReadLine()))»

Знал бы раньше, что так можно, всегда бы так делал.

  • Первый "case".

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

«if (setTable < 0 || setTable >= tables.Length)»

Во-первых, могут ввести 0 и меньше. Прописываем это в условии «setTable< 0» и если так будем, то перебрасываем на нужное нам сообщение. Так же могут написать больше столиков, чем у нас есть, для этого тоже делаем своё условие «setTable>= tables.Length».

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

«if (tables[setTable] < setPlase || setPlase < 0)»

Если что-то из этого будет, то появится надпись «Недостаточно мест».

Если всё в порядке, то мы просто отнимаем цифры, которые мы ввели из данных выбранного нами столика в массиве.

  • Второй "case".

При нажатии на 2 у нас присваивается булевой переменной фолс «open = false» и наш общий цикл завершается. А значит, прекращается программа.

В самом конце мы видим две записи.

Console.ReadKey();
Console.Clear();

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

Видео работы программы.

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

#it #разработкаигр #программированиеснуля #программированиедляначинающих #какстатьпрограммистом #csharp #сишарп