Foro CIPET Sede Guanacaste
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Array de estructura (C++)

Ir abajo

Array de estructura (C++) Empty Array de estructura (C++)

Mensaje  CarlosCortes Miér Sep 19, 2007 10:51 am

Genera un array de estructuras de 500 elementos

Código:
/* Programa que genera un array de estructuras de 500 elementos
      en cada estructura se almacenan 4 datos de empleados
      similar a una peque¤a base de datos*/
#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;
}}
/*--------------------------------------------------------------------------*/

/*********************************************»
°  PROGRAMA ELABORADO EN COMPILADOR:        °
°         TURBO C++                    °
°           VERSION 3.0                    °
°        BORLAND INTERNATIONAL              °
°---------------------------------------------°
°            CODIGO FUENTE POR:              °
°      DANIEL ALBERTO RIVERA PERALES.        °
°            MATRICULA.- 185154              °
°           GRUPO: 4§K                  °
È**********************************************/

afro
CarlosCortes
CarlosCortes
Side Administrador
Side Administrador

Cantidad de envíos : 45
Edad : 39
Localización : Huacas, Santa Cruz Guanacaste
Fecha de inscripción : 13/09/2007

http://corcha.es.tl

Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.