Autor Tema: algoritmo Ejercicio Java Interfaces gestión librería biblioteca venta préstamo  (Leído 1801 veces)

Reoplick

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Hola, estoy intentando resolver el ejercicio y necesitaría ayuda.

Ejercicio interfaces Java

Se desea hacer un programa para realizar ciertas operaciones sobre unos materiales educativos (libros), los cuales son comercializados por una librería y/o utilizados en una biblioteca. Para ello se requiere controlar las siguientes acciones:

· Transaccion(): Esta se encargará, según el tipo de negocio, de vender un libro a un cliente (en caso de la librería) o realizar un préstamo a un usuario (en caso de la biblioteca).

· Cambios(): Se encargará, según el tipo de negocio, de realizar un cambio (en caso de una librería) o de hacer la devolución del libro (en caso de ser la biblioteca). Se debe informar la fecha del cambio y el nombre del nuevo libro por el que fue cambiado. Y mostrar la fecha de la devolución del libro.

Tenga en cuenta que cada material debe llevar un ISBN (Código), nombre, autor, precio de compra (En caso de la librería), días de préstamo y valor de la multa (en caso de la biblioteca). Las clases deben llevar sus respectivos constructores, métodos get y set y los métodos adicionales.

Por último, debe contar con un programa principal en el cual se pueda realizar ya sea una venta de un material (para una librería) y un préstamo de material (para una biblioteca)

Código: [Seleccionar]
public class Material {
 
private String isbn;
private String nombre;
private String autor;
 
public Material(String isbn, String nombre, String autor) {
this.isbn = isbn;
this.nombre = nombre;
this.autor = autor;
}
 
public String getIsbn() {
return isbn;
}
 
public void setIsbn(String isbn) {
this.isbn = isbn;
}
 
public String getNombre() {
return nombre;
}
 
public void setNombre(String nombre) {
this.nombre = nombre;
}
 
public String getAutor() {
return autor;
}
 
public void setAutor(String autor) {
this.autor = autor;
}
 
}
« Última modificación: 18 de Abril 2022, 19:59 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
La idea es gestionar un mismo material (libros) de dos formas distintas, y con atributos distintos, según si se está funcionando como una biblioteca o como un tienda de libros.
El programa ha de ser ambivalente para ambas situaciones.

Bien, ya ha escrito la clase básica Material
Esta clase, va a tener dos hijas, una para los libros de tienda y otros para los libros de la biblioteca.
Esta podría ser la clase LibroTienda, que añade el atributo para el precio de venta, el cuál se puede proporcionar como parámetro del constructor
Código: [Seleccionar]
public class LibroTienda extends Material {

private double precioVenta;

public LibroTienda(String isbn, String nombre, String autor, double precioVenta) {
super(isbn, nombre, autor);
this.precioVenta = precioVenta;
}

public double getPrecioVenta() {
return precioVenta;
}

public void setPrecioVenta(double precioVenta) {
this.precioVenta = precioVenta;
}

}

Y esta la clase LibroBiblioteca, con dos atributos nuevos para los días que lleva prestado y el valor de multa para un posible retraso en su devolución.
Dichos atributos, parece lógico que se inicialicen a 0 al construir el libro.
Código: [Seleccionar]
public class LibroBiblioteca extends Material {

private int diasPrestamo;
private double valorMulta;

public LibroBiblioteca(String isbn, String nombre, String autor) {
super(isbn, nombre, autor);
diasPrestamo = 0;
valorMulta = 0d;
}

public int getDiasPrestamo() {
return diasPrestamo;
}

public void setDiasPrestamo(int diasPrestamo) {
this.diasPrestamo = diasPrestamo;
}

public double getValorMulta() {
return valorMulta;
}

public void setValorMulta(double valorMulta) {
this.valorMulta = valorMulta;
}

}

Bien, tenemos los dos tipos de material/libros.
Ahora hay que hacer que el programa pueda gestionar de dos formas distintas.
Para ello haremos otras dos clases, cada una enfocada a distinto tipo de negocio.
A pesar de ser negocios distintos, van a tener dos funciones básicas con el mismo nombre: transacción y cambios.

Es aquí donde podemos crear una interfaz, para indicar que esas dos clases han de tener esas dos funciones, aunque su comportamiento será distinto en cada una.
Esa interfaz es tan simple como esto:
Código: [Seleccionar]
public interface IOperarMaterial {

public void cambios();
public void transaccion();

}

Esta interfaz, la implementarán las clases que modelan los distintos tipos de negocio.
Una clase para el negocio de la tienda librería:
Código: [Seleccionar]
import java.util.ArrayList;

public class OperarLibreria implements IOperarMaterial {

private ArrayList<LibroTienda> libros = new ArrayList<LibroTienda>();

@Override
public void cambios() {
// TODO Codigo para que la tienda cambie un libro vendido por otro
//Se debe informar la fecha del cambio y el nombre del nuevo libro por el que fue cambiado.

}

@Override
public void transaccion() {
// TODO Codigo para vender un libro

}


}

Y otra para el negocio de la biblioteca:
Código: [Seleccionar]
import java.util.ArrayList;

public class OperarBiblioteca implements IOperarMaterial {

private ArrayList<LibroBiblioteca> libros = new ArrayList<LibroBiblioteca>();

@Override
public void cambios() {
// TODO Código para hacer la devolución de un libro prestado
//mostrar la fecha de la devolución del libro.

}

@Override
public void transaccion() {
// Codigo para realizar un préstamo a un usuario

}


}

Estas clases, no están terminadas. Intenta escribir el código de cada método, según cada caso.
Por ejemplo para que la tienda venda un libro (transacción) tendrá que preguntar que libro se va a vender, eliminarlo del ArrayList y mostrar en pantalla el precio de venta a modo de factura.

Cuanto tengas esas clases terminadas, ya lo último es crear la clase principal, con dos objetos como atributos para los dos tipos de negocio.
Y mostrar un menú, por ejemplo que empiece preguntando si se quiere operar como libreria o como biblioteca.
Y luego preguntar si se quiere hacer una transaccion o un cambio.
Y ya entonces pedirle al objeto correspondiente (libreria o bliblioteca) que invoquen a sus métodos según lo que haya elegido el usuario.
Código: [Seleccionar]
public class Main {

private static OperarLibreria libreria = new OperarLibreria();
private static OperarBiblioteca biblioteca = new OperarBiblioteca();

public static void main(String[] args) {
// TODO Menu para elebir entre modelo de negocio y preguntar
//que operacion se quiere realizar

}

}

Intenta terminar tú todas estas clases, si no lo consigues, muestra por aquí lo que tengas y te ayudamos a completarlo.

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".