Ejemplo n.º 1
0
 /// <summary>
 /// Совершить покупку
 /// </summary>
 /// <param name="itemProduct"></param>
 public void Buy(int numberProduct)
 {
     if (numberProduct >= 0 && shopWindow.ListProduct[numberProduct].IsEnabled)
     {
         Wallet reserveDeposit = walletDeposit.Copy();                                       // Сохранить депозит  на случай отката(нет монет для сдачи)
         walletMachine.Add(walletDeposit.GetAllMoney());                                     // Забрать деньги из депозита в автомат
         uint sumChange = reserveDeposit.Sum() - shopWindow.ListProduct[numberProduct].Cost; // Вычисление суммы сдачи.
         if (sumChange > 0)                                                                  // Если сдача требуетя
         {
             Wallet change = walletMachine.GetSum(sumChange);                                // Попытка получить сдачу
             if (change != null)                                                             // Если сдачу получили
             {
                 walletDeposit.Add(change);                                                  // Зачислить сдачу на депозит
                 shopWindow.ListProduct[numberProduct].DecCount();                           // Уменьшить кол-во товара на 1
                 cart.Add(shopWindow.ListProduct[numberProduct]);                            // Добавить товар в корзину.
             }
             else //Если не удалось получить сдачу
             {
                 walletDeposit.Add(reserveDeposit);  // Вернуть д.с. на депозит
                 return;
             }
         }
         else                                                  // Если сдача не требуется
         {
             shopWindow.ListProduct[numberProduct].DecCount(); // Уменьшить кол-во товара на 1.
             cart.Add(shopWindow.ListProduct[numberProduct]);  // Добавить товар в корзину.
         }
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Забрать все деньги из кошелька.
        /// </summary>
        /// <returns></returns>
        public Wallet GetAllMoney()
        {
            #region Проверки на корректность переданного значения
            if (Sum() <= 0)
            {
                throw new Exception("Бумажник пуст.");
            }
            #endregion

            var result = new Wallet();

            foreach (var i in pack)
            {
                if (i.Count > 0)
                {
                    result.Add(new Pack()
                    {
                        Coin = i.Coin, Count = i.Count
                    });
                    i.Count = 0;
                }
            }

            ChangeSum?.Invoke(Sum());

            return(result);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Получить сумму денежных средств. Сдача.
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public Wallet GetSum(uint value)
        {
            #region Проверки на корректность переданного значения
            if (value == 0)
            {
                throw new Exception("Запрашиваемая сумма должна быть больше нуля");
            }

            if (value > Sum())
            {
                throw new Exception("Недостаточно денежных средств");
            }
            #endregion

            var result = new Wallet();

            foreach (var i in pack)
            {
                if (i.Count > 0)
                {
                    uint div = value / i.Coin.Count;
                    uint mod = value % i.Coin.Count;

                    if (div == 0)
                    {
                        continue;
                    }
                    if (div <= i.Count)
                    {
                        result.Add(new Pack()
                        {
                            Coin = i.Coin, Count = div
                        });
                        div = 0;
                    }
                    else
                    {
                        result.Add(new Pack()
                        {
                            Coin = i.Coin, Count = i.Count
                        });
                        div -= i.Count;
                        div *= i.Coin.Count;
                    }
                    value = div + mod;

                    if (value == 0)
                    {
                        break;
                    }
                }
            }

            if (value != 0)
            {
                result = null;
            }
            else
            {
                //Списание
                GetSum(result);
                ChangeSum?.Invoke(Sum());
            }

            return(result);
        }