#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;
}