Ejemplo n.º 1
0
        // attempt to remove an amount of money from the coin box
        public Boolean Withdraw(decimal AmountToRemove)
        {
            decimal amountRemoved      = 0M;
            decimal amountLeftToRemove = AmountToRemove;

            if ((AmountToRemove % Coin.ValueOfCoin(Coin.Denomination.NICKEL)) != 0)
            {
                Console.WriteLine("non multiple of 5");
                return(false);
            }
            if (!ContainsExactChangeFor(AmountToRemove))
            {
                Console.WriteLine("Exact change requirement not met ValueOf={0:c}, AmountToRemove={1:c}",
                                  this.ValueOf, AmountToRemove);
                return(false);
            }

            foreach (Coin.Denomination denominationEnumeral in reversedCoinList)
            {
                decimal amountOfThisCoinRemoved = 0M;
                if (amountLeftToRemove >= Coin.ValueOfCoin(denominationEnumeral))
                {
                    amountOfThisCoinRemoved = removeCoinDenomiation(
                        amountLeftToRemove, denominationEnumeral);
                    amountLeftToRemove -= amountOfThisCoinRemoved;
                    amountRemoved      += amountOfThisCoinRemoved;
                }
            }
            Console.WriteLine("AmountRemoved {0}, AmountToRemove {1}", amountRemoved, AmountToRemove);
            return(amountRemoved == AmountToRemove);
        }
Ejemplo n.º 2
0
        private bool ContainsExactChangeFor(decimal Amount)
        {
            Boolean result           = false;
            decimal amountToCheckFor = Amount;

            if (amountToCheckFor < 0M)
            {
                result = false;
            }
            else if (amountToCheckFor == 0M)
            {
                result = true;
            }
            else
            {
                foreach (Coin.Denomination denominationEnumeral in reversedCoinList)
                {
                    for (int i = 0; i < coinCount(denominationEnumeral); i++)
                    {
                        if (amountToCheckFor >= Coin.ValueOfCoin(denominationEnumeral))
                        {
                            amountToCheckFor -= Coin.ValueOfCoin(denominationEnumeral);
                        }
                        else
                        {
                            break;
                        }
                    }
                    result = amountToCheckFor == 0M;
                }
            }
            return(result);
        }
Ejemplo n.º 3
0
        // remove as many of a specified coin as possible, without going over
        private decimal removeCoinDenomiation(decimal AmountToRemove, Coin.Denomination denominationEnumeral)
        {
            var coins =
                from aCoin in box
                where aCoin.DenominationEnumeral == denominationEnumeral
                select aCoin;

            var coinArray = coins.ToArray();

            decimal amountRemoved      = 0M;
            decimal amountLeftToRemove = AmountToRemove;

            foreach (Coin aCoin in coinArray)
            {
                if (amountLeftToRemove >= Coin.ValueOfCoin(denominationEnumeral))
                {
                    box.Remove(aCoin);
                    amountRemoved      += aCoin.ValueOf;
                    amountLeftToRemove -= aCoin.ValueOf;
                }
                else
                {
                    break;
                }
            }

            return(amountRemoved);
        }