Calcular la edad a partir de dos fechas


 - Nos entran dos fechas en el formato día (1 a 31), mes (1 a 12) y año (entero de 4 dígitos), correspondientes a la fecha de cumpleaños y la fecha actual respectivamente. Escribir un programa que calcule y visualice la edad real en años de el individuo. Si es la fecha de un bebé, debemos dar en meses reales.

  1.  
  2.  
  3.  
  4.    import cs1.*;
  5.    import java.util.Date;
  6.    import java.text.SimpleDateFormat;
  7.    import java.text.DateFormat;
  8.                
  9.    public class ejerc14
  10.    {
  11.       public static void main (String[] args)
  12.       {
  13.       //Variables
  14.          String cadenafecha = "0", fecha1, fecha2, numeros = "0123456789";
  15.          int longfecha = 0, longfecha2 = 0, dia1, mes1, any1, dia2 = 0, mes2 = 0, mes3 = 0, any2 = 0, calc, calc2, calc3, sel, any3 = 0;
  16.          char d1, d2, b1, b2, m1, m2, a1, a2, a3, a4, d1b, d2b, b1b, b2b, m1b, m2b, a1b, a2b, a3b, a4b, a1c, a2c, a3c, a4c, m1c, m2c;
  17.          boolean error1, error2, error3;
  18.        
  19.       //Seleci—n de opci—n
  20.          System.out.println( "Selecciona la opci—n m‡s adecuada: ");
  21.          System.out.println( " 1 - Entra la fecha actual " + "\n 2 - Coge la fecha del sistema ");
  22.          sel = Keyboard.readInt();
  23.      
  24.       //Introduci—n de datos
  25.          System.out.println( "Introduce la fecha de nacimiento con formato dd/mm/aaaa: ");
  26.          fecha1 = Keyboard.readString();
  27.        
  28.       //Seleci—n de opci—n
  29.                
  30.                                 if (sel == 1) {
  31.        
  32.             System.out.println( "Introduce la fecha actual con el mismo formato: ");
  33.             fecha2 = Keyboard.readString();
  34.        
  35.             longfecha2 = fecha2.length();
  36.        
  37.             if (longfecha2 != 10)
  38.             {
  39.                System.out.print("La fecha introducida no tiene la longitud 10.");
  40.             }
  41.             else
  42.             {
  43.                b1b = fecha2.charAt(2); //Posici—n de caracteres
  44.                b2b = fecha2.charAt(5);
  45.            
  46.                if ((b1b != '/') || (b2b != '/'))
  47.                {
  48.                   System.out.print("La fecha no tiene un formato dd/mm/aaaa");
  49.                }
  50.                else
  51.                {
  52.                   d1b = fecha2.charAt(0);
  53.                   d2b = fecha2.charAt(1);
  54.                   b1b = fecha2.charAt(2);
  55.                   m1b = fecha2.charAt(3);
  56.                   m2b = fecha2.charAt(4);
  57.                   a1b = fecha2.charAt(6);
  58.                   a2b = fecha2.charAt(7);
  59.                   a3b = fecha2.charAt(8);
  60.                   a4b = fecha2.charAt(9);
  61.                                                
  62.              
  63.                   error2 = ((numeros.indexOf(d1b) < 0) || (numeros.indexOf(d2b) < 0) ||
  64.                         (numeros.indexOf(m1b) < 0) || (numeros.indexOf(m2b) < 0) ||
  65.                         (numeros.indexOf(a1b) < 0) || (numeros.indexOf(a2b) < 0) ||
  66.                         (numeros.indexOf(a3b) < 0) || (numeros.indexOf(a4b) < 0));
  67.                                
  68.                   if (error2)                  
  69.                      System.out.print("Error! Alguna fecha no es v‡lida");
  70.                  
  71.                   else
  72.                   {
  73.                      dia2 = Integer.valueOf(fecha2.substring(0,2)).intValue();
  74.                      mes2 = Integer.valueOf(fecha2.substring(3,5)).intValue();
  75.                      any2 = Integer.valueOf(fecha2.substring(6)).intValue();
  76.                  
  77.                   }
  78.                }
  79.             }
  80.          }
  81.          if (sel == 2) {
  82.             Date fecha3 = new Date();
  83.             SimpleDateFormat format1 = new SimpleDateFormat ("dd/MM/yyyy");
  84.             cadenafecha = format1.format(fecha3);
  85.        
  86.        
  87.        
  88.             mes3 = Integer.valueOf(cadenafecha.substring(3,5)).intValue();
  89.             any3 = Integer.valueOf(cadenafecha.substring(6)).intValue();
  90.        
  91.          }     
  92.                                                        
  93.          longfecha = fecha1.length();
  94.        
  95.        
  96.          if (longfecha != 10)
  97.          {
  98.             System.out.print(" Una fecha no tiene longitud 10.");
  99.          }
  100.          else
  101.          {
  102.             b1 = fecha1.charAt(2); //Caracteres de separaci—n
  103.             b2 = fecha1.charAt(5);
  104.                
  105.             if ((b1 != '/') || (b2 != '/'))
  106.             {
  107.                System.out.print("Alguna fecha no tiene un formato dd/mm/aaaa");
  108.             }
  109.             else
  110.             {
  111.                d1 = fecha1.charAt(0);
  112.                d2 = fecha1.charAt(1);
  113.                b1 = fecha1.charAt(2);        
  114.                m1 = fecha1.charAt(3);
  115.                m2 = fecha1.charAt(4);
  116.                a1 = fecha1.charAt(6);
  117.                a2 = fecha1.charAt(7);
  118.                a3 = fecha1.charAt(8);
  119.                a4 = fecha1.charAt(9);
  120.                error1 = ((numeros.indexOf(d1) < 0) || (numeros.indexOf(d2) < 0) ||
  121.                                 (numeros.indexOf(m1) < 0) || (numeros.indexOf(m2) < 0) ||
  122.                            (numeros.indexOf(a1) < 0) || (numeros.indexOf(a2) < 0) ||
  123.                            (numeros.indexOf(a3) < 0) || (numeros.indexOf(a4) < 0));
  124.                
  125.                
  126.                                                                        
  127.                if (error1)                     
  128.                   System.out.print("Error! Alguna fecha no es v‡lida");
  129.              
  130.                else
  131.                {
  132.                   dia1 = Integer.valueOf(fecha1.substring(0,2)).intValue();
  133.                   mes1 = Integer.valueOf(fecha1.substring(3,5)).intValue();          
  134.                   any1 = Integer.valueOf(fecha1.substring(6)).intValue();
  135.                
  136.                   if ((sel == 2 & (dia1 <= 31 & mes1 <= 12)) | (sel == 1 & (dia2 <= 31 & mes2 <= 12 & dia1 <= 31 &mes1 <= 12))) {
  137.                      System.out.println( "La fecha de nacimiento es: " + dia1 + "/" + mes1 + "/" + any1 );
  138.                      if (sel == 1) {
  139.                         System.out.println( "La fecha acutal es: " + dia2 + "/" + mes2 + "/" + any2 );
  140.                      }
  141.                      if (sel == 2){
  142.                         System.out.println( "La fecha actual es: " + cadenafecha );
  143.                      }
  144.                  
  145.                      if (sel == 1){
  146.                         if ((any2 - any1) > 0) {
  147.                            calc = any2 - any1;
  148.                            System.out.println( "La edad calculada es de: " + calc + " a–o/s");
  149.                         }
  150.                         else  {
  151.                            if ((any2 - any1) == 0) {
  152.                               calc2 = mes2 - mes1;
  153.                               System.out.println( "La edad calculada es de: " + calc2 + " mes/es");
  154.                            }
  155.                          
  156.                            else {
  157.                               System.out.println( "La fecha de nacimiento corresponde al futuro" );
  158.                            }
  159.                         }      
  160.                      }
  161.                      if (sel == 2){
  162.                         if ((any3 - any1) > 0) {
  163.                            calc = any3 - any1;
  164.                            System.out.println( "La edad calculada es de: " + calc + " a–o/s");
  165.                         }
  166.                         else  {
  167.                            if ((any3 - any1) == 0) {
  168.                               calc3 = mes3 - mes1;
  169.                               System.out.println( "La edad calculada es de: " + calc3 + " mes/es");
  170.                            }
  171.                          
  172.                            else {
  173.                               System.out.println( "La fecha de nacimiento corresponde al futuro" );
  174.                            }
  175.                         }      
  176.                      }
  177.                   }                            
  178.                   else {
  179.                      System.out.println( "Alguna fecha introducida no se pasa de dia o mes" );
  180.                   }
  181.                }
  182.              
  183.             }      
  184.              
  185.                
  186.          }
  187.            
  188.        
  189.        
  190.       }
  191.    
  192.    }

No hay comentarios:

Publicar un comentario