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); }
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(); }