예제 #1
0
        /// <summary>
        /// Возвращает ведённую пользователем сумму различными купюрами.
        /// </summary>
        /// <param name="requestedSum"></param>
        /// <param name="currentSum"></param>
        /// <param name="money"></param>
        /// <returns></returns>
        public Money Decompose(decimal requestedSum, ref decimal currentSum, ref Money money)
        {
            Log.Debug("Decomposition started");

            var outputedMoney = new Money();

            if (requestedSum <= currentSum)
            {
                State = AlgorithmStates.Ok;
                var tempMoney = new Dictionary <Banknote, int>(money.Banknotes);

                try
                {
                    foreach (var item in tempMoney)
                    {
                        while (requestedSum >= item.Key.Nominal && money.Banknotes[item.Key] != 0)
                        {
                            requestedSum -= item.Key.Nominal;
                            currentSum   -= item.Key.Nominal;
                            if (!outputedMoney.Banknotes.ContainsKey(item.Key))
                            {
                                outputedMoney.Banknotes.Add(item.Key, 0);
                                outputedMoney.Banknotes[item.Key]++;
                            }
                            else
                            {
                                outputedMoney.Banknotes[item.Key]++;
                            }

                            if (item.Value != 0)
                            {
                                money.Banknotes[item.Key]--;
                            }
                        }
                    }

                    Log.Debug("Decomposition is successfully finished");
                }

                catch (Exception ex)
                {
                    State = AlgorithmStates.Error;
                    Log.Error("Unexpected error: " + ex.Message);
                }
            }
            else
            {
                State = AlgorithmStates.NotEnoughMoney;
                Log.Debug("Not enough money in the CashMashine");
            }

            Log.Debug("Algorithm state is " + State.ToString() + ".");

            return(outputedMoney);
        }
예제 #2
0
 public void SetHash(byte[] hash)
 {
     this.state = AlgorithmStates.Ready;
     this.hash  = hash;
 }
예제 #3
0
 public void SetIsIssued()
 {
     this.state = AlgorithmStates.Issued;
 }
예제 #4
0
 public void SetIsComputing()
 {
     this.state = AlgorithmStates.Computing;
 }
예제 #5
0
 public void Reset()
 {
     this.state = AlgorithmStates.None;
     this.hash  = null;
 }