busqueda y ordenamiento por fecha de nacimiento
Realizar un programa que permita ordenar por fecha de nacimiento de una persona y realizar una búsqueda de usuario a través de su fecha de nacimiento.
Constatar si la persona se encuentra registrada.
Los datos a ingresar son: código, nombres, apellidos y fecha de nacimiento.
Al ejecutar la búsqueda de una persona, el programa debe mostrarnos el número de posición donde se encuentra la persona registrada, en caso contrario mostrarnos un mensaje de que la persona no fue encontrada.
#include<iostream.h> #include<conio.h> #include<string.h> #define MAX 100 struct fecha { char dia[3]; char mes[3]; char anho[5]; }; struct personal { char codigo[9]; char nombre[MAX]; char apellidos[MAX]; struct fecha fecnac; }; void leepersonal(int, struct personal[]); void listado(int, struct personal[]); void ordenaxfecha(int n,struct personal[]); int busqueda (int, struct personal[], struct fecha); void main() {int n,pos; struct fecha f; struct personal per[MAX]; cout<<"Limite:"; cin>>n; leepersonal(n,per); ordenaxfecha(n,per); listado(n,per); cout<<"que fecha de nacimiento desea buscar?:"<<endl; cout<<"DIA:"; cin>>f.dia; cout<<"MES:"; cin>>f.mes; cout<<"ANHO:"; cin>>f.anho; pos=busqueda(n,per,f); if(pos==-1) cout<<"Elemento no se encuentra"<<endl; else cout<<"Elemento encontrado en la posicion"<<pos; getch(); } void leepersonal(int n, struct personal x[]) {int i; for(i=0;i<n;i++) {cout<<"Codigo:"; cin>>x[i].codigo; cout<<"Nombre:"; cin>>x[i].nombre; cout<<"Apellidos:"; cin>>x[i].apellidos; cout<<"Dia:"; cin>>x[i].fecnac.dia; cout<<"Mes:"; cin>>x[i].fecnac.mes; cout<<"Anho:"; cin>>x[i].fecnac.anho; cout<<endl; } } void listado(int n, struct personal x[]) {cout<<endl<<"LISTADO DE EMPLEADOS"<<endl; for(int i=0;i<n;i++) {cout<<x[i].codigo<<"t" <<x[i].nombre<<"t" <<x[i].apellidos<<"t" <<x[i].fecnac.dia<<"t"<<x[i].fecnac.mes<<"t"<<x[i].fecnac.anho<<endl; cout<<endl; } } void ordenaxfecha(int n,struct personal x[]) { struct personal temp; char f1[9],f2[9]; for(int i=1;i<n;i++) for(int j=n-1;j>=i;j--) {strcpy(f1,"");strcpy(f2,""); strcat(f1,x[j-1].fecnac.anho); strcat(f1,x[j-1].fecnac.mes); strcat(f1,x[j-1].fecnac.dia); strcat(f2,x[j].fecnac.anho); strcat(f2,x[j].fecnac.mes); strcat(f2,x[j].fecnac.dia); if(strcmp(f1,f2)>0) { temp=x[j-1]; x[j-1]=x[j]; x[j]=temp; }} } int busqueda(int n,struct personal x[], struct fecha f) { char f1[9],f2[9]; int mitad, izq=0, der=n-1; while(izq<=der) { mitad=(izq+der)/2 ; strcpy(f1,"");strcpy(f2,""); strcat(f1,f.anho); strcat(f1,f.mes); strcat(f1,f.dia); strcat(f2,x[mitad].fecnac.anho); strcat(f2,x[mitad].fecnac.mes); strcat(f2,x[mitad].fecnac.dia); if(strcmp(f1,f2)>0)izq=mitad+1; else if (strcmp(f1,f2)<0)der=mitad-1; else return mitad; } return -1; }
En el programa desarrollamos cuatro funciones: Función leepersonal, en esta función ingresaremos los datos del personal, la función listado nos mostrará todos los datos del personal registrado, la función ordenaxfecha, permite ordenar aal personal a través de su fecha de nacimiento y finalmente la función búsqueda, a través de esta función ejecutamos la búsqueda de un personal pidiendo su fecha de nacimiento.
Espero te haya gustado la primera parte de este tutorial, si te gustó, dale me gusta y compártelo!!
Continuando con ejercicios en C++, les comparto el siguiente post: Búsqueda secuencial en un arreglo
NOTA: busqueda y ordenamiento por fecha, el ejercicio desarrollado en este post es a través del programa Borland C++. Para obtener el programa, clic en el siguiente enlace: Descargar Borland