lunes, 19 de enero de 2015

Clase fecha (ejercicio 80)

Primera parte del ejercicio en la que comprobamos las fechas y vamos añadiendo comentarios a los métodos

package ejercicio80;

/**
 *
 * @author juan
 */

public class Fecha {

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

    /**
     * Constructor por defecto genera fechas al 1 del 1 del 2013
     */
    public Fecha() {
        this.dia = 1;
        this.mes = 1;
        this.anyo = 2013;
    }
    /**
     * Constructor al que les pasamos tres parámetros si la fecha
     * es posible se le asigna en caso de fecha incorrecta inicializa
     * el objeto al 1-1-2013
     * @param dia representa el día de la fecha completa
     * @param mes mes de la fecha
     * @param anyo año de la fecha
     */
    public Fecha(int dia, int mes, int anyo) {
        if (comprobarFecha(dia, mes, anyo)) {
            this.dia = dia;
            this.mes = mes;
            this.anyo = anyo;
        } else {
            this.dia = 1;
            this.mes = 1;
            this.anyo = 2013;
        }
    }

    public int getAnyo() {
        return anyo;
    }

    public void setAnyo(int anyo) {
        if (comprobarFecha(dia, mes, anyo)) {
            this.anyo = anyo;
        }
    }

    public int getDia() {
        return dia;
    }

    public void setDia(int dia) {
        if (comprobarFecha(dia, mes, anyo)) {
            this.dia = dia;
        }
    }

    public int getMes() {
        return mes;
    }

    /**
     * si el mes es correcto (teniendo en cuenta ya el día y el año que tiene asignada
     * la fecha) se cambiará el mes por el que pasamos como parámetro
     * @param mes representa el NUEVO mes que queremos asignar a la fecha
     */
    public void setMes(int mes) {
        if (comprobarFecha(dia, mes, anyo)) {
            this.mes = mes;
        }
    }

    /**
     * Método para comprobar si un año es bisiesto.
     * @param num año que queremos comprobar si es bisiesto o no
     * @return Devuelve true si el año es bisiesto y false en caso contrario
     */
    private boolean esBisiesto(int num) {
        return ((num % 4 == 0 && num % 100 != 0) || (num % 500 == 0));
    }

    private boolean comprobarFecha(int dia, int mes, int anho) {
        boolean correcta = true;

        switch (mes) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                if (dia > 31 || dia < 1) {
                    correcta = false;
                }
                break;

            case 4:
            case 6:
            case 9:
            case 11:
                if (dia > 30 || dia < 1) {
                    correcta = false;
                }
                break;
            case 2:
                if (dia > 29 || !(dia > 0 && (dia < 29) || (dia == 29 && esBisiesto(anho)))) {
                    correcta = false;
                }

                break;
            default:
                correcta = false;
        }
        return correcta;
    }

}