/* Tratarea fis. la nivel superior Prelucrarea fisierelor binare */ #include #include #include #include #include #include #include #define MAX 30 typedef struct { char nu[MAX]; char nr[12]; char adr[MAX]; } articol; articol za; char Numefis[30]; char Numenou[30]; void creare (void); void adaug_sf(void); void modificare(void); void stergere(void); void listare(void); void redenumire(void); void main() { char op; clrscr(); strcpy(Numefis,"C:\\abonati.txt"); strcpy(Numenou,"C:\\abonati1.txt"); do { clrscr(); printf("\n OPERATII ASUPRA ABONATILOR\n"); printf("C Creare fisier\n"); printf("A Adaugarea unui abonat la sfarsit\n"); printf("M Modificare abonat\n"); printf("S Stergere articol\n"); printf("L Afisare abonati\n"); printf("E Terminare program\n\n\n"); printf(" Introduceti optiunea:"); scanf("%c",&op);op=toupper(op); switch (op) { case 'C':creare();break; case 'A':adaug_sf();break; case 'M':modificare();break; case 'S':stergere();break; case 'L':listare();break; case 'E':printf("Terminare program\n");break; default :printf("Optiune gresita!\n");break; }/* switch */ printf("Tastati ENTER!"); fflush(stdin); getch(); } while (op != 'E'); }/* main */ void creare (void) { FILE *pf; int i,nr; char c='D'; clrscr(); /* se deschide fis in scriere */ pf=fopen(Numefis,"wb"); if (pf==NULL) { printf("Nu se poate crea fisierul\n"); exit(1); }; do { printf("\n Introduceti numele si prenumele:"); fflush(stdin);gets(za.nu); printf("\n Introduceti adresa:");fflush(stdin); gets(za.adr); printf("\n Introduceti nr. de telefon:");fflush(stdin); gets(za.nr); fwrite(&za,sizeof(za),1,pf); printf("Mai adaugati(D/N):");fflush(stdin);c=getche();c=toupper(c); } while(c=='D'); fclose(pf); }/* creare */ void adaug_sf(void) { FILE *pf; int i,n; clrscr(); /* se deschide fis pentru adaugare */ if ((pf=fopen(Numefis,"a"))==0) { printf("Nu se poate deschide fisierul\n"); exit(1); } printf("\n Introduceti numele si prenumele:");fflush(stdin);gets(za.nu); printf("\n Introduceti adresa:");fflush(stdin); gets(za.adr); printf("\n Introduceti nr. de telefon:");fflush(stdin); gets(za.nr); fwrite(&za,sizeof(za),1,pf); fclose(pf); }/* adaug_sf */ void modificare(void) { FILE *pf; int i,sant=0; long n,m; char numedat[30]; char nume[30]; char adresa[30]; char telefon[12]; clrscr(); /* se deschide fis pentru citire */ pf=fopen(Numefis,"r+"); if (pf==0) { printf("Nu se poate modifica fisierul\n"); exit(1); } printf("\nNumele de modificat= ");fflush(stdin);gets(numedat); while(!feof(pf)) { n=ftell(pf); /* n contine pozitia curenta a pointerului de fisier */ i=fread(&za,sizeof(za),1,pf); /* pointerul de fisier indica acum art. urmator, celui citit. */ if(i!=0) { if(strcmp(za.nu,numedat)==0) { /* Acum pointerul de fisier = n+sizeof(za) octeti */ printf("\n Articolul de modificat:"); printf("\n numele si prenumele: %s",za.nu); printf("\n adresa:%s",za.adr); printf("\n nr. de telefon:%s\n",za.nr); printf("\nNoul nume= ");fflush(stdin);gets(nume); printf("\nNoua adresa= ");fflush(stdin);gets(adresa); printf("\nNoul telefon= ");fflush(stdin);gets(telefon); strcpy(za.nu,nume); strcpy(za.nr,telefon); strcpy(za.adr,adresa); /* n contine pozitia in fisier a articolului de modificat */ /* repun pointerul de fisier pe pozitia unde fac modificarea, indicata de n */ fseek(pf,n,0); fwrite(&za,sizeof(articol),1,pf); /* Acum pointerul de fisier = n+sizeof(za) octeti */ sant=1; } } }/* while */ if (sant==0) printf("\n\n Nu am gasit articolul in fisier\n\n"); fclose(pf); }/* modificare */ void stergere(void) { FILE *pf; FILE *pf1; int i,n,sant; char numedat[30]; clrscr(); sant=0; /* se deschide fis pf pt. citire */ if ((pf=fopen(Numefis,"rb"))==0) { printf("Nu se poate desch. fis din care sterg \n"); exit(1); } /* se deschide fis pf1 pt. scriere binara */ if ((pf1=fopen(Numenou,"wb"))==0) { printf("Nu se poate creea fisierul nou\n"); exit(1); } printf("Cheia art. de sters (numele pers.)= ");fflush(stdin);gets(numedat); while(!feof(pf)) { i=fread(&za,sizeof(za),1,pf); if(i!=0) { if(strcmp(za.nu,numedat)==0) { printf("\n Am sters articolul:"); printf("\n numele si prenumele: %s",za.nu); printf("\n adresa:%s",za.adr); printf("\n nr. de telefon:%s\n",za.nr); sant=1; } else fwrite(&za,sizeof(za),1,pf1); } }/* while */ if (sant==0) printf("\n\n Nu am gasit articolul in fisier\n\n"); fclose(pf); fclose(pf1); redenumire(); } void listare(void) { FILE *pf; int i,n; clrscr(); pf=fopen(Numefis,"rb"); if(pf==0) { printf("\n nu pot deschide fis\n"); exit(1); } printf("\n Abonatii telefonici sunt:\n"); while(!feof(pf)) { i=fread(&za,sizeof(za),1,pf); if(i!=0) { printf("\n numele si prenumele: %s",za.nu); printf("\n adresa:%s",za.adr); printf("\n nr. de telefon:%s\n",za.nr); } } ; fclose(pf); } void redenumire(void) { char Numenou[80]; char Numefis[80]; unlink(Numefis); strcpy(Numenou,"C:\\abonati1.txt"); strcpy(Numefis,"C:\\abonati.txt"); if (remove(Numefis) == 0) printf("Removed %s.\n",Numefis); else perror("remove"); if (rename(Numenou, Numefis) == 0) printf("Renamed %s to %s.\n", Numenou, Numefis); else perror("rename"); }