Sobre la clase principal....
Aquí tendremos un ArrayList para cada entidad que vamos a gestionar: socios, libros, autores y prestamos.
El programa ofrecerá un menú con varias opciones y según lo que elija el usuario, llamaremos a distintos métodos que se encargarán de esa tarea específica.
Mi tiempo es muy escaso, así que he comenzado parte del programa en modo consola pero no está completo.
He escrito los métodos para las tareas de gestionar socios y gestionar prestamos.
Registrar socios consiste en pedir los datos necesarios para construir un socio y añadirlo al ArrayList. Así de fácil.
En mi código, he hecho que el código de socio se autogenere al registrar el socio siguiendo un formato (SC000x) y así garantizar que todos los socios tiene codigos distintos.
Pero vamos, se podría haber hecho simplemente pidiéndolo por teclado.
Para prestar un libro, podemos empezar pidiendo el código del socio.
Buscamos en el ArrayList el socio correspondiente, si no existe avisamos al usuario.
Si existe, lo referenciamos en una variable para tenerlo más a mano.
Ahora pedimos código del libro.
Comprobamos que existe un libro con ese código y que además esta disponible.
Si lo está, también lo referenciamos en otra variable..
Y ahora por último pedimos la fecha.
Con esos datos, ya podemos crear un objeto Prestamo y añadirlo al ArrayList.
Al socio, que tenemos referenciado en una variable, le añadimos el Libro a su ArrayList donde le apuntamos los libros que tiene en posesión.
Y al libro, cambiamos el valor de su atributo "estaDisponible" a false, para que quede constancia de que este libro está prestado y no puede volverse a prestar hasta que se devuelva.
En fin, dejo aquí el código. Pregunta si algo no se entiende bien.
E intenta completar el resto de opciones del menú, todas las que puedas.
Para facilitar el trabajo, he puesto un método que al iniciar el programa, automáticamente se registran algunos socios, autores y libros.
Así evitamos que cada vez que queramos probar el programa, tengamos que estar registrando datos por teclado.
public class Biblioteca {
private static ArrayList<Socio> socios = new ArrayList<Socio>();
private static ArrayList<Autor> autores = new ArrayList<Autor>();
private static ArrayList<Libro> libros = new ArrayList<Libro>();
private static ArrayList<Prestamo> prestamos = new ArrayList<Prestamo>();
private static Scanner teclado = new Scanner(System.in);
public static void main(String[] args) {
comenzarConDatosCargados();
String opcion = "";
while (!opcion.equals("0")) {
System.out.println("\n\t\tBIBLIOTECA");
System.out.println("\t\t----------\n");
System.out.println("\tSOCIOS");
System.out.println("[1] --- Registrar Socio");
System.out.println("[2] --- Listar Socios");
System.out.println("[3] --- Ver Socios No confiables");
System.out.println("\tAUTORES");
System.out.println("[4] --- Registrar Autor");
System.out.println("[5] --- Listar Autores");
System.out.println("[6] --- Listar Libros de un Autor");
System.out.println("\tLIBROS");
System.out.println("[7] --- Registrar Libro");
System.out.println("[8] --- Localizar Libro");
System.out.println("[9] --- Cambiar Localizacion de un Libro");
System.out.println("\tPRESTAMOS");
System.out.println("[10] -- Prestar un Libro");
System.out.println("[11] -- Devolver un Libro");
System.out.println("[12] -- Listar Prestamos actuales");
System.out.println("\n[0] --- TERMINAR PROGRAMA");
System.out.print("Opcion: ");
opcion = teclado.nextLine();
switch(opcion) {
case "0":
System.out.println("\n\n\t\tFIN DE PROGRAMA");
break;
case "1":
registrarSocio();
break;
case "2":
listarSocios();
break;
case "3":
verSociosNoConfiables();
break;
case "4":
System.out.println("\nOpcion en contruccion...\n");
break;
case "5":
System.out.println("\nOpcion en contruccion...\n");
break;
case "6":
System.out.println("\nOpcion en contruccion...\n");
break;
case "7":
System.out.println("\nOpcion en contruccion...\n");
break;
case "8":
System.out.println("\nOpcion en contruccion...\n");
break;
case "9":
System.out.println("\nOpcion en contruccion...\n");
break;
case "10":
prestarLibro();
break;
case "11":
devolverLibro();
break;
case "12":
listarPrestamos();
break;
default:
System.out.println("Opcion equivocada");
}
}
}
private static void registrarSocio() {
System.out.println("\n\tNUEVO SOCIO");
System.out.print("Cedula: ");
String cedula = teclado.nextLine();
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Apellidos: ");
String apellidos = teclado.nextLine();
System.out.print("Telefono movil: ");
String telefM = teclado.nextLine();
System.out.print("Telefono convencional: ");
String telefC = teclado.nextLine();
//Construimos Direccion
Direccion direccion = new Direccion();
System.out.print("Calle Principal: ");
direccion.callePrincipal = teclado.nextLine();
System.out.print("Calle Secundaria: ");
direccion.calleSecundaria = teclado.nextLine();
System.out.print("Numero: ");
direccion.numero = teclado.nextLine();
System.out.print("Elija tipo de vivienda: ");
for (TipoVivienda tv: TipoVivienda.values())
System.out.print(tv + " ");
TipoVivienda tipo = null;
//Este bucle pide el tipo vivienda hasta que se de uno válido
while (tipo == null) {
System.out.print("\nTipo Vivienda: ");
tipo = TipoVivienda.convertirCadena(teclado.nextLine());
if (tipo == null)
System.out.print("Tipo de vivienda no es válido");
}
direccion.vivienda = tipo;
//Tenemos todos los datos para construir un socio
//El ID lo generamos según el tamaño del ArrayList con un formato SC0000x
String id = String.format("SC%04d", socios.size());
socios.add(new Socio(id, cedula, nombre, apellidos, telefM, telefC, direccion));
}
private static void listarSocios() {
if (socios.isEmpty())
System.out.println("No hay socios registrados");
else
for (Socio s: socios)
System.out.println("\n" + s);
}
private static void verSociosNoConfiables() {
if (socios.isEmpty())
System.out.println("No hay socios registrados");
else {
boolean todosConfiables = true; //Sirve para controlar si hemos encontrado socios no confiables
System.out.println("\n\tSOCIOS NO CONFIABLES");
for (Socio s: socios)
if (!s.esConfiable()) {
todosConfiables = false;
System.out.print("\nN. Socio: " + s.getNumSocio());
System.out.println("\tNombre: " + s.getNombre() + " " + s.getApellidos());
System.out.println("Libros en posesion:");
s.listarLibrosPrestados();
}
if(todosConfiables)
System.out.println("En estos momentos todos los socios son confiables.");
}
}
private static void prestarLibro() {
System.out.println("\n\tPRESTAR UN LIBRO");
System.out.print("Indique numero de socio: ");
String nSocio = teclado.nextLine();
//Buscamos el socio
Socio soc = null;
for (Socio s: socios)
if (s.getNumSocio().equals(nSocio))
soc = s;
if (soc == null)
System.out.println("No existe socio con ese numero.");
else {
System.out.print("Indique codigo del libro: ");
String cLibro = teclado.nextLine();
//Buscamos el libro
Libro lib = null;
for (Libro l: libros)
if (l.getCodigo().equals(cLibro))
lib = l;
if (lib == null)
System.out.println("No hay libro con ese codigo");
else if (!lib.estaDisponible())
System.out.println("Libro no esta disponible");
else {
System.out.print("Indique la fecha: ");
String fecha = teclado.nextLine();
//Registramos el prestamo
prestamos.add(new Prestamo(cLibro, nSocio, fecha));
//Libro prestado, deja de estar disponible
lib.setDisponible(false);
soc.prestarLibro(lib);
System.out.println("\nPrestamo completado.\n");
}
}
}
private static void devolverLibro() {
System.out.println("\n\tDEVOLVER UN LIBRO");
System.out.print("Indique codigo de libro: ");
String cLibro = teclado.nextLine();
//Buscamos libro
Libro lib = null;
for (Libro l: libros)
if (l.getCodigo().equals(cLibro))
lib = l;
if (lib == null)
System.out.println("No se encuentra libro con ese codigo");
else if (lib.estaDisponible())
System.out.println("Este libro no esta prestado a ningun socio");
else {
//Buscamos el prestamo de este libro
Prestamo pres = null;
for (Prestamo p: prestamos)
if (p.getCodigoLibro().equals(cLibro))
pres = p;
//Y ahora buscamos el socio que posee este libro
Socio soc = null;
for (Socio s: socios)
if (s.getNumSocio().equals(pres.getNumSocio()))
soc = s;
//Eliminamos el prestamo
prestamos.remove(pres);
//Eliminamos el libro de la lista del socio
soc.devolverLibro(lib);
//Libro pasa a estar disponible
lib.setDisponible(true);
System.out.println("\nPrestamo devuelto");
}
}
private static void listarPrestamos() {
System.out.println("\n\tPRESTAMOS ACTUALES");
if (prestamos.isEmpty())
System.out.println("No hay Prestamos registrados.");
else
for (Prestamo p: prestamos)
System.out.println(p + "\n");
}
/*
* Este método carga algunos datos por defecto
* para poder hacer pruebas en el programa
*/
private static void comenzarConDatosCargados() {
//Algunos socios
String id = String.format("SC%04d", socios.size());
socios.add(new Socio(id, "CED001", "Juan", "Marin Roca", "678901234", "994567890",
new Direccion("Sepulveda", "Roble", "34", TipoVivienda.CASA)));
id = String.format("SC%04d", socios.size());
socios.add(new Socio(id, "CED002", "Sara", "Montes", "678901234", "994567890",
new Direccion("Azucena", "", "44", TipoVivienda.DEPARTAMENTO)));
id = String.format("SC%04d", socios.size());
socios.add(new Socio(id, "CED003", "Jorge", "Morales", "678901234", "994567890",
new Direccion("Peru", "Ecuador", "11", TipoVivienda.EMPRESA)));
id = String.format("SC%04d", socios.size());
socios.add(new Socio(id, "CED004", "Laura", "Sanchez", "678901234", "994567890",
new Direccion("Fresnedo", "", "67", TipoVivienda.DEPARTAMENTO)));
//Algunos libros
libros.add(new Libro("978834556", "Cien años de soledad", "Gabriel Garcia Marquez", true,
new Localizacion("2", "4", "6", Area.ARTE_LITERATURA)));
libros.add(new Libro("978878912", "Lecturas y Pasiones", "Jose Luis Melero", true,
new Localizacion("1", "4", "5", Area.FILOLOGIA)));
libros.add(new Libro("978800781", "Sunies y Chiies", "Javier Martin", true,
new Localizacion("3", "3", "1", Area.RELIGION)));
libros.add(new Libro("978815690", "Salafismo", "Luz Gomez", true,
new Localizacion("3", "3", "2", Area.RELIGION)));
libros.add(new Libro("978813456", "Steven Universe Juego de Rol", "Rebecca Sugar", true,
new Localizacion("2", "3", "7", Area.GENERALIDADES)));
libros.add(new Libro("978890908", "Somos agua que piensa", "Joaquin Araujo", true,
new Localizacion("2", "8", "3", Area.CIENCIAS_NATURALES)));
//Correspondientes autores
Autor autor = new Autor("Gabriel Garcia Marquez", "Gabo", "Colombia", "6/3/1927");
autor.agregarLibro(libros.get(0));
autores.add(autor);
autor = new Autor("Jose Luis Melero", "", "España", "12/7/1956");
autor.agregarLibro(libros.get(1));
autores.add(autor);
autor = new Autor("Javier Martin", "", "Argentina", "11/9/1963");
autor.agregarLibro(libros.get(2));
autores.add(autor);
autor = new Autor("Luz Gomez", "", "España", "1/2/1969");
autor.agregarLibro(libros.get(3));
autores.add(autor);
autor = new Autor("Rebecca Sugar", "Sugar", "Estados Unidos", "9/7/1987");
autor.agregarLibro(libros.get(4));
autores.add(autor);
autor = new Autor("Joaquin Araujo", "", "España", "31/12/1947");
autor.agregarLibro(libros.get(5));
autores.add(autor);
}
}