Реализация AddMoney

Начнём с добавления денег на баланс. Помните правило? В зависимости от модуля оплаты, начисление происходит по-разному.

Фрагмент 2.3      

if(command == "AddMoney")
{
    switch (payment)
    {
        case PaymentType.Coins:
            for(int i = 0; i < coinsValues.Length; i++)
            {
                Console.WriteLine($"Сколько монет номиналом {coinsValues[i]} вы хотите внести?");
                int count = 0;
                while (!int.TryParse(Console.ReadLine(),
                                        out count))
                {
                    Console.WriteLine("Вы ввели не число!");
                }
                coinsQuantity[i] += count;
                balance += count * coinsValues[i];
            }
            break;
        case PaymentType.Card:
            Console.WriteLine("Сколько снять с вашей карты?");
            int balanceDelta = 0;
            while (!int.TryParse(Console.ReadLine(),
                    out balanceDelta)) 
            {
                Console.WriteLine("Вы ввели не число!");
            }
            balance += balanceDelta;
            Console.WriteLine("Баланс успешно пополнен");
            break;
        default:
            break;
    }
}

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

Выбор происходит с помощью оператора switch.  

Если выбраны монеты:

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

Если выбрана карта:

Мы просто спрашиваем сколько пользователь хочет внести средств и пополняем баланс на эту сумму через увеличение переменной balance.

*Давайте предположим, что пользователь не вводит отрицательные числа.

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

Это делается через специфичную конструкцию на основе цикла while.

Фрагмент 2.4     

while (!int.TryParse(Console.ReadLine(),
                        out count))
{
    Console.WriteLine("Вы ввели не число!");
}

Эта конструкция имеет явную тенденцию к дублированию. Дублирующийся код – это плохо. Ко мне часто во время моих лекций обращаются студенты, задающие вопрос: “Сколько раз должен продублироваться код, чтобы настало время ликвидировать это?”. Ответ всегда один: “Достаточно одного дублирования”. Подробней эту проблему и способы её решения мы обсудим дальше.

Если вы нашли ошибку, пожалуйста выделите её и нажмите Ctrl+Enter.


Leave a Reply

Your email address will not be published. Required fields are marked *