Advertisement
Guest User

EmpleadosTarea5

a guest
Jun 27th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 50.39 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <time.h>
  5. #include "conio.c"
  6. #include <math.h>
  7.  
  8. #define CANTOPC   5
  9. #define CANTOPC2  9
  10. #define CANTOPC3  11
  11. #define CANTOPC4  5
  12. #define CANTOPC5  7
  13. #define LENOPC   45
  14.  
  15. #define ENTER   13
  16. #define ESC     27
  17.  
  18. #define ARRIBA    72
  19. #define ABAJO     80
  20. #define DERECHA   77
  21. #define IZQUIERDA 75
  22.  
  23. #define CTOPCMEN  WHITE
  24. #define CFOPCMEN  BLUE
  25. #define CTSOPCMEN BLUE
  26. #define CFSOPCMEN WHITE
  27. #define MAXID 4
  28. #define LENNOM 41
  29. #define LENAPE 31
  30.  
  31. void mostraropcxy(char [][LENOPC],int,int,int,int);
  32. int menuxy(char [][LENOPC],int,int,int,int);
  33. void colordefault();
  34. void agregarDatos(int, int, int);
  35. void obtenerCaracteres(int, int, int, char[], int);
  36. void obtenerSalario(int, int, int, int);
  37. void obtenerFechaEntrada(int, int, int, int);
  38. void obtenerFechaNacimiento(int, int, int, int);
  39. int comprobarFecha(int, int, int);
  40. int comprobarAnioBisiesto(int);
  41. float comprobarSalario(float);
  42. int comprobarTexto(char[], int);
  43. int comprobarMayorDeEdad();
  44. void limpiarArregloChar(char[]);
  45. void salirSinGuardar();
  46. void guardar();
  47. int comprobarSalida();
  48. void listaEmpleados(int,int, int, char [LENNOM], char[LENAPE], int, int, int, int);
  49. void imprimirID(int);
  50. int obtenerSalarioMayor();
  51. int cantidadDigitosNumero(float);
  52. int obtenerPrimerNombreLargo();
  53. int obtenerSegundoNombreLargo();
  54. int obtenerPrimerApellidoLargo();
  55. int obtenerSegundoApellidoLargo();
  56. int obtenerEdad(int);
  57. void menuListar(int, int, int);
  58. void menuModificar(int, int, int);
  59. void verificarIngresoID(int, int);
  60. void menuBorrar(int, int, int);
  61. void busquedaID(int, int, int, int, int);
  62. void busquedaNombre(int, char[LENNOM],int,int,int, int,int);
  63. void busquedaApellido(int, char[LENAPE],int, int, int, int, int);
  64. void busquedaRangoEdad(int, int, int, int, int, int, int, int);
  65. void busquedaRangoSalario(int, int, int, int, int, int, int, int);
  66.  
  67.  
  68. typedef struct{
  69.  int dia,mes,agno;
  70. }FECHA;
  71. typedef struct{
  72.  char idemp[MAXID], nombre1[LENNOM], nombre2[LENNOM], apellido1[LENAPE], apellido2[LENAPE];
  73.  FECHA fnacim, fentrada;
  74.  float salario;
  75. }EMP;
  76.  
  77.  
  78. /**INTENTÉ UTILIZAR ESTAS VARIABLES POR PARÁMETROS PERO EL PROGRAMA NO ME FUNCIONABA COMO ERA DEBIDO**/
  79. int empleadoActual = 0, validarCampos, tamanoPuntero = 10, primerInicio=0, idBuscar = -1;
  80. EMP *empleados;
  81. /**Y TUVE QUE DEJARLAS GLOBALES YA QUE NO AFECTA NINGÚN OTRO FUNCIONAMIENTO DEL PROGRAMA**/
  82.  
  83.  
  84. int main(int opc)
  85. {  /**Para alargar un poco más la consola debido al diseño que le hice a mis menus**/
  86.    system("mode 120,30");
  87.    if(primerInicio==0)
  88.    {/**Como hago muchas llamadas al main, no quiero que se destruya los datos de empleados cada vez**/
  89.        empleados = (EMP*) calloc(tamanoPuntero, sizeof(EMP));
  90.        primerInicio=1; opc = 0;
  91.    }
  92.    clrscr();
  93.    time_t t = time(NULL);
  94.    struct tm tm = *localtime(&t);
  95.    validarCampos = 0;
  96.    char opciones[CANTOPC][LENOPC] =
  97.         {
  98.         "Ingresar empleados ",
  99.         "Modificar empleados",
  100.         "Borrar empleados   ",
  101.         "Lista de empleados ",
  102.         "SALIR              "
  103.          };
  104.    char opciones2[CANTOPC2][LENOPC] =
  105.     {
  106.         "Primer nombre           *:",
  107.         "Segundo nombre           :",
  108.         "Primer apellido         *:",
  109.         "Segundo apellido         :",
  110.         "Salario                 *:",
  111.         "F. Entrada[DD/MM/AA]     :",
  112.         "F. Nacimiento[DD/MM/AA] *:",
  113.         "GUARDAR                   ",
  114.         "SALIR                     "
  115.     };
  116.  
  117.     char opciones5[CANTOPC5][LENOPC] =
  118.     {
  119.         "Listar Empleados Normal               ",
  120.         "Buscar Empleado by ID                :",
  121.         "Buscar Empleado by Nombre            :",
  122.         "Buscar Empleado by Apellido          :",
  123.         "Buscar Empleado by RangoEdad [18-25] :",
  124.         "Buscar Empleado RangoSalario [10-50] :",
  125.         "Salir                                 "
  126.     };
  127.     char opciones3[CANTOPC3][LENOPC] =
  128.     {
  129.         "Listar Empleados                        ",
  130.         "Verificar ID Empleado Ingresando Nombre:",
  131.         "Ingresar ID Verificado del Empleado    :",
  132.         "Modificar Primer Nombre                :",
  133.         "Modificar Segundo Nombre               :",
  134.         "Modificar Primer Apellido              :",
  135.         "Modificar Segundo Apellido             :",
  136.         "Modificar Fecha de Entrada             :",
  137.         "Modificar Fecha de Nacimiento          :",
  138.         "Modificar Salario                      :",
  139.         "Sair                                   "
  140.     };
  141.     char opciones4[CANTOPC4][LENOPC] =
  142.     {
  143.         "Listar Empleados                        ",
  144.         "Verificar ID Empleado Ingresando Nombre:",
  145.         "Ingresar ID Verificado del Empleado    :",
  146.         "BORRAR                                  ",
  147.         "Salir"
  148.     };
  149.     int opc1 = 0, opc5 = 0, opc2=0, opc4=0;
  150.  
  151.     do{
  152.     opc = menuxy(opciones,CANTOPC,opc,1,1);
  153.     while(opc == 0)
  154.       {
  155.          textcolor(GREEN);
  156.          gotoxy(45,6);/**HAY QUE PONER ESTE PRINTF EN OTRO LADO PORQUE, CUANDO EL USUARIO INGRESA OTRA FECHA, VISUALMENTE SE SOBREESCRIBE**/
  157.          printf("%d/%d/%d", tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900);
  158.          opc1 = menuxy(opciones2,CANTOPC2,opc1,17,opc+1);
  159.          agregarDatos(opc1, opc+1+opc1, CANTOPC2);
  160.       }
  161.     while(opc == 1)
  162.     {
  163.         opc2 = menuxy(opciones3, CANTOPC3, opc2, 17, opc+1);
  164.         menuModificar(opc2, opc+1+opc2, CANTOPC3);
  165.     }
  166.     while(opc == 3)
  167.     {
  168.         opc5 = menuxy(opciones5, CANTOPC5, opc5, 17, opc+1);
  169.         menuListar(opc5, opc+1+opc5, CANTOPC5);
  170.     }
  171.     while(opc == 2)
  172.     {
  173.         opc4 = menuxy(opciones4, CANTOPC4, opc4, 17, opc+1);
  174.         menuBorrar(opc4, opc+1+opc4, CANTOPC4);
  175.     }
  176.    }while(opc != CANTOPC - 1);
  177.    free(empleados);
  178.    exit(0);
  179.    return 0;
  180. }
  181.  
  182. void mostraropcxy(char opc[][LENOPC],int n,int sel,int px, int py)
  183. {
  184.    int ind;
  185.  
  186.    for (ind = 0; ind < n; ind ++ )
  187.    {
  188.       textcolor(LIGHTGRAY);
  189.       if ( ind == sel)
  190.          textcolor(LIGHTRED);
  191.  
  192.       gotoxy(px,py+ind);
  193.       printf(" %s \n",opc[ind]);
  194.    }
  195.  
  196.    colordefault();
  197.  
  198.    return;
  199. }
  200.  
  201.  
  202. int menuxy(char opc[][LENOPC],int n,int sel,int px, int py)
  203. {
  204.    char tecla;
  205.  
  206.    _setcursortype(0);
  207.    do
  208.    {
  209.       mostraropcxy(opc,n,sel,px,py);
  210.       tecla = getch();
  211.  
  212.       if ( tecla == ARRIBA )
  213.       {
  214.          sel --;
  215.          if ( sel < 0 )
  216.             sel = n - 1;
  217.       }
  218.  
  219.       if ( tecla == ABAJO )
  220.       {
  221.          sel ++;
  222.          if ( sel == n )
  223.             sel = 0;
  224.       }
  225.    }while ( tecla != ENTER && tecla != ESC );
  226.  
  227.    if ( tecla == ESC )
  228.       main(0);
  229.    return sel;
  230. }
  231.  
  232.  
  233. void colordefault()
  234. {
  235.    textcolor(LIGHTGRAY);
  236.    textbackground(BLACK);
  237. }
  238. /**
  239.     Función: AgregarDatos
  240.     Parámetros: opciónSeleccionada, posicionY y cantidadDeOpciones
  241.     Objetivo: Agregar los datos de los empleados de forma organizada conservando buen diseño
  242. **/
  243. void agregarDatos(int opcionSeleccionada, int posicionY, int cantidadDeOpciones)
  244. {
  245.     textcolor(GREEN);
  246.  
  247.     int posicionX = 5+19+21, indice=0, posicionYdeError = cantidadDeOpciones+1;
  248.     char oracion[LENNOM], letra;
  249.     switch(opcionSeleccionada)
  250.     {
  251.     case 0:/**PRIMER NOMBRE**/
  252.         obtenerCaracteres(posicionX, posicionY, 10,empleados[empleadoActual].nombre1,0);
  253.         validarCampos++;
  254.         break;
  255.     case 1:/**SEGUNDO NOMBRE**/
  256.         obtenerCaracteres(posicionX, posicionY, 10,empleados[empleadoActual].nombre2,0);
  257.         //validarCampos++;
  258.         break;
  259.     case 2:/**PRIMER APELLIDO**/
  260.         obtenerCaracteres(posicionX, posicionY,10, empleados[empleadoActual].apellido1,1);
  261.         validarCampos++;
  262.         break;
  263.     case 3:/**SEGUNDO APELLIDO**/
  264.         obtenerCaracteres(posicionX, posicionY, 10,empleados[empleadoActual].apellido2,1);
  265.         //validarCampos++;
  266.         break;
  267.     case 4:/**SALARIO**/
  268.         obtenerSalario(posicionX, posicionY, posicionYdeError, empleadoActual);
  269.         validarCampos++;
  270.         break;
  271.     case 5:/**FECHA ENTRADA**/
  272.         obtenerFechaEntrada(posicionX, posicionY,10, empleadoActual);
  273.         //validarCampos++;
  274.         break;
  275.     case 6:/**FECHA NACIMIENTO**/
  276.         obtenerFechaNacimiento(posicionX, posicionY,10,empleadoActual);
  277.         validarCampos++;
  278.         break;
  279.     case 7:/**GUARDAR**/
  280.         guardar();
  281.         int c = comprobarSalida();
  282.         /**Si decide guardar y no es mayor de edad...**/
  283.         if(c>0)
  284.         {
  285.             if(comprobarMayorDeEdad() == 0)
  286.             {
  287.                 gotoxy(1,10);
  288.                 printf("Debe tener al menos 18 anios para entrar a la empresa");
  289.                 fflush(stdin); getch();
  290.                 gotoxy(1,10);
  291.                 printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\t");
  292.             }
  293.         }
  294.         /**Si decide guardar y es mayor de edad...**/
  295.        if(c>0)
  296.         {
  297.             if(comprobarMayorDeEdad() == 1)
  298.             {
  299.                 main(0);
  300.             }
  301.         }
  302.         /**Si decide guardar sin haber completado todo...**/
  303.         if(c>0 && validarCampos < 4)
  304.         {
  305.             /**Pues equivale a salir sin guardar en tal caso**/
  306.             salirSinGuardar();
  307.         }
  308.         /**Si no decide salir...**/
  309.         if(c==0)
  310.         {
  311.             gotoxy(1,10);
  312.             printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\t");
  313.         }
  314.         break;
  315.     case 8:
  316.         salirSinGuardar();
  317.         break;
  318.     }
  319.     colordefault();
  320.     fflush(stdin);
  321. }
  322. /**
  323.     Función: ObtenerCaracteres
  324.     Parámetros: PosicionX, PosicionY, PosicionYdeError, texto y apellidos
  325.     Objetivo: Evaluar si existe algún carácter no permitido por ejemplo números y espacios, a excepción de los apellidos que
  326.     pueden recibir espacios
  327. **/
  328. void obtenerCaracteres(int posicionX, int posicionY, int posicionYdeError, char texto[], int apellidos)
  329. {
  330.     gotoxy(posicionX, posicionY);
  331.     printf("\t\t\t\t\t\t");
  332.     gotoxy(posicionX, posicionY);
  333.     fflush(stdin);
  334.     textcolor(GREEN);
  335.     gets(texto);
  336.     int c = comprobarTexto(texto, apellidos);
  337.     if(c == 0)
  338.         {
  339.             textcolor(RED);
  340.             gotoxy(1,posicionYdeError);
  341.             printf("Solo se admite letras y guion en este campo, presione cualquier tecla para regresar nuevamente.");
  342.             fflush(stdin); getch();
  343.             limpiarArregloChar(texto);
  344.             obtenerCaracteres(posicionX, posicionY, posicionYdeError,texto,apellidos);
  345.         }
  346.     else
  347.     {
  348.         gotoxy(1,posicionYdeError);
  349.         printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t");
  350.     }
  351.     colordefault();
  352. }
  353. /**
  354.     Función: ObtenerSalario
  355.     Parámetros: PosicionX, PosicionY, PosicionYdeError, EmpleadoActual2
  356.     Objetivo: Evaluar si el salario es válido
  357. **/
  358. void obtenerSalario(int posicionX, int posicionY, int posicionYdeError, int empleadoActual2)
  359. {
  360.     textcolor(GREEN);
  361.     gotoxy(posicionX, posicionY);
  362.     printf("\t\t\t\t\t\t\t\t\t\t");
  363.     gotoxy(posicionX, posicionY);
  364.     scanf("%f", &empleados[empleadoActual2].salario);
  365.     if(comprobarSalario(empleados[empleadoActual2].salario) <= 0)
  366.     {
  367.         textcolor(RED);
  368.         gotoxy(1, posicionYdeError);
  369.         printf("El salario debe ser numerico y mayor a cero, presiona cualquier tecla para continuar...");
  370.         fflush(stdin);
  371.         getch();
  372.         gotoxy(1,posicionYdeError);
  373.         printf("\t\t\t\t\t\t\t\t\t\t\t\t");
  374.         obtenerSalario(posicionX, posicionY, posicionYdeError, empleadoActual2);
  375.     }
  376.     colordefault();
  377. }
  378. /**
  379.     Función: ObtenerFechaEntrada
  380.     Parámetros: PosicionX, PosicionY, PosicionYdeError y EmpleadoActual2
  381.     Objetivo: Obtener y evaluar la fecha de entrada, en caso de no ingresarse será el día de hoy
  382. **/
  383. void obtenerFechaEntrada(int posicionX, int posicionY, int posicionYdeError, int empleadoActual2)
  384. {
  385.     textcolor(GREEN);
  386.     gotoxy(posicionX, posicionY); printf("\t\t\t\t\t\t"); gotoxy(posicionX, posicionY);
  387.     scanf("%d/%d/%d", &empleados[empleadoActual2].fentrada.dia,&empleados[empleadoActual2].fentrada.mes, &empleados[empleadoActual2].fentrada.agno);
  388.     if(comprobarFecha(empleados[empleadoActual2].fentrada.dia, empleados[empleadoActual2].fentrada.mes, empleados[empleadoActual2].fentrada.agno) == 0)
  389.         {
  390.             textcolor(RED);
  391.             gotoxy(1,posicionYdeError); printf("Debes digitar la fecha como la entrada indica, presiona cualquier tecla para continuar...");
  392.             fflush(stdin);
  393.             getch();
  394.             gotoxy(1,posicionYdeError); printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t");
  395.             //gotoxy(posicionX, posicionY); printf("\t\t\t\t"); gotoxy(posicionX, posicionY);
  396.             obtenerFechaEntrada(posicionX, posicionY, posicionYdeError, empleadoActual2);
  397.         }
  398.         colordefault();
  399. }
  400. /**
  401.     Función: ObtenerFechaNacimiento
  402.     Parámetros: posicionX, posicionY, posicionYdeError, empleadoActual2
  403.     Objetivo: Validar que la fecha de nacimiento sea real
  404. **/
  405. void obtenerFechaNacimiento(int posicionX, int posicionY, int posicionYdeError, int empleadoActual2)
  406. {
  407.     textcolor(GREEN);
  408.     gotoxy(posicionX, posicionY); printf("\t\t\t\t\t\t"); gotoxy(posicionX, posicionY);
  409.     scanf("%d/%d/%d", &empleados[empleadoActual2].fnacim.dia,&empleados[empleadoActual2].fnacim.mes, &empleados[empleadoActual2].fnacim.agno);
  410.     if(comprobarFecha(empleados[empleadoActual2].fnacim.dia, empleados[empleadoActual2].fnacim.mes, empleados[empleadoActual2].fnacim.agno) == 0)
  411.         {
  412.             textcolor(RED);
  413.             gotoxy(1,posicionYdeError); printf("Fecha erronea, presiona cualquier tecla para reintentar...");
  414.             fflush(stdin);
  415.             getch();
  416.             gotoxy(1,posicionYdeError); printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t");
  417.             obtenerFechaNacimiento(posicionX, posicionY, posicionYdeError, empleadoActual2);
  418.         }
  419.         colordefault();
  420. }
  421. /**
  422.     Función     : comprobarFecha
  423.     Parámetros  : Dia, mes y Año
  424.     Objetivo    : Comprobar que el día/mes/año no sea menor que 0 y también comprueba si el año es bisiesto en otra función
  425. **/
  426. int comprobarFecha(int dia, int mes, int anio)
  427. {
  428.     int diasMeses[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
  429.     int comprobarAnio = comprobarAnioBisiesto(anio);
  430.     if(dia <=0 || mes <=0 || anio <=0)
  431.         return 0;
  432.  
  433.  
  434.     if(comprobarAnio == 0)
  435.     {
  436.         if(mes == 1 || mes == 3 ||mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)
  437.         {
  438.             if(dia > 31)
  439.             {
  440.                 return 0;
  441.             }
  442.             else
  443.             {
  444.                 return 1;
  445.             }
  446.         }
  447.         if(mes == 2 ||mes == 4 ||mes == 6 ||mes == 9 ||mes == 11)
  448.         {
  449.             if(mes == 2 && dia > 28)
  450.             {
  451.                 return 0;
  452.             }
  453.             if(mes != 2 && dia > 30)
  454.             {
  455.                 return 0;
  456.             }
  457.             else
  458.             {
  459.                 return 1;
  460.             }
  461.         }
  462.     }
  463.  
  464.     if(comprobarAnio == 1)
  465.     {
  466.         if(mes == 1 || mes == 3 ||mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)
  467.         {
  468.             if(dia > 31)
  469.             {
  470.                 return 0;
  471.             }
  472.             else
  473.             {
  474.                 return 1;
  475.             }
  476.         }
  477.         if(mes == 2 ||mes == 4 ||mes == 6 ||mes == 9 ||mes == 11)
  478.         {
  479.             if(mes == 2 && dia > 29)
  480.             {
  481.                 return 0;
  482.             }
  483.             if(mes != 2 && dia > 30)
  484.             {
  485.                 return 0;
  486.             }
  487.             else
  488.             {
  489.                 return 1;
  490.             }
  491.         }
  492.     }
  493. }
  494. /**
  495.     Función     : ComprobarAnioBisiesto
  496.     Parámetros  : Año
  497.     Objetivo    : Comprobar si el año es bisiesto
  498. **/
  499. int comprobarAnioBisiesto(int anio)
  500. {
  501.      if ( anio % 4 == 0 && anio % 100 != 0 || anio % 400 == 0 )
  502.         return 1;
  503.     else
  504.         return 0;
  505. }
  506. /**
  507.     Función     : ComprobarSalario
  508.     Parámetro   : salario
  509.     Objetivo    : Comprobar si el salario es menor o igual a cero no es aceptable
  510. **/
  511. float comprobarSalario(float salario)
  512. {
  513.     if(salario <=0)
  514.         return 0;
  515.     else return 1;
  516. }
  517. /**
  518.     Función     : comprobarTexto
  519.     Parámetros  : texto y apellidos
  520.     Objetivo:     Comprobar que el texto sea letras y guión si se trata del nombre
  521.                   Y que acepte espacios si se trata del apellido
  522. **/
  523. int comprobarTexto(char texto[], int apellidos)
  524. {
  525.     int i=0, validar = 1;
  526.     gotoxy(1,8); //printf("entrp");
  527.     while(texto[i] != '\0')
  528.     {
  529.         texto[i] = toupper(texto[i]);
  530.         if(apellidos == 1)/**SI SE ESTÁ VALIDANDO APELLIDOS SI SE PERMITE ESPACIOS**/
  531.         {
  532.             if((texto[i] < 'A' || texto[i] > 'Z')&& texto[i] != '-' && texto[i] != ' ')
  533.             {
  534.                 //Hay numeros,espacios o caracteres extraños
  535.                 validar = 0;
  536.             }
  537.         }
  538.         if(apellidos == 0)/**SI SE VALIDAN NOMBRES SOLO SE PERMITE GUION Y LETRAS**/
  539.         {
  540.             if((texto[i] < 'A' || texto[i] > 'Z')&& texto[i] != '-')// && texto[i] != '-' && texto[i] != 32)
  541.             {
  542.                 //Hay numeros,espacios o caracteres extraños
  543.                 validar = 0;
  544.             }
  545.         }
  546.         i++;
  547.     }
  548.     return validar;
  549. }
  550. /**
  551.     Función     : comprobarMayorDeEdad
  552.     Parámetros  : ninguno
  553.     Objetivo    : Comprobar si el empleado es mayor de 18 años
  554. **/
  555. int comprobarMayorDeEdad()
  556. {
  557.     if(((empleados[empleadoActual].fentrada.agno-18) < empleados[empleadoActual].fnacim.agno))
  558.         return 0;
  559.     else return 1;
  560. }
  561. /**
  562.     Función     : LimpiarArregloChar
  563.     Parámetros  : arreglo
  564.     Objetivo    : Limpiar el texto que se mande
  565. **/
  566. void limpiarArregloChar(char arreglo[])
  567. {
  568.     int i=0;
  569.     while(arreglo[i] != '\0')
  570.     {
  571.         arreglo[i] = ' ';
  572.         i++;
  573.     }
  574. }
  575. /**
  576.     Función     : SalirSinGuardar
  577.     Parámetros  : Ninguno
  578.     Objetivo    : En caso de que el usuario salga sin guardar se limpian los arreglos con la función memset
  579. **/
  580. void salirSinGuardar()
  581. {
  582.     memset(empleados[empleadoActual].nombre1,0, sizeof(empleados[empleadoActual].nombre1));
  583.     memset(empleados[empleadoActual].nombre2,0, sizeof(empleados[empleadoActual].nombre2));
  584.     memset(empleados[empleadoActual].apellido1,0, sizeof(empleados[empleadoActual].apellido1));
  585.     memset(empleados[empleadoActual].apellido2,0, sizeof(empleados[empleadoActual].apellido2));
  586.     memset(empleados[empleadoActual].idemp,0, sizeof(empleados[empleadoActual].idemp));
  587.     empleados[empleadoActual].fentrada.dia =0;
  588.     empleados[empleadoActual].fentrada.mes=0;
  589.     empleados[empleadoActual].fentrada.agno=0;
  590.     empleados[empleadoActual].fnacim.dia =0;
  591.     empleados[empleadoActual].fnacim.mes=0;
  592.     empleados[empleadoActual].fnacim.agno=0;
  593.     empleados[empleadoActual].salario = 0;
  594.     main(0);
  595. }
  596. /**
  597.     Función     : Guardar
  598.     Parámetros  : ninguno
  599.     Objetivo    : Validar que se hayan escrito en los campos obligatorios y en caso de que la fecha de entrada no se haya digitado
  600.                     (ya que no es obligatorio) pues se pone la fecha actual
  601. **/
  602. void guardar()
  603. {
  604.     //Obteniendo fecha actual:
  605.     time_t t = time(NULL);
  606.     struct tm tm = *localtime(&t);
  607.     gotoxy(45,6);
  608.     char respuesta;
  609.     if(empleados[empleadoActual].fentrada.dia <= 0)
  610.     {
  611.         /**Si el usuario no quiso indicar la fecha de entrada, será por defecto**/
  612.         printf("%d/%d/%d", tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900);
  613.         empleados[empleadoActual].fentrada.dia = tm.tm_mday;
  614.         empleados[empleadoActual].fentrada.mes = tm.tm_mon+1;
  615.         empleados[empleadoActual].fentrada.agno     = tm.tm_year + 1900;
  616.     }
  617.  
  618.     if(validarCampos >= 4 && comprobarMayorDeEdad() == 1)
  619.     {
  620.         if(empleadoActual == tamanoPuntero-1)
  621.         {
  622.             tamanoPuntero = tamanoPuntero + 10;
  623.             empleados = (EMP*) realloc(empleados, tamanoPuntero);
  624.             /**Se aumenta el tamaño al puntero**/
  625.         }
  626.         empleadoActual++;/**Se aumenta la cantidad de empleado**/
  627.         main(0);
  628.     }
  629.     gotoxy(1,10);
  630.     if(validarCampos < 4)
  631.     {
  632.         printf("Faltan campos por completar, en caso de salir se borrara todo...");
  633.     }
  634.     printf("\nEsta seguro que desea salir?\nSi [S]\nNo [N]\nRespuesta: ");
  635.  
  636. }
  637. /**
  638.     Función     : ComprobarSalida
  639.     Parámetros  : ninguno
  640.     Objetivo    : Comprobar si el usuario quiere salir o no, solo será usada en algunas circuntancias
  641. **/
  642. int comprobarSalida()
  643. {
  644.     char respuesta;
  645.     do
  646.     {
  647.         fflush(stdin);
  648.         respuesta = getch();
  649.         respuesta = toupper(respuesta);
  650.     }while(respuesta != 'S' && respuesta != 'N');
  651.         if(respuesta == 'S')
  652.                 return 1;
  653.  
  654.         if(respuesta == 'N')
  655.                 return 0;
  656. }
  657.  
  658. /**FUNCIONES DE LA SEGUNDA OPCIÓN DEL MENÚ**/
  659. /**
  660.     Función     : ListaEmpleados
  661.     Parámetros  : PosicionYLista, tipoDeBusqueda, IDBuscar, NombreBuscar, ApellidoBuscar, edadMinima,
  662.                     edadMaxima, salarioMinimo, salarioMaximo
  663.     Objetivo    : Listar los empleados dependiendo de qué forma se busquen, por ejemplo, 0 es listar todo sin importar nada
  664. **/
  665. void listaEmpleados(int posicionYLista,int tipoDeBusqueda, int IDBuscar, char nombreBuscar[LENNOM], char apellidoBuscar[LENAPE], int edadMinima, int edadMaxima, int salarioMinimo, int salarioMaximo)
  666. {
  667.     //int posicionY = 11;
  668.     int posicionY = posicionYLista;
  669.     int posicionX = 1;
  670.     int edadIndice;
  671.     /**Las variables aquí abajo representan la cantidad de carácteres que tiene la palabra**/
  672.     int nombres = 7, apellidos = 9, salario = 7, fechaEntrada = 13;
  673.     /****/
  674.     int xApellidos = obtenerPrimerNombreLargo() + obtenerSegundoNombreLargo() + 1;
  675.     int xSalario = obtenerPrimerApellidoLargo() + obtenerSegundoApellidoLargo() + 1; //obtenerSalarioMayor();
  676.     int xFechaEntrada = obtenerSalarioMayor();
  677.     int xEdad = xApellidos + xSalario + xFechaEntrada;
  678.     int indice=0;
  679.     gotoxy(posicionX, posicionY);
  680.     printf("ID");
  681.     posicionX = posicionX + 5;
  682.     gotoxy(posicionX, posicionY);
  683.     printf("NOMBRES");
  684.  
  685.     if(xApellidos < nombres)
  686.         xApellidos = xApellidos + nombres + 4;
  687.     else xApellidos = xApellidos + nombres;
  688.  
  689.     gotoxy(xApellidos, posicionY);
  690.     printf("APELLIDOS");
  691.  
  692.     if(xSalario < apellidos)
  693.         xSalario = xSalario + xApellidos + nombres;
  694.     else xSalario = xSalario + xApellidos + 1;
  695.  
  696.     gotoxy(xSalario, posicionY);
  697.     printf("SALARIO");
  698.  
  699.     if(xFechaEntrada < salario)
  700.         xFechaEntrada = xFechaEntrada + xSalario + 7;//+salario;
  701.     else xFechaEntrada = xFechaEntrada + xSalario + 2;/**4 espacios porque hay un .00 del salario**/
  702.  
  703.     gotoxy(xFechaEntrada, posicionY);
  704.     printf("FECHA ENTRADA");
  705.  
  706.     if(xEdad < fechaEntrada)
  707.         xEdad = xEdad + salario + nombres + apellidos + fechaEntrada + 3;
  708.     else xEdad = xEdad + fechaEntrada + salario + nombres +8;//+ apellidos;
  709.         gotoxy(xEdad, posicionY);
  710.     printf("EDAD");
  711.  
  712.     if(tipoDeBusqueda == 0)
  713.     {
  714.         while(indice < empleadoActual)
  715.         {
  716.             posicionY++;
  717.             gotoxy(1, posicionY);
  718.             imprimirID(indice);
  719.             gotoxy(posicionX, posicionY);
  720.             printf("%s %s", empleados[indice].nombre1, empleados[indice].nombre2);
  721.             gotoxy(xApellidos, posicionY);
  722.             printf("%s %s", empleados[indice].apellido1, empleados[indice].apellido2);
  723.             gotoxy(xSalario, posicionY);
  724.             printf("%1.2f", empleados[indice].salario);
  725.             gotoxy(xFechaEntrada, posicionY);
  726.             printf("%d/%d/%d", empleados[indice].fentrada.dia, empleados[indice].fentrada.mes, empleados[indice].fentrada.agno);
  727.             gotoxy(xEdad, posicionY);
  728.             printf("%d", obtenerEdad(indice));
  729.             indice++;
  730.         }
  731.     }
  732.     /**BUSQUEDA POR ID**/
  733.     if(tipoDeBusqueda == 1)
  734.     {
  735.         while(indice < empleadoActual)
  736.         {
  737.             //posicionY++;
  738.             //gotoxy(1, posicionY);
  739.             if(indice == IDBuscar)
  740.             {
  741.                 posicionY++;
  742.                 gotoxy(1, posicionY);
  743.                 imprimirID(indice);
  744.                 gotoxy(posicionX, posicionY);
  745.                 printf("%s %s", empleados[indice].nombre1, empleados[indice].nombre2);
  746.                 gotoxy(xApellidos, posicionY);
  747.                 printf("%s %s", empleados[indice].apellido1, empleados[indice].apellido2);
  748.                 gotoxy(xSalario, posicionY);
  749.                 printf("%1.2f", empleados[indice].salario);
  750.                 gotoxy(xFechaEntrada, posicionY);
  751.                 printf("%d/%d/%d", empleados[indice].fentrada.dia, empleados[indice].fentrada.mes, empleados[indice].fentrada.agno);
  752.                 gotoxy(xEdad, posicionY);
  753.                 printf("%d", obtenerEdad(indice));
  754.             }
  755.             indice++;
  756.         }
  757.     }
  758.     /**BUSQUEDA POR NOMBRE**/
  759.     if(tipoDeBusqueda == 2)
  760.     {
  761.         while(indice < empleadoActual)
  762.         {
  763.             if((strncmp(empleados[indice].nombre1, nombreBuscar,strlen(nombreBuscar)) == 0) || (strncmp(empleados[indice].nombre2, nombreBuscar,strlen(nombreBuscar)) == 0))
  764.             {
  765.                 posicionY++;
  766.                 gotoxy(1, posicionY);
  767.                 imprimirID(indice);
  768.                 gotoxy(posicionX, posicionY);
  769.                 printf("%s %s", empleados[indice].nombre1, empleados[indice].nombre2);
  770.                 gotoxy(xApellidos, posicionY);
  771.                 printf("%s %s", empleados[indice].apellido1, empleados[indice].apellido2);
  772.                 gotoxy(xSalario, posicionY);
  773.                 printf("%1.2f", empleados[indice].salario);
  774.                 gotoxy(xFechaEntrada, posicionY);
  775.                 printf("%d/%d/%d", empleados[indice].fentrada.dia, empleados[indice].fentrada.mes, empleados[indice].fentrada.agno);
  776.                 gotoxy(xEdad, posicionY);
  777.                 printf("%d", obtenerEdad(indice));
  778.             }
  779.             indice++;
  780.         }
  781.     }
  782.     /**BUSQUEDA POR APELLIDO**/
  783.     if(tipoDeBusqueda == 3)
  784.     {
  785.         while(indice < empleadoActual)
  786.         {
  787.             if((strcmp(empleados[indice].apellido1, apellidoBuscar) == 0) || (strcmp(empleados[indice].apellido2, apellidoBuscar) == 0))
  788.             {
  789.                 posicionY++;
  790.                 gotoxy(1, posicionY);
  791.                 imprimirID(indice);
  792.                 gotoxy(posicionX, posicionY);
  793.                 printf("%s %s", empleados[indice].nombre1, empleados[indice].nombre2);
  794.                 gotoxy(xApellidos, posicionY);
  795.                 printf("%s %s", empleados[indice].apellido1, empleados[indice].apellido2);
  796.                 gotoxy(xSalario, posicionY);
  797.                 printf("%1.2f", empleados[indice].salario);
  798.                 gotoxy(xFechaEntrada, posicionY);
  799.                 printf("%d/%d/%d", empleados[indice].fentrada.dia, empleados[indice].fentrada.mes, empleados[indice].fentrada.agno);
  800.                 gotoxy(xEdad, posicionY);
  801.                 printf("%d", obtenerEdad(indice));
  802.             }
  803.             indice++;
  804.         }
  805.     }
  806.     /**BUSQUEDA MEDIANTE RANGO DE EDAD**/
  807.     if(tipoDeBusqueda == 4)
  808.     {
  809.         while(indice < empleadoActual)
  810.         {
  811.             edadIndice = obtenerEdad(indice);
  812.             if((edadIndice >= edadMinima) && (edadIndice <= edadMaxima))
  813.             {
  814.                 posicionY++;
  815.                 gotoxy(1, posicionY);
  816.                 imprimirID(indice);
  817.                 gotoxy(posicionX, posicionY);
  818.                 printf("%s %s", empleados[indice].nombre1, empleados[indice].nombre2);
  819.                 gotoxy(xApellidos, posicionY);
  820.                 printf("%s %s", empleados[indice].apellido1, empleados[indice].apellido2);
  821.                 gotoxy(xSalario, posicionY);
  822.                 printf("%1.2f", empleados[indice].salario);
  823.                 gotoxy(xFechaEntrada, posicionY);
  824.                 printf("%d/%d/%d", empleados[indice].fentrada.dia, empleados[indice].fentrada.mes, empleados[indice].fentrada.agno);
  825.                 gotoxy(xEdad, posicionY);
  826.                 printf("%d", obtenerEdad(indice));
  827.             }
  828.             indice++;
  829.         }
  830.     }
  831.     /**BUSQUEDA POR RANGO SALARIAL**/
  832.     if(tipoDeBusqueda == 5)
  833.     {
  834.         while(indice < empleadoActual)
  835.         {
  836.             if((empleados[indice].salario >= salarioMinimo) && (empleados[indice].salario <= salarioMaximo))
  837.             {
  838.                 posicionY++;
  839.                 gotoxy(1, posicionY);
  840.                 imprimirID(indice);
  841.                 gotoxy(posicionX, posicionY);
  842.                 printf("%s %s", empleados[indice].nombre1, empleados[indice].nombre2);
  843.                 gotoxy(xApellidos, posicionY);
  844.                 printf("%s %s", empleados[indice].apellido1, empleados[indice].apellido2);
  845.                 gotoxy(xSalario, posicionY);
  846.                 printf("%1.2f", empleados[indice].salario);
  847.                 gotoxy(xFechaEntrada, posicionY);
  848.                 printf("%d/%d/%d", empleados[indice].fentrada.dia, empleados[indice].fentrada.mes, empleados[indice].fentrada.agno);
  849.                 gotoxy(xEdad, posicionY);
  850.                 printf("%d", obtenerEdad(indice));
  851.             }
  852.             indice++;
  853.         }
  854.     }
  855. }
  856. /**
  857.     Función     : ImprimirID
  858.     Parámetros  : Indice
  859.     Objetivo    : Imprimir el ID con los ceros correspondientes a la izquierda
  860. **/
  861. void imprimirID(int indice)
  862. {
  863.     indice++;
  864.     if(indice <= 9)
  865.     {
  866.         printf("000%d", indice);
  867.     }
  868.     if(indice > 9 && indice <= 99)
  869.     {
  870.         printf("00%d", indice);
  871.     }
  872.     if(indice > 99 && indice <= 999)
  873.     {
  874.         printf("0%d", indice);
  875.     }
  876.     if(indice > 999)
  877.     {
  878.         printf("%d",indice);
  879.     }
  880. }
  881. /**
  882.     Función     : ObtenerSalarioMayor
  883.     Parámetros  : ninguno
  884.     Objetivo    : Conocer cual es el salario mayor para así justificar la salida
  885. **/
  886. int obtenerSalarioMayor()
  887. {
  888.     int cantidadMayor=0, indiceEmpleado=0; float salarioActual;
  889.     while(indiceEmpleado < empleadoActual)
  890.     {
  891.         salarioActual = cantidadDigitosNumero(empleados[indiceEmpleado].salario);
  892.         if(salarioActual > cantidadMayor)
  893.         {
  894.             cantidadMayor = salarioActual;
  895.         }
  896.         indiceEmpleado++;
  897.     }
  898.     return cantidadMayor;
  899. }
  900. /**
  901.     Función     : cantidadDigitosNumero
  902.     Parámetros  : numero
  903.     Objetivo    : Devolver la cantidad de digitos que posee el salario
  904. **/
  905. int cantidadDigitosNumero(float numero)
  906. {
  907.     return (int) log10(numero) + 1;
  908. }
  909. /**
  910.     Función     : ObtenerPrimerNombreLargo
  911.     Parámetros  : ninguno
  912.     Objetivo    : Conocer la cantidad de carácteres que posee el nombre mas largo
  913. **/
  914. int obtenerPrimerNombreLargo()
  915. {
  916.     int mayorLetras=0;
  917.     int indiceEmpleado=0;
  918.     int indiceNombre=0;
  919.     int contadorLetras = 0;
  920.     while(indiceEmpleado < empleadoActual)
  921.     {
  922.         while(empleados[indiceEmpleado].nombre1[indiceNombre] != '\0')
  923.         {
  924.             if(contadorLetras > mayorLetras)
  925.             {
  926.                 mayorLetras = contadorLetras;
  927.             }
  928.             contadorLetras++;
  929.             indiceNombre++;
  930.         }
  931.         indiceEmpleado++;
  932.         //mayorLetras = contadorLetras;
  933.     }
  934.     return mayorLetras+1;
  935. }
  936. /**
  937.     Función     : obtenerSegundoNombreLargo
  938.     Parámetros  : ninguno
  939.     Objetivo    : Conocer la cantidad de carácteres que posee el segundo nombre mas largo
  940. **/
  941. int obtenerSegundoNombreLargo()
  942. {
  943.     int mayorLetras=0;
  944.     int indiceEmpleado=0;
  945.     int indiceNombre=0;
  946.     int contadorLetras = 0;
  947.     while(indiceEmpleado < empleadoActual)
  948.     {
  949.         while(empleados[indiceEmpleado].nombre2[indiceNombre] != '\0')
  950.         {
  951.             if(contadorLetras > mayorLetras)
  952.             {
  953.                 mayorLetras = contadorLetras;
  954.             }
  955.             contadorLetras++;
  956.             indiceNombre++;
  957.         }
  958.         indiceEmpleado++;
  959.         //mayorLetras = contadorLetras;
  960.     }
  961.     return mayorLetras+1;
  962. }
  963. /**
  964.     Función     : ObtenerPrimerApellidoLargo
  965.     Parámetros  : ninguno
  966.     Objetivo    : Conocer la cantidad de carácteres que posee el apellido mas largo
  967. **/
  968. int obtenerPrimerApellidoLargo()
  969. {
  970.     int mayorLetras=0;
  971.     int indiceEmpleado=0;
  972.     int indiceNombre=0;
  973.     int contadorLetras = 0;
  974.     while(indiceEmpleado < empleadoActual)
  975.     {
  976.         while(empleados[indiceEmpleado].apellido1[indiceNombre] != '\0')
  977.         {
  978.             if(contadorLetras > mayorLetras)
  979.             {
  980.                 mayorLetras = contadorLetras;
  981.             }
  982.             contadorLetras++;
  983.             indiceNombre++;
  984.         }
  985.         indiceEmpleado++;
  986.         //mayorLetras = contadorLetras;
  987.     }
  988.     return mayorLetras+1;
  989. }
  990. /**
  991.     Función     : ObtenerSegundoNombreLargo
  992.     Parámetros  : ninguno
  993.     Objetivo    : Conocer la cantidad de carácteres que posee el segundo nombre mas largo
  994. **/
  995. int obtenerSegundoApellidoLargo()
  996. {
  997.     int mayorLetras=0;
  998.     int indiceEmpleado=0;
  999.     int indiceNombre=0;
  1000.     int contadorLetras = 0;
  1001.     while(indiceEmpleado < empleadoActual)
  1002.     {
  1003.         while(empleados[indiceEmpleado].apellido2[indiceNombre] != '\0')
  1004.         {
  1005.             if(contadorLetras > mayorLetras)
  1006.             {
  1007.                 mayorLetras = contadorLetras;
  1008.             }
  1009.             contadorLetras++;
  1010.             indiceNombre++;
  1011.         }
  1012.         indiceEmpleado++;
  1013.         //mayorLetras = contadorLetras;
  1014.     }
  1015.     return mayorLetras+1;
  1016. }
  1017. /**
  1018.     Función     : ObtenerEdad
  1019.     Parámetros  : indice
  1020.     Objetivo    : Devolver la edad de la persona dada su fecha
  1021. **/
  1022. int obtenerEdad(int indice)
  1023. {
  1024.     time_t t = time(NULL);
  1025.     struct tm tm = *localtime(&t);
  1026.     int edad = (tm.tm_year+1900) - empleados[indice].fnacim.agno;
  1027.     return edad;
  1028. }
  1029. /**
  1030.     Función     : menuListar
  1031.     Parámetros  : opcionSeleccionada, posicionY, cantidadDeOpciones
  1032.     Objetivo    : Manejar las opciones dentro del menú Lista
  1033. **/
  1034. void menuListar(int opcionSeleccionada, int posicionY, int cantidadDeOpciones)
  1035. {
  1036.     int posicionX = 57, indice=0, posicionYdeError = cantidadDeOpciones+1;
  1037.     int idBuscar = -1, opc, opc5, edadMinima = -1, edadMaxima = -1,salarioMaximo=-1, salarioMinimo=-1;
  1038.     char enter, nombreBuscar[LENNOM], apellidoBuscar[LENNOM];
  1039.     switch(opcionSeleccionada)
  1040.     {
  1041.     case 0:
  1042.         listaEmpleados(11,0, -1, '0', '0', -1, -1, -1, -1);
  1043.         textcolor(RED);
  1044.         printf("\nPresione enter para regresar...");
  1045.         colordefault();
  1046.         do
  1047.         {
  1048.             fflush(stdin);
  1049.             enter = getch();
  1050.         }while(enter != 13);
  1051.         main(3);
  1052.         break;
  1053.     case 1:
  1054.         busquedaID(11,idBuscar, posicionX, posicionY,3);
  1055.         break;
  1056.     case 2:
  1057.         busquedaNombre(11,nombreBuscar, posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones,3);
  1058.         break;
  1059.     case 3:
  1060.         busquedaApellido(11,apellidoBuscar,posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones,3);
  1061.         break;
  1062.     case 4:
  1063.         busquedaRangoEdad(11,edadMinima, edadMaxima, posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones,3);
  1064.         break;
  1065.     case 5:
  1066.         busquedaRangoSalario(11,salarioMinimo, salarioMaximo, posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones,3);
  1067.         break;
  1068.     case 6:
  1069.         main(3);
  1070.         break;
  1071.     }
  1072. }
  1073. /**
  1074.     Función     : menuModificar
  1075.     Parámetros  : opcionSeleccionada, posicionY, cantidadDeOpciones
  1076.     Objetivo    : Manejar las opciones dentro del menú Modificar
  1077. **/
  1078. void menuModificar(int opcionSeleccionada, int posicionY, int cantidadDeOpciones)
  1079. {
  1080.     int posicionX = 59, posicionYdeError = cantidadDeOpciones+2;
  1081.     char enter, nombreBuscar[LENNOM], apellidoBuscar[LENNOM];
  1082.     switch(opcionSeleccionada)
  1083.     {
  1084.     case 0:
  1085.         listaEmpleados(15,0, -1, '0', '0', -1, -1, -1, -1);
  1086.         textcolor(RED);
  1087.         printf("\nPresione enter para regresar...");
  1088.         colordefault();
  1089.         do
  1090.         {
  1091.             fflush(stdin);
  1092.             enter = getch();
  1093.         }while(enter != 13);
  1094.         main(1);
  1095.         break;
  1096.     case 1:
  1097.         busquedaNombre(15,nombreBuscar, posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones,1);
  1098.         break;
  1099.     case 2:
  1100.         textcolor(GREEN);
  1101.         gotoxy(posicionX, posicionY);
  1102.         scanf("%d", &idBuscar);
  1103.         idBuscar = idBuscar - 1;
  1104.         if(idBuscar > empleadoActual || idBuscar < 0 || (idBuscar == empleadoActual && empleados[idBuscar].salario == 0))
  1105.         {
  1106.             idBuscar = -1;
  1107.             gotoxy(1, posicionYdeError);
  1108.             textcolor(RED);
  1109.             printf("Empleado no existe");
  1110.             fflush(stdin);
  1111.             getch();
  1112.             gotoxy(1, posicionYdeError);
  1113.             printf("\t\t\t\t\t\t\t\t");
  1114.             colordefault();
  1115.             gotoxy(posicionX, posicionY); printf("\t\t\t\t");
  1116.         }
  1117.         else
  1118.         {
  1119.             textcolor(YELLOW);
  1120.             gotoxy(posicionX, posicionY+1);
  1121.             printf("\t\t\t\t\t\t\t\t\t");
  1122.             gotoxy(posicionX, posicionY+1);
  1123.             printf("%s", empleados[idBuscar].nombre1);
  1124.  
  1125.             gotoxy(posicionX, posicionY+2);
  1126.             printf("\t\t\t\t\t\t\t\t\t");
  1127.             gotoxy(posicionX, posicionY+2);
  1128.             printf("%s", empleados[idBuscar].nombre2);
  1129.  
  1130.             gotoxy(posicionX, posicionY+3);
  1131.             printf("\t\t\t\t\t\t\t\t\t");
  1132.             gotoxy(posicionX, posicionY+3);
  1133.             printf("%s", empleados[idBuscar].apellido1);
  1134.  
  1135.             gotoxy(posicionX, posicionY+4);
  1136.             printf("\t\t\t\t\t\t\t\t\t");
  1137.             gotoxy(posicionX, posicionY+4);
  1138.             printf("%s", empleados[idBuscar].apellido2);
  1139.  
  1140.             gotoxy(posicionX, posicionY+5);
  1141.             printf("\t\t\t\t\t\t\t\t\t");
  1142.             gotoxy(posicionX, posicionY+5);
  1143.             printf("%d/%d/%d", empleados[idBuscar].fentrada.dia, empleados[idBuscar].fentrada.mes, empleados[idBuscar].fentrada.agno);
  1144.  
  1145.             gotoxy(posicionX, posicionY+6);
  1146.             printf("\t\t\t\t\t\t\t\t\t");
  1147.             gotoxy(posicionX, posicionY+6);
  1148.             printf("%d/%d/%d", empleados[idBuscar].fnacim.dia, empleados[idBuscar].fnacim.mes, empleados[idBuscar].fnacim.agno);
  1149.  
  1150.             gotoxy(posicionX, posicionY+7);
  1151.             printf("\t\t\t\t\t\t\t\t\t");
  1152.             gotoxy(posicionX, posicionY+7);
  1153.             printf("%1.2f", empleados[idBuscar].salario);
  1154.         }
  1155.  
  1156.         break;
  1157.     case 3:/**Modificar primer nombre**/
  1158.         if(idBuscar == -1)
  1159.         {
  1160.             verificarIngresoID(idBuscar,posicionYdeError);
  1161.         }
  1162.         else
  1163.         {
  1164.             obtenerCaracteres(posicionX, posicionY, posicionYdeError, empleados[idBuscar].nombre1,0);
  1165.             gotoxy(1, posicionYdeError);
  1166.             textcolor(LIGHTGREEN);
  1167.             printf("Modificado correctamente\t\t\t\t");
  1168.             colordefault();
  1169.         }
  1170.         break;
  1171.     case 4:/**Modificar segundo nombre**/
  1172.         if(idBuscar == -1)
  1173.         {
  1174.             verificarIngresoID(idBuscar,posicionYdeError);
  1175.         }
  1176.         else
  1177.         {
  1178.             obtenerCaracteres(posicionX, posicionY,posicionYdeError, empleados[idBuscar].nombre2,0);
  1179.             gotoxy(1, posicionYdeError);
  1180.             textcolor(LIGHTGREEN);
  1181.             printf("Modificado correctamente\t\t\t\t");
  1182.             colordefault();
  1183.         }
  1184.  
  1185.         break;
  1186.     case 5:/**Modificar primer apellido**/
  1187.         if(idBuscar == -1)
  1188.         {
  1189.             verificarIngresoID(idBuscar,posicionYdeError);
  1190.         }
  1191.         else
  1192.         {
  1193.             obtenerCaracteres(posicionX, posicionY, posicionYdeError,empleados[idBuscar].apellido1,1);
  1194.             gotoxy(1, posicionYdeError);
  1195.             textcolor(LIGHTGREEN);
  1196.             printf("Modificado correctamente\t\t\t\t");
  1197.             colordefault();
  1198.         }
  1199.  
  1200.         break;
  1201.     case 6:/**Modificar segundo apellido**/
  1202.         if(idBuscar == -1)
  1203.         {
  1204.             verificarIngresoID(idBuscar,posicionYdeError);
  1205.         }
  1206.         else
  1207.         {
  1208.             obtenerCaracteres(posicionX, posicionY, posicionYdeError,empleados[idBuscar].apellido2,1);
  1209.             gotoxy(1, posicionYdeError);
  1210.             textcolor(LIGHTGREEN);
  1211.             printf("Modificado correctamente\t\t\t\t");
  1212.             colordefault();
  1213.         }
  1214.         break;
  1215.     case 7:/**Modificar fecha entrada**/
  1216.         if(idBuscar == -1)
  1217.         {
  1218.             verificarIngresoID(idBuscar,posicionYdeError);
  1219.         }
  1220.         else
  1221.         {
  1222.             empleados[idBuscar].fentrada.agno = -1;
  1223.             obtenerFechaEntrada(posicionX, posicionY,posicionYdeError, idBuscar);
  1224.             gotoxy(1, posicionYdeError);
  1225.             textcolor(LIGHTGREEN);
  1226.             printf("Modificado correctamente\t\t\t\t");
  1227.             colordefault();
  1228.         }
  1229.         break;
  1230.     case 8:/**Modificar fecha nacimiento**/
  1231.         if(idBuscar == -1)
  1232.         {
  1233.             verificarIngresoID(idBuscar,posicionYdeError);
  1234.         }
  1235.         else
  1236.         {
  1237.             empleados[idBuscar].fnacim.agno = -1;
  1238.             obtenerFechaNacimiento(posicionX, posicionY,posicionYdeError, idBuscar);
  1239.             gotoxy(1, posicionYdeError);
  1240.             textcolor(LIGHTGREEN);
  1241.             printf("Modificado correctamente\t\t\t\t");
  1242.             colordefault();
  1243.         }
  1244.         break;
  1245.     case 9:/**Modificar salario**/
  1246.         if(idBuscar == -1)
  1247.         {
  1248.             verificarIngresoID(idBuscar,posicionYdeError);
  1249.         }
  1250.         else
  1251.         {
  1252.             empleados[idBuscar].salario = -1;
  1253.             obtenerSalario(posicionX, posicionY, posicionYdeError, idBuscar);
  1254.             gotoxy(1, posicionYdeError);
  1255.             textcolor(LIGHTGREEN);
  1256.             printf("Modificado correctamente\t\t\t\t\t\t\t\t\t");
  1257.             colordefault();
  1258.         }
  1259.         break;
  1260.     case 10:
  1261.         main(1);
  1262.         break;
  1263.     }
  1264. }
  1265. /**
  1266.     Función     : verificarIngresoID
  1267.     Parámetros  : idBuscar, posicionYdeError
  1268.     Objetivo    : Verificar que el usuario quiera modificar un nombre/apellido,etc primero haya digitado un ID obviamente
  1269. **/
  1270. void verificarIngresoID(int idBuscar, int posicionYdeError)
  1271. {
  1272.     gotoxy(1, posicionYdeError);
  1273.     textcolor(RED);
  1274.     printf("Debe digitar un ID primero");
  1275.     fflush(stdin);
  1276.     getch();
  1277.     gotoxy(1, posicionYdeError);
  1278.     printf("\t\t\t\t\t\t\t\t\t\t");
  1279. }
  1280. /**
  1281.     Función     : menuBorrar
  1282.     Parámetros  : opcionSeleccionada, posicionY, cantidadDeOpciones
  1283.     Objetivo    : Manejar las opciones dentro del menú borrar
  1284. **/
  1285. void menuBorrar(int opcionSeleccionada, int posicionY, int cantidadDeOpciones)
  1286. {
  1287.     int posicionX = 59, posicionYdeError = cantidadDeOpciones+3, indice = 0;
  1288.     char enter, nombreBuscar[LENNOM];
  1289.     switch(opcionSeleccionada)
  1290.     {
  1291.     case 0:
  1292.         listaEmpleados(8,0, -1, '0', '0', -1, -1, -1, -1);
  1293.         textcolor(RED);
  1294.         printf("\nPresione enter para regresar...");
  1295.         colordefault();
  1296.         do
  1297.         {
  1298.             fflush(stdin);
  1299.             enter = getch();
  1300.         }while(enter != 13);
  1301.         main(2);
  1302.         break;
  1303.     case 1:
  1304.         busquedaNombre(8, nombreBuscar, posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones, 2);
  1305.         break;
  1306.     case 2:
  1307.         textcolor(GREEN);
  1308.         gotoxy(posicionX, posicionY);
  1309.         scanf("%d", &idBuscar);
  1310.         idBuscar = idBuscar - 1;
  1311.         if(idBuscar > empleadoActual || idBuscar < 0 || (idBuscar == empleadoActual && empleados[idBuscar].salario == 0))
  1312.         {
  1313.             idBuscar=-1;
  1314.             gotoxy(1, posicionYdeError);
  1315.             textcolor(RED);
  1316.             printf("Empleado no existe");
  1317.             fflush(stdin);
  1318.             getch();
  1319.             gotoxy(1, posicionYdeError);
  1320.             printf("\t\t\t\t\t\t\t\t");
  1321.             colordefault();
  1322.             gotoxy(posicionX, posicionY); printf("\t\t\t\t");
  1323.         }
  1324.  
  1325.         break;
  1326.     case 3:
  1327.         if(idBuscar == -1)
  1328.         {
  1329.             verificarIngresoID(idBuscar,posicionYdeError);
  1330.         }
  1331.         else
  1332.         {
  1333.         while(idBuscar <= empleadoActual)
  1334.         {
  1335.             empleados[idBuscar] = empleados[idBuscar+1];
  1336.             idBuscar++;
  1337.         }
  1338.         empleadoActual--;/**Se elimina una posicion de los empleados**/
  1339.         gotoxy(1, posicionYdeError);
  1340.         textcolor(RED);
  1341.         printf("Eliminado correctamente... Presione cualquier tecla para regresar");
  1342.         fflush(stdin);
  1343.         getch();
  1344.         colordefault();
  1345.         main(2);
  1346.         }
  1347.  
  1348.         break;
  1349.     case 4:
  1350.         main(2);
  1351.         break;
  1352.     }
  1353. }
  1354. /**
  1355.     Función     : busquedaID
  1356.     Parámetros  : posicionYLista, idBuscar, posicionX, posicionY, retornoMain
  1357.     Objetivo    : Buscar los empleados que sea igual al ID Digitado
  1358. **/
  1359. void busquedaID(int posicionYLista, int idBuscar, int posicionX, int posicionY, int retornoMain)
  1360. {
  1361.         char enter;
  1362.         gotoxy(posicionX, posicionY);
  1363.         scanf("%d", &idBuscar);
  1364.         listaEmpleados(posicionYLista, 1,idBuscar-1, '0', '0', -1, -1,-1,-1);
  1365.         textcolor(RED);
  1366.         printf("\nPresione enter para regresar...");
  1367.         colordefault();
  1368.         do
  1369.         {
  1370.             fflush(stdin);
  1371.             enter = getch();
  1372.         }while(enter != 13);
  1373.         main(retornoMain);
  1374. }
  1375. /**
  1376.     Función     : busquedaNombre
  1377.     Parámetros  : posicionYLista, nombreBuscar, posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones, retornoMain
  1378.     Objetivo    : Buscar los empleados que sea igual al Nombre escrito
  1379. **/
  1380. void busquedaNombre(int posicionYLista, char nombreBuscar[LENNOM],int posicionX, int posicionY, int opcionSeleccionada, int cantidadDeOpciones, int retornoMain)
  1381. {
  1382.     char enter;
  1383.     gotoxy(posicionX, posicionY);
  1384.     fflush(stdin);
  1385.     textcolor(GREEN);
  1386.     gets(nombreBuscar);
  1387.     colordefault();
  1388.     if(comprobarTexto(nombreBuscar, 0) > 0)
  1389.     {
  1390.         listaEmpleados(posicionYLista,2,-1,nombreBuscar, '0', -1, -1, -1,-1);
  1391.         textcolor(RED);
  1392.         printf("\nPresione enter para regresar...");
  1393.         if(retornoMain == 2)/**Es decir si vengo desde el menú de Borrar**/
  1394.         {
  1395.             printf("Y borrar el ID ya visualizado");
  1396.         }
  1397.         colordefault();
  1398.         do
  1399.         {
  1400.             fflush(stdin);
  1401.             enter = getch();
  1402.         }while(enter != 13);
  1403.         main(retornoMain);
  1404.     }
  1405.     else
  1406.     {
  1407.         textcolor(RED);
  1408.         gotoxy(1,13);
  1409.         printf("El nombre no debe tener numeros u otros caracteres raros...");
  1410.         colordefault();
  1411.         fflush(stdin);
  1412.         getch();
  1413.         gotoxy(1,13);
  1414.         printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t");
  1415.         colordefault();
  1416.         gotoxy(posicionX,posicionY);
  1417.         printf("\t\t\t\t\t\t\t\t");
  1418.         busquedaNombre(posicionYLista,nombreBuscar,posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones, retornoMain);
  1419.     }
  1420. }
  1421. /**
  1422.     Función     : busquedaApellido
  1423.     Parámetros  : posicionYLista, apellidoBuscar, posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones, retornoMain
  1424.     Objetivo    : Buscar los empleados que sea igual al Apellido escrito
  1425. **/
  1426. void busquedaApellido(int posicionYLista, char apellidoBuscar[LENAPE],int posicionX, int posicionY, int opcionSeleccionada, int cantidadDeOpciones, int retornoMain)
  1427. {
  1428.     char enter;
  1429.     gotoxy(posicionX, posicionY);
  1430.     fflush(stdin);
  1431.     gets(apellidoBuscar);
  1432.     if(comprobarTexto(apellidoBuscar,1) > 0)
  1433.     {
  1434.         listaEmpleados(posicionYLista,3,-1,'0', apellidoBuscar, -1, -1, -1,-1);
  1435.         textcolor(RED);
  1436.         printf("\nPresione enter para regresar...");
  1437.         colordefault();
  1438.         do
  1439.         {
  1440.             fflush(stdin);
  1441.             enter = getch();
  1442.         }while(enter != 13);
  1443.         main(retornoMain);
  1444.     }
  1445.     else
  1446.     {
  1447.         textcolor(RED);
  1448.         gotoxy(1,11);
  1449.         printf("El apellido no debe tener numeros u otros caracteres raros...");
  1450.         fflush(stdin);
  1451.         getch();
  1452.         gotoxy(1,11);
  1453.         printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t");
  1454.         colordefault();
  1455.         gotoxy(posicionX,posicionY);
  1456.         printf("\t\t\t\t\t\t\t\t");
  1457.         menuListar(opcionSeleccionada, posicionY, cantidadDeOpciones);
  1458.     }
  1459. }
  1460. /**
  1461.     Función     : busquedaRangoEdad
  1462.     Parámetros  : posicionYLista, edadMinima, edadMaxima, posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones, retornoMain
  1463.     Objetivo    : Buscar los empleados que sea por rango de Edad
  1464. **/
  1465. void busquedaRangoEdad(int posicionYLista, int edadMinima, int edadMaxima, int posicionX, int posicionY, int opcionSeleccionada, int cantidadDeOpciones, int retornoMain)
  1466. {
  1467.     char enter;
  1468.     gotoxy(posicionX, posicionY);
  1469.     scanf("%d-%d", &edadMinima, &edadMaxima);
  1470.     if(edadMinima < 0 || edadMaxima < 0)
  1471.     {
  1472.         textcolor(RED);
  1473.         gotoxy(1,11);
  1474.         printf("Esta edad no existe o no se ha ingresado correctamente...");
  1475.         fflush(stdin);
  1476.         getch();
  1477.         gotoxy(1,11);
  1478.         printf("\t\t\t\t\t\t\t\t\t");
  1479.         colordefault();
  1480.         gotoxy(posicionX, posicionY);
  1481.         printf("\t\t\t\t\t\t\t");
  1482.         menuListar(opcionSeleccionada, posicionY, cantidadDeOpciones);
  1483.     }
  1484.     else
  1485.     {
  1486.         listaEmpleados(posicionYLista, 4, -1, '0','0', edadMinima, edadMaxima,-1,-1);
  1487.         textcolor(RED);
  1488.         printf("\nPresione enter para regresar...");
  1489.         colordefault();
  1490.         do
  1491.         {
  1492.             fflush(stdin);
  1493.             enter = getch();
  1494.         }while(enter != 13);
  1495.         main(retornoMain);
  1496.     }
  1497. }
  1498. /**
  1499.     Función     : busquedaRangoSalario
  1500.     Parámetros  : posicionYLista, salarioMinimo, salarioMaximo, posicionX, posicionY, opcionSeleccionada, cantidadDeOpciones, retornoMain
  1501.     Objetivo    : Buscar los empleados que sea por rango de salario
  1502. **/
  1503. void busquedaRangoSalario(int posicionYLista, int salarioMinimo, int salarioMaximo, int posicionX, int posicionY, int opcionSeleccionada, int cantidadDeOpciones, int retornoMain)
  1504. {
  1505.     char enter;
  1506.     gotoxy(posicionX, posicionY);
  1507.     scanf("%d-%d", &salarioMinimo, &salarioMaximo);
  1508.     if(salarioMinimo < 0 || salarioMaximo < 0)
  1509.     {
  1510.         textcolor(RED);
  1511.         gotoxy(1,11);
  1512.         printf("Esta edad no existe o no se ha ingresado correctamente...");
  1513.         fflush(stdin);
  1514.         getch();
  1515.         gotoxy(1,11);
  1516.         printf("\t\t\t\t\t\t\t\t\t");
  1517.         colordefault();
  1518.         gotoxy(posicionX, posicionY);
  1519.         printf("\t\t\t\t\t\t\t");
  1520.         menuListar(opcionSeleccionada, posicionY, cantidadDeOpciones);
  1521.     }
  1522.     else
  1523.     {
  1524.         listaEmpleados(posicionYLista, 5, -1, '0','0', -1, -1,salarioMinimo,salarioMaximo);
  1525.         textcolor(RED);
  1526.         printf("\nPresione enter para regresar...");
  1527.         colordefault();
  1528.         do
  1529.         {
  1530.             fflush(stdin);
  1531.             enter = getch();
  1532.         }while(enter != 13);
  1533.         main(retornoMain);
  1534.     }
  1535. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement