viernes, 24 de enero de 2014

Unidad 2 Ejercicio 78: Fechas

80. Programar una clase de nombre Fecha que guarde una fecha  como tres enteros privados  de nombres dia, mes y anyo. Serían las propiedades de la clase.

Métodos de la clase:

- constructor que reciba 3 datos de tipo entero y se los asigne a los propiedades  dia mes y anyo.

- constructor por defecto,  que asigne la fecha: 1-1-2013.

- asignate(int,int,int): método que asigna valores a un objeto fecha. Se le pasan tres enteros que serán  almacenados en las propiedades dia, mes y anyo.

- Métodos set y get para las propiedades de la clase.

- incrementate(int d): incrementa en d días la fecha.

- imprimete(): escribe la fecha en el formato: 5-Febrero-1010 (para los valores 5-2-2010)

- imprimete(int): método sobrecargado al que se le pasa como argumento un valor entero. En este caso el método escribirá la fecha con el formato: 5-02-2010.


- método privado de nombre mesLetra que devuelva el mes en letras asociado al mes numérico guardado en una determinada instancia (objeto) de la clase; este método será invocado desde imprímete.

- métodos de nombre getFecha con el mismo comportamiento que imprimete, pero que devuelvan un string que contenga la fecha en el formato adecuado.

Hacer un programa en el que se declaren objetos de la clase Fecha, y comprobar si el comportamiento de los métodos es el correcto.



package unidad2ejercicio78;

/**
*
* @author Juan
*/
public class Unidad2Ejercicio78 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

       
        Fecha unDia = new Fecha();
        Fecha dDia = new Fecha(5,5,2025);
       
        System.out.println(unDia.imprimete());
        System.out.println(dDia.imprimete(5));
        System.out.println(unDia.incrementate(768));
        System.out.println(dDia.mesLetra());
        unDia.asignate(25, 12, 2015);
        System.out.println(unDia.imprimete());
       
       
       

    }
}

package unidad2ejercicio78;

/**
*
* @author Juan
*/
public class Fecha {

    private int dia;
    private int mes;
    private int anyo;

    /**
     *
     * @param dia
     * @param mes
     * @param anyo
     */
    public Fecha(int dia, int mes,int anyo) {
       
        if (dia<=31 && dia > 0 && mes>0 && mes < 13 )
            {
            this.dia = dia;
            this.mes = mes;
            this.anyo = anyo;
            }
        else
             {
            this.dia = 1;
            this.mes = 1;
            this.anyo = 2013;
            }
       
    }

    /**
     *
     */
    public Fecha() {
        this.dia = 1;
        this.mes = 1;
        this.anyo = 2013;
    }
   
    /**
     * Asigna la fecha que le pasemos en los parámetros y/o la fecha 1-1-2013
     * en caso de error
     * @param dia
     * actualiza la propiedad día del objeto fecha
     * @param mes
     * @param anyo
     */
    public void asignate (int dia, int mes, int anyo)
    {
        if (dia<=31 && dia > 0 && mes>0 && mes < 13 )
            {
            this.dia = dia;
            this.mes = mes;
            this.anyo = anyo;
            }
        else
             {
            this.dia = 1;
            this.mes = 1;
            this.anyo = 2013;
            }
    }

    /**
     *
     * @return
     */
    public int getAnyo() {
        return anyo;
    }

    /**
     *
     * @param anyo
     */
    public void setAnyo(int anyo) {
        this.anyo = anyo;
    }

    /**
     *
     * @return
     */
    public int getDia() {
        return dia;
    }

    /**
     *
     * @param dia
     */
    public void setDia(int dia) {
        if (dia<=31 && dia > 0)this.dia = dia;
        else this.dia=1;
    }

    /**
     *
     * @return
     */
    public int getMes() {
        return mes;
    }

    /**
     *
     * @param mes
     */
    public void setMes(int mes) {
        if (mes>0 && mes < 13 )this.mes = mes;
            else this.mes = 1;
    }
   
    /**
     *
     * @return
     */
    public String mesLetra(){
        String mesdev;
       
        switch (mes) {
            case 1:
                mesdev="Enero";
                break;
            case 2:
               mesdev="Febrero";
                break;
            case 3:
                mesdev="Marzo";
                break;
            case 4:
                mesdev="Abril";
                break;
            case 5:
                mesdev="Mayo";
                break;
            case 6:
                mesdev="Junio";
                break;
            case 7:
                mesdev="Julio";
                break;
            case 8:
                mesdev="Agosto";
                break;
            case 9:
                mesdev="Septiembre";
                break;
            case 10:
                mesdev="Octubre";
                break;
            case 11:
                mesdev="Noviembre";
                break;
            case 12:
                mesdev="Diciembre";
                break;
            default:
                throw new AssertionError();
        }
       
        return mesdev;
    }
   
    /**
     *
     * @return
     */
    public String imprimete(){
        return (dia + "-" + mesLetra() + "-" + anyo);
    }
   
    /**
     *
     * @param numeroMes
     * @return
     */
    public String imprimete(int numeroMes){
        return (dia + "-" + mes + "-" + anyo);
    }
   
    /**
     *
     * @param d
     * @return
     */
    public String incrementate(int d){
        int resto,cociente;
       
        cociente = d/365;
        anyo+=cociente;
        resto = d%365;
       
        if (resto>31)
        {
            cociente = resto/31;
            mes+=cociente;//mes=mes+cociente;
            dia+=resto%31;
        }
        else dia+=resto;
       
       
        if (dia>31)
            {
                mes+=1;
                dia-=31;//dia=dia%31;
            }
       
        if (mes>12)
        {
            anyo+=1;
            mes=mes%12;
        }
       
        return imprimete();
    }
   
     public void incrementate2(int d) {
for (int i = 1; i <= d; i++) {
dia++;

switch (mes) {
case 1: // meses de 31 dias
case 3:
case 5:
case 7:
case 8:
case 10:

if (dia == 32) {
mes++;
dia = 1;
}
break;
case 12:
if (dia == 32) {
mes = 1;
dia = 1;
anyo++;
}
break;
case 4: // meses de 30 dias
case 6:
case 9:
case 11:
if (dia == 31) {
mes++;
dia = 1;
}
break;
case 2: // para anhos bisiestos
if (((anyo % 4 == 0) && (anyo % 100 != 0)) || (anyo % 400 == 0)) {
if (dia == 30) {
mes++;
dia = 1;
}
} else {
if (dia == 29) {
mes++;
dia = 1;
}
}
break;
}
}
}