NOTA: não me responsabilizo por qualquer bug presente nos seguintes excertos de código.
Criei uma classe Data para representar datas (dias, mes, ano). Depois, criei também duas funções que em conjunto verificam se uma data é válida. Quando fiz isto era menos experiente do que sou agora, portanto é natural que algumas coisas pudessem ser melhoradas.
Primeiro criei a classe Data
Data.h
Data.cpp
Função que verifica se um determinado ano é bissexto.
Função que verifica se uma determinada data é válida (verifica meses com 28, 29, 30 e 31 dias e anos bissextos).
Cumprimentos
Criei uma classe Data para representar datas (dias, mes, ano). Depois, criei também duas funções que em conjunto verificam se uma data é válida. Quando fiz isto era menos experiente do que sou agora, portanto é natural que algumas coisas pudessem ser melhoradas.
Primeiro criei a classe Data
Data.h
Código:
#ifndef DATA_H_
#define DATA_H_
class Data
{
unsigned int dia; //dia de uma Data
unsigned int mes; //mes de uma Data
unsigned int ano; //ano de uma Data
public:
Data(unsigned int, unsigned int, unsigned int);
void setDia(unsigned int);
unsigned int getDia() const;
void setMes(unsigned int);
unsigned int getMes() const;
void setAno(unsigned int);
unsigned int getAno() const;
void mostraData() const;
};
#endif /*DATA_H_*/
Código:
#include "Data.h"
#include <iostream>
using namespace std;
//construtor da classe Data
Data::Data(unsigned int d, unsigned int m, unsigned int a)
{
setDia(d);
setMes(m);
setAno(a);
}
void Data::setDia(unsigned int d)
{
dia = d;
}
unsigned int Data::getDia() const
{
return dia;
}
void Data::setMes(unsigned int m)
{
mes = m;
}
unsigned int Data::getMes() const
{
return mes;
}
void Data::setAno(unsigned int a)
{
ano = a;
}
unsigned int Data::getAno() const
{
return ano;
}
void Data::mostraData() const
{
cout << " " << dia << " / " << mes << " / " << ano << endl;
}
Código:
//verifica se um ano é bissexto. Retorna true se for bissexto, false se não for
bool anoBissexto(Data data)
{
bool bi = false;
if (data.getAno() % 400 == 0 || data.getAno() % 4 == 0 && data.getAno() % 100 != 0)
bi = true;
return bi;
}
Código:
bool dataValida(Data data)
{
bool dValida = false;
//ano tem de ser maior que 0
if (data.getAno() > 0)
{
if (data.getMes() > 0 && data.getMes() <= 12)
{
if (data.getMes() == 1 || data.getMes() == 3 || data.getMes() == 5 || data.getMes() == 7 || data.getMes() == 8 || data.getMes() == 10 || data.getMes() == 12)
{
if (data.getDia() > 0 && data.getDia() <= 31)
dValida = true;
}
else if (data.getMes() == 4 || data.getMes() == 6 || data.getMes() == 9 || data.getMes() == 11)
{
if (data.getDia() > 0 && data.getDia() <= 30)
dValida = true;
}
else if (data.getMes() == 2)
{
if (anoBissexto(data) == false)
{
if (data.getDia() > 0 && data.getDia() <= 28)
dValida = true;
}
//se o ano for bissexto, o mes de Fevereiro pode ter 29 dias
else if (anoBissexto(data) == true)
{
if (data.getDia() > 0 && data.getDia() <= 29)
dValida = true;
}
}
}
}
return dValida;
}