//reduce the amount of coins in the repo public void ReduceCoins() { //Calculate the total amount of coins in the repo double Amount = TotalValue(); //empty the list Coins = new List <ICoin>(); //While the amount is greater than zero add coins while (Amount > 0) { //round the amount to 2 decimal places to avoid decimal errors Amount = Math.Round(Amount, 2); //add a dollar coin if possible if (Amount >= 1) { DollarCoin dollar = new DollarCoin(); AddCoin(dollar); Amount--; } //add a half dollar if possible else if (Amount >= .5) { HalfDollar dollar = new HalfDollar(); AddCoin(dollar); Amount -= .5; } //add a quarter if possible else if (Amount >= .25) { Quarter quater = new Quarter(); AddCoin(quater); Amount -= .25; } //add a dime if possible else if (Amount >= .1) { Dime dime = new Dime(); AddCoin(dime); Amount -= .1; } //add a nickel if possible else if (Amount >= .05) { Nickel nickel = new Nickel(); AddCoin(nickel); Amount -= .05; } //add a penny if possible else if (Amount >= .01) { Penny penny = new Penny(); AddCoin(penny); Amount -= .01; } } }
//Creates a new repo with a list of coins that //equal the amount passed in public static ICurrencyRepo CreateChange(double Amount) { //Create a temporary repo CurrencyRepo temp = new CurrencyRepo(); //While the amount is above zero add coins while (Amount > 0) { //round to 2 decimal places to avoid decimal place error Amount = Math.Round(Amount, 2); //if amount is greater than 1, add a dollar coin if (Amount >= 1) { DollarCoin dollar = new DollarCoin(); temp.AddCoin(dollar); Amount--; } //if amount is less than a dollar but greater than .5 then add a half dollar else if (Amount >= .5) { HalfDollar dollar = new HalfDollar(); temp.AddCoin(dollar); Amount -= .5; } //if the amount is greater than or equal to .25 and less than above then add a quarter else if (Amount >= .25) { Quarter quater = new Quarter(); temp.AddCoin(quater); Amount -= .25; } //if the amount is greater than or equal to .1 and less than above then add a dime else if (Amount >= .1) { Dime dime = new Dime(); temp.AddCoin(dime); Amount -= .1; } //if the amount is greater than or equal to .05 and less than above then add a nickel else if (Amount >= .05) { Nickel nickel = new Nickel(); temp.AddCoin(nickel); Amount -= .05; } //if the amount is greater than or equal to .01 and less than above then add a penny else if (Amount >= .01) { Penny penny = new Penny(); temp.AddCoin(penny); Amount -= .01; } } //return the temporary repo return(temp); }
//return a repo of change based on the amount of coins currently in this repo public ICurrencyRepo MakeChange(double Amount) { //create temporary repo CurrencyRepo temp = new CurrencyRepo(); //while the amount is greater than 0, add coins while (Amount > 0) { Amount = Math.Round(Amount, 2); //If the amount is greater than or equal to 1 and the current repo has a dollar coin, //add the dollar coin to the new repo and remove it from the current repo if (Amount >= 1 && Coins.Exists(x => x.MonetaryValue == 1)) { DollarCoin dollar = new DollarCoin(); temp.AddCoin(dollar); RemoveCoin(Coins.Find(x => x.MonetaryValue == 1)); Amount--; } //If the amount is greater than or equal to .5 and the current repo has a half dollar, //add the half dollar to the new repo and remove it from the current repo else if (Amount >= .5 && Coins.Exists(x => x.MonetaryValue == .5)) { HalfDollar dollar = new HalfDollar(); temp.AddCoin(dollar); RemoveCoin(Coins.Find(x => x.MonetaryValue == .5)); Amount -= .5; } //If the amount is greater than or equal to .25 and the current repo has a quarter, //add the quarter to the new repo and remove it from the current repo else if (Amount >= .25 && Coins.Exists(x => x.MonetaryValue == .25)) { Quarter quater = new Quarter(); temp.AddCoin(quater); RemoveCoin(Coins.Find(x => x.MonetaryValue == .25)); Amount -= .25; } //If the amount is greater than or equal to .1 and the current repo has a dime, //add the dime to the new repo and remove it from the current repo else if (Amount >= .1 && Coins.Exists(x => x.MonetaryValue == .1)) { Dime dime = new Dime(); temp.AddCoin(dime); RemoveCoin(Coins.Find(x => x.MonetaryValue == .1)); Amount -= .1; } //If the amount is greater than or equal to .05 and the current repo has a nickel, //add the nickel to the new repo and remove it from the current repo else if (Amount >= .05 && Coins.Exists(x => x.MonetaryValue == .05)) { Nickel nickel = new Nickel(); temp.AddCoin(nickel); RemoveCoin(Coins.Find(x => x.MonetaryValue == .05)); Amount -= .05; } //If the amount is greater than or equal to .01 and the current repo has a penny, //add the penny to the new repo and remove it from the current repo else if (Amount >= .01 && Coins.Exists(x => x.MonetaryValue == .01)) { Penny penny = new Penny(); temp.AddCoin(penny); RemoveCoin(Coins.Find(x => x.MonetaryValue == .01)); Amount -= .01; } //If there aren't enough coins then zero out the amount to break the loop else if (this.TotalValue() > Amount) { Amount = 0; } } return(temp); }