static void Main(string[] args)
        {
            // генерируем сдачу в автомате границы - случайные числа
            coin_1 = (uint)generator.Next(0, 10);
            coin_2 = (uint)generator.Next(0, 10);
            coin_5 = (uint)generator.Next(0, 10);
            coin_10 = (uint)generator.Next(0, 10);

            int user_balance = (int)CASH; // остаток на счету у покупателя
            machine_balance += coin_1 * RUBLE + coin_2 * TWO + coin_5 * FIVE + coin_10 * TEN;
            string command; // команда для управления меню

            cakes = new Cake(CAKE_N, CAKE_P, cake_q, CAKE_ID);
            biscuits = new Biscuit(BISCUIT_N, BUSCUIT_P, busciut_q, BISCUIT_ID);
            wafers = new Wafer(WAFER_N, WAFER_P, wafer_q, WAFER_ID);

            //собрали все продукты в список
            menu = new List<Product>();
            menu.Add(cakes);
            menu.Add(biscuits);
            menu.Add(wafers);

            // допущение: если в автомате менее 20 рублей, то он не сможет выдать сдачу,
            // в таком случае он не принимает заказы от покупателей
            if (machine_balance > 20)
            {
                do
                {
                    // предоставляем меню
                    GetMenu(cakes, biscuits, wafers, user_balance);

                    uint money = GetMoney("Введите сумму: ", user_balance);
                    machine_balance += money;
                    int id; // код продукта

                    // если покупатель ввёл сумму, не прывашающую в его кошельке
                    if (money <= user_balance)
                    {
                        user_balance -= (int)money;
                        Console.WriteLine("\nВы внесли: {0} рублей", money);
                        Console.WriteLine("Ваш остаток: {0} рублей", user_balance);

                        // пока деньги не кончились
                        while (money > 0)
                        {
                            // выбор продукта
                            id = GetProductId();
                            Product choosen_product = menu.Find(item => item.Id == id);

                            // если товар в наличии
                            if (choosen_product.Quantity > 0)
                                OrderProcessing(choosen_product, ref money, ref user_balance);
                            // если товара в наличии нет
                            else
                            {
                                Console.WriteLine("Выбранного товара нет в наличии...");
                                command = GetCommand("Нажмите + для выбора другого товара\n\t- для возврата денег: ");
                                if (command == "+")
                                    continue;
                                else
                                {
                                    ReturnDelivery(money);
                                    user_balance += (int)money;
                                    Console.WriteLine("Доступно в кошельке: {0}", user_balance);
                                    money = 0;
                                }
                            }
                        }
                    }
                    // если покупатель попытался ввёл больше, чем у него есть (в реальной жизни так не получится)
                    else
                    {
                        Console.WriteLine("Недостаточно средств в кошельке...");
                        money = (uint)user_balance;
                        user_balance = 0;
                        command = GetCommand("Вернуть сдачу? (+ / -): ");
                        if (command == "+")
                        {
                            ReturnDelivery(money);
                            user_balance += (int)money;
                            Console.WriteLine("Доступно в кошельке: {0}", user_balance);
                            money = 0;
                        }
                        else
                            money = GetMoney("Введите деньги: ", user_balance);
                    }

                    Console.WriteLine("\nДля выхода из программы нажмите ESCAPE...\n");
                }

                while (Console.ReadKey().Key != ConsoleKey.Escape);
            }
            else
                Console.WriteLine("К сожалению, в автомате нет сдачи...");
        }
        /// <summary>
        ///  Метод выводит на экран меню автомата
        /// </summary>
        /// <param name="cakes"></param> кексы
        /// <param name="biscuits"></param> печенья
        /// <param name="wafers"></param> вафли
        /// <param name="user_balance"></param> кол-во денег у пользователя в кошельке
        public static void GetMenu(Cake cakes, Biscuit biscuits, Wafer wafers, int user_balance)
        {
            Console.WriteLine("\n==============================");
            Console.WriteLine("Название | Цена | Кол-во | Код");
            Console.WriteLine("==============================");
            Console.WriteLine(cakes.ToString());
            Console.WriteLine(biscuits.ToString());
            Console.WriteLine(wafers.ToString());
            Console.WriteLine("\r\nАвтомат принимает монеты по 1, 2, 5, 10 рублей\n");

            Console.WriteLine("ДОСТУПНО В КОШЕЛЬКЕ: {0}\n", user_balance);
        }