Genera un array de
estructuras de 500 elementos
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
/*-----------------Definicion de
tipo de la estructura---------------------*/
typedef
struct datos_empleados{
float nemp;
char nombre[30];
int
edad;
char
domicilio[50];
struct
datos_empleados *next;
}DATOS;
/*-----------------------Definicion
de funciones---------------------------*/
void agregar(void);
void mostrar(DATOS *ptr);
void pornumero(DATOS *ptr);
void pornombre(DATOS *ptr);
int buscar(DATOS *ptr);
void eliminar(DATOS *ptr);
/*-------------------------Definicion
de variables-------------------------*/
int i,j=0,J=0,n=0,z=0; //Contadores
char opc,op,E; //Variables de seleccion
DATOS *p,*base, *one,*paux; //Array de tipo DATOS y puntero a
estructura
/*----------------------Inicio de
funcion principal------------------------*/
main(){
clrscr();
do{ //ciclo para menu
principal
clrscr();
printf("\t\t
*****************MENU*****************");
printf("\n\n\n\n\n\t\t\t A.-
Agregar Empleado.");
printf("\n\t\t\t B.- Ordenar
Los Empleados.");
printf("\n\t\t\t C.- Mostrar
Todos Los Empleados.");
printf("\n\t\t\t D.- Buscar
Empleado.");
printf("\n\t\t\t E.- Eliminar
Empleado.");
printf("\n\t\t\t S.-
Salir.\n");
printf("\n\t\t\tSu opcion es:
");
scanf("%c",&opc);
opc=toupper(opc);
switch(opc){
case 'A':fflush(stdin); // Agrega registro a nuestra base de datos
agregar();
break;
case 'B': // Ordena los registro
p=one;
clrscr();
if(one!=NULL){ //valida si hay datos o no
do{ //Ciclo de submenu
clrscr();
printf("\n\n\n\t\t
Elija El Tipo De Ordenamiento ");
printf("\n\n\t\t
A.- Por Numero De Empleado.");
printf("\n\t\t
B.- Por Nombre De Empleado.");
printf("\n\t\t
C.-(Volver al menu principal).");
printf("\n\n\t\t
Cual es su opcion: ");
fflush(stdin);
scanf("%c",&op);
op=toupper(op);
switch(op){
case
'A':
/* pornumero(p); // ordenacion por numero
printf("\n LOS ELEMENTOS HAN SIDO
ORDENADOS CON EXITO PRESIONE UNA TECLA PARA CONTINUAR...");
printf("\n\t\t LUEGO PRESIONE (C) PARA
VOLVER AL MENU PRINCIPAL... ");
getch();
*/
break;
case
'B': /* // ordenacion por nombre
pornombre(p);
printf("\n LOS ELEMENTOS HAN SIDO
ORDENADOS CON EXITO PRESIONE UNA TECLA PARA CONTINUAR...");
printf("\n\t\t LUEGO PRESIONE (C) PARA
VOLVER AL MENU PRINCIPAL... ");
getch();
*/
break;
}
}while(op!='C');
}
else if(j==1){
printf("\n\n\tSolo existe un elemento no
es necesario ordenar...");
printf("\n\tPresione una tecla par
volver...");getch();
}
else{
printf("\n\n\t No existen elementos
actualmente, no es posible ordenar...");
printf("\n\tPresione una tecla par
volver..."); getch();}
break;
case 'C': //Muestra los datos del registro
clrscr();
if(one!=NULL){ //valida si hay datos o no
J=0;
p=one;
fflush(stdin);
for(i=0;p!=NULL;i++) {
//ciclo que llama a funcion mostrar()
mostrar(p);p=p->next; J++;
if(J>=4){ J=0;
printf("\t\t VER
SIGUIENTES....");
getch();
clrscr();
} }
printf("\n\t PRESIONE UNA TECLA PARA
CONTINUAR..."); }
else{
printf("\n\n No existen registros
actualmente para mostrar.");
}
getch();
break;
case 'D': //busca un registro en el array base
clrscr();
if(one!=NULL){ //valida si hay datos o no
p=one;
buscar(p);}
else{
printf("\n\n\t No
existen registros actualmente para buscar.");
getch();
}
break;
case 'E': //Busca el registro seleccionado y lo
elimina de la base
clrscr();
if(one!=NULL){ //valida si hay datos o no
z=buscar(p);
fflush(stdin);
if(z>=0){
printf("\n\n\t Seguro de que
desea eliminar este elemento (s/n): "); scanf("%c",&E);
if(E=='s'||E=='S'){
eliminar(p);
printf("\n\t El registro se elimino
exitosamente.");
printf("\n\t Presione una tecla para
volver al menu principal..");
getch();
}
} }
else{
printf("\n\n\t No existen registro que
eliminar");
printf("\n\t Presione una tecla para
volver al menu principal..."); getch();
}
break;
}
}while(opc!='S'); //fin de ciclo menu principal
return 0;
}
/*----------------------Fin de
funcion principal---------------------------*/
/*-----------------------Funcion de
agregacion-----------------------------*/
void agregar(void){
char b[21];
//for(i=0;i<1;i++,j++) { //ciclo para agregar datos y llevar
registro de datos introducidos.
clrscr();
base=(DATOS *)
malloc(sizeof(DATOS));
printf("Agrege un numero de
empleado: ");
gets(b); //se captura numero de empleado
como cadena de char.
base->nemp=atof(b); fflush(stdin); //luego se convierte la cadena capturada a un
numero real o float.
printf("Agrege el nombre del
empleado: ");
gets(base->nombre);
fflush(stdin);
printf("Introduzca la edad:
");
scanf("%d",&base->edad);
fflush(stdin);
printf("Introduzca el
domicilio: ");
gets(base->domicilio);fflush(stdin);
if(one==NULL){
one=base;
base->next=NULL;
}
else
{
base->next=one;
one=base;
}
}
/*-------------------------------------------------------------------------*/
/*---------------------Funcion para
mostrar registros---------------------*/
void mostrar(DATOS *ptr){
printf("\n # empleado:
%.0f",ptr->nemp);
printf("\n Nombre:
%s",ptr->nombre);
printf("\n Edad:
%d",ptr->edad);
printf("\n Domicilio:
%s\n\n",ptr->domicilio);
}
/*-------------------------------------------------------------------------*/
/*-------------------Funcion de
ordenacion por numero----------------------*/
/*void pornumero(DATOS *ptr){
DATOS baux,*aux; // variables y punteros
auxiliares tipo DATOS
for(J=0;J<=j;J++){ // ciclo para seleccion e
intercambio de valores
ptr=one;
aux=ptr->next;
for(i=0;i<j-1;i++,){ //bucle para checar todos los registros
if((ptr->nemp)<(aux->nemp)){ // seleccion
baux=base[i];
base[i]=base[i+1];
base[i+1]=baux;
}
}
}
} */
/*---------------------------------------------------------------------------*/
/*-------------------Funcion de
ordenacion por nombre-----------------------*/
/*void pornombre(DATOS *ptr){
char *aux,*auxs,*cad1; //punteros auxiliares
int w,x,y,flag,flag2; //contadores,centinelas y banderas.
DATOS baux; //variable
auxiliar de tipo DATOS.
ptr=base;
cad1=ptr->nombre;
for(J=0;J<j;J++,ptr++)
{
cad1=ptr->nombre;
for(i=0;i<strlen(cad1);i++){
cad1=ptr->nombre;
if((cad1[i]<97)&&(cad1[i]>64)){ //conversion a minusculas
cad1[i]=cad1[i]+32;
}
} }
ptr=base;
aux=ptr->nombre; //asignacion de un puntero a
estructura en un apuntador char
for(w=0;w<j;w++){ //bucles para revisar todas las
posibles combinaciones
ptr=base; //inicializa
aux=ptr->nombre;
for(x=0;x<j;x++,ptr++){ //ciclo
para checar por cadena
aux=ptr->nombre;
auxs=(ptr+1)->nombre;
for(y=0,flag=0;flag==0;y++){ //ciclo para checar por caracter
if(aux[y]>auxs[y]&&x<j-1){ //si el primer caracter es diferente
baux=base[x];
base[x]=base[x+1];
base[x+1]=baux;
flag=1;
}
if(aux[y]==auxs[y]){
for(J=0,flag2=0;J<strlen(aux)||J<strlen(auxs)&&flag2==0;J++){ //ciclo para checar por caracter si los
primeros
if(aux[J]>auxs[J]&&x<j-1){
//caracteres son iguales
baux=base[x];
base[x]=base[x+1];
base[x+1]=baux;
flag2=1;
}
}
}
else{
flag=1;
}
}
}
}
}
*/
/*-------------------------------------------------------------------------*/
/*-----------------------Funcion de
busqueda-------------------------------*/
int buscar(DATOS *ptr){
int busca, caux,r=5,z;
float m;
ptr=one;
char
*cax,*cad1,*cad2;
DATOS buscanom;
do{
clrscr();
ptr=one;
z=-1;
printf("\n\n\t\t ELIJA LA FORMA DE BUSQUEDA...");
printf("\n\t\t A.- Por numero
de empleado.");
printf("\n\t\t B.- Por nombre
de empleado.");
printf("\n\t\t C.-(Volver al
menu principal).");
printf("\n\n\t\t Cual es su
opcion: ");
scanf("%c",&op);
op=toupper(op);
switch(op){
case 'A': clrscr();
ptr=one; r=0;
printf("\n\n\t
Buscar por numero de empleado.");
printf("\n\n\t\t Introdusca el numero del
empleado a buscar: ");
scanf("%i",&busca);
caux=ptr->nemp;
fflush(stdin);
for(i=0;ptr!=NULL;i++){
// ciclo que busca en
todos los registros de la base
caux=ptr->nemp;
if(caux==busca){ // seleccion si es identica
z=i;
printf("\n\nEl elemento actualmente
se encuentra en la posicion [%i].\n\n",i+1); i=j;
mostrar(ptr); r=1;
// r es bandera o centinela
printf("\n\n
Buscar otro? (s/n):");
scanf("%c",&op);
if(op=='n'||op=='N')
{op='C'; break;}
else{op='a';}
}
else{ r=0;} //
bandera o centinela
ptr=ptr->next;
}
if(r==0){
printf("\n\n\n El
elemento que busca no se encuentra actualmente en la lista...");
printf("\n\n
Buscar otro? (s/n):");
scanf("%c",&op);
if(op=='n'||op=='N') {op='C'; break; }
else{op='a';}
}
break;
case 'B':
clrscr();
ptr=one; r=0;
fflush(stdin);
printf("\n\n\t Buscar por nombre de empleado.");
printf("\n\n\t\t
Introdusca el nombre del empleado a buscar: "); gets(buscanom.nombre);
cad2=buscanom.nombre;
cad1=ptr->nombre;
for(J=0;ptr!=NULL;J++) {
for(i=0;i<strlen(cad2);i++){
cad2=buscanom.nombre;
if((cad2[i]<97)&&(cad2[i]>64)){ // conversion a minusculas
cad2[i]=cad2[i]+32;
} }
for(i=0;i<strlen(cad1);i++){
cad1=ptr->nombre;
if((cad1[i]<97)&&(cad1[i]>64)){ //conversion a minusculas
cad1[i]=cad1[i]+32;
}
}
ptr=ptr->next;
}
ptr=one;
for(i=0;ptr!=NULL;i++){
// for para seleccion de elementos iguales
cad2=buscanom.nombre;
cad1=ptr->nombre;
m=strcmp(cad1,cad2);
if(m==0){ z=i;
printf("\n\nEl elemento actualmente se encuentra en la posicion
[%i].\n\n",i+1); i=j;
mostrar(ptr); r=1;
i=j;
printf("\n\n
Buscar otro? (s/n):"); scanf("%c",&op);
if(op=='n'||op=='N') {op='C'; break; }
else{op='a';}
}
else{ r=0;}
ptr=ptr->next;
}
if(r==0&&op){
printf("\n\n\n El elemento que busca no se encuentra actualmente en
la lista...");
printf("\n
Compruebe que: ");printf("\n *El nombre este correctamente
escrito.");printf(" (No importan mayusculas o minusculas.)");
printf("\n
*El nombre no contenga caracteres extra¤os.(ejemplo: %,&,$,?,etc..)");
printf("\n
*El nombre este dado de alta.");
printf("\n\n
Buscar otro? (s/n):");
scanf("%c",&op);
if(op=='n'||op=='N')
{op='C'; break;}
else{op='a';}
}
break;
}
}while(op!='C');
return z;
}
/*-------------------------------------------------------------------------*/
/*-----------------------Funcion
para eliminacion--------------------------*/
void
eliminar(DATOS *ptr){
paux=one;
ptr=one;
for(i=0;i<z;i++){
paux=ptr;
ptr=ptr->next;
}
if(paux!=NULL)
{
if(paux==one)
one=paux->next;
else
paux->next=ptr->next;
}}