/** * @param Billete b */ public void Agregar(Dinero b) { // Primer opcion: Si el elemento a ingresar es igual a uno de la coleccion, se unifica for (int i = 0; i < this.billetes.Count; i++) { if (Dinero.EsSimilar(billetes[i], b)) { this.billetes[i] = this.billetes[i] + b; return; } } // Segunda opcion: Se inserta en la posicion donde exista un valor inferior foreach (Dinero billete in billetes) { if (b.ValorDenominacion() > billete.ValorDenominacion()) { int posicion; posicion = billetes.IndexOf(billete); billetes.Insert(posicion, b); return; } } billetes.Add(b); }
static void Main(string[] args) { Dinero c1 = new Dinero(Dinero.ETipoMoneda.LEMPIRAS, Dinero.EDenominacion.CIEN, 2); Dinero c2 = new Dinero(Dinero.ETipoMoneda.LEMPIRAS, Dinero.EDenominacion.QUINIENTOS, 3); Dinero c3 = new Dinero(Dinero.ETipoMoneda.LEMPIRAS, Dinero.EDenominacion.CIEN, 1); Caja caja = new Caja(); caja.Agregar(c1); caja.Agregar(c2); caja.Agregar(c3); Console.WriteLine(caja); Console.WriteLine("Retiro de L 150.00"); caja.Quitar(150); Console.WriteLine(caja); Console.ReadKey(true); }
public static bool EsSimilar(Dinero a, Dinero b) { return (a.tipoMoneda == b.tipoMoneda && a.denominacion == b.denominacion); }
/** * @param decimal monto */ public void Quitar(decimal monto) { int cantidad; decimal valorBillete; decimal resultado; Hashtable ht = new Hashtable(); resultado = monto; for (int i = 0; i < billetes.Count; i++) { cantidad = 0; valorBillete = billetes[i].ValorDenominacion(); if (resultado / valorBillete >= 1M) { cantidad = (int)(resultado / valorBillete); resultado -= (valorBillete * cantidad); // Determinar si la existencia de billetes corresponde a la solucion if (billetes[i].Cantidad < cantidad) { return; } else { ht.Add(i, cantidad); } } } // Verificar resultado valido if (resultado == 0) { foreach (int i in ht.Keys) { cantidad = (int) ht[i]; Dinero dinero = new Dinero(billetes[i].TipoMoneda, billetes[i].Denominacion, cantidad); billetes[i] = billetes[i] - dinero; } } }