Ver Mensaje Individual
Antiguo 10/04/2010, 16:02   #1
antoniogas 
Usuario PREMIUM+
 
Avatar de antoniogas
 
Fecha de ingreso: 28/ene/2004
Mensajes: 590
antoniogas es realmente agradableantoniogas es realmente agradableantoniogas es realmente agradableantoniogas es realmente agradable
Ayuda con listas enlazadas

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:

Cita:
#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--------------------\n\n");
printf("Menu principal\n--------------\n");
printf(" 1) Altas\n 2) Listados\n 3) Consultas \n 4) Bajas\n 5) Modificaciones\n 6) Salir\n\nOpcion: ");
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-----------------------\n\n");
printf("Programa de altas\n--------------\n");
printf("Nuevo registro:\n\n");
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("\n\nQuiere 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----------\n\n");
printf("Listados\n--------------\n");
while(ptr != NULL)
{
printf("Registro %d:\n\n",i);
printf(" Nombre: %s\n",ptr->nombre);
printf(" Edad: %s\n",ptr->edad);
printf(" Cargo: %s\n",ptr->cargo);
printf(" Sueldo: %s\n\n",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----------\n\n");
printf("Consultas\n--------------\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:\n\n",i);
printf(" Nombre: %s\n",ptr->nombre);
printf(" Edad: %s\n",ptr->edad);
printf(" Cargo: %s\n",ptr->cargo);
printf(" Sueldo: %s\n\n",ptr->sueldo);
getch();
sw=1;
}
i++;
ptr = ptr->enlace;
}
if(!sw)
{
printf("No encontrado\n");
getch();
}
clrscr();
printf("Curriculums: \n----------\n\n");
printf("Consultas\n--------------\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----------\n\n");
printf("Bajas\n--------------\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:\n\n",i);
printf(" Nombre: %s\n",ptr->nombre);
printf(" Edad: %s\n",ptr->edad);
printf(" Cargo: %s\n",ptr->cargo);
printf(" Sueldo: %s\n\n",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("Borrado\n");
getch();
}
}
i++;
p = ptr;
ptr = ptr->enlace;
}
if(!sw)
{
printf("No encontrado\n");
getch();
}

clrscr();
printf("Curriculums: \n----------\n\n");
printf("Bajas\n--------------\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----------\n\n");
printf("Consultas\n--------------\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:\n\n",i);
printf(" Nombre: %s\n",ptr->nombre);
printf(" Edad: %s\n",ptr->edad);
printf(" Cargo: %s\n",ptr->cargo);
printf(" Sueldo: %s\n\n",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 encontrado\n");
getch();
}
clrscr();
printf("Curriculums: \n----------\n\n");
printf("Modificaciones\n--------------\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!='\0')
{
if((*cadena>=97)&&(*cadena<=122))
*cadena -= resta;
cadena++;
}

return ret;
}
Haber si me podeis ayudar.

Salu2 y gracias de antemano.
antoniogas está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE