/* (a) Construirea unui fisier cu note (b) parcurgerea si completarea mediei (c) cautarea unei inregistrari dupa nume */ #include #include // pt. exit #include /* definirea tipului pentru componenta */ typedef struct { char nume[30]; int nota1,nota2; float media; } componenta; FILE *f; int x; char nume1[30]; /* construirea fisierului */ void construire(FILE *f) { componenta c; char raspuns; int n=1; do { printf("Introduceti datele pentru studentul %d \n", n); scanf("%s",c.nume); scanf("%d",&c.nota1); scanf("%d",&c.nota2); fflush(stdin); // golirea zonei tampon corespunzatoare dispozitivului de intrare fwrite(&c,sizeof(c),1,f); // scrierea unei componente printf("Continuati ? [d/n]"); raspuns=getchar(); n++; } while(raspuns=='d'); } // afisarea continutului fisierului void parcurgere(FILE *f) { componenta c; unsigned rez; while (!feof(f)) // cat timp nu s-a ajuns la sfarsit de fisier { rez=fread(&c,sizeof(c),1,f); // se retine rezultatul returnat de fread if (rez==1) printf("\n %s %d %d %f", c.nume,c.nota1,c.nota2,c.media); } printf("\n"); } // modificarea componentelor fisierului void modificare(FILE *f) { componenta c; unsigned rez=1; int n=0; while (!feof(f)) { //printf("Referinta inainte de citire: %ld dim comp=%d",ftell(f),sizeof(c)); rez=fread(&c,sizeof(c),1,f); //printf("Referinta dupa citire: %ld rezultat citire %d",ftell(f),rez); getchar(); if (rez==1) { c.media=(c.nota1+c.nota2)/2.0; fseek(f,n*sizeof(c),SEEK_SET); // repozitionare pe componenta ce se modifica // printf("Referinta dupa repozitionare: %ld",ftell(f)); rez=fwrite(&c,sizeof(c),1,f); // printf("Referinta dupa scriere: %ld rezultat scriere =%d",ftell(f),rez); getchar(); n++; fseek(f,n*sizeof(c),SEEK_SET); // pozitionare pe urmatoarea componenta } } } // cautarea unei componente float cautare(FILE *f, char *nume) { componenta c; int rez; while (!feof(f)) { rez=fread(&c,sizeof(c),1,f); if (rez==1) if(!strcmp(c.nume,nume)) return(c.media); } return(-1); } void main() { if((f=fopen("exemplu3.dat","wb"))==0) { printf("Fisierul nu poate fi creat !"); exit(1); } construire(f); fclose(f); if((f=fopen("exemplu3.dat","rb"))==0) { printf("Fisierul nu poate fi deschis in citire !"); exit(2); } parcurgere(f); fclose(f); if((f=fopen("exemplu3.dat","r+b"))==0) { printf("Fisierul nu poate fi deschis in modificare !"); exit(2); } modificare(f); // fclose(f); // fflush(f); // functioneaza corect si fara rewind(f); // fseek(f,0,SEEK_SET); // if((f=fopen("exemplu3.dat","rb"))==0){printf("Fisierul nu poate fi deschis in citire !"); exit(2);} parcurgere(f); rewind(f); printf("nume=");scanf("%s",nume1); x=cautare(f,nume1); if (x==-1) printf("nu s-a gasit\n"); else printf("s-a gasit\n"); // printf("Rez cautare: %f",cautare(f,"popa")); fclose(f); getchar(); getchar(); }