public VendingMachineTransaction PurchaseItem(ItemType type, int slot)
        {
            VendingMachineTransaction result;

            if (StockList[type][slot] == null)
            {
                result = new VendingMachineTransaction(TransactionType.InvalidPurchase, 0, StockList[type][slot]);
            }
            else if (StockList[type][slot].Price > CurrentBalance)
            {
                result = new VendingMachineTransaction(TransactionType.NotSufficientFunds, StockList[type][slot]);
            }
            else if (StockList[type][slot].Quantity > 0)
            {
                CurrentBalance -= StockList[type][slot].Price;
                --StockList[type][slot].Quantity;
                result = new VendingMachineTransaction(TransactionType.PurchaseItem, StockList[type][slot]);
            }
            else
            {
                result = new VendingMachineTransaction(TransactionType.ItemOutOfStock, StockList[type][slot]);
            }

            TransactionLog.Add(result);
            return(result);
        }
        public VendingMachineTransaction FinishTransaction()
        {
            VendingMachineTransaction transaction = new VendingMachineTransaction(TransactionType.GiveChange, CurrentBalance);

            CurrentBalance = 0;
            TransactionLog.Add(transaction);
            return(transaction);
        }
        public void WriteTransaction(VendingMachineTransaction transaction, decimal currentBalance)
        {
            using (StreamWriter sw = new StreamWriter(LogFile, true))
            {
                switch (transaction.Type)
                {
                case TransactionType.MachineStart:
                    sw.WriteLine();
                    goto default;

                case TransactionType.PurchaseItem:
                    VendingMachineItem item = transaction.Item;
                    sw.WriteLine($"{transaction.Timestamp} {item.Name} {(char)item.Type}{item.Slot} {transaction.Amount.ToString("C")}\t\t{currentBalance.ToString("C")}");
                    break;

                default:
                    sw.WriteLine($"{transaction.Timestamp} {transaction.Type} {transaction.Amount.ToString("C")}\t\t{currentBalance.ToString("C")}");
                    break;
                }
            }
        }
        public VendingMachineTransaction FeedMoney(int amountToAdd)
        {
            List <int> validBills = new List <int> {
                1, 2, 5, 10, 20
            };
            bool isValid = validBills.Contains(amountToAdd);
            VendingMachineTransaction result;

            if (!isValid)
            {
                result      = new VendingMachineTransaction(TransactionType.InvalidBill, 0);
                amountToAdd = 0;
            }
            else
            {
                result          = new VendingMachineTransaction(TransactionType.FeedMoney, amountToAdd);
                CurrentBalance += amountToAdd;
            }

            TransactionLog.Add(result);
            return(result);
        }
Example #5
0
        public void PrintTransaction(VendingMachineTransaction transaction)
        {
            PrintBalance();
            SetCursorPosition(4, 6);
            SetColor(Gray);

            switch (transaction.Type)
            {
            case TransactionType.FeedMoney:
                Write($"Yay Money! You gave me a ");
                SetColor();
                Write($"{transaction.Amount.ToString("C")}");
                SetColor(Gray);
                Write(" bill!");
                SetCursorPosition(4, 7);
                break;

            case TransactionType.InvalidBill:
                Write($"That isn't real money. What am I supposed to do with that?");
                SetCursorPosition(4, 7);
                break;

            case TransactionType.PurchaseItem:
                VendingMachineItem item = transaction.Item;
                switch (item.Type)
                {
                case ItemType.Candy:
                    Write("Munch Munch, Yum!");
                    break;

                case ItemType.Chip:
                    Write("Crunch Crunch, Yum!");
                    break;

                case ItemType.Drink:
                    Write("Glug Glug, Yum!");
                    break;

                case ItemType.Gum:
                    Write("Chew Chew, Yum!");
                    break;
                }
                SetCursorPosition(4, 7);
                break;

            case TransactionType.InvalidPurchase:
                Write("There's nothing there for you to buy.");
                SetCursorPosition(4, 7);
                Write("You can't buy that.");
                SetCursorPosition(4, 8);
                Write("Buy something else.");
                SetCursorPosition(4, 9);
                break;

            case TransactionType.NotSufficientFunds:
                Write("I get that you'd like that,");
                SetCursorPosition(6, 7);
                Write("but sadly..");
                SetCursorPosition(8, 8);
                Write("you can't afford it.");
                SetCursorPosition(4, 10);
                Write("Insert additional cash or try something different.");
                SetCursorPosition(4, 11);
                break;

            case TransactionType.ItemOutOfStock:
                Write("I'm sorry, we're all out of that!");
                SetCursorPosition(4, 8);
                break;

            case TransactionType.GiveChange:
                if (transaction.Amount >= 0.05M)
                {
                    int[]   coins = { 0, 0, 0 };
                    decimal total = transaction.Amount;

                    while (total >= 0.05M)
                    {
                        if (total >= 0.25M)
                        {
                            ++coins[0];
                            total -= 0.25M;
                        }
                        else if (total >= 0.10M)
                        {
                            ++coins[1];
                            total -= 0.10M;
                        }
                        else if (total >= 0.05M)
                        {
                            ++coins[2];
                            total -= 0.05M;
                        }
                    }
                    SetColor(Gray);
                    Write($"You receive ");
                    SetColor();
                    if (coins[0] > 0)
                    {
                        Write(coins[0]);
                        SetColor(Gray);
                        Write(" quarter");
                        if (coins[0] > 1)
                        {
                            Write("s");
                        }
                        if (coins[1] > 0 || coins[2] > 0)
                        {
                            Write(", ");
                        }
                        else
                        {
                            Write(".");
                        }
                        SetColor();
                    }
                    if (coins[1] > 0)
                    {
                        if (coins[0] > 0 && coins[2] == 0)
                        {
                            SetColor(Gray);
                            Write("and ");
                            SetColor();
                        }
                        Write(coins[1]);
                        SetColor(Gray);
                        Write(" dime");
                        if (coins[1] > 1)
                        {
                            Write("s");
                        }
                        if (coins[2] > 0)
                        {
                            Write(", ");
                        }
                        else
                        {
                            Write(".");
                        }
                        SetColor();
                    }
                    if (coins[2] > 0)
                    {
                        if (coins[0] > 0 || coins[1] > 0)
                        {
                            SetColor(Gray);
                            Write("and ");
                            SetColor();
                        }
                        Write(coins[2]);
                        SetColor(Gray);
                        Write(" nickle.");
                        SetColor();
                    }
                    SetCursorPosition(4, 7);
                }
                break;

            case TransactionType.GenerateSalesReport:
                Write("Generating Sales report!");
                SetCursorPosition(4, 7);
                break;

            default:
                throw new NotImplementedException(transaction.Type.ToString());
            }
            PrintContinueMessage();
        }