Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Validar fecha C++

Estas en el tema de Validar fecha C++ en el foro de C/C++ en Foros del Web. Tengo este código para validar fechas: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include <iostream> #include <stdio.h> #include <stdlib.h>   using namespace std ;   class ...
  #1 (permalink)  
Antiguo 28/11/2013, 14:40
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Validar fecha C++

Tengo este código para validar fechas:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7. class MiFecha
  8. {
  9. private:
  10.     int dia;
  11.     int mes;
  12.     int anio;
  13.     bool verificaDia(int d)
  14.     {
  15.         if (d>0)
  16.         {
  17.             return true;
  18.         }
  19.         else
  20.         {
  21.             return false;
  22.         }
  23.     }
  24.     bool verificaMes(int m)
  25.     {
  26.         if (m>0)
  27.         {
  28.             return true;
  29.         }
  30.         else
  31.         {
  32.             return false;
  33.         }
  34.     }
  35.     bool verificaAnio(int a)
  36.     {
  37.         if (a>0)
  38.         {
  39.             return true;
  40.         }
  41.         else
  42.         {
  43.             return false;
  44.         }
  45.     }
  46. public:
  47.     MiFecha()
  48.     {
  49.         dia=1;
  50.         mes=1;
  51.         anio=2000;
  52.     }
  53.     int dameDia()
  54.     {
  55.         return dia;
  56.     }
  57.     int dameMes()
  58.     {
  59.         return mes;
  60.     }
  61.     int dameAnio()
  62.     {
  63.         return anio;
  64.     }
  65.     bool fijaDia(int d)
  66.     {
  67.         if (verificaDia(d))
  68.         {
  69.             dia=d;
  70.             return true;
  71.         }
  72.         else
  73.         {
  74.             return false;
  75.         }
  76.     }
  77.     bool fijaMes(int m)
  78.     {
  79.         if (verificaMes(m))
  80.         {
  81.             mes=m;
  82.             return true;
  83.         }
  84.         else
  85.         {
  86.             return false;
  87.         }
  88.     }
  89.     bool fijaAnio(int a)
  90.     {
  91.         if (verificaAnio(a))
  92.         {
  93.             anio=a;
  94.             return true;
  95.         }
  96.         else
  97.         {
  98.             return false;
  99.         }
  100.     }
  101. };
  102.  
  103. int main()
  104. {
  105.     MiFecha fecha;
  106.     int dia,mes,anio,i;
  107.     i=0;
  108.     do
  109.     {
  110.         system(LIMPIAR);
  111.         i++;
  112.         cout << "Verificador de fecha\n"<< endl;
  113.         cout << "Dia=  " << fecha.dameDia() << endl;
  114.         cout << "Mes=  " << fecha.dameMes() << endl;
  115.         cout << "Anio= " << fecha.dameAnio() << endl;
  116.         cout << "\nDame el dia: ";
  117.         cin >> dia;
  118.         cout << "Dame el mes: ";
  119.         cin >> mes;
  120.         cout << "Dame el anio: ";
  121.         cin >> anio;
  122.         if (fecha.fijaDia(dia) && fecha.fijaMes(mes) && fecha.fijaAnio(anio))
  123.         {
  124.             cout << "\nFecha Valida!" << endl;
  125.         }
  126.         else
  127.         {
  128.             cout << "\nFecha no valida" << endl;
  129.         }
  130.         getchar();
  131.     printf("\nPresione entrar para continuar...");
  132.     getchar();
  133.     }
  134.     while(i<100);
  135.     return 0;
  136. }

La idea del código es que cuando se ponga una fecha no válida, en este caso cualquier dia, mes o año menor que 0, los datos que ya están registrados se queden sin cambiar.
Pero el problema que tengo es que sólo funciona cuando el día es incorrecto, ya que si el mes o año es incorrecto, no se cambian ellos, pero el resto de datos sí.

¿Alguien sabe cómo hacerle para que se pueda validar de forma correcta?
  #2 (permalink)  
Antiguo 28/11/2013, 16:15
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Validar fecha C++

El problema esta en el systen ( "cls" ) linea 28 de mi código
En el tuyo eso que pone "LIMPIAR"

Código C++:
Ver original
  1. #include <iostream>
  2.     #include <stdio.h>
  3.     #include <stdlib.h>
  4.     using namespace std;
  5.      
  6.     class MiFecha{
  7.         private:
  8.         int dia;
  9.         int mes;
  10.         int anio;
  11.         bool verificaDia(int d){ if (d>0) return true; else return false; }
  12.         bool verificaMes(int m){ if (m>0) return true; else return false; }
  13.         bool verificaAnio(int a){ if (a>0) return true; else return false; }
  14.     public:
  15.         MiFecha(){dia=1; mes=1; anio=2000;}
  16.         int dameDia(){ return dia; }
  17.         int dameMes(){ return mes; }
  18.         int dameAnio(){ return anio; }
  19.         bool fijaDia(int d){ if (verificaDia(d)) { dia=d; return true; } else return false; }
  20.         bool fijaMes(int m){ if (verificaMes(m)) { mes=m; return true; } else return false; }
  21.         bool fijaAnio(int a){ if (verificaAnio(a)) { anio=a; return true; } else return false;}
  22.     };
  23.      
  24.     int main(){
  25.         MiFecha fecha;
  26.         int dia,mes,anio,i=0;
  27.         do {
  28.             //system( "cls" );
  29.             i++;
  30.             cout << "Verificador de fecha\n"<< endl;
  31.             cout << "Dia=  " << fecha.dameDia() << endl;
  32.             cout << "Mes=  " << fecha.dameMes() << endl;
  33.             cout << "Anio= " << fecha.dameAnio() << endl;
  34.             cout << "\nDame el dia: ";
  35.             cin >> dia;
  36.             cout << "Dame el mes: ";
  37.             cin >> mes;
  38.             cout << "Dame el anio: ";
  39.             cin >> anio;
  40.             if (fecha.fijaDia(dia) && fecha.fijaMes(mes) && fecha.fijaAnio(anio)){
  41.                 cout << "\nFecha Valida!" << endl;
  42.             }
  43.             else{
  44.                 cout << "\nFecha no valida" << endl;
  45.             }
  46.             getchar();
  47.             printf("\nPresione entrar para continuar...");
  48.             getchar();
  49.         }
  50.         while(i<100);
  51.         return 0;
  52.     }
Quitarla seria una XDD
¿Que estas usando??Linux??
con el system ( "cls" ); en win me esta funcionando bien con devc++ orwell

Última edición por vangodp; 28/11/2013 a las 16:32
  #3 (permalink)  
Antiguo 28/11/2013, 18:43
 
Fecha de Ingreso: septiembre-2013
Mensajes: 8
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Validar fecha C++

Gracias, pero ese no es el problema.
Es que tengo como constructor esto:

Dia = 1
Mes = 1
Año = 2000

Si introduzco un día negativo, por ejemplo:

Dia = -6
Mes = 5
Año = 1995

Lo que aparece en pantalla sigue igual:

Dia = 1
Mes = 1
Año = 2000

Pero si pongo un mes negativo:

Dia = 15
Mes = -4
Año = 2005

El mes no se cambia, pero el día si:

Dia = 15
Mes = 1
Año = 2000

Al igual que si lo hago con un número negativo en año, el año no se cambia pero el mes y el día sí:

Dia = 4
Mes = 7
Año = -5

Los datos aparecerían así:

Dia = 4
Mes = 7
Año = 2000

¿No saben como solucionarlo?
  #4 (permalink)  
Antiguo 28/11/2013, 20:47
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Validar fecha C++

Es que no te entiendo que es lo que quieres :/
Di claramente que es lo que quieres.
¿Que es lo que quieres y que es lo que no quieres que haga tu programa?
A lo mejor soy yo que soy así de tonto XD
Pero no se, cuando la pregunta es concreta no se tarda en contestar.
  #5 (permalink)  
Antiguo 28/11/2013, 20:50
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Validar fecha C++

a ver si lo advino...
lo que quieres es seguir validando ejemplo:
supongamos que voy a poner la fecha
24/12/2013
Quieres seguir introduciendo datos aun que te equivoques un numero...
pongo
dia24
mes99
anyo2013
??
No se si es eso jaja
  #6 (permalink)  
Antiguo 28/11/2013, 21:01
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Validar fecha C++

primero que para validar fecha, una forma seria algo asi:

Código C++:
Ver original
  1. if ( dia>0 && dia<=31)
  2.    fecha.setday(dia);
  3. if (mes>0 && mes<=12)
  4.    fecha.setmes(mes);
  5. if (anyo>2000 && <= 2100)//100 años ya no estamos aqui ni tu ni yo XD
  6.    fecha.setanyo(anyo);
  7. //Esta seria una correcta de validar.
  8. //para obtener los datos seria:
  9. cout << fecha.getdia() << " " << fecha.getmes() << " " << fecha.getanyo();

si metes eso en un bucle que compruebe si dia es ok, mes ok y anyo ok, algo como:
Código C++:
Ver original
  1. do
  2. cin >> dia >> mes >> anyo;
  3. if ( dia>0 && dia<=31)
  4. fecha.setday(dia);
  5. if (mes>0 && mes<=12)
  6. fecha.setmes(mes);
  7. if (anyo>2000 && <= 2100)//100 años ya no estamos aqui ni tu ni yo XD
  8. fecha.setanyo(anyo);
  9. //Esta seria una correcta de validar.
  10. //para obtener los datos seria:
  11. cout << fecha.getdia() << " " << fecha.getmes() << " " << fecha.getanyo();
  12.  
  13. // Repite una y otra vez mientras una de las condiciones sea falsa
  14. // Pero si que guarda cualquier opcion valida que introduscas.
  15. while ( dia == diafalso || mes == mesfalso || anyo == nyofalso)
otra cosa seria sufrir
Es una base que a lo mejor te puede servir.
Para implementar esta idea seria modificando algo tu classe

Última edición por vangodp; 28/11/2013 a las 21:22

Etiquetas: fecha, funcion, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:11.