• Viernes 15 de Noviembre de 2024, 02:36

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - antoniogas

Páginas: [1]
1
C/C++ / Re: Listas enlazadas
« en: Viernes 23 de Abril de 2010, 08:51 »
Nadie sabe como grabar en un fichero una lista enlazada??

2
C/C++ / Listas enlazadas
« en: Jueves 15 de Abril de 2010, 18:16 »
Buenas a todos, comentaros que en clase me han mandado hacer el mantenimiento de un fichero con lista enlazadas y que los datos se guarden en un fichero para que al volverlo a ejecutar, los datos sigan ahí, comentaros que he manejado ficheros binarios, relativos, batch, indexados y estructuras relativas, pero no se que hacer para guardar los datos de una lista enlazada en un fichero, aquí os dejo el código de todo lo que tengo hecho hasta ahora:

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

Haber si me podeis ayudar.

Salu2 y gracias de antemano.

Páginas: [1]