#include #include #include typedef struct { char* nome; int numero, idade; } Aluno; typedef struct Lst { Aluno a; struct Lst *proximo; } Celula, *ListaAlunos; ListaAlunos initLista() { return NULL; } ListaAlunos insereAluno(ListaAlunos lst, Aluno n) { ListaAlunos nova = (ListaAlunos)malloc(sizeof(Celula)); nova->a = n; nova->proximo = lst; return nova; } void listagemAlunos(ListaAlunos lst) { if (lst == NULL) { printf("Lista vazia\n"); } else { while( lst != NULL) { printf("Nome: %s, Num: %d, Idade: %d\n", lst->a.nome, lst->a.numero, lst->a.idade); lst = lst->proximo; } } } ListaAlunos leAlunos(char *nomeFicheiro) { FILE* fp = fopen(nomeFicheiro,"rb"); ListaAlunos lista = initLista(); if (fp == NULL) { printf("Impossivel abrir ficheiro.\n"); } else { Aluno t; fread(&t,sizeof(Aluno),1,fp); while(!feof(fp)) { lista = insereAluno(lista, t); fread(&t,sizeof(Aluno),1,fp); } } fclose(fp); return lista; } void escreveAlunos(ListaAlunos lst, char *nomeFicheiro) { FILE* fp = fopen(nomeFicheiro,"wb"); if (fp == NULL) { printf("Erro: impossivel criar ficheiro.\n"); } else { while(lst != NULL) { fwrite(&(lst->a),sizeof(Aluno),1,fp); lst = lst->proximo; } } fclose(fp); } int main() { Aluno a1 = {"Carlos", 30512, 18}, a2 = {"Ana", 31010, 19}, a3 = {"Zulmira", 30580, 18}, a4 = {"Paulo", 35413, 21}, a5 = {"David", 33689, 20}; ListaAlunos l1 = initLista(); l1 = initLista(); l1 = insereAluno(l1, a1); l1 = insereAluno(l1, a2); l1 = insereAluno(l1, a3); l1 = insereAluno(l1, a4); l1 = insereAluno(l1, a5); //listagemAlunos(l1); /*printf("\n\n-----------------\n\n"); Aluno novo; char nome[50]; printf("Insira o nome: "); scanf("%s", nome); novo.nome = strdup(nome); printf("Insira o numero: "); scanf("%d", &novo.numero); printf("Insira a idade: "); scanf("%d", &novo.idade); l1 = insereAluno(l1,novo); */ char* nomeFicheiro = "alunos.dat"; printf("\n\nA escrever no ficheiro %s...\n\n",nomeFicheiro); listagemAlunos(l1); escreveAlunos(l1,nomeFicheiro); printf("\n\nA ler do ficheiro %s...\n\n", nomeFicheiro); ListaAlunos l2 = leAlunos(nomeFicheiro); listagemAlunos(l2); system("pause"); return 1; }