Exemple #1
0
        public WithdrawCassette(BanknoteFaceValue faceValue, int capacity, int banknotesQuantity)
        {
            if (capacity <= 0)
            {
                throw new ArgumentException("Ёмкость кассеты не может быть пустой");
            }

            if (banknotesQuantity <= 0)
            {
                throw new ArgumentException("Кассета не может быть пустой");
            }

            if (banknotesQuantity > capacity)
            {
                throw new ArgumentException($"Число банкнот в кассете не может превышать {capacity}");
            }

            this.faceValue    = faceValue;
            this.capacity     = capacity;
            BanknotesQuantity = banknotesQuantity;
        }
Exemple #2
0
 private WithdrawCassette GetWithdrawCassetteByFaceValue(BanknoteFaceValue faceValue)
 {
     return(withdrawCassettes.Where(c => c.faceValue.Equals(faceValue)).First());
 }
Exemple #3
0
        public Dictionary <BanknoteFaceValue, int> GetAvailableBanknotes(int withdrawalAmount, BanknoteFaceValue desiredFaceValue)
        {
            Dictionary <BanknoteFaceValue, int> banknotes = new Dictionary <BanknoteFaceValue, int>();

            BanknoteFaceValue[] faceValues = (BanknoteFaceValue[])Enum.GetValues(typeof(BanknoteFaceValue));
            Array.Reverse(faceValues);

            int desiredFaceValueIndex = Array.IndexOf(faceValues, desiredFaceValue);

            for (int i = desiredFaceValueIndex; i < faceValues.Length; i++)
            {
                banknotes.Clear();
                int currentWithdrawalAmount = withdrawalAmount;

                for (int j = i; j < faceValues.Length; j++)
                {
                    int banknotesQuantity          = currentWithdrawalAmount / (int)faceValues[j];
                    int faceValueBanknotesQuantity = GetWithdrawBanknotesQuantityByFaceValue(faceValues[j]);

                    if (banknotesQuantity > faceValueBanknotesQuantity)
                    {
                        banknotesQuantity = faceValueBanknotesQuantity;
                    }

                    currentWithdrawalAmount -= (int)faceValues[j] * banknotesQuantity;
                    banknotes[faceValues[j]] = banknotesQuantity;
                }

                if (currentWithdrawalAmount == 0)
                {
                    return(banknotes);
                }
            }

            banknotes.Clear();
            return(banknotes);
        }
Exemple #4
0
 public int GetWithdrawBanknotesQuantityByFaceValue(BanknoteFaceValue faceValue)
 {
     return(withdrawCassettes.Where(c => c.faceValue.Equals(faceValue)).Select(c => c.BanknotesQuantity).First());
 }