public void UpdateVending() { Dictionary <string, VendingItem> products = fileRepo.GetAll(); checkInventory = new CheckInventory(fileRepo); string input; Console.Write("Which item do you want to buy(ex. A1, A2...): "); input = Console.ReadLine().ToUpper(); if (products.ContainsKey(input)) //Checks to make sure the option that the item selected is in the dictionary { bool inStock = checkInventory.CheckAvailableInventory(input); //check inventory if (inStock) { bool enoughMoney = CalculateChange.SubtractMoney(input, fileRepo);//subtract money if (!enoughMoney) { Console.Clear(); Console.Write("Curent Money: "); Console.ForegroundColor = ConsoleColor.Red; Console.Write("$" + CalculateChange.Money); Console.WriteLine("\nYou do not have enough money."); Console.ResetColor(); Console.ReadKey(); } else { products[input].Inventory -= 1; fileRepo.UpdateVending(products); CalculateChange.GetQuartDimeNickPen(); //return change } } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Product not in stock."); Console.ResetColor(); Console.ReadKey(); } } else { Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("That is not a valid option. Going back to Menu."); Console.ResetColor(); Console.ReadKey(); } }
private void Process() { var saleAmount = saleTextBox.Text; var cashTendered = cashTextBox.Text; decimal sale; decimal cash; var isSaleMoney = decimal.TryParse(saleAmount, out sale); var isCashMoney = decimal.TryParse(cashTendered, out cash); var msg = ""; var cssClass = ""; if (!(isSaleMoney && isCashMoney)) { msg = "AmountOfSale and CustomerGaveMe are both required. \r\nYou must enter dollars AND cents including the dot."; cssClass = "text-danger"; FormatResultLabel(msg, cssClass); } else if (sale > 500.00M) { msg = sale + " as Amount of Sale is OVER 500.00."; cssClass = "text-danger"; FormatResultLabel(msg, cssClass); saleTextBox.Text = ""; } else if (cash < sale) { msg = "Excuse me, but you haven't given me enough money to cover the sale."; cssClass = "text-danger"; FormatResultLabel(msg, cssClass); ClearMoneyLabelsAndImages(); } else { var curChange = (cash - sale); _excludedList = GetExludedList(); var excludeList = MoneyManager.CreateExcludeList(_excludedList.ToArray()); var change = CalculateChange.GetCorrectChange(curChange, excludeList); resultLabel.Text = String.Format("Change: {0:C}", (sale - cash)); resultLabel.CssClass = "text-success"; SetMoneyDisplay(change, excludeList); } }
public void PullFromTillWithZeroCentsAndZeroDenominationTest() { var cents = 0M; var denominationToPull = 0M; var result = decimal.Truncate(cents / denominationToPull); var remainder = cents % denominationToPull; var expected = new TillResult { Result = result, Remainder = remainder, }; var actual = CalculateChange.PullDenominationFromTill(cents, denominationToPull); Assert.AreEqual(expected.Result, actual.Result); Assert.AreEqual(expected.Remainder, actual.Remainder); }
public void Should_ReturnInsufficientCoins_When_CoinsAreMissingForTheBestChange() { IBox box = new Box(new Coin[6] { new Coin(CoinEnumerator.Coin1.ToByte(), 1), new Coin(CoinEnumerator.Coin5.ToByte(), 2), new Coin(CoinEnumerator.Coin10.ToByte(), 2), new Coin(CoinEnumerator.Coin25.ToByte(), 0), new Coin(CoinEnumerator.Coin50.ToByte(), 0), new Coin(CoinEnumerator.Coin100.ToByte(), 0) }); int cents = 30; var calculateChange = new CalculateChange(box); var change = calculateChange.Calculate(cents); change.MessageCode.Should().Be(nameof(AppConsts.InsufficientCoins)); }
public void ExchangeMoney_Should_Be_Satisfied_By_92Cents() { IBox box = new Box(new Coin[6] { new Coin(CoinEnumerator.Coin1.ToByte(), 2), new Coin(CoinEnumerator.Coin5.ToByte(), 3), new Coin(CoinEnumerator.Coin10.ToByte(), 4), new Coin(CoinEnumerator.Coin25.ToByte(), 5), new Coin(CoinEnumerator.Coin50.ToByte(), 6), new Coin(CoinEnumerator.Coin100.ToByte(), 7) }); int cents = 92; var calculateChange = new CalculateChange(box); var change = calculateChange.Calculate(cents); change.Coins.Should().Be($"0{_decimalSeparator}01 | 0{_decimalSeparator}01 | 0{_decimalSeparator}05 " + $"| 0{_decimalSeparator}10 | 0{_decimalSeparator}25 | 0{_decimalSeparator}50"); }
public void GetCorrectChangeWithOneHundredThirtySixDollarsAndSixteenCents_ExcludeHundredAndTwentyAndTenAndFiveAndOneAndDimeAndNickelTest() { var cents = 136.16M; var resultList = new List <TillMoney>(); var moneyList = _moneyList; foreach (var denom in moneyList) { var tillMoney = new TillMoney { Name = denom.Name, PluralName = denom.PluralName }; switch (denom.Name) { case Enums.CurrencyType.Hundred: break; case Enums.CurrencyType.Twenty: break; case Enums.CurrencyType.Ten: break; case Enums.CurrencyType.Five: break; case Enums.CurrencyType.One: break; case Enums.CurrencyType.Dime: break; case Enums.CurrencyType.Nickel: break; case Enums.CurrencyType.Penny: tillMoney.Val = 13616; resultList.Add(tillMoney); break; } } var expected = resultList; var excludeList = MoneyManager.CreateExcludeList( new CurrencyHundred(), new CurrencyTwenty(), new CurrencyTen(), new CurrencyFive(), new CurrencyOne(), new CurrencyDime(), new CurrencyNickel() ); var actual = CalculateChange.GetCorrectChange(cents, excludeList); Assert.AreEqual(expected.Count, actual.Count); for (int i = 0; i < actual.Count; i++) { Assert.AreEqual(expected[i].Name, actual[i].Name); Assert.AreEqual(expected[i].Val, actual[i].Val); Assert.AreEqual(expected[i].PluralName, actual[i].PluralName); } }
public void GetCorrectChangeWithOneHundredSixDollarsAndFortyEightCents_EmptyExcludeListTest() { var cents = 106.48M; var resultList = new List <TillMoney>(); var moneyList = _moneyList; foreach (var denom in moneyList) { var tillMoney = new TillMoney { Name = denom.Name, PluralName = denom.PluralName }; switch (denom.Name) { case Enums.CurrencyType.Hundred: tillMoney.Val = 1; resultList.Add(tillMoney); break; case Enums.CurrencyType.Twenty: tillMoney.Val = 0; resultList.Add(tillMoney); break; case Enums.CurrencyType.Ten: tillMoney.Val = 0; resultList.Add(tillMoney); break; case Enums.CurrencyType.Five: tillMoney.Val = 1; resultList.Add(tillMoney); break; case Enums.CurrencyType.One: tillMoney.Val = 1; resultList.Add(tillMoney); break; case Enums.CurrencyType.Dime: tillMoney.Val = 4; resultList.Add(tillMoney); break; case Enums.CurrencyType.Nickel: tillMoney.Val = 1; resultList.Add(tillMoney); break; case Enums.CurrencyType.Penny: tillMoney.Val = 3; resultList.Add(tillMoney); break; } } var expected = resultList; var actual = CalculateChange.GetCorrectChange(cents, MoneyManager.CreateExcludeList()); Assert.AreEqual(expected.Count, actual.Count); for (int i = 0; i < actual.Count; i++) { Assert.AreEqual(expected[i].Name, actual[i].Name); Assert.AreEqual(expected[i].Val, actual[i].Val); Assert.AreEqual(expected[i].PluralName, actual[i].PluralName); } }