Sunteți pe pagina 1din 5

Lucrul cu fişiere organizate relativ: exemple

Enunțuri:
1. Să se scrie programul care creează un fişier organizat relativ cu date despre produsele unei societăţi
comerciale. Datele care se reţin despre produse sunt: denumirea, pret, cantitate (maxim 12). Cheia
relativă a fişierului este codul produsului. Datele se preiau de la tastatură, sfârşitul introducerii fiind
marcat standard. (exemplu de creare). Să se modifice programul pentru a realiza și operația de
adăugare.
2. Să se scrie programul care listează, într-un fişier text, produsele cu cea mai mare valoare pe an.
(exemplu de consultare cu selecție)
3. Să se scrie programul pentru stergerea produselor care au inregistrat productie zero în cel puţin trei luni.
(exemplu de ștergere cu selecție)

Temă:
4. Să se scrie programul care modifică o cantitate pentru produsele ale căror coduri se introduc de la
tastatură. De la tastatură se va introduce luna (1-12) pentru care se modifica cantitatea. (exemplu de
modificare cod unic) Să se modifice programul astfel încât să se realizeze operațiile de consultare și
ștergere articol unic.
5. Să se scrie programul care listează într-un fişier text toate produsele realizate de societatea comercială.
(exemplu de consultare integrală)
Rezolvări:

1. Să se scrie programul care creează un fişier organizat relativ cu date despre produsele unei societăţi
comerciale. Datele care se reţin despre produse sunt: denumirea, pret, cantitate (maxim 12). Cheia
relativă a fişierului este codul produsului. Datele se preiau de la tastatură, sfârşitul introducerii fiind
marcat standard.
#define _CRT_SECURE_NO_WARNINGS //în cazul în care apar avertismente de securitate
#include<stdio.h>
typedef struct{
char denumire[20];
float pret;
int cant[12];
char is;
}PRODUS;
int nrart(FILE *f, int l)
{long p; int n;
p=ftell(f); fseek(f,0,2); n=ftell(f)/l;
fseek(f,p,0);return n;}
void main()
{FILE *f;
char nume[20]; PRODUS p; int i, cod;
printf("\nFisier: ");gets(nume);
f=fopen(nume,"wb+");
printf("\n Cod produs"); scanf("%d",&cod);
while(!feof(stdin))
{if(cod>=nrart(f,sizeof(PRODUS)))
{p.is=0; fseek(f,0,2);
for(i=nrart(f,sizeof(PRODUS));i<=cod;i++)
fwrite(&p,sizeof(PRODUS), 1, f);
}
fseek(f,cod*sizeof(PRODUS),0); fread(&p,sizeof(PRODUS), 1, f);
if(p.is) printf("\nExista deja un produs cu acest cod");
else{fseek(f,cod*sizeof(PRODUS),0);
printf("Denumire: "); getchar();gets(p.denumire);
printf("pret:"); scanf("%f",&p.pret);
for(i=0;i<12;i++) {printf("Cant %d: ",i+1); scanf("%d",&p.cant[i]);}
p.is=1; fwrite(&p,sizeof(PRODUS), 1, f);}
printf("\nCod: "); scanf("%d",&cod);}
fclose(f);}
2. Să se scrie programul care listează, într-un fişier text, produsele cu cea mai mare valoare pe an.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct{
char denumire[20];
float pret;

int cant[12];
char is;
}PRODUS;
void main()
{FILE *f, *g; char nume[20];
PRODUS p; float max, val; int i, cod;
printf("\nFisier: ");gets(nume);
f=fopen(nume,"rb");
if(!f)printf("\nFisierul %s nu poate fi deschis",nume);
else{printf("\nFisier text: "); gets(nume); g=fopen(nume,"w");
max=0; cod=0;
fprintf(g,"\n Produsele sunt:");
fread(&p,sizeof(PRODUS), 1, f);
while(!feof(f))
{if(p.is)
{val=0;
for(i=0;i<12;i++)val+=p.cant[i]*p.pret;
if(val>max)
{fclose(g);
g=fopen(nume,"w");
max=val;
fprintf(g,"\n Produsele cu valoarea %5.2f sunt:", max);
}
if(val==max)
fprintf(g,"\n%4d %-30s",cod, p.denumire);}
cod++;
fread(&p,sizeof(PRODUS), 1, f);}
fclose(g);
fclose(f);}
}

3. Să se scrie programul pentru stergerea produselor care au inregistrat productie zero în cel puţin trei
luni.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct{
char denumire[20];
float pret;
int cant[12];
char is;
}PRODUS;
void main()
{FILE *f; char nume[20]; PRODUS p; int i, e, n;
printf("\nFisier: ");gets(nume);
f=fopen(nume,"rb+");
if(!f)printf("\nFisierul %s nu poate fi deschis",nume);
else{n=0;
fread(&p,sizeof(PRODUS), 1, f);
while(!feof(f))
{if(p.is)
{e=0;
for(i=0;i<12 && e<3;i++) if(p.cant[i]==0) e++;
if(e>=3)
{printf("\n%-30s",p.denumire);
fseek(f,ftell(f)-sizeof(PRODUS),SEEK_SET);
p.is=0; fwrite(&p,sizeof(PRODUS), 1, f);
fseek(f,0,1);
n++;}
}
fread(&p,sizeof(PRODUS), 1, f);}
fclose(f); printf("\nAu fost sterse %d produse",n);}
}

S-ar putea să vă placă și