#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <conio.h>#include <string.h>#include <math.h>typedef struct nodo{ char nombre[20]; char edad[3]; char cargo[9]; char sueldo[10]; struct nodo *enlace;}Personal;void altas(Personal **);void listados(Personal *);void consultas(Personal *);void bajas(Personal **);void modificaciones(Personal *);char *strtoupper(char *);int main(){ Personal *lista=NULL; int opc, exit=0; enum {ALTAS=1, LISTADOS, CONSULTAS, BAJAS, MODIFICACIONES, EXIT}; do { clrscr(); printf("Curriculum (listas):n--------------------nn"); printf("Menu principaln--------------n"); printf(" 1) Altasn 2) Listadosn 3) Consultas n 4) Bajasn 5) Modificacionesn 6) SalirnnOpcion: "); scanf("%d",&opc); switch(opc) { case ALTAS: altas(&lista); break; case LISTADOS: listados(lista); break; case CONSULTAS: consultas(lista); break; case BAJAS: bajas(&lista); break; case MODIFICACIONES: modificaciones(lista); break; case EXIT: exit=1; break; default: { printf("Opcion incorrecta"); getch(); } } }while(!exit); clrscr(); printf("Hasta luego "); free(lista); return 0;}void altas(Personal **ptr){ Personal *nuevo, *ptr2; do { ptr2 = *ptr; nuevo = (Personal *) malloc(sizeof(Personal)); clrscr(); printf("Curriculums: n-----------------------nn"); printf("Programa de altasn--------------n"); printf("Nuevo registro:nn"); fflush(stdin); printf(" Nombre: "); gets(nuevo->nombre); printf(" Edad: "); gets(nuevo->edad); printf(" Cargo: "); gets(nuevo->cargo); printf(" Sueldo: "); gets(nuevo->sueldo); nuevo->enlace = NULL; if(*ptr==NULL) *ptr = nuevo; else { while(ptr2->enlace != NULL) ptr2 = ptr2->enlace; ptr2->enlace = nuevo; } printf("nnQuiere introducir mas registros (s/n)? => "); } while (toupper(getchar()) == 'S'); clrscr(); printf("Fin del programa de altas, pulsa una tecla para volver al menu"); getch();}void listados(Personal *ptr){ int i = 1; clrscr(); printf("Curriculums: n----------nn"); printf("Listadosn--------------n"); while(ptr != NULL) { printf("Registro %d:nn",i); printf(" Nombre: %sn",ptr->nombre); printf(" Edad: %sn",ptr->edad); printf(" Cargo: %sn",ptr->cargo); printf(" Sueldo: %snn",ptr->sueldo); getch(); ptr = ptr->enlace; i++; } printf("Fin del programa de listados, pulsa una tecla para volver al menu"); getch();}void consultas(Personal *lista){ Personal *ptr; int i=1,sw=0; char cons[20]; clrscr(); printf("Curriculums: n----------nn"); printf("Consultasn--------------n"); printf("Nombre a buscar (FIN para terminar): "); fflush(stdin); gets(cons); while(strncmp(strtoupper(cons),"FIN",3)!=0) { ptr = lista; while(ptr != NULL) { if(strncmp(strtoupper(ptr->nombre),strtoupper(cons),strlen(cons))==0) { printf("Registro %d:nn",i); printf(" Nombre: %sn",ptr->nombre); printf(" Edad: %sn",ptr->edad); printf(" Cargo: %sn",ptr->cargo); printf(" Sueldo: %snn",ptr->sueldo); getch(); sw=1; } i++; ptr = ptr->enlace; } if(!sw) { printf("No encontradon"); getch(); } clrscr(); printf("Curriculums: n----------nn"); printf("Consultasn--------------n"); printf("Nombre a buscar (FIN para terminar): "); gets(cons); sw=0; i=1; }}void bajas(Personal **lista){ Personal *ptr, *p, *p1, *p2; int i=1,sw=0; char cons[20]; clrscr(); printf("Curriculums: n----------nn"); printf("Bajasn--------------n"); printf("Nombre a buscar (FIN para terminar): "); fflush(stdin); gets(cons); while(strncmp(strtoupper(cons),"FIN",3)!=0) { ptr = *lista; while(ptr != NULL) { if(strncmp(strtoupper(ptr->nombre),strtoupper(cons),strlen(cons))==0) { printf("Registro %d:nn",i); printf(" Nombre: %sn",ptr->nombre); printf(" Edad: %sn",ptr->edad); printf(" Cargo: %sn",ptr->cargo); printf(" Sueldo: %snn",ptr->sueldo); getch(); sw=1; printf("¿Seguro que quieres borrar este registro?(s/n) "); if(toupper(getch())=='S') { if(ptr == *lista) { p = *lista; if(p != NULL) { p = p->enlace; free(*lista); } *lista = p; } else if(ptr->enlace == NULL) { p1 = *lista; if(p1 != NULL) { if(p1->enlace == NULL) { free(*lista); *lista = NULL; } else { while(p1->enlace != NULL) { p2 = p1; p1 = p1->enlace; } p2->enlace = NULL; free(p1); } } } else { p->enlace = ptr->enlace; free(ptr); } printf("Borradon"); getch(); } } i++; p = ptr; ptr = ptr->enlace; } if(!sw) { printf("No encontradon"); getch(); } clrscr(); printf("Curriculums: n----------nn"); printf("Bajasn--------------n"); printf("Nombre a buscar (FIN para terminar): "); gets(cons); sw=0; }}void modificaciones(Personal *lista){ Personal *ptr; int i=1,sw=0; char cons[20]; clrscr(); printf("Curriculums: n----------nn"); printf("Consultasn--------------n"); printf("Nombre a buscar (FIN para terminar): "); fflush(stdin); gets(cons); while(strncmp(strtoupper(cons),"FIN",3)!=0) { ptr = lista; while(ptr != NULL) { if(strncmp(strtoupper(ptr->nombre),strtoupper(cons),strlen(cons))==0) { printf("Registro %d:nn",i); printf(" Nombre: %sn",ptr->nombre); printf(" Edad: %sn",ptr->edad); printf(" Cargo: %sn",ptr->cargo); printf(" Sueldo: %snn",ptr->sueldo); getch(); sw=1; printf("¿Quieres modificar este registro?(s/n) "); if(toupper(getch())=='S') { printf("n Nombre: "); gets(ptr->nombre); printf("n Edad: "); gets(ptr->edad); printf(" Cargo: "); gets(ptr->cargo); printf(" Sueldo: "); gets(ptr->sueldo); printf("nRegistro %d modificado",i); getch(); } } i++; ptr = ptr->enlace; } if(!sw) { printf("No encontradon"); getch(); } clrscr(); printf("Curriculums: n----------nn"); printf("Modificacionesn--------------n"); printf("Nombre a buscar (FIN para terminar): "); gets(cons); sw=0; }}char *strtoupper(char *cadena){ int resta = 32; char *ret; ret = cadena; while(*cadena!=' ') { if((*cadena>=97)&&(*cadena<=122)) *cadena -= resta; cadena++; } return ret;}