Autor Tema: Java código programa swing gestión biblioteca socios autores libros préstamos  (Leído 4390 veces)

Drap1302

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Estimados, he tenido problemas al realizar este ejercicio y no se si se me podrían ayudar.

Ejercicio Java gestión de librería con interfaz gráfica Swing

Crear una aplicación para gestión de una biblioteca según se indica.

En ella aparecen socios, que se inscriben y a partir de ese momento pueden tomar prestados libros de la misma.

Un socio está caracterizado por un número de socio, cédula de identidad, por lo menos un nombre y dos apellidos (siendo el segundo nombre opcional), una dirección (compuesta por calle principal, calle secundaria, numeración, además del tipo de vivienda entre: casa, departamento, oficina, empresa), teléfono móvil, teléfono convencional (opcional).

Además, en cada momento se puede saber el número de libros que un socio tiene
prestados, y cuáles son los libros. Por su parte, de cada libro se conoce su código, titulo,
autor(es) y si está o no disponible el libro (Asuma que hay un solo ejemplar por título).
Del autor se conoce su nombre, un alias (puede ser opcional), nacionalidad y fecha de
nacimiento. De igual manera, en cada momento se puede saber los libros que ha escrito
dicho autor.

También, se puede saber en cualquier momento la localización del libro en la biblioteca (la localización esta compuesta por el número de piso, número de habitación y número de estante), así como el área del mismo (el área se divide en: generalidades, filosofía, religión, ciencias sociales, filología, ciencias naturales, técnica y ciencias prácticas, arte y literatura e historia).

Un libro puede ser cambiado de lugar, y se le puede cambiar igualmente el área donde se encuentra; de hecho, siempre que se cambia el área de un libro es porque se cambia de lugar.

Finalmente, los libros se prestan a los socios, y como consecuencia aparece la noción de
préstamo; un préstamo estará caracterizado, además de por el código del libro prestado y el número de socio, por la fecha del mismo. Por otra parte también se va a llevar control de los socios que tengan prestados más de 10 libros, de lo cual se encargará la aplicación y debe generar un reporte de ellos, denominándolos socios no confiables.

« Última modificación: 18 de Abril 2022, 18:44 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Aplicacion
« Respuesta #1 en: 16 de Febrero 2022, 17:30 »
¿Y en que parte tienes problemas?
¿Qué es lo que no entiendes?

¿Qué clases has identificado tú? Es evidente que habrá que escribir las clases Socio y Libro.
Pero, ¿hay más clases?

¿Y en que lenguaje tienes que escribirlo? ¿En modo texto/consola o con interfaz gráfica?
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Drap1302

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Re: Aplicacion
« Respuesta #2 en: 16 de Febrero 2022, 17:41 »
Hola, no sé cómo implementar para hacer el registro de socios y que me aparezca a quién se presta el libro. Es en Java Netbeans.
« Última modificación: 18 de Abril 2022, 18:44 por Ogramar »

Cristina

  • Visitante
Re: Aplicacion
« Respuesta #3 en: 18 de Febrero 2022, 06:19 »
Podrías ayudarme esto es lo que me pide a mi en la aplicación:
Es el mismo problema por favor

La aplicación debe contener:
 
•   Ventana que permita ingresar un socio nuevo con los objetos gráficos necesarios para el ingreso de lo descrito anteriormente.
•   Ventana para el ingreso de los libros dentro del catálogo de libros que dispone la biblioteca.
•   Ventana de préstamos de libros, donde se podrá elegir el socio y el libro que se va a prestar.
•   Ventana para conocer los socios que han prestado libros.
•   Ventana que permita buscar un libro especifico.
•   Las ventanas que falten según lo solicitado en el enunciado.
•   Se debe usar un patrón de diseño (Singleton) o modelo Vista controlador.
•   En los Objetos cada ventana deberá implementar en CRUD, Create, Read, Update, Delete de los objetos que se solicite.
•   Se calificará el respectivo modelado y relaciones de los objetos que intervienen en el problema.
•   Se calificará el diseño de las ventanas, así como el uso de los respectivos objetos gráficos, para hacer una interfaz usable.
•   Se calificará lo solicitado en el enunciado, ingresos, delete, update de los objetos solicitados en el problema.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Aplicacion
« Respuesta #4 en: 18 de Febrero 2022, 19:17 »
No se como implementar para hacer el registro de socios y que me aprezca a quien se presta el libro
es en Java Netbeans

A ver, en este programa intervienen muchas clases

Tenemos la clase Socio, que entre sus atributos, los datos de la dirección pueden agruparse a su vez en otra clase llamada Direccion.
No hace falta que sea una clase completa con getters y setters, podemos dejar sus atributos accesibles, sin encapsular, para acceder a ellos directamente.
Hay un atributo, el de "Tipo de Vivienda", que ya nos dan una serie de valores entre los que se debe elegir.
Por tanto, deberíamos establecer una forma para controlar que ese atributo solo reciba uno de esos valores indicados.

Una forma de hacerlo, es creando un ENUM..., que es muy parecido a una clase normal, pero con la diferencia de que "enumeramos" los únicos objetos que van a poder existir de esta clase/enum.
Este enum podemos llamarlo TipoVivienda
Código: [Seleccionar]
public enum TipoVivienda {

CASA("Casa"), DEPARTAMENTO("Departamento"),
OFICINA("Oficina"), EMPRESA("Empresa");

private String valor;

private TipoVivienda(String tipo) {
valor = tipo;
}

@Override
public String toString() {
return valor;
}

/*
* Recibe una cadena y comprueba a que enumerado
* corresponde. Una vez encontrado, lo retorna.
* Si no encuentra ninguno valido, retorna null.
*/
public static TipoVivienda convertirCadena(String cadena) {
for (TipoVivienda tv: TipoVivienda.values())
if (tv.valor.equalsIgnoreCase(cadena))
return tv;

return null;
}

}
A este enum, le damos además un método estático que se encargue de recibir una cadena y retornar el objeto que se corresponda aunque no coincidan las mayúsculas.
Así, dará igual si el usuario teclea casa, CASA, cASA, CaSa, casA....
Para cualquiera de esas cadenas, obtendremos el objeto CASA, cuyo valor String es "Casa".

Así que este enum, será un atributo de la clase Direccion
Código: [Seleccionar]
public class Direccion {

String callePrincipal;
String calleSecundaria;
String numero;
TipoVivienda vivienda;

public Direccion() {
callePrincipal = "";
calleSecundaria = "";
numero = "";
vivienda = null;
}

public Direccion(String callePrincipal, String calleSecundaria, String numero, TipoVivienda vivienda) {
this.callePrincipal = callePrincipal;
this.calleSecundaria = calleSecundaria;
this.numero = numero;
this.vivienda = vivienda;
}

@Override
public String toString() {
return String.format("Calle Principal: %s\nCalle Secundaria: %s\n"
+ "Numero: %s\nTipo Vivienda: %s", callePrincipal, calleSecundaria,
numero, vivienda);
}
}
Como dijimos, sus atributos están "desprotegidos" para que sea más cómodo acceder a ellos. Y no importa porque ya quedarán protegidos cuando esta clase se implemente como atributo de la clase Socio
Código: [Seleccionar]
public class Socio {

private String numSocio;
private String cedula;
private String nombre;
private String apellidos;
private String telefMovil;
private String telefConvencional;
private Direccion direccion;
private ArrayList<Libro> libros;

public Socio(String numSocio, String cedula, String nombre, String apellidos,
String telefMovil, String telefConvencional, Direccion direccion) {
this.numSocio = numSocio;
this.cedula = cedula;
this.nombre = nombre;
this.apellidos = apellidos;
this.telefMovil = telefMovil;
this.telefConvencional = telefConvencional;
this.direccion = direccion;
libros = new ArrayList<Libro>();
}

public String getNumSocio() {
return numSocio;
}

public void setNumSocio(String numSocio) {
this.numSocio = numSocio;
}

public String getCedula() {
return cedula;
}

public void setCedula(String cedula) {
this.cedula = cedula;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellidos() {
return apellidos;
}

public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}

public String getTelefMovil() {
return telefMovil;
}

public void setTelefMovil(String telefMovil) {
this.telefMovil = telefMovil;
}

public String getTelefConvencional() {
return telefConvencional;
}

public void setTelefConvencional(String telefConvencional) {
this.telefConvencional = telefConvencional;
}

public Direccion getDireccion() {
return direccion;
}

public void setDireccion(Direccion direccion) {
this.direccion = direccion;
}

public boolean esConfiable() {
return libros.size() <= 10;
}

public void listarLibrosPrestados() {
for (Libro l: libros) {
System.out.print("--> Codigo: " + l.getCodigo());
System.out.println("\tTitulo: " + l.getTitulo());
}
}

public void prestarLibro(Libro l) {
libros.add(l);
}

public void devolverLibro(Libro l) {
libros.remove(l);
}

@Override
public String toString() {
return String.format("Num Socio: %s\tCedula: %s\nNombre: %s Apellidos: %s\n"
+ "Telef. Movil: %s\tTelef. Convencional: %s\nDatos Direccion:\n%s",
numSocio, cedula, nombre, apellidos, telefMovil, telefConvencional, direccion);
}

}
Esta clase tiene los atributos que pide el enunciado y además un ArrayList donde se coleccionarán los libros que el socio tenga prestados.
Tiene métodos para poder prestarle un libro y retornar el libro prestado.
Otro método nos dice con un boolean si el usuario es confiable (tiene 10 o menos libros prestados) y otro lista en pantalla los libros que pueda tener prestados.

Luego tenemos la clase Libro y ocurre algo parecido como con Socio.
Uno de sus atributos es la Localización del libro, que es un dato compuesto por varios atributos así que podemos agruparlos en una única clase.
Y uno de esos atributos, el "area", también se nos dan una serie de valores determinados entre los que se puede escoger.
Así que también podemos modelar un enum para el dato de Area
Código: [Seleccionar]
public enum Area {

GENERALIDADES("Generalidades"), FILOSOFIA("Filosofia"), RELIGION("Religion"),
CIENCIAS_SOCIALES("Ciencias Sociales"),
FILOLOGIA("Filologia"), CIENCIAS_NATURALES("Ciencias Naturales"),
TECNICA_CIENCIA_PRACTICA("Tecnica y Ciencia Practica"),
ARTE_LITERATURA("Arte y Literatura"), HISTORIA("Historia");

private String valorArea;

private Area(String tipo) {
valorArea = tipo;
}

@Override
public String toString() {
return valorArea;
}

public static Area convertirCadena(String cadena) {
for (Area a: Area.values())
if (a.valorArea.equalsIgnoreCase(cadena))
return a;

return null;
}
}
Este enum, será un atributo de la clase Localizacion
Código: [Seleccionar]
public class Localizacion {

String numPiso;
String numHabitacion;
String numEstante;
Area area;

public Localizacion() {
numPiso = "";
numHabitacion = "";
numEstante = "";
area = null;
}

public Localizacion(String numPiso, String numHabitacion, String numEstante, Area area) {
this.numPiso = numPiso;
this.numHabitacion = numHabitacion;
this.numEstante = numEstante;
this.area = area;
}

@Override
public String toString() {
return String.format("Piso: %s\tHabitacion: %s\nEstante: %s\tArea: %s", numPiso,
numHabitacion, numEstante, area);
}

}
Y esta clase, será un atributo de la clase Libro
Código: [Seleccionar]
public class Libro {

private String codigo;
private String titulo;
private String autoria;
private boolean estaDisponible;
private Localizacion localizacion;

public Libro(String codigo, String titulo, String autoria, boolean estaDisponible,
Localizacion localizacion) {
this.codigo = codigo;
this.titulo = titulo;
this.autoria = autoria;
this.estaDisponible = estaDisponible;
this.localizacion = localizacion;
}

public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getAutoria() {
return autoria;
}
public void setAutoria(String autoria) {
this.autoria = autoria;
}
public boolean estaDisponible() {
return estaDisponible;
}
public void setDisponible(boolean disponibilidad) {
estaDisponible = disponibilidad;
}

public Localizacion getLocalizacion() {
return localizacion;
}

public void setLocalizacion(Localizacion localizacion) {
this.localizacion = localizacion;
}

@Override
public String toString() {
return String.format("Codigo: %s\tTitulo: %s\nAutoria: %s Disponible: %s\nLocalizacion:\n%s",
codigo, titulo, autoria, estaDisponible?"Si":"No", localizacion);
}

/*
* Dos libros son iguales si tienen el mismo codigo.
*/
@Override
public boolean equals(Object objeto) {
if (objeto instanceof Libro) {
Libro otroLibro = (Libro) objeto;
return codigo.equals(otroLibro.codigo);
}
else
return false;
}
}
Para esta clase, nos conviene sobre escribirle el método equals() para indicar cuando dos libros deben considerarse como iguales.
Esto luego servirá para que se más fácil eliminar libros del ArrayList del socio, cuando este devuelva su préstamo.

Otra clase que interviene aquí, es la clase Autor, a quien podemos ponerle también un ArrayList para agrupar los libros que este autor ha escrito.
Código: [Seleccionar]
public class Autor {

private String nombre;
private String alias;
private String nacionalidad;
private String fechaNaci;
private ArrayList<Libro> libros;

public Autor(String nombre, String alias, String nacionalidad, String fechaNaci) {
this.nombre = nombre;
this.alias = alias;
this.nacionalidad = nacionalidad;
this.fechaNaci = fechaNaci;
libros = new ArrayList<Libro>();
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getAlias() {
return alias;
}

public void setAlias(String alias) {
this.alias = alias;
}

public String getNacionalidad() {
return nacionalidad;
}

public void setNacionalidad(String nacionalidad) {
this.nacionalidad = nacionalidad;
}

public String getFechaNaci() {
return fechaNaci;
}

public void setFechaNaci(String fechaNaci) {
this.fechaNaci = fechaNaci;
}

public void agregarLibro(Libro lib) {
libros.add(lib);
}

public void listarLibros() {
for (Libro l: libros)
System.out.println(l);
}

@Override
public String toString() {
return String.format("Nombre: %s\tAlias: %s\nNacionalidad: %s\tFecha Nacimiento: %s",
nombre, alias, nacionalidad, fechaNaci);
}

}

Y nos queda la clase Prestamo, a quién también le sobreescribiremos el método equals(), ya que en la clase principal tendremos un ArrayList con prestamos, y habrá que eliminarlos cuando los libros sean devueltos.

Código: [Seleccionar]
public class Prestamo {

private String codigoLibro;
private String numSocio;
private String fecha;

public Prestamo(String codigoLibro, String numSocio, String fecha) {
this.codigoLibro = codigoLibro;
this.numSocio = numSocio;
this.fecha = fecha;
}

public String getCodigoLibro() {
return codigoLibro;
}

public void setCodigoLibro(String codigoLibro) {
this.codigoLibro = codigoLibro;
}

public String getNumSocio() {
return numSocio;
}

public void setNumSocio(String numSocio) {
this.numSocio = numSocio;
}

public String getFecha() {
return fecha;
}

public void setFecha(String fecha) {
this.fecha = fecha;
}

@Override
public String toString() {
return String.format("Codigo Libro: %s\tNumero Socio: %s\nFecha: %s", codigoLibro,
numSocio, fecha);
}

/*
* Dos prestamos se consideran iguales si coincide el codigo de libro
* y el codigo de socio
*/
@Override
public boolean equals(Object objeto) {
if (objeto instanceof Prestamo) {
Prestamo otroPrestamo = (Prestamo) objeto;
return codigoLibro.equals(otroPrestamo.codigoLibro) && numSocio.equals(otroPrestamo.numSocio);
}
else
return false;
}

}

En el siguiente mensaje vemos la clase principal
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Aplicacion
« Respuesta #5 en: 18 de Febrero 2022, 19:17 »
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.

Código: [Seleccionar]
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);
}

}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Aplicacion
« Respuesta #6 en: 18 de Febrero 2022, 19:22 »
Podrías ayudarme esto es lo que me pide a mi en la aplicación:
Es el mismo problema por favor

La aplicación debe contener:
 
•   Ventana que permita ingresar un socio nuevo con los objetos gráficos necesarios para el ingreso de lo descrito anteriormente.
.........

Con las clases que he publicado antes, prácticamente ya se tiene la parte del "Modelo".
Intenta comenzar una Vista y te ayudamos donde te atasques.

Si encuentro tiempo, intentaría comenzar yo una interfaz que sirviera de ejemplo... pero el tiempo escasea....  :(
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Cristina

  • Visitante
Re: Aplicacion
« Respuesta #7 en: 24 de Febrero 2022, 01:14 »
gracias por la ayuda, pero me sale algunos errores, no se como corregirlos, podrías ayudarme por favor

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Aplicacion
« Respuesta #8 en: 25 de Febrero 2022, 01:34 »
Si no indicas qué errores son y cómo es tu código..., pues poco puedo ayudar.

Puedo comenzar un menú con interfaz gráfica, para que sirva de guía y ver en qué estás fallando, o bien que sirva de ejemplo para que lo continúes y lo completes.

No va a ser muy elaborado porque mi tiempo libre es limitado.
Podemos crear un JFrame principal con botones para acceder a los submenús de las entidades que tenga nuestro programa.
En mi caso tengo 4, porque estoy reutilizando las clases que puse anteriormente



Al pinchar en uno de los botones, podemos hacer que aparezca un JDialog para la gestión de cada elemento.
Aquí por ejemplo gestiono Socios con todas las opciones CRUD necesarias.

Con el JComboBox puedo seleccionar Socios escogiendo su Número de Socio que lo identifica.
Cada vez que elijo uno, se muestran el resto de datos en pantalla.
Con los botones de abajo, puedo crear, modificar, eliminar y guardar


Bien, el JFrame principal lo construyo con este código:
Código: [Seleccionar]
ublic class Biblioteca extends JFrame {

//Modelo
private ArrayList<Socio> socios = new ArrayList<Socio>();
static int idSocios = 0; //Contador para autogenerar id para los socios
private ArrayList<Autor> autores = new ArrayList<Autor>();
private ArrayList<Libro> libros = new ArrayList<Libro>();
private ArrayList<Prestamo> prestamos = new ArrayList<Prestamo>();

//Vista
private PanelBotonMenu menuSocios = new PanelBotonMenu("Gestion Socios");
private PanelBotonMenu menuAutores = new PanelBotonMenu("Gestion Autores");
private PanelBotonMenu menuLibros = new PanelBotonMenu("Gestion Libros");
private PanelBotonMenu menuPrestamos = new PanelBotonMenu("Gestion Prestamos");

public Biblioteca() {
comenzarConDatosCargados();

JPanel pnPrincipal = new JPanel();
pnPrincipal.setLayout(new GridLayout(2,2,10,10));
pnPrincipal.add(menuSocios);
pnPrincipal.add(menuAutores);
pnPrincipal.add(menuLibros);
pnPrincipal.add(menuPrestamos);
menuSocios.btOpcion.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new DialogoSocio(null, true, socios);
}
});

setContentPane(pnPrincipal);

setTitle("Biblioteca");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
new Biblioteca();
}
});
}


/*
* Este método carga algunos datos por defecto
* para poder hacer pruebas en el programa
*/
private void comenzarConDatosCargados() {
//Algunos socios
String id = String.format("SC%04d", idSocios);
socios.add(new Socio(id, "CED001", "Juan", "Marin Roca", "678901234", "994567890",
new Direccion("Sepulveda", "Roble", "34", TipoVivienda.CASA)));
idSocios++;
id = String.format("SC%04d", idSocios);
socios.add(new Socio(id, "CED002", "Sara", "Montes", "678901234", "994567890",
new Direccion("Azucena", "", "44", TipoVivienda.DEPARTAMENTO)));
idSocios++;
id = String.format("SC%04d", idSocios);
socios.add(new Socio(id, "CED003", "Jorge", "Morales", "678901234", "994567890",
new Direccion("Peru", "Ecuador", "11", TipoVivienda.EMPRESA)));
idSocios++;
id = String.format("SC%04d", idSocios);
socios.add(new Socio(id, "CED004", "Laura", "Sanchez", "678901234", "994567890",
new Direccion("Fresnedo", "", "67", TipoVivienda.DEPARTAMENTO)));
idSocios++;
//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);
}

Y la clase para crear el JDialog, es la siguiente. Fijaos que por el constructor le paso una referencia al ArrayList de Socios que se encuentra en la clase principal. Así el JDialog puede acceder directamente a la colección de socios.
Código: [Seleccionar]
public class DialogoSocio extends JDialog {

private ArrayList<Socio> socios;
private JComboBox<String> jcNumSocio;
private JTextField jtCedula;
private JTextField jtNombre;
private JTextField jtApellidos;
private JTextField jtTelefMovil;
private JTextField jtTelefConven;
private JTextField jtDireccion;
private JButton btNuevo;
private JButton btModificar;
private JButton btEliminar;
private JButton btGuardar;

public DialogoSocio(Frame padre, boolean modal, ArrayList<Socio> socios) {
super(padre, modal);
this.socios = socios;
inicializarComponentes();

JPanel pnDatos = new JPanel();
pnDatos.setLayout(new GridLayout(4,1,5,5));
JPanel pn1 = new JPanel();
pn1.setLayout(new GridLayout(1,2));
pn1.add(new PanelConLabel("Nº Socio: ", jcNumSocio));
pn1.add(new PanelConLabel("Nº Cedula: ", jtCedula));
JPanel pn2 = new JPanel();
pn2.setLayout(new GridLayout(1,2));
pn2.add(new PanelConLabel("Nombre: ", jtNombre));
pn2.add(new PanelConLabel("Apellidos: ", jtApellidos));
JPanel pn3 = new JPanel();
pn3.setLayout(new GridLayout(1,2));
pn3.add(new PanelConLabel("Tlf. Movil: ", jtTelefMovil));
pn3.add(new PanelConLabel("Tlf. Convenc: ", jtTelefConven));
JPanel pn4 = new JPanel();
pn4.add(new PanelConLabel("Direccion: ", jtDireccion));

pnDatos.add(pn1); pnDatos.add(pn2); pnDatos.add(pn3); pnDatos.add(pn4);

JPanel pnBotones = new JPanel();
pnBotones.add(btNuevo); pnBotones.add(btModificar);
pnBotones.add(btEliminar); pnBotones.add(btGuardar);

setLayout(new BorderLayout());
add(pnDatos, BorderLayout.CENTER);
add(pnBotones, BorderLayout.SOUTH);


setTitle("Gestion Socios");
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}

private void inicializarComponentes() {
jcNumSocio = new JComboBox<String>();
for (Socio s: socios)
jcNumSocio.addItem(s.getNumSocio());
jtCedula = new JTextField(8);
jtNombre = new JTextField(8);
jtApellidos = new JTextField(8);
jtTelefMovil = new JTextField(8);
jtTelefConven = new JTextField(8);
jtDireccion = new JTextField(20);
btNuevo = new JButton("Nuevo Socio");
btNuevo.addActionListener(new AccionNuevoSocio());
btModificar = new JButton("Modificar Socio");
btModificar.addActionListener(new AccionModificarSocio());
btEliminar = new JButton("Eliminar Socio");
btEliminar.addActionListener(new AccionEliminarSocio());
btGuardar = new JButton("Guardar Socio");
btGuardar.addActionListener(new AccionGuardarSocio());

actualizarInterfaz();
jcNumSocio.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
mostrarSocioSeleccionado();
}});
}

private void actualizarInterfaz() {

jtCedula.setEditable(false);
jtNombre.setEditable(false);
jtApellidos.setEditable(false);
jtTelefMovil.setEditable(false);
jtTelefConven.setEditable(false);
jtDireccion.setEditable(false);

if (socios.isEmpty()) {
jtCedula.setText(null);
jtNombre.setText(null);
jtApellidos.setText(null);
jtTelefMovil.setText(null);
jtTelefConven.setText(null);
jtDireccion.setText(null);
btNuevo.setEnabled(true);
btModificar.setEnabled(false);
btEliminar.setEnabled(false);
btGuardar.setEnabled(false);
}
else {
jcNumSocio.setSelectedIndex(0);
mostrarSocioSeleccionado();
btNuevo.setEnabled(true);
btModificar.setEnabled(true);
btEliminar.setEnabled(true);
btGuardar.setEnabled(false);
}
}

/*
* Muestra en los campos los datos del socio
* seleccionado actualmente en el JComboBox
*/
private void mostrarSocioSeleccionado() {
Socio s = socios.get(jcNumSocio.getSelectedIndex());
jtCedula.setText(s.getCedula());
jtNombre.setText(s.getNombre());
jtApellidos.setText(s.getApellidos());
jtTelefMovil.setText(s.getTelefMovil());
jtTelefConven.setText(s.getTelefConvencional());
jtDireccion.setText(s.getDireccion().getDatos());
}

private class PanelConLabel extends JPanel {

public PanelConLabel(String txt, JComponent comp) {
add(new JLabel(txt));
add(comp);
}
}

/*
* Configura la interfaz para que el usuario pueda
* crear un socio nuevo
*/
private class AccionNuevoSocio implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
jcNumSocio.setEnabled(false);
jtCedula.setText(null); jtCedula.setEditable(true);
jtNombre.setText(null); jtNombre.setEditable(true);
jtApellidos.setText(null); jtApellidos.setEditable(true);
jtTelefMovil.setText(null); jtTelefMovil.setEditable(true);
jtTelefConven.setText(null); jtTelefConven.setEditable(true);
jtDireccion.setText(null); jtDireccion.setEditable(true);
btModificar.setEnabled(false);
btEliminar.setEnabled(false);
btGuardar.setEnabled(true);
}
}

/*
* Configura la interfaz para que el usuario pueda
* modificar un socio seleccionado
*/
private class AccionModificarSocio implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
jcNumSocio.setEnabled(true);
jtCedula.setEditable(true);
jtNombre.setEditable(true);
jtApellidos.setEditable(true);
jtTelefMovil.setEditable(true);
jtTelefConven.setEditable(true);
jtDireccion.setEditable(true);
btModificar.setEnabled(false);
btEliminar.setEnabled(true);
btGuardar.setEnabled(true);
}
}

/*
* Elimina un socio seleccionado y reconfigura la
* interfaz tras la eliminación
*/
private class AccionEliminarSocio implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {

int respuesta = JOptionPane.showConfirmDialog(null, "¿Seguro que quiere eliminar este Socio",
"Eliminar Socio", JOptionPane.YES_NO_OPTION);

if (respuesta == JOptionPane.YES_OPTION) {
socios.remove(jcNumSocio.getSelectedIndex());
jcNumSocio.removeItemAt(jcNumSocio.getSelectedIndex());
actualizarInterfaz();
}
}
}

/*
* Guarda un socio nuevo o modificado y reconfigura la
* interfaz tras la eliminación
*/
private class AccionGuardarSocio implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//Recopilamos datos y comprobamos que no falta ningún dato importante
boolean faltanDatosImportantes = false;
String cedula = jtCedula.getText();
if (cedula.isBlank()) {
faltanDatosImportantes = true;
JOptionPane.showMessageDialog(null, "Campo Cédula no puede estar vacío",
"Guardar Socio", JOptionPane.WARNING_MESSAGE);
}
String nombre = jtNombre.getText();
if (nombre.isBlank()) {
faltanDatosImportantes = true;
JOptionPane.showMessageDialog(null, "Campo Nombre no puede estar vacío",
"Guardar Socio", JOptionPane.WARNING_MESSAGE);
}
String apellidos = jtApellidos.getText();
if (apellidos.isBlank()) {
faltanDatosImportantes = true;
JOptionPane.showMessageDialog(null, "Campo Apellidos no puede estar vacío",
"Guardar Socio", JOptionPane.WARNING_MESSAGE);
}
String telefM = jtTelefMovil.getText();
if (telefM.isBlank()) {
faltanDatosImportantes = true;
JOptionPane.showMessageDialog(null, "Campo Tlf Movil no puede estar vacío",
"Guardar Socio", JOptionPane.WARNING_MESSAGE);
}
String telefC = jtTelefConven.getText();
//Telefono convencional no es obligatorio
String direccion = jtDireccion.getText();
if (direccion.isBlank()) {
faltanDatosImportantes = true;
JOptionPane.showMessageDialog(null, "Campo Dirección no puede estar vacío",
"Guardar Socio", JOptionPane.WARNING_MESSAGE);
}

if (faltanDatosImportantes)
JOptionPane.showMessageDialog(null, "Faltan datos para poder guardar el Socio",
"Guardar Socio", JOptionPane.ERROR_MESSAGE);
else {
/*
* Antes de guardar, hay que saber si estamos creando un socio nuevo
* para añadirlo al ArrayList, o bien si estamos modificando un
* socio que ya existe en el ArrayList.
* Podemos distinguir entre un escenario y el otro según si el JComboBox
* está desactivado (nuevo socio) o si está activado(socio modificado)
*/
if (jcNumSocio.isEnabled()) { //Estamos modificando
int indice = jcNumSocio.getSelectedIndex();
socios.get(indice).setCedula(cedula);
socios.get(indice).setNombre(nombre);
socios.get(indice).setApellidos(apellidos);
socios.get(indice).setTelefMovil(telefM);
socios.get(indice).setTelefConvencional(telefC);
socios.get(indice).getDireccion().callePrincipal = direccion;
}
else { //Es un socio nuevo
String id = String.format("SC%04d", Biblioteca.idSocios);
Direccion nuevaDir = new Direccion();
nuevaDir.callePrincipal = direccion;
//Añadimos al ArrayList
socios.add(new Socio(id, cedula, nombre, apellidos, telefM, telefC, nuevaDir));
Biblioteca.idSocios++;
//Añadimos su id al combobox
jcNumSocio.addItem(id);
jcNumSocio.setSelectedIndex(jcNumSocio.getItemCount() - 1);
//Reactivamos el combobox
jcNumSocio.setEnabled(true);
}
btModificar.setEnabled(true);
btEliminar.setEnabled(true);
btGuardar.setEnabled(false);
jtCedula.setEditable(false);
jtNombre.setEditable(false);
jtApellidos.setEditable(false);
jtTelefMovil.setEditable(false);
jtTelefConven.setEditable(false);
jtDireccion.setEditable(false);
}
}
}
}

Los botones de acción no solo cogen y guardan datos. También activan/desactivan campos y botones según cada caso.
Por ejemplo, los campos de texto comienzan siendo "no editables", solo muestran datos.
Cuando se pulsa el botón Modificar, entonces se vuelven "editables" para que el usuario pueda cambiar los valores.
Al pulsar el botón Guardar, vuelven a ser de "solo lectura".

No tengo tiempo para hacer más por ahora, ni para explicar más a fondo el código.
Pruébalo, quizás tengas que adaptarlo a las clases de tu Modelo si no estás usando las que escribí yo en mensajes anteriores.
De hecho, yo mismo he tenido que hacer una "chapucilla" para el campo dirección, ya que en la interfaz trato este dato como una simple línea String, pero mi clase Socio el atributo Dirección es mucho más complejo, ya que es una clase con cuatro atributos distintos.
Pero no quería perder tiempo en crear más campos para la dirección.

Si te ves capaz, intentar hacer lo mismo pero para gestionar los libros.
Si tienes dudas concretas, pregúntalas.

Yo intentaré continuarlo cuando pueda.
Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Pepote21

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 92
    • Ver Perfil
Re: Aplicacion
« Respuesta #9 en: 27 de Febrero 2022, 20:54 »
Hola a todos.
Primero agradecimiento a kabuto porque aprendo.
Segundo, pongo un poco de los métodos que he hecho.. Vereis alguno sc.nextLine() que quizás os sobren, ya que algunas cosas de mi código son diferentes.
Código: [Seleccionar]
public static void registrarAutor(){
        System.out.println("\n\tCREAR AUTOR.");
        sc.nextLine();
        System.out.print("Nombre: ");
        String nombre=sc.nextLine();
        System.out.print("Alias: ");
        String alias=sc.nextLine();
        System.out.print("Nacionalidad: ");
        String nacionalidad=sc.nextLine();
        System.out.print("Fecha nacimiento: ");
        String fNacimiento=sc.nextLine();
        Autor autor=new Autor(nombre,alias,nacionalidad,fNacimiento);
        autores.add(autor);
        if(libros.isEmpty()){
            System.out.println("No hay libros registrados.");
        }else{
            for(Libro libro:libros){
                if(libro.getAutoria().equalsIgnoreCase(nombre)){
                    autor.agregarLibro(libro);
                }
            }
        }
       
    }
   
    public static void listarAutores(){
        System.out.println("\n\tLISTAR AUTORES.");
        if (socios.isEmpty()){
            System.out.println("No hay socios registrados");
        }else{
            for(Autor autor:autores){
                System.out.println("\n" +autor.toString());
            }
        }
    }
   
    public static void listarLibrosAutor(){
        sc.nextLine();
        System.out.print("Autor: ");
        String nombre=sc.nextLine();
        if (autores.isEmpty())
            System.out.println("No hay autores registrados");
else {
            for(Autor autor:autores){
                if(autor.getNombre().equals(nombre)){
                    autor.listarLibros();
                }
            }
        }
    }
   
    public static void registrarLibro(){
        sc.nextLine();
        System.out.println("CREAR LIBRO.");
        System.out.print("Código: ");
        String codigo=sc.nextLine();
        System.out.print("Título: ");
        String titulo=sc.nextLine();
        System.out.print("Autoría: ");
        String autoria=sc.nextLine();
        System.out.print("Disponibilidad: ");
        boolean disponibilidad=sc.nextBoolean();
       
        Localizacion localizacion=new Localizacion();
        sc.nextLine();
        System.out.print("Número piso:");
        localizacion.numPiso=sc.nextLine();
        System.out.print("Número habitación:");
        localizacion.numHabitacion=sc.nextLine();
        System.out.print("Número estante:");
        localizacion.numEstante=sc.nextLine();
       
        System.out.print("Elegir área: ");
        for(Area area:Area.values()){
            System.out.print(area+" ");
        }
        Area tipo=null;
        while(tipo==null){
            System.out.print("\nTipo área: ");
            tipo=Area.convertirCadena(sc.nextLine());
            if(tipo==null){
                System.out.println("El tipo de área no es válido");
            }
        }
        localizacion.area=tipo;
        Libro libro=new Libro(codigo,titulo,autoria,disponibilidad,localizacion);
        libros.add(libro);
    }
   
    public static void localizarLibro(){
        System.out.println("BUSCAR LIBRO.");
        if (libros.isEmpty()){
            System.out.println("No hay libros registrados");
        }else{
            sc.nextLine();
            System.out.print("Código: ");
            String codigo=sc.nextLine();
            for(Libro libro:libros){
                if(libro.getCodigo().equals(codigo)){
                    System.out.println("LOCALIZACIÓN: "+libro.getLocalizacion().toString());
                }
            }
        }       
    }
   
    public static void cambiarLocalizacionLibro(){
        System.out.println("CAMBIAR LOCALIZACIÓN LIBRO.");
        if (libros.isEmpty()){
            System.out.println("No hay libros registrados");
        }else{
            sc.nextLine();
            Localizacion localizacion=new Localizacion();
            System.out.print("Código: ");
            String codigo=sc.nextLine();
            for(Libro libro:libros){
                if(libro.getCodigo().equals(codigo)){
                    System.out.print("Número piso para nueva localización:");
                    localizacion.numPiso=sc.nextLine();
                    System.out.print("Número habitación para nueva localización:");
                    localizacion.numHabitacion=sc.nextLine();
                    System.out.print("Número estante para nueva localización:");
                    localizacion.numEstante=sc.nextLine();

                    System.out.print("Elegir área para nueva localización: ");
                    for(Area area:Area.values()){
                        System.out.print(area+" ");
                    }
                    Area tipo=null;
                    while(tipo==null){
                        System.out.print("\nTipo área nueva localización: ");
                        tipo=Area.convertirCadena(sc.nextLine());
                        if(tipo==null){
                            System.out.println("El tipo de área no es válido");
                        }
                    }
                    localizacion.area=tipo;
                    libro.setLocalizacion(localizacion);
                }
            }
        }       
    }

No sé si están perfectos pero a mi me funcionan.
Un saludo a todos.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Aplicacion
« Respuesta #10 en: 27 de Febrero 2022, 23:23 »
Pintan bien.

Solo comentar un detalle poco importante.
Al registrar nuevo libro, pides un boolean para indicar la disponibilidad del libro:
Citar
    public static void registrarLibro(){
        sc.nextLine();
        System.out.println("CREAR LIBRO.");
        System.out.print("Código: ");
        String codigo=sc.nextLine();
        System.out.print("Título: ");
        String titulo=sc.nextLine();
        System.out.print("Autoría: ");
        String autoria=sc.nextLine();
        System.out.print("Disponibilidad: ");
        boolean disponibilidad=sc.nextBoolean();

Quizás no debiera ser necesario pedir ese dato ya que al registrar un libro, es decir, añadir un nuevo título a la biblioteca, se entiende que SÍ está disponible porque aún no ha habido ocasión de prestarlo.

Al añadir el libro, lo lógico sería considerar como TRUE su disponibilidad, la cuál solo debiera pasar a FALSE en el momento que se haga un nuevo préstamo.

Pero bueno, como digo, es un detalle de escasa relevancia.

Un saludo.

NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".