Programación General > C/C++

 Re: Listas simple......

<< < (2/3) > >>

alama:
He añadido y corregido y por ahora creo q asi esta bastante bien,solo m falta lo de los comentarios(si m puedes ayudar!)#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

struct articulo{
      char *cod_art;
      char *nombre;
      char *desc;
      float precio;
      int existencias;
      char *cod_prov;
      char *notas;
          };
struct nodo_articulo
 {
  struct articulo inf_articulo;
  struct nodo_articulo *sig;
 };
void leer_articulo(struct articulo *art);
struct nodo_articulo *BuscarNodoArtInsertar(struct nodo_articulo *principio,struct nodo_articulo *nodo_buscado,int *repetido);
int BorrarNodoArt(struct nodo_articulo **principio,struct nodo_articulo *nodo_borrar);

struct nodo_articulo *BuscarNodoArtBorrar(struct nodo_articulo *principio,struct nodo_articulo *nodo_buscado,int *esta);

void mostrar_articulo(struct articulo *art);
int InsertarNodoArt(struct nodo_articulo **principio,struct nodo_articulo *nodo_nuevo);

void main()
{

 struct articulo *art;
 struct nodo_articulo *nodo_nuevo,*principio=NULL;
 struct nodo_articulo *nodo_borrar;
 int op;

 do
 {
  printf("nELIGE UNA OPCIONn");
  printf("1.-Insertar en listan");
  printf("3.-Mostrar la listan");
  printf("2.-Borrar n");
  printf("4.-Salirn");
  scanf("%i",&op);
  fflush(stdin);
  switch(op)
   {
    case1:
     art=(struct nodo_articulo*)malloc(sizeof(struct nodo_articulo));
     leer_articulo(&(nodo_nuevo->inf_articulo));
     InsertarNodoArt(&principio,nodo_nuevo);

     break;
    case2:
          /*Bucle que recorra la lista desde el principio y llame cada vez a mostrar_Articulo*/
     mostrar_articulo(art);
     break;
    case3:
     /*Preguntar codigo del articulo a borrar*/
     printf("n¨Que articulo deseea borrar?");
          /*Buscar el nodo a borrar*/
     BorrarNodoArt (&principio,nodo_borrar);
     break;
    default:
       printf("nERROR:Dato incorrecto");
       break;
   }
  }
 while(op!=4);
}          

void leer_articulo(struct articulo *ar)
{
 char aux[30];
 float prec;
 printf("nIntroduzca el codigo del articulo: ");
 gets(aux);
 ar->cod_art=(char*)malloc((strlen(aux)+1)*sizeof(char));
 strcpy(ar->cod_art,aux);
 fflush(stdin);

 printf("nIntroduzca el nombre del articulo: ");
 gets(aux);
 ar->nombre=(char*)malloc((strlen(aux)+1)*sizeof(char));
 strcpy(ar->nombre,aux);
 fflush(stdin);

 printf("nIntroduzca la descripcion del articulo: ");
 gets(aux);
 ar->desc=(char*)malloc((strlen(aux)+1)*sizeof(char));
 strcpy(ar->desc,aux);
 fflush(stdin);

 printf("nIntroduzca el precio del articulo: ");
 scanf("%f",&prec);
 prec=ar->precio;

 printf("nIntroduzca las existencias del articulo: ");
 scanf("%i",&ar->existencias);

 printf("nIntroduzca el codigo de la provincia: ");
 gets(aux);
 ar->cod_prov=(char*)malloc((strlen(aux)+1)*sizeof(char));
 strcpy(ar->cod_prov,aux);
 fflush(stdin);

 printf("nIntroduzca las notas del articulo: ");
 gets(aux);
 ar->notas=(char*)malloc((strlen(aux)+1)*sizeof(char));
 strcpy(ar->notas,aux);
 fflush(stdin);

}


int InsertarNodoArt(struct nodo_articulo **principio,struct nodo_articulo *nodo_nuevo)
 {
 struct nodo_articulo *anterior;
 int ya_esta;
 

    if(*principio==NULL)
      {
        *principio=nodo_nuevo;
        nodo_nuevo->sig=NULL;
      }
    else
       {
         anterior=BuscarNodoArtInsertar(principio,nodo_nuevo,&ya_esta);

     if(ya_esta)
          return 0;
     else
           if(anterior==NULL)
           {
      nodo_nuevo->sig=*principio;
           *principio=nodo_nuevo;
           }
      else
          {
          nodo_nuevo->sig=anterior->sig;
          anterior->sig=nodo_nuevo;
          }
        }
 }
struct nodo_articulo *BuscarNodoArtInsertar(struct nodo_articulo *principio,struct nodo_articulo *nodo_buscado,int *repetido)
  {
   struct nodo_articulo *aux;
   int comparacion;

        aux = principio;
         comparacion =strcmp(nodo_buscado->inf_articulo.cod_art,aux->inf_articulo.cod_art);

         if(comparacion == 0)
          {
      *repetido = 1;
      return NULL;
          }
         else if (comparacion > 0 && aux->sig == NULL)
          {
      *repetido =0;
      return aux;
          }
         else if(comparacion < 0)
          {
      *repetido = 0;
      return NULL;
          }
         while(aux->sig !=NULL)
          {
      comparacion = strcmp(nodo_buscado->inf_articulo.cod_art,aux->inf_articulo.cod_art);

        if(comparacion == 0)
         {
          *repetido = 1;
          return NULL;
         }
        else if(comparacion < 0)
         {
          *repetido = 0;
          return aux;
         }
          aux = aux->sig;
          }
          return aux;
    }


void mostrar_articulo(struct articulo *art)
{
 printf("nArticulo: %s",art->cod_art);
 printf("nNombre: %s",art->nombre);
 printf("nDescripcion: %s",art->desc);
 printf("nPrecio: %f",art->precio);
 printf("nExistencias: %i",art->existencias);
 printf("nProvincia: %s",art->cod_prov);
 printf("nNotas: %s",art->notas);
 getch();
}
int BorrarNodoArt(struct nodo_articulo **principio,struct nodo_articulo *nodo_borrar)
 {
  struct nodo_articulo *anterior, *a_borrar;
  int esta,no_esta=0;

      if(*principio == NULL)
         {
      esta=0;
      return esta;
         }
      else
         {
          anterior=BuscarNodoArtBorrar(principio, nodo_borrar,&no_esta);

       if(!esta)
         return esta;
       else if(anterior == NULL)
         {
          a_borrar=*principio;
          *principio=a_borrar->sig;
          free(a_borrar);
         }
        else
           {
            a_borrar=anterior->sig;
            anterior->sig=a_borrar->sig;
            free(a_borrar);
          }

         }
  }
 struct nodo_articulo *BuscarNodoArtBorrar(struct nodo_articulo *principio,struct nodo_articulo *nodo_buscado,int *esta)
 {
  struct nodo_articulo *aux;
  int comparacion;

       aux=principio;
       comparacion=CompararArticulosCod(&nodo_buscado->inf_articulo,&aux->inf_articulo);

       if(comparacion == 0)
        {
       *esta=1;
       return NULL;
        }
       else if(aux->sig == NULL)
        {
       *esta=0;
       return NULL;
        }
       while(aux->sig !=NULL)
        {
       comparacion = CompararArticulosCod(&nodo_buscado->inf_articulo,&aux->inf_articulo);

      if(comparacion == 0)
       {
          *esta = 1;
          return aux;
       }
      else if(comparacion < 0)
       {
          *esta = 0;
          return NULL;
       }
      else aux = aux->sig;
        }
        *esta = 0;
        return NULL;
  }

JuanK:
Aque te refieres con lo de los comentarios.??

Juank

alama:
A lo q pone entre /*    */,se llama asi,no?,bueno pero solo m falta el q pone
/*Buscar el nodo a borrar*/,gracias:hippi:

JuanK:
ayudaria mucho si colocas el codigo identado..

utilizando antes del codigo:
["code"] y al final  ["/code"]
logicamente sin las comilals..
o sino anexando el archivo...

Juank

alama:
no te entiendo!q quieres q ponga?o como lo quieres q lo ponga?:question:

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa