Beispiel #1
0
        /// <summary>
        /// Подбирает подходящую купюру к выдаче
        /// </summary>
        /// <param name="sum">double Сумма которую необходимо выдать</param>
        /// <param name="item">MoneyCost предпочитаемая купюра</param>
        /// <returns> пара ключ-значение купюра из хранилища </returns>
        private KeyValuePair <Guid, MoneyCost> getNextCut(double sum, MoneyCost cost, out bool result)
        {
            result = true;
            KeyValuePair <Guid, MoneyCost> res = new KeyValuePair <Guid, MoneyCost>(Guid.Empty, MoneyCost.Ten);
            var items = storage.Where(a => a.Value.Equals(cost)); // ищем предпочитаемую купюру

            if (items.Count() > 0 & sum > cost.GetValue())
            {
                res = items.First();
            }
            else
            {
                items = storage.Where((a) => a.Value.GetValue() == sum);// ищем купюру, равную сумме
                if (items.Count() > 0)
                {
                    res = items.First();
                }
                else
                {
                    items = storage.Where((a) => a.Value.GetValue() < sum); // ищем купюру меньше суммы
                    if (items.Count() > 0)
                    {
                        res = items.First();
                    }
                    else
                    {
                        result = false;
                    }
                }
            }
            return(res);
        }
Beispiel #2
0
        public Dictionary <Guid, MoneyCost> PullMoney(MoneyCost cost, double sum, out bool result)
        {
            double resSum     = 0;
            bool   isCutFound = false;
            Dictionary <Guid, MoneyCost> res = new Dictionary <Guid, MoneyCost>();

            result = true;
            while (resSum < sum)
            {
                var cut = getNextCut((sum - resSum), cost, out isCutFound);
                if (isCutFound)
                {
                    res.Add(cut.Key, cut.Value);
                    storage.Remove(cut.Key);
                    resSum += cut.Value.GetValue();
                }
                else
                {
                    result = false;
                    break;
                }
            }
            if (!result)
            {
                // Катимся назад, т.к. несмогли подобрать купюры под нужную сумм
                foreach (KeyValuePair <Guid, MoneyCost> item in res)
                {
                    storage.Add(item.Key, item.Value);
                }
                res.Clear();
                result = false;
            }
            return(res);
        }
Beispiel #3
0
        public void TestValueAtrribute()
        {
            MoneyCost cost = MoneyCost.Hundred;

            Assert.AreEqual(cost.GetValue(), 100);
            Assert.AreNotEqual(MoneyCost.FiveHundred.GetValue(), MoneyCost.FiveThousand.GetValue());
            Assert.AreEqual(MoneyCost.Ten.GetValue(), 10);
        }
Beispiel #4
0
        public Cut(MoneyCost cost)
        {
            this.cost = cost;
            Name      = cost.GetImageResource();
            Uri uri = new Uri(cost.GetImageResource());

            try
            {
                image = new BitmapImage(uri);
            }
            catch { };
        }
        private void btnGetMoney_Click(object sender, RoutedEventArgs e)
        {
            double sum = 0;

            if (!double.TryParse(tbSum.Text, out sum))
            {
                ShowResult(new DisplayMessage("Операция прервана", "Неверно указана сумма"));
                return;
            }
            try
            {
                var obj = lbAviableCuts.SelectedItem;
                if (obj != null)
                {
                    MoneyCost cost = ((Model.Cut)obj).cost;
                    lbTakeMoney.Content = "Заберите деньги(Двойной шелчек):";
                    bool result;
                    var  cuts = App.Machine.PullMoney(cost, sum, out result);
                    if (!result)
                    {
                        ShowResult(new DisplayMessage("Операция прервана", "Операция недоступна"));
                        return;
                    }
                    foreach (KeyValuePair <Guid, MoneyCost> item in cuts)
                    {
                        lbTakedCuts.Items.Add(new Model.Cut(item.Value));
                    }
                    lbTakedCuts.MouseDoubleClick += (s, ev) =>
                    {
                        ShowResult(new DisplayMessage("Операция успешно завершена", string.Format("Доступные средства: {0} рублей"
                                                                                                  , App.Machine.GetBalance().ToString())));
                    };
                }
                else
                {
                    ShowResult(new DisplayMessage("Операция прервана", "Операция недоступна"));
                }
            }
            catch (Exception ex) { ShowResult(new DisplayMessage("Операция прервана", "Данная сумма недоступна")); }
        }