Inicio > Informática, Programación > Código fuente de una clase fecha en c++

Código fuente de una clase fecha en c++

Bueno este es mi primera publicación en el blog sobre programación. En esta ocasión publicaré una clase que me es bastante útil en muchos proyectos o prácticas, la clase Fecha.
Como se trata de una librería que utilizo bastante, he creado una librería llamada “Fecha.h” que contiene la especificación de la clase y de las funciones que utilizo en la validación de la fecha.

Fecha.h

#ifndef FECHA_H_INCLUDED
#define FECHA_H_INCLUDED

bool esCorrecta(unsigned int d, unsigned int m, int a);
bool esBisiesto (int a);
class Fecha
{
    public:
        Fecha(unsigned int d, unsigned int m, int a); //Constructor de la clase fecha, recibe como parámetros un día (d), un mes (m) y un año (a).
        unsigned int getDia(); //Nos devuelve el día
        unsigned int getMes(); //Nos devuelve el mes
        int getAnho(); //Nos devuelve el año
        void imprimirFecha(); //Muestra por pantalla la fecha en formato d/m/a
        void cambiarFecha(unsigned int d, unsigned int m, int a); //Cambia la fecha
    private:
        unsigned int dia;
        unsigned int mes;
        int anho; //Años a.d.C.
};

#endif // FECHA_H_INCLUDED

El constructor y métodos de la clase fecha, así como las funciones de validación están implementadas en el archivo “Fecha.cpp”.

Fecha.cpp

#include <iostream>
#include "Fecha.h"

using namespace std;

Fecha::Fecha(unsigned int d, unsigned int m, int a)
{
    dia = d;
    mes = m;
    anho = a;
}
unsigned int Fecha::getDia()
{
    return dia;
}
unsigned int Fecha::getMes()
{
    return mes;
}
int Fecha::getAnho()
{
    return anho;
}
void Fecha::imprimirFecha()
{
    cout<<"\n"<<dia<<"/"<<mes<<"/"<<anho;
}
void Fecha::cambiarFecha(unsigned int d, unsigned int m, int a)
{
    if(esCorrecta(d,m,a))
    {
        dia = d;
        mes = m;
        anho = a;
    }
    else
    {
        cout<<"\nLa fecha introducida es incorrecta. Datos no modificados.";
    }

}
bool esCorrecta(unsigned int d, unsigned int m, int a)
{
    unsigned int arrayDiasMes[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
    if(a==0) return false; //Aporte de susmel en comentarios.
    if(d<=0||d>31) return false;
    if(m<=0||m>12) return false;
    if(m==2 && d>29) return false;
    if(arrayDiasMes[m-1]<d) return false;
    if(m==2 && d==29 && !esBisiesto(a)) return false;
    return true;

}
bool esBisiesto(int a)
{
    if ((a%4==0)||(a%400==0)&&(a%100!=0)) return true;
    else return false;
}

Un ejemplo de la llamada y el uso de la clase Fecha desde el main.cpp, es el siguiente:

main.cpp


#include <iostream>
#include "Fecha.h"

using namespace std;

int main()
{
    unsigned int dia, mes;
    int anho;
    do
    {
        cout<<"\nIntroduzca día de nacimiento: ";
        cin>>dia;
        cout<<"\nIntroduzca día de nacimiento: ";
        cin>>mes;
        cout<<"\nIntroduzca día de nacimiento: ";
        cin>>anho;
    }
    while(!esCorrecta(dia,mes,anho));

    Fecha anhoNacimiento(dia,mes,anho);
    anhoNacimiento.cambiarFecha(10,31,1984); //Intentamos cambiar la fecha a una errónea. Mostrará un mensaje de error.

    cout<<"\nMostrando la fecha por pantalla con el método imprimirFecha(): ";
    anhoNacimiento.imprimirFecha(); //Utilizamos la función imprimir fecha
    cout<<"\nMostrando la fecha por pantalla con los métodos getDia(), getMes() y getAnho(): "<<anhoNacimiento.getDia()<<"/"<<anhoNacimiento.getMes()<<"/"<<anhoNacimiento.getAnho(); //Visualizamos la fecha de otra forma.
    return 0;
}

Bueno pues esta es, más o menos, la clase Fecha que suelo utilizar. Como siempre, se aceptan correcciones o sugerencias.

Anuncios
  1. susmel
    24/03/2010 en 0:43

    Creo que tu clase tiene un error: El año 0 no existe, se pasa directamente de 1 a. de C. a 1 d. de C., y tu función esCorrecta no lo contempla.

    • carlosjaime
      24/03/2010 en 12:16

      Cierto #1, editado 🙂

  2. adriana
    10/08/2010 en 3:11

    hola quisiera que me ayudaran con tres programas me urge porfa son con clases uno es como el triangulo de pascal pero con clases que sea asi 1234… consecutivo el triangulo y otro es de la formula n!/m!-n!(m-n)!porfa urge

  3. 13/08/2010 en 1:26

    estaba buscando informacion sobre este tipo de programas y la verdad esto me ayudo mucho sigan adelante

  4. wolf
    24/02/2011 en 5:46

    lo maximo gracias!

  5. 05/08/2011 en 12:14

    Hola, muchas gracias por compartir tus conocimientos con el mundo, me será de gran utilidad hermano…! Dios le premie en salud para usted y sus seres mas queridos…!

  6. 05/08/2011 en 12:15

    Estoy haciendo la siguiente clase Fecha,

    La escuela de computación debe llevar a cabo un registro de ingreso de sus alumnos al laboratorio de programación por fecha, de tal manera que el estudiante inicialice la fecha de entrada y muestre en pantalla la fecha.
    Define la clase Fecha, de acuerdo con las siguientes especificaciones:
    Atributos:
    • día

    • mes

    • año

    Constructores:
    • que inicialice con una fecha fija que tu definas

    • que reciba como parámetro los valores para inicializar la fecha

    Métodos públicos:
    • que permita modificar el valor de la fecha

    • que muestre en la pantalla la fecha usando el formato día / mes / año

    • que muestre en la pantalla la fecha poniendo el mes con palabras

    • que permita verificar si una fecha es válida; este método debe ser utilizado por el constructor y el método que modifica el

    valor de la fecha, si el usuario trata de inicializar con una fecha inválida se inicializará con el valor fijo que tu hayas definido.

    Realiza después una aplicación para probar tu clase, debe al menos crear 2 objetos de tipo Fecha, utilizando cada uno de los constructores y después mostrar las fechas correspondientes en la pantalla, además utilice los destructores para cada método.

    Hasta pronto…!

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: