/// <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) { // Münzen einnehmen coins = coins.OrderByDescending(c => c.CoinValue).ToArray(); foreach (var coinValue in ThrownInCoinValues.Split(";").Select(x => Convert.ToInt32(x))) { coins.Single(c => c.CoinValue == coinValue).Amount++; } int centsToReturn = ThrownInCents - Product.PriceInCents; // Rückgabemünzen ermitteln ReturnCoinValues = ""; foreach (var coin in coins) { int coinsToReturn = centsToReturn / coin.CoinValue; // gewünschte Anzahl an Münzen des Wertes coinsToReturn = Math.Min(coinsToReturn, coin.Amount); // wieviele Münzen sind im Depot coin.Amount -= coinsToReturn; // Münze zurückgeben centsToReturn -= coinsToReturn * coin.CoinValue; for (int i = 0; i < coinsToReturn; i++) { ReturnCoinValues = AddIntToNumbersText(ReturnCoinValues, coin.CoinValue); } if (centsToReturn == 0) { break; // Alles zurückgegeben ==> kein weiterer Durchlauf notwendig } } }
private int CalculateThrownInCents() { string[] coins = ThrownInCoinValues?.Split(';'); int result = 0; foreach (var item in coins) { result += Convert.ToInt32(item); } return(result); }
private int CalculateThrownInCents() { string[] lines = ThrownInCoinValues.Split(";"); int result = 0; foreach (var line in lines) { if (!String.IsNullOrWhiteSpace(line)) { result += Convert.ToInt32(line); } } return(result); }
/// <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) { var insertedCoins = ThrownInCoinValues.Split(';') .GroupBy(coin => coin) .Select(co => new { CoinValue = int.Parse(co.Key), Amount = co.Count() }).OrderBy(co => co.CoinValue); foreach (var item in insertedCoins) { coins.Single(coin => coin.CoinValue == item.CoinValue) .Amount += item.Amount; } // retourGeld int returnCents = ThrownInCents - Product.PriceInCents; if (returnCents == 0) { ReturnCoinValues = "0"; } else { foreach (var coin in coins) { while (returnCents > 0 && coin.CoinValue <= returnCents && coin.Amount > 0) { if (!string.IsNullOrEmpty(ReturnCoinValues)) { ReturnCoinValues = $"{ReturnCoinValues};{coin.CoinValue}"; } else { ReturnCoinValues = $"{coin.CoinValue}"; } returnCents -= coin.CoinValue; coin.Amount--; } } } }
/// <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"; } }