/// <summary> /// Übernahme des Einwurfs in das Münzdepot. /// Rückgabe des Retourgeldes aus der Kasse. Staffelung des Retourgeldes /// hängt vom Inhalt der Kasse ab. /// </summary> /// <param name="coins">Aktueller Zustand des Münzdepots</param> public IEnumerable <Coin> FinishPayment(IEnumerable <Coin> coins) { int retCents = ReturnCents; Coin[] coinsArray = coins .OrderByDescending(c => c.CoinValue) .ToArray(); if (retCents > 0) { for (int i = 0; i < coinsArray.Length; i++) { while (coinsArray[i].Amount > 0 && retCents - coinsArray[i].CoinValue >= 0) { ReturnCoinValues = $"{ReturnCoinValues}{coinsArray[i].CoinValue};"; retCents -= coinsArray[i].CoinValue; coinsArray[i].Amount--; } } } if (ReturnCoinValues.Length > 0) { ReturnCoinValues = ReturnCoinValues.Remove(ReturnCoinValues.Length - 1); } DonationCents = retCents; return(coinsArray.OrderBy(c => c.CoinValue)); }
/// <summary> /// Münze wird eingenommen. /// </summary> /// <param name="coinValue"></param> /// <returns>isFinished ist true, wenn der Produktpreis zumindest erreicht wurde</returns> public bool InsertCoin(int coinValue) { int productPrice = Product.PriceInCents; ThrownInCents += coinValue; ReturnCents = ThrownInCents - productPrice; int sum = ReturnCents; while (sum > 0) { if (sum - 200 >= 0) { sum -= 200; ReturnCoinValues += "200;"; } else if (sum - 100 >= 0) { sum -= 100; ReturnCoinValues += "100;"; } else if (sum - 50 >= 0) { sum -= 50; ReturnCoinValues += "50;"; } else if (sum - 20 >= 0) { sum -= 20; ReturnCoinValues += "20;"; } else if (sum - 10 >= 0) { sum -= 10; ReturnCoinValues += "10;"; } else if (sum - 5 >= 0) { sum -= 5; ReturnCoinValues += "5;"; } else if (sum - 2 >= 0) { sum -= 2; ReturnCoinValues += "2;"; } else if (sum - 1 >= 0) { sum -= 1; ReturnCoinValues += "1;"; } } ReturnCoinValues = ReturnCoinValues.Remove(ReturnCoinValues.Length - 1, 1); return(coinValue >= Product.PriceInCents); }
/// <summary> /// Übernahme des Einwurfs in das Münzdepot. /// Rückgabe des Retourgeldes aus der Kasse. Staffelung des Retourgeldes /// hängt vom Inhalt der Kasse ab. /// </summary> /// <param name="coins">Aktueller Zustand des Münzdepots</param> public void FinishPayment(IEnumerable <Coin> coins) { int ret = _returnCents; if (ret == 0) { ReturnCoinValues = "0"; } foreach (var item in coins.OrderByDescending(c => c.CoinValue)) { while (ret >= item.CoinValue && item.Amount > 0 && ret > 0) { ret -= item.CoinValue; item.Amount--; ReturnCoinValues = $"{ReturnCoinValues}{item.CoinValue};"; } } if (ReturnCoinValues.Length > 1) { ReturnCoinValues = ReturnCoinValues.Remove(ReturnCoinValues.Length - 1); } _donationCents = ret; }
/// <summary> /// Übernahme des Einwurfs in das Münzdepot. /// Rückgabe des Retourgeldes aus der Kasse. Staffelung des Retourgeldes /// hängt vom Inhalt der Kasse ab. /// </summary> /// <param name="coins">Aktueller Zustand des Münzdepots</param> public void FinishPayment(IEnumerable <Coin> coins) { foreach (var v in ThrownInCoinValues .Split(";") .Select(s => Convert.ToInt32(s)) .GroupBy(s => s)) { coins .First(c => c.CoinValue == v.Key) .Amount += v.Count(); } coins = coins.OrderByDescending(c => c.CoinValue); int sum = ThrownInCents - Product.PriceInCents; foreach (Coin c in coins) { for (int i = 0; i < c.Amount && sum != 0; i++) { if (c.CoinValue <= sum) { ReturnCoinValues += c.CoinValue + ";"; sum -= c.CoinValue; c.Amount--; } } } if (ReturnCoinValues != null) { ReturnCoinValues = ReturnCoinValues.Substring(0, ReturnCoinValues.Length - 1); } else { ReturnCoinValues = "0"; } }