[C] Gestor de notas

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

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante 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!

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta