예제 #1
0
 public void update(MoneyBill moneyBill)
 {
     _context.Update(moneyBill);
     _context.SaveChanges();
 }
예제 #2
0
        public double withdrawMoney(double value)
        {
            double withdrawValue = value;
            double remainder     = 0;

            if (!_moneyBillRepository.list().Any()) //so cria se não existir
            {
                MoneyBill moneyBill100 = new MoneyBill();
                moneyBill100.value = 100.0;
                _moneyBillRepository.update(moneyBill100);

                MoneyBill moneyBill50 = new MoneyBill();
                moneyBill50.value = 50.0;
                _moneyBillRepository.update(moneyBill50);

                MoneyBill moneyBill20 = new MoneyBill();
                moneyBill20.value = 20.0;
                _moneyBillRepository.update(moneyBill20);

                MoneyBill moneyBill5 = new MoneyBill();
                moneyBill5.value = 5.0;
                _moneyBillRepository.update(moneyBill5);

                MoneyBill moneyBill2 = new MoneyBill();
                moneyBill2.value = 2.0;
                _moneyBillRepository.update(moneyBill2);
            }

            var moneyBillsList = new List <MoneyBill>();

            foreach (var moneyBill in _moneyBillRepository.list())
            {
                moneyBillsList.Add(moneyBill);
            }

            for (var i = 0; i < moneyBillsList.Count; i++)
            {
                if (value == moneyBillsList[i].value)
                { //se o valor do saque for igual ao value da nota
                    moneyBillsList[i].quantity += 1;
                    value -= moneyBillsList[i].value;
                    _moneyBillRepository.update(moneyBillsList[i]);
                    i = -1;
                }
                else if (value == 6)
                { //se o valor da retirada for impar, tenta tirar o 5 primeiro
                    moneyBillsList[4].quantity += 1;
                    value -= moneyBillsList[4].value;
                    _moneyBillRepository.update(moneyBillsList[4]);
                }
                else if (value > moneyBillsList[i].value)
                { //se o valor do saque for maior, adiciona essa nota para ser sacada
                    moneyBillsList[i].quantity += 1;
                    value -= moneyBillsList[i].value;
                    _moneyBillRepository.update(moneyBillsList[i]);
                    i = -1;
                }
            }

            if (value != 0)
            { //se valor inicial do saque - o valor atual do saque for diferente de 0: tem resto
                remainder = value;
                for (var j = 0; j < moneyBillsList.Count(); j++)
                {
                    if (remainder >= moneyBillsList[j].value)
                    { //ve se tem como tirar alguma nota com o resto
                        moneyBillsList[j].quantity += 1;
                        remainder -= moneyBillsList[j].value;
                        _moneyBillRepository.update(moneyBillsList[j]);
                    }
                    else
                    {
                        break;
                    }
                }
                //retorna o valor de saque (o resto que sobrou não foi retirado)
                return(withdrawValue - remainder);
            }
            else
            { //retorna o valor de saque (foi retirado todo o valor solicitado)
                return(withdrawValue);
            }
        }