コード例 #1
0
        /// <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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        /// <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";
            }
        }