private void DispenseChange(ChangeDue changeTray, int unitsToDispense)
        {
            var valueDispensed = Coin.Value * unitsToDispense;

            if (Coin.GetType() == typeof(Dollar))
            {
                changeTray.Dollars += unitsToDispense;
            }

            if (Coin.GetType() == typeof(Quarter))
            {
                changeTray.Quarters += unitsToDispense;
            }

            if (Coin.GetType() == typeof(Dime))
            {
                changeTray.Dimes += unitsToDispense;
            }

            if (Coin.GetType() == typeof(Nickle))
            {
                changeTray.Nickles += unitsToDispense;
            }

            if (Coin.GetType() == typeof(Penny))
            {
                changeTray.Pennies += unitsToDispense;
            }

            changeTray.AmountDue = changeTray.AmountDue - valueDispensed;
            this.Units          -= unitsToDispense;
        }
Beispiel #2
0
 private static void PrintChange(ChangeDue changeTray)
 {
     using (StreamWriter file = new StreamWriter(@"transaction-output.csv", true))
     {
         var output = $"{changeTray.Dollars} dollar, {changeTray.Quarters} quarters, {changeTray.Dimes} dimes, {changeTray.Nickles} nickles, {changeTray.Pennies} pennies";
         Console.WriteLine(output);
         file.WriteLine(output);
     }
 }
        public void DispenseChange(ChangeDue changeTray)
        {
            var unitsToDispense = Convert.ToInt32(Math.Floor(changeTray.AmountDue / Coin.Value));

            if (unitsToDispense > this.Units)
            {
                unitsToDispense = this.Units;
            }

            if (Coin.Value <= changeTray.AmountDue)
            {
                DispenseChange(changeTray, unitsToDispense);
            }
        }
Beispiel #4
0
        public virtual ChangeDue DispenseChange(decimal transactionTotal, decimal amountTendered)
        {
            var changeTray = new ChangeDue();

            changeTray.AmountDue = amountTendered - transactionTotal;

            do
            {
                foreach (ICoinChamber c in dispenser)
                {
                    c.DispenseChange(changeTray);
                }
            }while (changeTray.AmountDue > 0);

            return(changeTray);
        }
        public override ChangeDue DispenseChange(decimal transactionTotal, decimal amountTendered)
        {
            var changeTray = new ChangeDue();

            changeTray.AmountDue = amountTendered - transactionTotal;

            Random rnd = new Random();

            ICoinChamber[] randomChambers = dispenser.OrderBy(x => rnd.Next()).ToArray();

            do
            {
                foreach (ICoinChamber c in randomChambers)
                {
                    c.DispenseChangeRandom(changeTray);
                }
            }while (changeTray.AmountDue > 0);
            return(changeTray);
        }
        public ChangeDue DispenseChange(decimal amountOwed, decimal amountTendered)
        {
            var changeTray = new ChangeDue();

            if (amountTendered < amountOwed)
            {
                throw new Exception("Amount Tendered must be greater than Transaction Total");
            }

            changeTray.AmountDue = amountTendered - amountOwed;

            if (dispenser.GetTotalValue() < changeTray.AmountDue && MinimumChangeAvailable())
            {
                throw new Exception("Amount Due is greater than amount dispensable, please fill the dispenser");
            }

            if (amountOwed % appSettings.Divisor == 0)
            {
                return(randomDispenser.DispenseChange(amountOwed, amountTendered));
            }

            return(dispenser.DispenseChange(amountOwed, amountTendered));
        }