// Cristiane Gomes Bim MAT a0014525 // Capitulo 12 Exercicio 02 // Programa que le uma tabela em disco de cursos e de alunos e grava inf no disco. #include #include #include #include struct Ele_curso { int cod; char nome[50]; struct Ele_curso *prox; }; typedef struct Ele_curso *PointEle_curso; void main(void) { PointEle_curso raiz,aux,point; FILE *arq,*arq1; char leitura[100],curso[50],nome[50]; int cod,c,j,i; clrscr(); if( (arq = fopen("a:cursos.dat","r")) == NULL ) { printf ( "ERRORRRRRR"); exit(1); } raiz = NULL; fgets(leitura,100,arq); // Leitura do arquivo com Cod dos Cursos!!! while (!feof(arq)) { cod=atoi(leitura); c=0; while(leitura[c] != ' ') c++; c++; j=0; while(leitura[c] != '\0') { curso[j] = leitura[c]; //pega o nome do curso c++; j++; } curso[j] = leitura[c]; aux =(struct Ele_curso*) malloc(1* sizeof(struct Ele_curso)); if (raiz==NULL){ raiz=aux; aux->cod=cod; strcpy(aux->nome,curso); aux->prox = NULL; point=aux; } else{ point->prox=aux; aux->cod=cod; strcpy(aux->nome,curso); aux->prox=NULL; point=aux; } fgets(leitura,100,arq); } printf("\t\t TABELA DE CURSOS \n\n"); point=raiz; while(point!= NULL){ printf(" => %d : %s\n",point->cod,point->nome); point=point->prox; } fclose(arq); printf("\t Pressione uma tecla para gerar a rela‡Æo de cursos e alunos... \n\n"); printf("\t\t Arquivo criado a:\Cap12Ex2.dat\n"); getch(); //////////////////////////////////////////////////////////////////////// if( (arq = fopen("a:alunos.dat","r")) == NULL ) { printf ( "ERRORRRRRR Alunos"); exit(1); } if( (arq1 = fopen("a:Cap12Ex2.dat","wt")) == NULL ) { printf ( "ERRORRRRRR Arq Saida"); exit(1); } fgets(leitura,100,arq); while (!feof(arq)) { //c=>leitura e j=>curso(dados) c=0;j=0; while(leitura[c] != ' ') { curso[j] = leitura[c]; leitura[c] = '0'; c++; j++; } curso[j] = leitura[c]; //atualiza curso com o cod do aluno leitura[c] = '0'; //zera todas as posicoes de leitura ate chegar o cod do curso. c++; //incrementa posicao do espaco cod=atoi(leitura); // pega o codigo do curso point=raiz; // encontra o nome do curso na memoria while(point!= NULL){ if (point->cod == cod) strcpy(nome,point->nome); point=point->prox; } i=0;j++; while(nome[i] != '\0') { curso[j] = nome[i]; // atualiza os dados (em curso) coloca o nome do curso i++; j++; } j-=1; curso[j] = ' '; while(leitura[c] != ' ') c++; // pula o codigo do curso c++;j++; while(leitura[c] != '\0') { curso[j] = leitura[c]; c++; j++; } curso[j] = leitura[c]; fgets(leitura,100,arq); curso[j+1]= 0x0D; // coloca o enter curso[j+2]= 0x0A; fputs(curso,arq1); } fclose(arq); fclose(arq1); }