Miquel, un amigo nuestro que tiene una empresa de manufacturación de productos , se ha enterado de que hemos hecho un programa de cálculo de edades para bebés, y ahora nos propone lo siguiente:
Él necesita sacar un listado de los años , meses y días que lleva en activo cada trabajador de su empresa , de cara a pasar los datos a Hacienda .
Para hacerlo , hemos tenido que preguntarle qué diseño quería para tener una idea de los datos que deberemos tratar y nos ha dicho que quiere un formato como el siguiente :
Longevidad de los Trabajadores .
Nombre Sección Fecha Alta Vida laboral
Pedro Administrador 14/ 04 /1982 22 años 6 meses y 20 días
Anna Contable 30/ 06 /1998 6 años 4 meses y 4 días
Miguel Ángel Director 25/10/ 2002 2 años 0 meses y 9 días
CUENTA ! El ejemplo expuesto supone que estamos a 3 de Noviembre de 2004 .
Por tanto , habrá que realizar un programa que nos permita introducir los datos necesarios para poder realizar los cálculos pertinentes para visualizar la tabla anterior . Si los datos están mal introducidos, el programa deberá avisar .
NOTAS
Nota: Un año es bisiesto si es múltiplo de 4 . El múltiplos de 100 no lo son , excepto aquellos que lo son de 400 .
- import cs1.Keyboard;
- import java.util.Date;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- public class practica7
- {
- public static void main (String[] args)
- {
- //Variables
- String fecha_alt, fecha_alt2, fecha_alt3, nom, nom2, nom3, seccio, seccio2, seccio3, fechasistema, sel, sel2, fechaintroducida = "0";
- int anys, mesos, dies = 0, any_act, mes_act, dia_act, any_int = 0, mes_int = 0, dia_int = 0, numDies = 0, anys2, mesos2, dies2 = 0, any_int2 = 0, mes_int2 = 0, dia_int2 = 0, numDies2 = 0, anys3, mesos3, dies3 = 0, any_int3 = 0, mes_int3 = 0, dia_int3 = 0, numDies3 = 0, numDiesA = 0, longfecha, longfecha2, longfecha3;
- char b1, b2, b1b, b2b, b1c, b2c;
- boolean errors = false, errors2 = false, errors3 = false, errors4 = false;
- //Introducció de dades
- System.out.println( "Escoge la opcion adecuada: " );
- System.out.println( " 1 - Fecha del sistema" );
- System.out.println( " 2 - Introduce la fecha final" );
- sel2 = Keyboard.readString();
- if (sel2.equals("2")){
- System.out.println( "Introduce la fecha final" );
- fechaintroducida = Keyboard.readString();
- }
- System.out.println( "Introduce tu nombre: " );
- nom = Keyboard.readString();
- System.out.println( "Introduce tu seccion: " );
- seccio = Keyboard.readString();
- System.out.println( "Introduce la fecha de alta con este formato (dd/mm/aaaa): " );
- fecha_alt = Keyboard.readString();
- System.out.println( "Introduce el segundo nombre: " );
- nom2 = Keyboard.readString();
- System.out.println( "Introduce su seccin; " );
- seccio2 = Keyboard.readString();
- System.out.println( "Introduce la fecha de alta con este formato (dd/mm/aaaa): " );
- fecha_alt2 = Keyboard.readString();
- System.out.println( "Introduce su nombre: " );
- nom3 = Keyboard.readString();
- System.out.println( "Introduce su seccion " );
- seccio3 = Keyboard.readString();
- System.out.println( "Introduce la fecha de alta con este formato (dd/mm/aaaa): " );
- fecha_alt3 = Keyboard.readString();
- System.out.println( "Escoge la opcion mas adecuada: ");
- System.out.println( " 1 - Contar a partir del dia siguiente" );
- System.out.println( " 2 - Contar con el dia de hoy inclusive" );
- sel = Keyboard.readString();
- if (!sel2.equals("1") && !sel2.equals("2")){
- System.out.println( "Has de seleccionar una de las dos opciones" );
- }
- else {
- if (!sel.equals("1") && !sel.equals("2")){
- System.out.println( "Has de seleccionar una de las dos opciones" );
- }
- else {
- //Convertir a cadena la fecha del sistema
- Date fechasis = new Date();
- SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy");
- fechasistema = format1.format(fechasis);
- if (sel2.equals("2")){
- fechasistema = fechaintroducida;
- }
- try {
- // Convertir a integer la fecha actual
- dia_act = Integer.valueOf(fechasistema.substring(0,2)).intValue();
- mes_act = Integer.valueOf(fechasistema.substring(3,5)).intValue();
- any_act = Integer.valueOf(fechasistema.substring(6)).intValue();
- //Determinar la longitud d la fecha
- longfecha = fecha_alt.length();
- longfecha2 = fecha_alt2.length();
- longfecha3 = fecha_alt3.length();
- //Decidint si la fecha té el format correcte
- if (longfecha != 10) {
- System.out.println( "La longitud de la fecha no es correcta" );
- }
- else {
- //Definimos el formato de la fecha de alta
- b1 = fecha_alt.charAt(2);
- b2 = fecha_alt.charAt(5);
- if ((b1 != '/') || (b2 != '/')){
- System.out.println( "La fecha no tiene un formato dd/mm/aaaa" );
- }
- else {
- if (longfecha2 != 10){
- System.out.println( "La longitud de la fecha 2 no es correcta" );
- }
- else {
- b1b = fecha_alt2.charAt(2);
- b2b = fecha_alt2.charAt(5);
- if ((b1b != '/') || (b2b != '/')){
- System.out.println( "La fecha 2 no tiene un formato dd/mm/aaaa" );
- }
- else {
- if (longfecha3 != 10){
- System.out.println( "La longitud de la fecha 3 no es correcta" );
- }
- else {
- b1c = fecha_alt3.charAt(2);
- b2c = fecha_alt3.charAt(5);
- if ((b1c != '/') || (b2c != '/')){
- System.out.println( "La fecha 3 no tiene un formato dd/mm/aaaa" );
- }
- else {
- try {
- // Convertir a integer los datos introducidos
- dia_int = Integer.valueOf(fecha_alt.substring(0,2)).intValue();
- mes_int = Integer.valueOf(fecha_alt.substring(3,5)).intValue();
- any_int = Integer.valueOf(fecha_alt.substring(6)).intValue();
- dia_int2 = Integer.valueOf(fecha_alt2.substring(0,2)).intValue();
- mes_int2 = Integer.valueOf(fecha_alt2.substring(3,5)).intValue();
- any_int2 = Integer.valueOf(fecha_alt2.substring(6)).intValue();
- dia_int3 = Integer.valueOf(fecha_alt3.substring(0,2)).intValue();
- mes_int3 = Integer.valueOf(fecha_alt3.substring(3,5)).intValue();
- any_int3 = Integer.valueOf(fecha_alt3.substring(6)).intValue();
- if (any_act < 0) {
- System.out.println( "el año final no puede ser negativo" );
- }
- else{
- if (any_int < 0){
- System.out.println( "el año no puede ser negativo" );
- }
- else {
- if (any_int2 < 0){
- System.out.println( "el año 2 no puede ser negativo" );
- }
- else {
- if (any_int3 < 0){
- System.out.println( "el año 3 no puede ser negativo" );
- }
- else {
- if ((dia_int > dia_act) && (mes_int >= mes_act) && (any_int >=any_act) || ((dia_int <= dia_act) && (mes_int > mes_act) && (any_int >= any_act) || (any_int > any_act))){
- System.out.println( "La fecha introducida pertenece al futuro" );
- }
- else {
- if ((dia_int2 > dia_act) && (mes_int2 >= mes_act) &&(any_int2 >= any_act) || ((dia_int2 <= dia_act) && (mes_int2 > mes_act) && (any_int2 >= any_act) || (any_int2 >any_act))){
- System.out.println( "La fecha 2 introducida pertenece al futuro" );
- }
- else {
- if ((dia_int3 > dia_act) && (mes_int3 >= mes_act) &&(any_int3 >= any_act) || ((dia_int3 <= dia_act) && (mes_int3 > mes_act) && (any_int3 >= any_act) || (any_int3 >any_act))){
- System.out.println( "La fecha 3 introducida pertenece al futuro" );
- }
- else {
- //Calculo de los años de traspaso
- if ( ((any_int % 4 == 0) && !(any_int % 100 == 0)) ||(any_int % 400 == 0) )
- numDies = 29;
- else
- numDies = 28;
- if ( ((any_int2 % 4 == 0) && !(any_int2 % 100 == 0))|| (any_int2 % 400 == 0) )
- numDies2 = 29;
- else
- numDies2 = 28;
- if ( ((any_int3 % 4 == 0) && !(any_int3 % 100 == 0))|| (any_int3 % 400 == 0) )
- numDies3 = 29;
- else
- numDies3 = 28;
- if (sel2.equals("2")){
- if ( ((any_act % 4 == 0) && !(any_act % 100 == 0))|| (any_act % 400 == 0) )
- numDiesA = 29;
- else
- numDiesA = 28;
- }
- //Definimos las condiciones
- switch (mes_int) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- if (dia_int > 31 || dia_int < 1) {
- System.out.println( "El dia introducido no es valido" );
- errors = true;
- }
- break;
- case 2:
- if (dia_int > numDies || dia_int < 1) {
- System.out.println( "El dia introducido no es valido" );
- errors = true;
- }
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- if (dia_int > 30 || dia_int < 1) {
- System.out.println( "El dia introducido no es valido" );
- errors = true;
- }
- break;
- default:
- System.out.println( "El mes introducido es incorrecto" );
- errors = true;
- break;
- }
- switch (mes_int2) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- if (dia_int2 > 31 || dia_int2 < 1) {
- System.out.println( "El segundo dia introducido no es valido" );
- errors2 = true;
- }
- break;
- case 2:
- if (dia_int2 > numDies2 || dia_int2 < 1) {
- System.out.println( "El segundo dia introducido no es valido" );
- errors2 = true;
- }
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- if (dia_int2 > 30 || dia_int2 < 1) {
- System.out.println( "El segundo dia introducido no es valido" );
- errors2 = true;
- }
- break;
- default:
- System.out.println( "El segundo mes introducido es incorrecto" );
- errors2 = true;
- break;
- }
- switch (mes_int3) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- if (dia_int3 > 31 || dia_int3 < 1) {
- System.out.println( "El tercer dia introducido no es valido" );
- errors3 = true;
- }
- break;
- case 2:
- if (dia_int3 > numDies3 || dia_int3 < 1) {
- System.out.println( "El tercer dia introducido no es valido" );
- errors3 = true;
- }
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- if (dia_int3 > 30 || dia_int3 < 1) {
- System.out.println( "El tercer dia introducido no es valido" );
- errors3 = true;
- }
- break;
- default:
- System.out.println( "El tercer mes introducido es incorrecto" );
- errors3 = true;
- break;
- }
- if (sel2.equals("2")){
- //Definimos las condiciones
- switch (mes_act) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- if (dia_act > 31 || dia_act < 1) {
- System.out.println( "El dia final introducido no es valido" );
- errors4 = true;
- }
- break;
- case 2:
- if (dia_act > numDiesA || dia_act < 1) {
- System.out.println( "El dia final introducido no es valido" );
- errors4 = true;
- }
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- if (dia_act > 30 || dia_act < 1) {
- System.out.println( "El dia final introducido no es valido" );
- errors4 = true;
- }
- break;
- default:
- System.out.println( "El mes final introducido es incorrecto" );
- errors4 = true;
- break;
- }
- }
- //Condiciones de errores
- if (errors == false && errors2 == false && errors3 ==false && errors4 == false) {
- //Operaciones de la primera fecha
- anys = any_act - any_int;
- mesos = mes_act - mes_int;
- if ( (dia_act - dia_int) < 0 ) {
- switch (mes_int) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- dies = (dia_act + 31) - dia_int;
- mesos = mesos - 1;
- break;
- case 2:
- dies = (dia_act + numDies) - dia_int;
- mesos = mesos - 1;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- dies = (dia_act + 30) - dia_int;
- mesos = mesos - 1 ;
- break;
- }
- }
- else {
- dies = dia_act - dia_int;
- }
- if ((mes_act - mes_int) < 0){
- mesos = (mes_act + 12) - mes_int;
- if ( (dia_act - dia_int) < 0 ) {
- switch (mes_int) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- dies = (dia_act + 31) - dia_int;
- mesos = mesos - 1;
- break;
- case 2:
- dies = (dia_act + numDies) - dia_int;
- mesos = mesos - 1;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- dies = (dia_act + 30) - dia_int;
- mesos = mesos - 1 ;
- break;
- }
- }
- else {
- dies = dia_act - dia_int;
- }
- anys = anys - 1;
- }
- //Operacions de la segunda fecha
- anys2 = any_act - any_int2;
- mesos2 = mes_act - mes_int2;
- if ( (dia_act - dia_int2) < 0 ) {
- switch (mes_int2) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- dies2 = (dia_act + 31) - dia_int2;
- mesos2 = mesos2 - 1;
- break;
- case 2:
- dies2 = (dia_act + numDies2) - dia_int2;
- mesos2 = mesos2 - 1;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- dies2 = (dia_act + 30) - dia_int2;
- mesos2 = mesos2 - 1 ;
- break;
- }
- }
- else {
- dies2 = dia_act - dia_int2;
- }
- if ((mes_act - mes_int2) < 0){
- mesos2 = (mes_act + 12) - mes_int2;
- if ( (dia_act - dia_int2) < 0 ) {
- switch (mes_int2) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- dies2 = (dia_act + 31) - dia_int2;
- mesos2 = mesos2 - 1;
- break;
- case 2:
- dies2 = (dia_act + numDies2) -dia_int2;
- mesos2 = mesos2 - 1;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- dies2 = (dia_act + 30) - dia_int2;
- mesos2 = mesos2 - 1 ;
- break;
- }
- }
- else {
- dies2 = dia_act - dia_int2;
- }
- anys2 = anys2 - 1;
- }
- //Operacions de la tercera fecha
- anys3 = any_act - any_int3;
- mesos3 = mes_act - mes_int3;
- if ( (dia_act - dia_int3) < 0 ) {
- switch (mes_int3) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- dies3 = (dia_act + 31) - dia_int3;
- mesos3 = mesos3 - 1;
- break;
- case 2:
- dies3 = (dia_act + numDies3) - dia_int3;
- mesos3 = mesos3 - 1;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- dies3 = (dia_act + 30) - dia_int3;
- mesos3 = mesos3 - 1 ;
- break;
- }
- }
- else {
- dies3 = dia_act - dia_int3;
- }
- if ((mes_act - mes_int3) < 0){
- mesos3 = (mes_act + 12) - mes_int3;
- if ( (dia_act - dia_int3) < 0 ) {
- switch (mes_int3) {
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- dies3 = (dia_act + 31) - dia_int3;
- mesos3 = mesos3 - 1;
- break;
- case 2:
- dies3 = (dia_act + numDies3) -dia_int3;
- mesos3 = mesos3 - 1;
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- dies3 = (dia_act + 30) - dia_int3;
- mesos3 = mesos3 - 1 ;
- break;
- }
- }
- else {
- dies3 = dia_act - dia_int3;
- }
- anys3 = anys3 - 1;
- }
- if (sel.equals("2")){
- dies = dies + 1;
- dies2 = dies2 + 1;
- dies3 = dies3 + 1;
- }
- System.out.println( "Nombre" + " " +"Seccion" + " " + " Fecha de alta" + " " + "Vida laboral" );
- System.out.println( nom + " " + seccio + " " + fecha_alt + " " + dies + " dia/es" + " " + mesos + " mes/es y " + anys + " año/s" );
- System.out.println( nom2 + " " + seccio2 + " " + fecha_alt2 + " " + dies2 + " dia/es" + " " + mesos2 + " mes/os i " + anys2 + " any/s" );
- System.out.println( nom3 + " " + seccio3 + " " + fecha_alt3 + " " + dies3 + " dia/es" + " " + mesos3 + " mes/os i " + anys3 + " any/s" );
- }
- else {
- System.out.println( "Alguna cosa falla" );
- }
- }
- }
- }
- }
- }
- }
- }
- }
- catch (NumberFormatException ex) {
- System.out.println( "Los datos no pueden contener letres" );
- }
- }
- }
- }
- }
- }
- }
- }
- catch (NumberFormatException ex) {
- System.out.println( "La fecha final introducida no tiene un format dd/mm/aaaa vàlid" );
- }
- }
- }
- }
- }
No hay comentarios:
Publicar un comentario