using System.Collections.Generic;
public class DevolucionSinPrestamoException : System.Exception
public DevolucionSinPrestamoException() : base() { }
public DevolucionSinPrestamoException(double total_prestado, double total_devuelto) : base()
this.total_prestado = total_prestado;
this.total_devuelto = total_devuelto;
public override string ToString()
return "Error: Hay mas dinero devuelto ($ " + total_devuelto + ") que prestado ($ " + total_prestado + ").\n";
private List<double> prestamos;
private List<double> devoluciones;
private double total_prestado;
private double total_devuelto;
prestamos = new List<double>();
devoluciones = new List<double>();
private double SumarLista(List<double> valores)
for (int i = 0; i < valores.Count; i++)
total = total + valores[i];
public Libro(List<double> prestamos, List<double> devoluciones)
this.prestamos = new List<double>(prestamos);
total_prestado = SumarLista(GetPrestamos());
this.devoluciones = new List<double>(devoluciones);
total_devuelto = SumarLista(GetDevoluciones());
if (total_prestado < total_devuelto)
throw new DevolucionSinPrestamoException(total_prestado, total_devuelto);
public Libro(Libro libro)
double total_prestado_aux = SumarLista(libro.GetPrestamos());
double total_devuelto_aux = SumarLista(libro.GetDevoluciones());
if (total_prestado_aux < total_devuelto_aux)
throw new DevolucionSinPrestamoException(total_prestado_aux, total_devuelto_aux);
this.prestamos = new List<double>(libro.GetPrestamos());
this.devoluciones = new List<double>(libro.GetDevoluciones());
total_devuelto = total_devuelto_aux;
total_prestado = total_prestado_aux;
public List<double> GetPrestamos()
return new List<double>(prestamos);
public void SetPrestamos(List<double> prestamos)
double total_prestado_aux = SumarLista(prestamos);
if (total_prestado_aux < total_devuelto)
throw new DevolucionSinPrestamoException(total_prestado_aux, total_devuelto);
this.prestamos = new List<double>(prestamos);
total_prestado = total_prestado_aux;
public List<double> GetDevoluciones()
return new List<double>(devoluciones);
public void SetDevoluciones(List<double> devoluciones)
double total_devuelto_aux = SumarLista(devoluciones);
if (total_prestado < total_devuelto_aux)
throw new DevolucionSinPrestamoException(total_prestado, total_devuelto_aux);
this.devoluciones = new List<double>(devoluciones);
total_devuelto = total_devuelto_aux;
public void HacerPrestamo(double monto_a_prestar)
prestamos.Add(monto_a_prestar);
total_prestado += monto_a_prestar;
public void HacerDevolucion(double monto_a_devolver)
if (total_prestado < total_devuelto + monto_a_devolver)
throw new DevolucionSinPrestamoException(total_prestado, total_devuelto + monto_a_devolver);
devoluciones.Add(monto_a_devolver);
total_devuelto = total_devuelto + monto_a_devolver;
public override string ToString()
string texto = "Total prestado: " + total_prestado + ". Total devuelto: " + total_devuelto + " \n";
texto += "Prestamos : [";
for (int i = 0; i < prestamos.Count; i++)
texto += " " + prestamos[i] + " ";
texto += "Devoluciones : [";
for (int i = 0; i < devoluciones.Count; i++)
texto += " " + devoluciones[i] + " ";
public static void Main()
Libro libro1 = new Libro();
Console.WriteLine("Libro 1 (ToString)");
Console.WriteLine(libro1.ToString());
Console.WriteLine(libro1);
List<double> devoluciones_altas = new List<double> {10000.0, 5000.0, 75000.5};
List<double> prestamos_bajos = new List<double> {3.0};
Libro libro_invalido = new Libro(prestamos_bajos, devoluciones_altas);
catch (DevolucionSinPrestamoException e)
List<double> devoluciones = new List<double> {100.0, 50.0, 75.5};
List<double> prestamos = new List<double> {300.0, 250.0, 150.0};
Libro libro2 = new Libro(prestamos, devoluciones);
Libro libro3 = new Libro(libro2);
Console.WriteLine("Libro 2 (ToString)");
Console.WriteLine(libro2);
Console.WriteLine("Libro 3 (ToString)");
Console.WriteLine(libro3);
libro1.HacerPrestamo(1000.0);
libro2.HacerDevolucion(440.0);
Console.WriteLine("Libro 1 (ToString)");
Console.WriteLine(libro1);
Console.WriteLine("Libro 2 (ToString)");
Console.WriteLine(libro2);
Console.WriteLine("Libro 3 (ToString)");
Console.WriteLine(libro3);
List<double> prestamosLibro1 = libro1.GetPrestamos();
Console.Write("Prestamos libro 1: ");
for(int i = 0; i < prestamosLibro1.Count; i++)
Console.Write( prestamosLibro1[i] + " " );
prestamosLibro1.Add(45.0);
Console.Write("Nuevos prestamos libro 1: ");
for(int i = 0; i < prestamosLibro1.Count; i++)
Console.Write( prestamosLibro1[i] + " " );
Console.WriteLine(libro1);
libro1.SetPrestamos(prestamosLibro1);
Console.WriteLine(libro1);
libro2.SetPrestamos(prestamos_bajos);
catch (DevolucionSinPrestamoException e)
libro1.SetDevoluciones(devoluciones_altas);
catch (DevolucionSinPrestamoException e)