示例#1
0
 /// <summary>
 /// Allows for adding change to the existing change in the vending machine.
 /// </summary>
 /// <param name="change"></param>
 public void LoadChange(ChangeHolder change)
 {
     ChangeHolder.Quarter.quantity += change.Quarter.quantity;
     ChangeHolder.Dime.quantity    += change.Dime.quantity;
     ChangeHolder.Nickel.quantity  += change.Nickel.quantity;
     ChangeHolder.Penny.quantity   += change.Penny.quantity;
 }
示例#2
0
        /// <summary>
        /// Check to see if there is enough change before vending item.
        /// </summary>
        /// <param name="AmountInserted"></param>
        /// <param name="ItemPrice"></param>
        /// <returns></returns>
        public bool EnoughChange(decimal AmountInserted, decimal ItemPrice)
        {
            ChangeHolder tempChangeHolder = new ChangeHolder();

            tempChangeHolder.Quarter.quantity = ChangeHolder.Quarter.quantity;
            tempChangeHolder.Dime.quantity    = ChangeHolder.Dime.quantity;
            tempChangeHolder.Nickel.quantity  = ChangeHolder.Nickel.quantity;
            tempChangeHolder.Penny.quantity   = ChangeHolder.Penny.quantity;
            decimal AmountOfChangeToMake = AmountInserted - ItemPrice;

            if (AmountOfChangeToMake < 0)
            {
                throw new Exception("Not enough money inserted to purchase item!");
            }
            if (AmountOfChangeToMake == 0)
            {
                return(true);
            }
            while (AmountOfChangeToMake != 0)
            {
                if (tempChangeHolder.Quarter.quantity > 0 && AmountOfChangeToMake % tempChangeHolder.Quarter.value == 0)
                {
                    tempChangeHolder.Quarter.quantity--;
                    AmountOfChangeToMake -= ChangeHolder.Quarter.value;
                }
                else if (tempChangeHolder.Dime.quantity > 0 && AmountOfChangeToMake % tempChangeHolder.Dime.value == 0)
                {
                    tempChangeHolder.Dime.quantity--;
                    AmountOfChangeToMake -= ChangeHolder.Dime.value;
                }
                else if (tempChangeHolder.Nickel.quantity > 0 && AmountOfChangeToMake % tempChangeHolder.Nickel.value == 0)
                {
                    tempChangeHolder.Nickel.quantity--;
                    AmountOfChangeToMake -= ChangeHolder.Nickel.value;
                }
                else if (tempChangeHolder.Penny.quantity > 0 && AmountOfChangeToMake % tempChangeHolder.Penny.value == 0)
                {
                    tempChangeHolder.Penny.quantity--;
                    AmountOfChangeToMake -= ChangeHolder.Penny.value;
                }
                else
                {
                    return(false);
                }
            }

            return(true);
        }
示例#3
0
        /// <summary>
        /// Calculates the amount of change to dispense.  If a certain coin has run out, it moves on the next one.
        /// </summary>
        /// <param name="AmountInserted"></param>
        /// <param name="ItemPrice"></param>
        /// <returns></returns>
        public ChangeHolder MakeChange(decimal AmountInserted, decimal ItemPrice)
        {
            ChangeHolder CoinsGiven           = new ChangeHolder();
            decimal      AmountOfChangeToMake = AmountInserted - ItemPrice;

            if (AmountOfChangeToMake < 0)
            {
                throw new Exception("Not enough money inserted to purchase item!");
            }
            if (AmountOfChangeToMake == 0)
            {
                return(CoinsGiven);
            }
            while (AmountOfChangeToMake != 0)
            {
                if (ChangeHolder.Quarter.quantity > 0 && AmountOfChangeToMake % ChangeHolder.Quarter.value == 0)
                {
                    CoinsGiven.Quarter.quantity++;
                    AmountOfChangeToMake -= ChangeHolder.Quarter.value;
                    ChangeHolder.Quarter.quantity--;
                }
                else if (ChangeHolder.Dime.quantity > 0 && AmountOfChangeToMake % ChangeHolder.Dime.value == 0)
                {
                    CoinsGiven.Dime.quantity++;
                    AmountOfChangeToMake -= ChangeHolder.Dime.value;
                    ChangeHolder.Dime.quantity--;
                }
                else if (ChangeHolder.Nickel.quantity > 0 && AmountOfChangeToMake % ChangeHolder.Nickel.value == 0)
                {
                    CoinsGiven.Nickel.quantity++;
                    AmountOfChangeToMake -= ChangeHolder.Nickel.value;
                    ChangeHolder.Nickel.quantity--;
                }
                else if (ChangeHolder.Penny.quantity > 0 && AmountOfChangeToMake % ChangeHolder.Penny.value == 0)
                {
                    CoinsGiven.Penny.quantity++;
                    AmountOfChangeToMake -= ChangeHolder.Penny.value;
                    ChangeHolder.Penny.quantity--;
                }
                else
                {
                    throw new Exception("Unable to make enough change!");
                }
            }

            return(CoinsGiven);
        }
示例#4
0
 public ChangeMaker()
 {
     ChangeHolder = new ChangeHolder();
 }
示例#5
0
 /// <summary>
 /// Loads Change to machine.  Assumes that only one of each item is in the list.
 /// </summary>
 /// <param name="change"></param>
 public static void loadChange(ChangeHolder change)
 {
     changeMaker.LoadChange(change);
     adminPanelSelection();
 }
示例#6
0
        public static void  adminPanelSelection()
        {
            Console.WriteLine("What would you like to do?");
            Console.WriteLine("To load change, press 1.");
            Console.WriteLine("To empty change, press 2.");
            Console.WriteLine("To load a specific item, press 3");
            Console.WriteLine("To load a list of items, press 4");
            Console.WriteLine("To place the machine in vend mode, press 5");
            int selection = 0;

            Int32.TryParse(Console.ReadLine(), out selection);
            if (selection < 1 || selection > 5)
            {
                Console.WriteLine("Invalid Selection. Please try again.");
                adminPanelSelection(); //Could throw a stack overflow execption here if user selects wrong item too many times
            }
            //all values being passed are being coded here instead of asking for input to simplify both coding and testing
            switch (selection)
            {
            case 1:
                ChangeHolder change = new ChangeHolder();
                change.Quarter.quantity = 25;
                change.Dime.quantity    = 30;
                change.Nickel.quantity  = 40;
                change.Penny.quantity   = 100;
                loadChange(change);
                break;

            case 2:
                emptyChange();
                break;

            case 3:
                loadItem(new Item()
                {
                    Name = "Pepsi", quantity = 10, Price = .89M
                });
                break;

            case 4:
                Items items = new Items();
                items.items.Add(new Item()
                {
                    Name = "CocaCola", Price = .87M, quantity = 12
                });
                items.items.Add(new Item()
                {
                    Name = "Diet Pepsi", Price = .96M, quantity = 1
                });
                items.items.Add(new Item()
                {
                    Name = "Diet Coke", Price = .96M, quantity = 3
                });
                loadItems(items);
                break;

            case 5:
                VendMode();
                break;
            }
        }
示例#7
0
        /// <summary>
        /// Change must be inserted before being able to select an item.  Machine will check if there is enough change to make the purchase.
        /// </summary>
        public static void VendMode()
        {
            Items availableItems = new Items();

            availableItems = itemSelector.AvailableItems();

            Console.WriteLine("Please insert change. Q for quarter, D for dime, N for nickel, P for penny. Press enter when done");
            string        changeInput  = Console.ReadLine();
            List <Change> change       = new List <Change>();
            ChangeHolder  changeHolder = new ChangeHolder();
            decimal       inserted     = 0M;

            foreach (var character in changeInput)
            {
                switch (character)
                {
                case 'Q':
                    changeHolder.Quarter.quantity++;
                    inserted += changeHolder.Quarter.value;
                    break;

                case 'D':
                    changeHolder.Dime.quantity++;
                    inserted += changeHolder.Dime.value;
                    break;

                case 'N':
                    changeHolder.Nickel.quantity++;
                    inserted += changeHolder.Nickel.value;
                    break;

                case 'P':
                    changeHolder.Penny.quantity++;
                    inserted += changeHolder.Penny.value;
                    break;

                default:
                    break;
                }
            }

            int index = 0;

            foreach (Item item in availableItems.items)
            {
                if (item.quantity > 0)
                {
                    Console.WriteLine(index + " - " + item.Name + " - " + item.Price);
                }
                index++;
            }
            Console.WriteLine("X to shutdown or A to enter admin panel.");
            int selectedIndex = -1;

            while (selectedIndex == -1)
            {
                string input = Console.ReadLine();
                if (input == "X")
                {
                    return;
                }
                if (input == "A")
                {
                    adminPanelSelection();
                }
                else
                {
                    Int32.TryParse(input, out selectedIndex);
                    if (selectedIndex == -1)
                    {
                        Console.WriteLine("invalid selection, please try again");
                    }
                }
            }
            Item selectedItem = new Item();

            selectedItem = availableItems.items[selectedIndex];
            try
            {
                if (changeMaker.EnoughChange(inserted, selectedItem.Price))
                {
                    itemSelector.VendItem(selectedItem);
                    ChangeHolder changeGiven = new ChangeHolder();
                    changeGiven = changeMaker.MakeChange(inserted, selectedItem.Price);
                    Console.WriteLine("Change given");
                    Console.WriteLine("Quarters: " + changeGiven.Quarter.quantity.ToString());
                    Console.WriteLine("Dimes: " + changeGiven.Dime.quantity.ToString());
                    Console.WriteLine("Nickels: " + changeGiven.Nickel.quantity.ToString());
                    Console.WriteLine("Pennies: " + changeGiven.Penny.quantity.ToString());
                    changeMaker.LoadChange(changeHolder); //load the coins inserted into the change maker
                    Console.WriteLine("Item vended");
                }

                else
                {
                    Console.WriteLine("Not enough change.  Returning inserted change.");
                    changeHolder = new ChangeHolder();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            VendMode();
        }