[C] Gestor de notas

Iniciado por mr.blood, Mayo 20, 2013, 01:18:43 PM

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.

Mayo 20, 2013, 01:18:43 PM Ultima modificación: Octubre 28, 2013, 09:18:48 AM por Expermicid
Un programa para organizar alumnos y notas utilizando listas enlazadas.

Código: c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct alumnos
{
struct alumnos *last;
char nombre[15];
int nota;
};

struct alumnos *actual;

void nuevo_alumno(char *nombre, int nota)
{
struct alumnos *nuevo;
nuevo=(struct alumnos *)malloc(sizeof(struct alumnos));
strcpy(nuevo->nombre, nombre);
nuevo->nota=nota;

if(actual==NULL)
{
actual=nuevo;
}
else
{
nuevo->last=actual;
actual=nuevo;
}
}

void mostrar_lista()
{
struct alumnos *consulta;
for(consulta=actual;consulta->last!=NULL;consulta=consulta->last)
{
printf("\n%s --- %i", consulta->nombre, consulta->nota);
}
printf("\n%s --- %i", consulta->nombre, consulta->nota);
}

void borrar_lista()
{
struct alumnos *consulta;
struct alumnos *buffer;
consulta=actual;
while(consulta->last!=NULL)
{
buffer=consulta->last;
free(consulta);
consulta=buffer;
}
}

void guardar_lista()
{
FILE *archivo=fopen("archivo", "w");
struct alumnos *consulta;
for(consulta=actual;consulta->last!=NULL;consulta=consulta->last)
{
fprintf(archivo, "%s %i\n", consulta->nombre, consulta->nota);
}
fprintf(archivo, "%s %i\n", consulta->nombre, consulta->nota);
fclose(archivo);
}

void cargar_lista()
{
FILE *archivo=fopen("archivo", "r");
struct alumnos consulta;
fscanf(archivo, "%s %i", consulta.nombre, &consulta.nota);
while(!feof(archivo))
{
nuevo_alumno(consulta.nombre, consulta.nota);
fscanf(archivo, "%s %i", consulta.nombre, &consulta.nota);
}
fclose(archivo);
}

void borrar_alumno(char *nombre)
{
struct alumnos *consulta, *buffer;
buffer=actual;
for(consulta=actual;consulta->last!=NULL;consulta=consulta->last)
{
if(strcmp(consulta->nombre, nombre))
{
buffer=consulta;
}
else
{
buffer->last=consulta->last;
free(consulta);
return;
}
}

buffer->last=NULL;
free(consulta);

}
int buscar_alumno(char *nombre)
{
struct alumnos *consulta;
for(consulta=actual;consulta->last!=NULL;consulta=consulta->last)
{
if(!strcmp(consulta->nombre, nombre))
{
return consulta->nota;
}
}
if(!strcmp(consulta->nombre, nombre))
{
return consulta->nota;
}
return -1;
}

int main()
{
//~ char nombre[15];
//~ int nota;
//~ while((getchar())!=' ')
//~ {
//~ printf("Introduzca nombre y nota: ");
//~ scanf("%s %i", nombre, &nota);
//~ setbuffer(stdin, 0, 0);
//~ nuevo_alumno(nombre, nota);
//~ mostrar_lista();
//~ }
//~ guardar_lista();
//~ borrar_lista();

cargar_lista();
mostrar_lista();
borrar_alumno("Aurelio");
printf("%i", buscar_alumno("Irene"));
borrar_lista();

return 0;
}


Sa1uDoS

Gracias por el aporte!

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login