22mrsuarez

Codigo Censo

Sep 22nd, 2021
730
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Jean Marc Suarez Buitrón/Edwin Adrada Ruíz -2017
  2. //Proyecto final Lab de programación- Universidad del Cauca
  3. //Programa Censo
  4. //Este código está pensado para ser compilado con IDE DevC++
  5.  
  6. #include<stdio.h>                        
  7. #include<string.h>
  8. #include<stdlib.h>
  9. #include <windows.h>
  10. #define MAX 1000
  11.  
  12. typedef struct
  13. {
  14.     char nombres[25];
  15.     char apellidos[25];
  16.     char NombreApellidos[50];
  17.     int  edad;
  18.     int  cedula;
  19.     int  TI;
  20.     char sexo[13];
  21.     char empleo[3];
  22.     int  hijos;
  23. }Datos;
  24.  
  25. int menu();                                       //funcion para imprimir un menu principal y retornar la opcion escogida
  26. void ejemploregistro();                           //funcion que implementa un pequeño tutorial del manejo del programa
  27. void datospersona(Datos [],int *);                //Funcion para registrar personas
  28. void Listar(Datos [],int );                       //Funcion Imprimir en pantalla la lista de personas registradas                      
  29. void buscar_cedula(Datos [],int );                //Funcion para buscar los datos de una persona segun su cedula
  30. int Nom_o_Ape();                                  //funcion de submenu, datos de persona por nombre y apellido
  31. void buscar_x_nom_ape(Datos [], int , int );      //segun sea del submenu datos persona nombre o apellido
  32. void imprimir(Datos [],int *,int );               //funcion para imprimir los datos de la persona a buscar
  33. void buscar_nom(Datos [], int );                  //funcion para buscar datos segun el/los nombres solamente    
  34. void buscar_ape(Datos [], int );                  //funcion para buscar datos segun el/los apellidos solamente
  35. void buscar_apeYnom(Datos [], int );              //funcion para buscar datos segun el nombre completo (nombres y apellidos)
  36. void mayores_edad(Datos [],int );                 //funcion para conocer la cantidad de pobladores mayores de edad
  37. void mujeres_may_30(Datos [],int );               //funcion para calcular la cantidad de mujeres mayores de 30 años
  38. void hombres_may_50(Datos [],int );               //funcion para calcular la cantidad de hombres mayores de 50 años
  39. void ordenacion_burbuja_nombre(Datos [],int );    //funcion para ordenar la estructura por orden alfabetico(nombres)
  40.  
  41. int main()
  42. {
  43.     int opcion,n=-1,opdatos;
  44.     Datos personas[MAX];  
  45.     printf("Que desea hacer?\n");
  46.     opcion=1;
  47.     while(opcion!=8)
  48.     {
  49.         opcion=menu();
  50.         system("CLS");
  51.             switch(opcion)
  52.             {
  53.                 case 1:
  54.                     fflush(stdin);
  55.                     if(n==-1)
  56.                         ejemploregistro();
  57.                    
  58.                     datospersona(personas,&n);
  59.                 break;
  60.                 case 2:
  61.                     if(n==-1){
  62.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),12);
  63.                         printf("\n>No hay personas registradas en este momento\n\n\a");
  64.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),15);
  65.                    
  66.                     }  
  67.                     else{
  68.                        ordenacion_burbuja_nombre(personas,n);
  69.                        Listar(personas,n);
  70.                     }
  71.                 break;                  
  72.                 case 3:
  73.                     if(n==-1){
  74.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),12);
  75.                         printf("\n>No hay personas registradas en este momento\n\n\a");
  76.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),15);
  77.                    
  78.                     }  
  79.                     else
  80.                         buscar_cedula(personas,n);
  81.                 break;
  82.                 case 4:
  83.                     if(n==-1){
  84.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),12);
  85.                         printf("\n>No hay personas registradas en este momento\n\n\a");
  86.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),15);
  87.                    
  88.                     }  
  89.                     else{
  90.                         opdatos=Nom_o_Ape();
  91.                         buscar_x_nom_ape(personas,n,opdatos);
  92.                     }        
  93.                 break;
  94.                 case 5:
  95.                     if(n==-1){
  96.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),12);
  97.                         printf("\n>No hay personas registradas en este momento\n\n\a");
  98.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),15);
  99.                    
  100.                     }  
  101.                     else
  102.                         mayores_edad(personas,n);
  103.                 break;
  104.                 case 6:
  105.                     if(n==-1){
  106.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),12);
  107.                         printf("\n>No hay personas registradas en este momento\n\n\a");
  108.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),15);
  109.                    
  110.                     }  
  111.                     else
  112.                         mujeres_may_30(personas,n);
  113.                 break;                  
  114.                 case 7:
  115.                      if(n==-1){
  116.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),12);
  117.                         printf("\n>No hay personas registradas en este momento\n\n\a");
  118.                         SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),15);
  119.                    
  120.                     }  
  121.                     else
  122.                         hombres_may_50(personas,n);
  123.                 break;
  124.                 case 8:
  125.                     printf("\nUsted escogio salir,que tenga un buen dia.\n\n");
  126.                 break;
  127.             }
  128.         system("pause");    
  129.     }
  130.     return 0;
  131. }
  132.  
  133.  
  134. int menu()
  135. {
  136.     int opcion;
  137.     SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),15);
  138.     system("cls");
  139.     printf("\t\t\tBIENVENIDO AL PROGRAMA\n");
  140.     printf("----------------------------------------------------------------------\n");
  141.     printf("\nOpciones: ");
  142.     printf("\n1.    Registrar Personas");
  143.     printf("\n2.    Ver lista de personas registradas");
  144.     printf("\n3.    Consultar datos de una persona segun su Cedula/T.I");
  145.     printf("\n4.    Consultar datos de una persona segun su nombre");
  146.     printf("\n5.    Calcular la cantidad de personas mayores de edad");
  147.     printf("\n6.    Calcular el numero de mujeres mayores de 30 anios");
  148.     printf("\n7.    Calcular el numero de hombres mayores de 50 anios");
  149.     printf("\n8.    salir ");
  150.     printf("\nIngrese la opcion : _ ");
  151.     do{
  152.         scanf("%i", &opcion);
  153.         if((opcion!=1)&&(opcion!=2)&&(opcion!=3)&&(opcion!=4)&&(opcion!=5)
  154.             &&(opcion!=6)&&(opcion!=7)&&(opcion!=8))
  155.         {
  156.             printf("Opcion invalida, intentelo nuevamente\n\a");
  157.         }  
  158.     }while((opcion!=1)&&(opcion!=2)&&(opcion!=3)&&(opcion!=4)&&(opcion!=5)
  159.             &&(opcion!=6)&&(opcion!=7)&&(opcion!=8));
  160.              
  161.     return opcion;
  162. }
  163.  
  164.  
  165. void datospersona(Datos personas[],int *n)
  166. {
  167.     int key=0,op;
  168.     char fom;
  169.     while(key==0)
  170.     {
  171.         if((*n+1)<MAX){
  172.        
  173.             printf("\t\t\tREGISTRAR PERSONAS\n");
  174.             printf("----------------------------------------------------------------------\n");
  175.             *n=*n+1;
  176.             printf("\n>Ingrese el/los nombres \n");
  177.             gets(personas[*n].nombres);
  178.             printf(">Ingrese los Apellidos\n");
  179.             gets(personas[*n].apellidos);
  180.             strcpy (personas[*n].NombreApellidos,personas[*n].nombres);     //Copia el valor de personas[*n].nombres a personas[*n].NombreApellidos
  181.             strcat (personas[*n].NombreApellidos," ");                      //Agrega un espacio entre los nombres y apellidos, junta la primera cadena y la segunda
  182.             strcat (personas[*n].NombreApellidos,personas[*n].apellidos);   //con las misma funcion junta las cadenas y las retorna en personas[*n].NombreApellidos
  183.             printf(">Ingrese la edad\n");
  184.             do{
  185.                 scanf("%i",&personas[*n].edad);
  186.                 if(personas[*n].edad < 0)
  187.                     printf("---Intentelo nuevamente---\n\a");
  188.             }while(personas[*n].edad < 0);
  189.             if(personas[*n].edad >= 18){
  190.                 printf(">Ingrese la cedula:\n");
  191.                 scanf("%i",&personas[*n].cedula);
  192.                 personas[*n].TI=0;             
  193.             }
  194.             else{
  195.                 printf(">Ingrese la tarjeta de identidad:\n");
  196.                 scanf("%i",&personas[*n].TI);
  197.                 personas[*n].cedula=0;
  198.             }
  199.             fflush(stdin);
  200.             printf(">Sexo:\n");
  201.             printf(" a.Masculino\n");
  202.             printf(" b.Femenino\n");
  203.             do{
  204.                 scanf("%c",&fom);
  205.                 if(fom=='a')
  206.                     strcpy(personas[*n].sexo,"Masculino");
  207.                 else
  208.                     strcpy(personas[*n].sexo,"Femenino");
  209.             }while((fom!='a')&&(fom!='b'));    
  210.             fflush(stdin);
  211.             printf(">Tiene empleo?:\n");
  212.             printf(" a.Si\n");
  213.             printf(" b.No\n");
  214.             do{
  215.                 scanf("%c",&fom);
  216.                 if(fom=='a')
  217.                     strcpy(personas[*n].empleo,"Si");
  218.                 else
  219.                     strcpy(personas[*n].empleo,"No");
  220.             }while((fom!='a')&&(fom!='b'));    
  221.             printf(">Cuantos hijos tiene?\n");
  222.             scanf("%i",&personas[*n].hijos),
  223.             printf("\n>Hay mas personas para enlistar?<\n\n0-Si\n1-NO\n\n");
  224.             do{
  225.        
  226.                 scanf("%i",&op);
  227.                
  228.                 switch(op)
  229.                 {
  230.                     case 0:
  231.                         key=0;
  232.                     break;
  233.                     case 1:
  234.                         key=1;
  235.                     break;
  236.                     default:
  237.                         printf("---Intentelo nuevamente---\n\a");
  238.                 }
  239.             }while((op!=1)&&(op!=0));  
  240.             fflush(stdin);
  241.             system("CLS");
  242.         }  
  243.        else{
  244.             printf("\t\t\tREGISTRAR PERSONAS\n");
  245.             printf("----------------------------------------------------------------------\n");
  246.             printf("\n--Se ha sobrepasado el limite de pobladores--\n\n\a");
  247.             key=1;
  248.        }
  249.     }                                      
  250. }
  251.  
  252.  
  253.  
  254. void Listar(Datos personas[],int n)
  255. {
  256.     int i;
  257.     printf("\t\t    LISTA DE HABITANTES REGISTRADOS\n");
  258.     printf("----------------------------------------------------------------------\n");
  259.     for(i=0;i<=n;i++)
  260.     {
  261.         printf("PERSONA #%i\n",i+1);
  262.         printf("\nNombres   = %s",personas[i].nombres);
  263.         printf("\nApellidos = %s",personas[i].apellidos);
  264.         printf("\nEdad      = %i",personas[i].edad);
  265.         printf("\nSexo      = %s",personas[i].sexo);
  266.         printf("\nEmpleo    = %s",personas[i].empleo);
  267.         printf("\nHijos     = %i",personas[i].hijos);
  268.         if(personas[i].TI==0)
  269.             printf("\nCedula    = %i\n\n",personas[i].cedula);
  270.         else   
  271.             printf("\nT.I       = %i     (Tarjeta de identidad)\n\n",personas[i].TI);
  272.        
  273.     }
  274. }
  275.  
  276. void imprimir(Datos personas[],int *flag,int i )
  277. {
  278.     printf("\nPERSONA #%i\n",i+1);
  279.     printf("\nNombres   = %s",personas[i].nombres);
  280.     printf("\nApellidos = %s",personas[i].apellidos);
  281.     printf("\nEdad      = %i",personas[i].edad);
  282.     printf("\nSexo      = %s",personas[i].sexo);
  283.     printf("\nEmpleo    = %s",personas[i].empleo);
  284.     printf("\nHijos     = %i",personas[i].hijos);
  285.     if(personas[i].TI==0)
  286.         printf("\nCedula    = %i\n\n",personas[i].cedula);
  287.     else   
  288.         printf("\nT.I       = %i     (Tarjeta de identidad)\n\n",personas[i].TI);
  289.            
  290.     *flag=1;
  291. }
  292.  
  293. void buscar_cedula(Datos personas[],int n)
  294. {
  295.     int i,ced,flag=0;
  296.     printf("\t\t    CONSULTA DE DATOS-CEDULA/T.I\n");
  297.     printf("----------------------------------------------------------------------\n");
  298.     printf("\n>Ingrese el numero de cedula que desea buscar\n\n");
  299.     scanf("%i",&ced);
  300.     for(i=0;i<=n;i++)
  301.     {
  302.         if(ced==personas[i].cedula){
  303.             imprimir(personas,&flag,i);
  304.             break;     
  305.         }
  306.     }
  307.     if(flag==0)
  308.         printf("\n\nNo se encontraron los datos de la persona.\nVerifique el numero de cedula e intentelo nuevamente\n\n\a");
  309.        
  310. }
  311.  
  312. int Nom_o_Ape()
  313. {
  314.     int opcion;
  315.     printf("\t\t    CONSULTA DE DATOS-NOMBRES/APELLIDOS.I\n");
  316.     printf("----------------------------------------------------------------------\n");
  317.     printf("\nOpciones: ");
  318.     printf("\n\n1.  Consultar datos segun Nombres           \n    (En caso de no conocer los apellidos)");
  319.     printf("\n\n2.  Consultar datos segun Apellidos         \n    (En caso de no conocer los nombres)");
  320.     printf("\n\n3.  Consultar datos segun Nombres y apellidos\n    (En caso de conocer nombre y apellidos)");
  321.     printf("\n\n4.  Salir\n");
  322.     printf("\nIngrese la opcion : _ ");
  323.     do{
  324.         scanf("%i", &opcion);
  325.         if((opcion!=1)&&(opcion!=2)&&(opcion!=3)&&(opcion!=4))
  326.         {
  327.             printf("Opcion invalida, intentelo nuevamente\n\a");
  328.         }  
  329.     }while((opcion!=1)&&(opcion!=2)&&(opcion!=3)&&(opcion!=4));      
  330.     return opcion;
  331. }
  332.  
  333. void buscar_x_nom_ape(Datos personas[], int n , int opdatos )
  334. {
  335.     switch(opdatos)
  336.     {
  337.         case 1:
  338.             fflush(stdin);
  339.             buscar_nom(personas,n);
  340.         break; 
  341.         case 2:
  342.             fflush(stdin);
  343.             buscar_ape(personas,n);
  344.         break; 
  345.         case 3:
  346.             fflush(stdin);
  347.             buscar_apeYnom(personas,n);
  348.         break; 
  349.         case 4:
  350.             printf("\nUsted escogio salir,que tenga un buen dia.\n\n");
  351.         break; 
  352.     }
  353. }
  354. void buscar_nom(Datos personas[], int n)
  355. {
  356.     int i, flag=0,cont=0;
  357.     char nombre[25];
  358.     printf("\n\n>Ingrese los nombres de la persona:\n ");
  359.     gets(nombre);
  360.     for(i=0;i<=n;i++)
  361.     {
  362.         if((strcmp(personas[i].nombres,nombre)==0)){
  363.             imprimir(personas,&flag,i);
  364.             cont++;
  365.         }
  366.     }
  367.     if(flag==0)
  368.         printf("\n\nNo se encontraron los datos de la persona.\nVerifique que el/los nombres esten bien escritos\n\n\a");
  369.     else
  370.         printf("\n\nSe encontraron un total de %i personas con el mismo nombre\n\n",cont);
  371.    
  372.     fflush(stdin);
  373. }
  374. void buscar_ape(Datos personas[], int n)
  375. {
  376.     int i, flag=0,cont=0;
  377.     char apellido[25];
  378.     printf("\n\n>Ingrese los apellidos de la persona:\n ");
  379.     gets(apellido);
  380.     for(i=0;i<=n;i++)
  381.     {
  382.         if((strcmp(personas[i].apellidos,apellido)==0)){
  383.             imprimir(personas,&flag,i);
  384.             cont++;
  385.         }
  386.     }
  387.     if(flag==0)
  388.         printf("\n\nNo se encontraron los datos de la persona.\nVerifique que el/los apellidos esten bien escritos\n\n\a");
  389.     else
  390.         printf("\n\nSe encontraron un total de %i personas con el/los mismos apellidos\n\n",cont);
  391.  
  392.     fflush(stdin);
  393. }
  394. void buscar_apeYnom(Datos personas[], int n)
  395. {
  396.     int i, flag=0,cont=0;
  397.     char nomApe[50];
  398.     printf("\n\n>Ingrese el nombre completo de la persona (nombres y apellidos):\n ");
  399.     gets(nomApe);
  400.     for(i=0;i<=n;i++)
  401.     {
  402.         if((strcmp(personas[i].NombreApellidos,nomApe)==0)){
  403.             imprimir(personas,&flag,i);
  404.         }
  405.     }
  406.     if(flag==0){
  407.         printf("\n\nNo se encontraron los datos de la persona.\nVerifique que el nombre este bien escrito de la siguiente forma: \n\a");
  408.         printf("\nNombres ******* Apellidos *******   (Ej: Jean Marc Suarez Buitron))\n\n");
  409.     }
  410.     fflush(stdin);
  411. }
  412.  
  413. void ejemploregistro()
  414. {
  415.    
  416.     printf("\t\t\tREGISTRAR PERSONAS\n");
  417.     printf("----------------------------------------------------------------------\n");
  418.     SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),10);
  419.     printf("\n\nAntes de empezar a llenar la informacion asegurese en entender el funcionamiento adecuado del software");
  420.     printf("\nLos Datos deben ser llenados de la siguiente forma:");
  421.     printf("\n\n>Nombres  : ****** ******     (Escriba los nombres de la persona de la forma adecuada)");
  422.     printf("\n>Apellidos: ****** ******     (Escriba los apellidos de la persona de la forma adecuada)");
  423.     printf("\n>Edad     : **                (Escriba la edad de la persona solamente)");
  424.     printf("\n>Cedual/Ti: *************     (Escriba solamente la cedula o la tarjeta de identidad)");
  425.     printf("\n>Sexo     : *********         (Escriba \"a\" si Es Masculino o \"b\" si es Femenino dependiendo al genero de la persona)");
  426.     printf("\n>Empleo   : **                (Escriba \"a\" si la persona tiene empleo, en caso contrario escriba \"b\")");
  427.     printf("\n>Hijos    : **                (Escriba Solamente la cantidad de hijos que tiene la persona, de no tener ingrese 0)");
  428.    
  429.     printf("\n\nSi no esta seguro(a) del funcionamiento del programa, cosulte con su asesor mas cercano\n\n");
  430.     SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),15);
  431.     system("pause");
  432.     system("CLS");
  433. }
  434. void mayores_edad(Datos personas[],int n)
  435. {
  436.     int i,cont=0,flag=0;
  437.     printf("\t\tCANTIDAD DE POBLADORES MAYORES DE EDAD\n");
  438.     printf("----------------------------------------------------------------------\n");
  439.     for(i=0;i<=n;i++)
  440.     {
  441.         if(personas[i].edad>=18){
  442.             cont++;
  443.             flag=1;
  444.                    
  445.         }
  446.     }
  447.     if(flag==0)
  448.         printf("\n\nNo hay personas mayores de edad\n\n\a");
  449.     else
  450.         printf("\nHay un total de %i pobladores mayores de edad\n\n",cont);
  451. }
  452.  
  453. void mujeres_may_30(Datos personas[],int n)
  454. {
  455.     int i,cont=0,flag=0;
  456.     printf("\t\tCANTIDAD DE MUJERES MAYORES DE 30 ANIOS\n");
  457.     printf("----------------------------------------------------------------------\n");
  458.     for(i=0;i<=n;i++)
  459.     {
  460.         if((strcmp(personas[i].sexo,"Femenino")==0)){
  461.             if(personas[i].edad>30){
  462.                 cont++;
  463.                 flag=1;
  464.             }
  465.            
  466.         }
  467.     }
  468.     if(flag==0)
  469.         printf("\n\nNo hay Mujeres mayores de 30 anios\n\n\a");
  470.     else
  471.         printf("\nHay un total de %i Mujeres mayores de 30 anios\n\n",cont);
  472. }
  473.  
  474. void hombres_may_50(Datos personas[],int n)
  475. {
  476.     int i,cont=0,flag=0;
  477.     printf("\t\tCANTIDAD DE HOMBRES MAYORES DE 50 ANIOS\n");
  478.     printf("----------------------------------------------------------------------\n");
  479.     for(i=0;i<=n;i++)
  480.     {
  481.         if((strcmp(personas[i].sexo,"Masculino")==0)){
  482.             if(personas[i].edad>50){
  483.                 cont++;
  484.                 flag=1;
  485.             }
  486.            
  487.         }
  488.     }
  489.     if(flag==0)
  490.         printf("\n\nNo hay Hombres mayores de 50 anios\n\n\a");
  491.     else
  492.         printf("\nHay un total de %i Hombres mayores de 50 anios\n\n",cont);
  493. }
  494.  
  495. void ordenacion_burbuja_nombre(Datos personas[],int n)
  496. {
  497.     int i,j, flag;
  498.     Datos aux;
  499.     int temp;
  500.     for(i=0; i<=n; i++)
  501.     {
  502.         flag=0;        
  503.             for(j=n; j>=i; j--)
  504.             {
  505.                 temp=stricmp(personas[j-1].NombreApellidos,personas[j].NombreApellidos);//de lamisma forma que strcmp compara 2 cadenas y retorna        
  506.                 if(temp>0){                                                             //un valor dependiendo de si es mayor, menor o igual,
  507.                     aux=personas[j];                                                    //solo que esta no tiene en cuenta mayusculas
  508.                     personas[j]=personas[j-1];
  509.                     personas[j-1]=aux;
  510.                     flag=1;
  511.                 }
  512.             }
  513.             if (flag==0)
  514.             break;
  515.     }
  516. }
RAW Paste Data