Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - gatoher

Páginas: 1 2 3 4 [5]
81
Hola a todos, estoy realizando un ejercicio de reservas y  tengo dos problemas con las fechas. Me explico, es un ejercicio para reservas de un hotel, y cuando alguien quiere reservar una habitación por ejemplo "del 1 de agosto al 15", yo quiero recorrer todas la tabla donde almaceno todas las reservas y saber que habitaciones tengo libre.
No se me ocurre que select podría hacer.

La otra duda es que utilizo en java para apuntar las fechas dos JDate, y cada habitación tiene un costo por día. Si alguien quiere estar del 28 de agosto al 14 de septiembre no se como hacer para restar y me devuelva el número de días.

Estoy trabajando con MySql y Java.  La verdad que estoy atascado ahora mismo por que no veo como hacerlo.

82
Hola Mastermind, revisando ayer me di cuenta que al meter la base de datos en el MySql no había puesto las opciones de Integridad Referencial. Vamos que ante delete, update no había puesto poner a null o cascade.
Voy adjuntar una imagen de la base, "¿como se sube al post una imagen?, cuando pincho en el icono me aparecen las etiquetas IMG, pero no se como hacerlo."

Bueno para solucionarlo lo que hice fue poner ON DELETE CASCADE en la tabla idcliente de manera que al borrar un cliente se elimina su reserva pero permanece el consumo, este no se borra.

No llevo mucho tiempo con esto y no se si es una solución óptima.





83
Hola a todos estoy haciendo en Java con MySql un ejercicio para almacenar reservas de un hotel. El problema que tengo es que las siguientes tablas relacionadas.

Persona => Cliente => Habitacion => Consumiciones

Al intentar eliminar un cliente que no ha reservado una habitación  no hay problema, pero al eliminar una reserva de habitacion, "un cliente puede hacer varias reservas,osea puede reservar varias habitaciones y cada habitación  puede tener varias  consumiciones", bueno pues esto no me deja hacerlo por las claves ajenas.

Entonces he pensado sacar todas las habitaciones que un cliente tiene, supongamos 3,"habitación 5,10,20" almacenar el número de cada habitación en un array y luego con un for ir eliminado todas las consumiciones,"la tabla consumiciones tiene el id de la habitación que hace el pedido".

¿Esto estaría bien hecho?. La verdad que este problema lo tengo bastante.

 

Agradeceria cualquier comentario. Saludos

84
Hola Alex, ya veo como has accedido a los metodos privados. Lo has declarado en la clase abstracta y luego sobreescrito en las subclases, el problema de hacerlo asi es que tienes que imprementar los metodos de la clase abstracta en todas las subclases que hereden de ella, ¿que pasa si el método ancensor solo se utiliza en la clase piso? Como en este ejemplo, el resto de las clases no lo utilizan, eso es un problema.
La segunda forma que has puesto es haciendo un molde, asi es como yo accedia a los métodos.

Yo creo que falla es el diseño, habría que crear clases abstractas que heredasen de Inmobiliaria insertando metodos que fueran comunes a subclases"hasta donde fuera posible".

De manera que la primera clase abstracta casi solo tuviera las propiedades y las subclases los metodos.

Tal vez es cuestión de sentarse a pensar en maquetar antes de ponerse a la tecla.

Gracias por responder, un saludo

85
Hola Alex, ante todo gracias por responder. Mira voy a poner parte de código, "quitare lo superfluo" de un ejercicio del instituto, es básico y todo el mundo creo lo entendera.

Es un ejercicio para una gestora de una inmobiliaria,"el ejercicio con frames", por lo que podía venderse pisos, chalets, aticos etc. Es obvio que la mayoria de inmuebles comparten muchas propiedades, pongo una captura de la clase abstracta que hice;

Código: [Seleccionar]
abstract class Inmobiliaria {
   protected String nombre;
   protected String direccion;
   protected float metros;
   protected int dormitorios;
   protected String estado;
   protected static int cod = 0;
 
   //constructor
   public Inmobiliaria(String nombre, String direccion, float metros, int dormitorios, String estado) {
        this.nombre = nombre;
        this.direccion = direccion;
        this.metros = metros;
        this.dormitorios = dormitorios;
        this.estado = estado;
        cod++;
     
    }
   
   
 
   protected abstract double precio();
   

Como se puede ver pongo unas propiedades que van a compartir todos los inmuebles y un metodo abstracto que también va a ser usado, "calcular precio".
Luego cree un frame en el que a la hora de comprar un inmueble se pedian estos datos,
más lo específicos de cada tipo. Pongo el código de por ejemplo pisos.

Código: [Seleccionar]
public class Pisos extends Inmobiliaria{
   
    private String ubicacion;
    private String balcon;
    private int planta;
    private static final float pvpMetro = 300;
    //constructor
    public Pisos(String nombre, String direccion, float metros, int dormitorios, String estado,String ubicacion, String balcon, int planta) {
        super(nombre, direccion, metros, dormitorios, estado);
     
        this.ubicacion = ubicacion;
        this.balcon = balcon;
        this.planta = planta;
    }

    @Override
    protected double precio() {
    double precioTotal = 0;
     
      precioTotal = this.metros*pvpMetro;
     
      return precioTotal;
    }
   
    public boolean ascensor(){
       
        boolean ascensor = false;
       
        //implementación
        return ascensor;
    }




Como se puede ver unas propiedades "específicas" para pisos, las propiedades private a la clase, se implementa el método abstracto de la clase abstracta y hay un método "un poco tonto pero sirve de ejemplo" ascensor que nos va a decir si tiene ascensor o no. Hay que fijarse que es publico y todo.

Hasta aqui todo perfecto, ahora viene cuando a viene mi sorpresa. ¿Donde almacenamos todos los inmuebles, en un Array, vector, etc de la clase abstracta Inmobiliaria, o hago un Array para cada tipo de inmueble?

Bueno, yo al hacer el ejercicio pense que ya que uno hace una clase abstracta, lo suyo sería tener un Array de la clase inmobiliaria, introducir en ella todo tipo de inmuebles y luego en el Frame de la aplicación poder elegir que tipo de inmueble se quiere ver, dependiendo del tipo se verían todas sus propiedades, las específicas y las "comunes".

Perfecto al hacerlo me encontre que no podía acceder desde un objeto Inmobiliaria ni a las propiedades ni métodos propios de cada tipo de inmueble, para hacer a ellos tenia que hacer esto;

Código: [Seleccionar]
               /// MOLDE para acceder a las propiedades de cada tipo de inmueble

               String lugar = String.valueOf(((Piso)obj).getUbicacion());
              label36.setText(peso);
              int  altura =  String.valueOf(((Piso)obj).getPlanta());
              label37.setText(pulgadas);

Al método de saber si tiene ascensor ni siendo publico he podído acceder. Me lleve una sorpresa la verdad.
Posible solución que mis compañeros hicieron, en lugar de crear un Array de la clase abstracta inmobiliaria crearon un Array para cada tipo de inmueble,entonces si se puede acceder a las propiedades y métodos de cada clase. A mi esa solución no me terminaba de convencer, pues entonces para eso yo no hubiera hecho una clase abstracta.

Mi duda es, ¿como se podría haber hecho el ejercicio para evitar el poblema de no poder acceder a las propiedades específicas de cada clase?
¿Hay alguna solución a este problema?
¿La solución hubiera sido una interfaz o varias?

86
Hola que tal soy nuevo en el foro un saludos a todos. Estoy estudiando Java y he llegado a las clases abstractas y interfaces. Y la verdad que tengo una duda o veo una pega en su uso y quería saber si hay una forma de solucionarlo o es que no las utilizo donde no debo.
Haber pongo un ejemplo sencillo de una clase abstracta de personas, y clases que heredan de ella como medico, enfermero etc ...

En las clase abstracta pogo metodos y propiedades comunes a una persona como dni, nombre, apellidos, y metodos que si voy a utilizar en las clases que heredan como calcular salario, etc  .... Luego en cada clase que hereda de persona, "es donde empiezo a ver las pegas" pongo propiedades expecificas como jornal, instrumental, horarios y metodos expecificos a cada una de las clases que no estan declarados en la clase abstracta.

Bueno, pues cuando aplico la polimorfia, osea hago un medico sea una persona  :) resulta que ya no puedo haceder a sus propiedades ni metodos "los que tiene su clase en particular". Se puede acceder a ellas pero haciendo "moldes", eso si, pero si metes a los medicos y enfermeros en un array o una lista de personas al recorrerlas tienes que hacer un instace of, etc ...

Entonces, una solución a este problema, o es que no tengo claro donde aplicar las clases abstractas.

Tenía una segunda duda sobre la diferencia entre clases abstractas y interfaces. Se que las interfaces son completamente abstractas sus métodos y sus constantes, y que una clase puede heredar de varias interfaces. Miéntras que una clase abstracta puede tener métodos abstractos y no abstractos, ademas de variables de instancia, pero que una clase solo puede heredar de una clase abstracta. Entonces, ¿Cuando usar una o la otra?

Bueno, la verdad que me he estendido bastante para ser mi primer post, pero la verdad que llevo tiempo con estas dudas, si alguién me lo pudiera explicar pues se lo agradeceria.

Salludos

Páginas: 1 2 3 4 [5]

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