public UserInterface(VendingMachine vm)
 {
     this.vm = vm;
 }
Beispiel #2
0
        public void GenerateDisplayItemsMenu(Dictionary <string, SnackItem> Snacks, VendingMachine Vend, bool bMainMenu = true)
        {
            Console.Clear();
            List <string> sListOfKeys = new List <string>();

            foreach (string s in Snacks.Keys)
            {
                sListOfKeys.Add(s);
            }
            string[] saKeys           = sListOfKeys.ToArray();
            decimal  dBalanceOverride = Vend.Balance;

            if (dBalanceOverride > 999.99m)
            {
                dBalanceOverride = 999.99m;
            }
            string sLine = "_______________________________________________\n" +
                           "||   _   _   _   _   _   _   _   _   _   _   ||\n" +
                           "||  / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\  ||\n" +
                           "|| ( V | E | N | D | O | M | A | T | I | C ) ||\n" +
                           "||  \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/  ||\n" +
                           "||___________________________________________||\n" +
                           "||      ||      ||      ||      ||           ||\n" +
                           $"||  A1  ||  A2  ||  A3  ||  A4  ||  Balance  ||\n" +
                           $"||      ||      ||      ||      ||  ${string.Format("{0:000.00}", dBalanceOverride)}  ||\n" +
                           $"||      ||      ||      ||      ||           ||\n" +
                           $"||      ||      ||      ||      ||  [A] [B]  ||\n" +
                           $"||  B1  ||  B2  ||  B3  ||  B4  ||  [C] [D]  ||\n" +
                           $"||      ||      ||      ||      ||           ||\n" +
                           $"||      ||      ||      ||      ||  [1] [2]  ||\n" +
                           $"||      ||      ||      ||      ||  [3] [4]  ||\n" +
                           $"||  C1  ||  C2  ||  C3  ||  C4  ||           ||\n" +
                           $"||      ||      ||      ||      ||           ||\n" +
                           $"||      ||      ||      ||      ||           ||\n" +
                           $"||      ||      ||      ||      ||           ||\n" +
                           $"||  D1  ||  D2  ||  D3  ||  D4  ||           ||\n" +
                           $"||      ||      ||      ||      ||           ||\n" +
                           $"||      ||      ||      ||      ||           ||\n" +
                           $"||      ||      ||      ||      ||           ||\n" +
                           "||______________________________||           ||\n" +
                           "||                              ||           ||\n" +
                           "||                              ||           ||\n" +
                           "||______________________________||___________||\n\n";

            string[] newStringArray = sLine.Split('\n');
            foreach (string s in newStringArray)
            {
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine(s);
                Console.ResetColor();
            }
            int n = 0;

            sLine = "";
            foreach (string s in saKeys)
            {
                if (Snacks[saKeys[n]].nAmount <= 0)
                {
                    sLine += "**SOLD OUT**\n";
                }
                else
                {
                    sLine += $"{ Snacks[saKeys[n]].sLocation} - { Snacks[saKeys[n]].sName} - ${ Snacks[saKeys[n]].dPrice}\n";
                }
                n++;
            }
            Console.WriteLine(sLine);
            Console.ForegroundColor = ConsoleColor.White;
            if (bMainMenu)
            {
                Console.WriteLine("1). Insert Money");
                Console.WriteLine("2). Select Product");
                Console.WriteLine("3). Finish Transaction");
                Console.WriteLine("4). Exit");
            }
        }
        public void Display(VendingMachine vend)
        {
            string directory = Environment.CurrentDirectory;
            string filename  = "Log.txt";
            string fullPath  = Path.Combine(directory, filename);

            vmfw = new VendingMachFileWriter(fullPath);

            List <Item> allPurchases = new List <Item>();

            while (true)
            {
                Console.WriteLine("(1) Feed Money");
                Console.WriteLine("(2) Select Product");
                Console.WriteLine("(3) Finish Transaction");
                Console.WriteLine("(Q) Return to Main Menu");

                string input = Console.ReadLine().ToUpper();

                if (input == "1" || input == "(1)")
                {
                    Console.WriteLine("Please enter a dollar amount(1, 2, 5, 10,)");
                    string[] validMoneyValues = { "1", "2", "5", "10" };
                    string   moneyInput       = Console.ReadLine();
                    if (validMoneyValues.Contains(moneyInput))
                    {
                        decimal moneyParsed = 0;

                        Decimal.TryParse(moneyInput, out moneyParsed);
                        vend.FeedMoney(moneyParsed);

                        Console.WriteLine("Money balance is " + vend.Balance.ToString("C"));
                        vmfw.LogMessage("FEED MONEY:     " + moneyParsed.ToString("C") + "      " + vend.Balance.ToString("C"));
                    }
                    else
                    {
                        Console.WriteLine("Amount not valid, your bill is being returned");
                    }
                }
                else if (input == "2" || input == "(2)")
                {
                    Console.WriteLine("Which slot would you like to choose?");

                    string slotInput = Console.ReadLine().ToUpper();
                    if (!vend.DoesSlotExist(slotInput))
                    {
                        Console.WriteLine("That slot does not exist, please try again");
                    }
                    else if (vend.IsSoldOut(slotInput))
                    {
                        Console.WriteLine("I'm sorry that item is sold out, please try again with another choice.");
                    }
                    else if (vend.InsufficientFunds(slotInput))
                    {
                        Console.WriteLine("I'm sorry you do not have enough money");
                    }
                    else
                    {
                        try
                        {
                            Item purchasedItem = vend.Purchase(slotInput);
                            allPurchases.Add(purchasedItem);

                            Console.WriteLine("you have purchased " + purchasedItem.Name);
                            Console.WriteLine("your new balance is " + vend.Balance);
                        }
                        catch (VendingMachineException ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                    }
                }
                else if (input == "3" || input == "(3)")
                {
                    decimal oldBalance = vend.Balance;
                    Change  change     = vend.CompleteTransaction();
                    Console.WriteLine("Your Change is " + change.NumberOfQuarters + " quarters, " +
                                      change.NumberOfDimes + " dimes, " + change.NumberOfNickels + " nickles");

                    Console.WriteLine("Enjoy your meal!");
                    foreach (Item food in allPurchases)
                    {
                        Console.WriteLine(food.Consume());
                    }

                    vmfw.LogMessage("GIVE CHANGE :" + oldBalance.ToString("C") + "      " + vend.Balance.ToString("C"));

                    string salesPath = Path.Combine(directory, "salesreport.txt");
                    vmfw = new VendingMachFileWriter(salesPath);

                    decimal totalSales = 0;
                    foreach (Item item in allPurchases)
                    {
                        vmfw.SalesReport(item.Name + "|" + item.Price);
                        totalSales += item.Price;
                    }

                    vmfw.SalesReport("");
                    vmfw.SalesReport("**TOTAL SALES** " + totalSales.ToString("C"));
                    vmfw.SalesReport("");
                    vmfw.SalesReport("Never gonna give you up, never gonna let you down");
                    vmfw.SalesReport("Never gonna run around and desert you");
                    vmfw.SalesReport("Never gonna make you cry, never gonna say goodbye");
                    vmfw.SalesReport("Never gonna tell a lie and hurt you");
                }
                else if (input == "Q" || input == "(Q)")
                {
                    Console.WriteLine("Returning to Main Menu");
                    break;
                }
            }
        }
        public void Display()
        {
            Money          moneyInMachine = new Money();
            VendingMachine vendingMachine = new VendingMachine();

            Money.Balance = moneyInMachine.MoneyInitial;


            while (true)
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine("Welcome to the Virtual Vending Machine!");
                Console.WriteLine();
                Console.WriteLine("(1) Display Vending Machine Items");
                Console.WriteLine("(2) Purchase Item");
                Console.WriteLine("(3) Exit");

                string userInput = Console.ReadLine();
                if (userInput == "1")
                {
                    vendingMachine.DisplayAllItems();
                    Console.WriteLine();
                    Console.WriteLine("Please press ENTER to go back to the MAIN MENU.");
                }
                else if (userInput == "2")
                {
                    Console.WriteLine("(1) Feed Money");
                    Console.WriteLine("(2) Select Product");
                    Console.WriteLine("(3) Finish Transaction");
                    Console.WriteLine($"Current Money Provided: {Money.Balance:C2}");



                    string userInput2 = Console.ReadLine();
                    if (userInput2 == FEEDMONEY)
                    {
                        Console.WriteLine("How much money in dollars do you want to insert?");
                        while (true)
                        {
                            // current money provided indicates how much money the customer has fed into the machine
                            Console.WriteLine("$1, $2, $5, or $10 dollars?");
                            decimal amountInserted = decimal.Parse(Console.ReadLine()); // need a try catch
                            if (amountInserted == 1.0M || amountInserted == 2.0M || amountInserted == 5.0M || amountInserted == 10.0M)
                            {
                                // get the amount of money input
                                Console.WriteLine($"You have {moneyInMachine.AddMoney(amountInserted):C2} to spend.");
                                Log.LogFeedMoney(Money.Balance, amountInserted);
                                Console.WriteLine();
                                Console.WriteLine("Please press ENTER to continue with your purchase.");
                                break;
                            }
                            else
                            {
                                Console.WriteLine("INVALID AMOUNT");
                            }
                        }
                    }
                    else if (userInput2 == "2")
                    {
                        while (true)
                        {
                            Console.WriteLine();
                            Console.WriteLine("Which item would you like to purchase?");
                            Console.WriteLine();
                            // display all items

                            vendingMachine.DisplayAllItems();

                            string itemChosen = Console.ReadLine();
                            // if item exists and itemPrice < MoneyInitial, able to give it
                            if (vendingMachine.ItemExists(itemChosen) && vendingMachine.VendingItems[itemChosen].ItemsRemaining > 0 && vendingMachine.VendingItems[itemChosen].ItemPrice < Money.Balance)
                            {
                                Console.WriteLine($"Yay! You selected {itemChosen}!");
                                Console.Beep(588, 200);
                                Console.WriteLine("Beep...");
                                Console.WriteLine();
                                Console.Beep(440, 200);
                                Console.WriteLine("...Boop...");
                                Console.WriteLine();
                                Console.Beep(370, 200);
                                Console.WriteLine("......Beep...");
                                Console.WriteLine();
                                Console.Beep(294, 200);
                                Console.WriteLine(".........Boop...");
                                Console.WriteLine();
                                Console.WriteLine($"............... You got a {vendingMachine.VendingItems[itemChosen].ItemName}!");
                                Console.WriteLine("Enjoy!!!");
                                Console.WriteLine($"{vendingMachine.VendingItems[itemChosen].VendingMessage}");


                                Log.LogItem(vendingMachine.VendingItems[itemChosen].ItemName, itemChosen, Money.Balance, Money.Balance -= vendingMachine.VendingItems[itemChosen].ItemPrice);
                                //Money.Balance = Money.Balance - vendingMachine.VendingItems[itemChosen].ItemPrice;
                                vendingMachine.VendingItems[itemChosen].ItemsRemaining--;

                                break;
                            }
                            // else if !item exists Console.Writeline("Item does not exist.") and return to purchase menu
                            else if (!vendingMachine.ItemExists(itemChosen))
                            {
                                Console.Clear();
                                Console.WriteLine();
                                Console.WriteLine("Whoops! The item does not exist!");
                                Console.WriteLine("GAME OVER!");
                                Console.WriteLine("Please try again!");
                                Console.WriteLine();
                                Console.WriteLine($"Your remaining balance is {Money.Balance:C2}");
                            }
                            // else if !item sold out Console.Writeline("Item is SOLD OUT." and return to purchase menu.
                            // ItemsRemaining <= 0;
                            else if (vendingMachine.ItemExists(itemChosen) && vendingMachine.VendingItems[itemChosen].ItemsRemaining < 1 && vendingMachine.VendingItems[itemChosen].ItemPrice < Money.Balance)// see if money works
                            {
                                Console.Clear();
                                Console.WriteLine();
                                Console.WriteLine($"Again... {itemChosen} is SOLD OUT! Sorry boo thang!");
                                Console.WriteLine();
                                Console.WriteLine($"Your remaining balance is {Money.Balance:C2}");
                            }
                            else if (vendingMachine.ItemExists(itemChosen) && vendingMachine.VendingItems[itemChosen].ItemPrice > Money.Balance)
                            {
                                Console.Clear();
                                Console.WriteLine();
                                Console.WriteLine("Insufficient Funds... Please select another item.");
                                Console.WriteLine();
                                Console.WriteLine($"Your remaining balance is {Money.Balance:C2}");
                                break;
                            }
                        }
                    }
                    else if (userInput2 == "3")
                    {
                        Console.WriteLine("Finishing Transaction");
                        //give back change here in nickels, dimes, quarters (decimal)
                        // update the machine's balance to 0 remaining
                        Log.LogGiveChange(Money.Balance, 0M);
                        Money.ChangeGiven();
                        Console.WriteLine();
                        Console.WriteLine($"Your remaining balance is {Money.Balance:C2}");
                    }
                }
                else if (userInput == "3")
                {
                    Console.WriteLine("Please come again soon! Have a nice day!");
                    break;
                }

                Console.ReadLine();
                Console.Clear();
            }
        }
        //Method to display all items in the vending machine in a grid with ASCII art needs a Vending Machine object passed as an argument
        public static void Display(VendingMachine vm)
        {
            //Grab a refererence to the Dictionary stored in Vending Machine
            Dictionary <string, Item> items = vm.items;

            Console.WriteLine("________________________________________________________________________________________");
            Console.WriteLine("|                                                                                      |");
            Console.WriteLine("|                                                                                      |");
            Console.WriteLine("|  __________________________________________________________________________________  |");
            Console.WriteLine("|  |                                                                                |  |");
            for (int i = 0; i < 4; i++)
            {
                string letter = "";
                switch (i)
                {
                case 0:
                    letter = "A";
                    break;

                case 1:
                    letter = "B";
                    break;

                case 2:
                    letter = "C";
                    break;

                case 3:
                    letter = "D";
                    break;
                }
                Console.Write("|  |");
                for (int j = 1; j <= 4; j++)
                {
                    string keyLookup = letter + j;
                    Console.Write($"{keyLookup,-20}");
                }
                Console.Write("|  |\r\n");
                Console.Write("|  |");
                for (int j = 1; j <= 4; j++)
                {
                    string keyLookup  = letter + j;
                    string nameString = items[keyLookup].Name;
                    if (items[keyLookup].Quantity < 1)
                    {
                        nameString = "**SOLD OUT**";
                    }
                    Console.Write($"{nameString,-20}");
                }
                Console.Write("|  |\r\n");
                Console.Write("|  |");
                for (int j = 1; j <= 4; j++)
                {
                    string keyLookup = letter + j;
                    Console.Write($"{items[keyLookup].Price,-20:c}");
                }
                Console.Write("|  |\r\n");
                Console.WriteLine("|  |                                                                                |  |");
                Console.WriteLine("|  |                                                                                |  |");
            }
            Console.WriteLine("|  |________________________________________________________________________________|  |");
            Console.WriteLine("|                                                                                      |");
            Console.WriteLine("|           ________________________________________________________________           |");
            Console.WriteLine("|           |                                                              |           |");
            Console.WriteLine("|           |                                                              |           |");
            Console.WriteLine("|           |______________________________________________________________|           |");
            Console.WriteLine("|                                                                                      |");
            Console.WriteLine("|______________________________________________________________________________________|");
            Console.WriteLine("    |   |                                                                     |   |     ");
            Console.WriteLine("    |___|                                                                     |___|     ");
        }
 public void MakePurchase(string slot, string item, decimal startBal, decimal price, decimal finalBal, VendingMachine vendingMachine, List <VendingMachineItem> customer, VendingMachineLogger logger, MainMenu mainmenu)
 {
     vendingMachine.Purchase(slot, vendingMachine, customer, mainmenu);
     logger.RecordTransaction($"{item} {slot.ToUpper()}", startBal, price, finalBal);
 }
        public void DisplaySubMenu(VendingMachine vendingMachine, List <VendingMachineItem> customer, MainMenu mainmenu, VendingMachineLogger logger)
        {
            PurchaseMenu purchaseMenu = new PurchaseMenu();

            purchaseMenu.Display(vendingMachine, customer, mainmenu, purchaseMenu, logger);
        }
 public UserInterface(VendingMachine vendingMachine)
 {
     this.vendingMachine = vendingMachine;
 }