#include #include #include "tcalendario.h" using namespace std; TCalendario::TCalendario(){ dia = 1; mes = 1; anyo = 1900; mensaje = NULL; }; TCalendario::TCalendario(int d, int m, int a, char *mens) { if (a>=1900) { anyo=a; if (m<=12 && m>=1) { mes=m; if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) if (d<=31 && d>=1) dia=d; else if (m == 2) { if (Bisiesto(*this)) { if(d<=29 && d>=1) dia=d; } else { if(d<=28 && d>=1) dia=d; } } else { if (d<=30 && d>=1) dia=d; } } mensaje = new char[strlen(mens)+1]; if(mensaje == NULL) return; strcpy(mensaje, mens); } else { dia, mes, anyo = 1; mensaje == NULL; } }; TCalendario::TCalendario(const TCalendario &cal) { dia = cal.dia; mes = cal.mes; anyo = cal.anyo; mensaje = new char[strlen(cal.mensaje)+1]; if(mensaje == NULL) return; strcpy(mensaje, cal.mensaje); }; TCalencario::~TCalendario() { dia = mes = anyo = 0; mensaje == NULL; }; TCalendario& TCalendario::operator=(TCalendario &cal) { dia = cal.dia; mes = cal.mes; anyo = cal.anyo; if(mensaje != NULL) delete mensaje; if(cal.mensaje == NULL) mensaje==NULL; else mensaje = new char[strlen(cal.mensaje)+1]; if(mensaje == NULL) return *this; strcpy(mensaje, cal.mensaje); } TCalendario TCalendario::operator++(int a) { TCalendario mem(*this); dia++; if(mes==2 && dia >28 && !Bisiesto(*this)) { dia = 1; mes++; } else if ((mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) && dia >31) { dia = 1; mes++; if(mes>12) { mes = 1; anyo++; } } else if(dia >30) { dia=1; mes++; } return mem; } TCalendario& TCalendario::operator++() { dia++; if(mes==2 && dia >28 && !Bisiesto(*this)) { dia = 1; mes++; } else if ((mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) && dia >31) { dia = 1; mes++; if(mes>12) { mes = 1; anyo++; } } else if(dia >30) { dia=1; mes++; } return *this; } TCalendario TCalendario::operator--(int a) { TCalendario mom(*this); dia--; if (dia == 0) { mes--; if(mes == 0) { mes==12; anyo--; } if(mes == 2 && Bisiesto(*this)) dia == 29; else if(mes == 2 && !Bisiesto(*this)) dia == 28; else if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) dia == 31; else dia == 30; } if (anyo<1900) { dia=mes=anyo=1; mensaje == NULL; } return mom; } TCalendario& TCalendario::operator--() { dia--; if (dia == 0) { mes--; if(mes == 0) { mes==12; anyo--; } if(mes == 2 && Bisiesto(*this)) dia == 29; else if(mes == 2 && !Bisiesto(*this)) dia == 28; else if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) dia == 31; else dia == 30; } if (anyo<1900) { dia=mes=anyo=1; mensaje == NULL; } return *this; } TCalendario TCalendario::TCalendario operator+(int dias) { if (dias > 0) { dia = dia + dias; while(dia>28) { dia = dia + dias; if((mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) && dia>31) { mes++; dia = dia - 31; } else if(mes == 2 && Bisiesto(*this) && dia >29) { mes++; dia = dia - 29; } else if(mes == 2 && !Bisiesto(*this) && dia >28) mes++; dia = dia - 28; else if(dia>30) { mes++; dia = dia - 30; } if(mes>12) { anyo++; mes = 1; } } } } TCalendario TCalendario::operator-(int dias) { dia=dia-dias; while(dia<0) { if(mes==2 || mes==4 || mes==6 || mes==9 || mes==11) { mes--; dia = 30 + dia; } else if(mes == 3 && !Bisiesto(*this)) { mes--; dia = 28 - dia; } else if(mes == 3 && Bisiesto(*this)) { mes--; dia = 29 - dia; } else if(mes == 1) { mes = 12; dia = 31 - dia; anyo--; } else { mes--; dia = 31 - dia; } } if(dia=0) { if(mes==2 || mes==4 || mes==6 || mes==9 || mes==11) { mes--; dia = 31; } else if(mes == 3 && !Bisiesto(*this)) { mes--; dia = 28; } else if(mes == 3 && Bisiesto(*this)) { mes--; dia = 29; } else if(mes == 1) { mes = 12; dia = 31; anyo--; } else { mes--; dia = 30; } } if(anyo<1900) { dia = mes = anyo = 1; mensaje = NULL; } } bool TCalendario::operator==(TCalendario &cal) { if(dia == cal.dia && mes == cal.mes && anyo == cal.anyo && !strcmp(mensaje, cal.mensaje)) return true; else return false; } bool TCalendario::operator>(TCalendario &cal) { if(anyo < cal.anyo) return false; else { if(anyo == cal.anyo) { if(mes < cal.mes) return false; else { if(mes == cal.mes) { if(dia < cal.dia) return false; else if(dia == cal.dia) { if (strlen(mensaje)<=(strlen(cal.mensaje))) return false; else return true; } else return true; } else return true; } } else return true; } return true; } bool TCalendario::operator<(TCalendario &cal) { if(anyo > cal.anyo) return false; else { if(anyo == cal.anyo) { if(mes > cal.mes) return false; else { if(mes == cal.mes) { if(dia > cal.dia) return false; else if(dia == cal.dia) { if (strlen(mensaje)>=strlen(cal.mensaje)) return false; else return true; } else return true; } else return true; } } else return true; } return true; } bool TCalendario::ModFecha (int d, int m, int a) { if (a>=1900) { if (m<=12 && m>=1) { mes=m; if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) { if (d<=31 && d>=1) { dia=d; return true; } } else if (m == 2) { if (Bisiesto(*this)) { if(d<=29 && d>=1) { dia=d; return true; } else { if(d<=28 && d>=1) return true; dia=d; } } else { if (d<=30 && d>=1) return true; dia=d; } } else return false; } else return false; } } void TCalendario::ModMensaje(char *mens) { if(mens != NULL) delete mensaje; if(mens == NULL) mensaje==NULL; else mensaje = new char[strlen(mens)+1]; } bool TCalendario::EsFecha() { if(anyo>1900) return true; else { if(dia==1 && mes ==1) return false; else return true; } } bool TCalendario::EsVacio() { if(dia=1 && mes=1 && anyo=1900 && mensaje==NULL) return true; } int TCalendario::Dia() { return dia; } int TCalendario::Mes() { return mes; } int TCalendario::Anyo() { return anyo; } int TCalendario::Dia() { return dia; } char TCalendario::*Mensaje() { return *mensaje; } ostream& operator<<(ostream &, TCalendario &cal) { os << cal.dia << "/" << cal.mes <<"/" << cal.anyo << "\""; if(cal.mensaje =! NULL) os<