Sunteți pe pagina 1din 9

Fiiere organizate relativ

1.CREARE CU ACCES DIRECT

S se scrie programul care creeaz un fiier organizat relativ cu date despre


bauturile unui bar. Datele care se rein despre produse sunt: denumirea
produsului, pret, cantitatea (exprimata in sticle). Cheia relativ a fiierului
este codul produsului. Datele se preiau de la tastatur, sfritul introducerii
fiind marcat standard.
#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: "); fflush(stdin); 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.MODIFICARE CU ACCES DIRECT

S se scrie programul pentru adaugarea unui comision de 10% la


produsele al caror cod se introduce de la tastatura.

#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)))
printf("Nu exista");
else {
fseek(f, cod * sizeof(PRODUS), 0);
fread(&p, sizeof(PRODUS), 1, f);
if (p.is) printf("\nExista deja un produs cu acest cod");
else {
p.pret += p.pret*1.1;
fseek(f, cod * sizeof(PRODUS), 0);
fwrite(&p, sizeof(PRODUS), 1, f);
}
}
printf("\nCod: "); scanf("%d", &cod);
}
fclose(f);
}

3.STERGERE CU ACCES DIRECT

S se scrie programul pentru stergerea produselor care au lipsit


din stoc minim 6 luni.

#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)))
printf("Nu exista");
else {
fseek(f, cod * sizeof(PRODUS), 0);
fread(&p, sizeof(PRODUS), 1, f);
if (p.is) printf("\nExista deja un produs cu acest cod");
else {
p.is = 0;
fseek(f, cod * sizeof(PRODUS), 0);
fwrite(&p, sizeof(PRODUS), 1, f);
}
}
printf("\nCod: "); scanf("%d", &cod);
}
fclose(f);
}

4.CONSULTARE CU ACCES DIRECT

S se scrie programul pentru afisarea numelui si a pretului


produselor al caror cod este introdus de la tastatura.
#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)))
printf("Nu exista");
else {
fseek(f, cod * sizeof(PRODUS), 0);
fread(&p, sizeof(PRODUS), 1, f);
if (p.is) printf("\nExista deja un produs cu acest cod");
else printf("%s %f", p.nume, p.pret);
}
printf("\nCod: "); scanf("%d", &cod);
}
fclose(f);
}

5.MODIFICARE CU SELECTIE
#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);
if (!(f = fopen(nume, "rb")))printf("\nFisierul %s nu poate fi deschis", nume);
else {
printf("\nFisier text: "); gets(nume); g = fopen(nume, "w");
max = 0; cod = 0;
fseek(f, 0, 0);
fprintf(g, "\n Produsele sunt:");
fread(&p, sizeof(PRODUS), 1, f);
while (!feof(f))
{
if (p.is)
{
if (p.pret > 10)
P.pret+=p.pret*1.1;
fseek(f, ftell(f) - sizeof(PRODUS), 0);
fwrite(&p, sizeof(PRODUS), 1, f);
Fseek(f,0,1);
}
fclose(g);
fclose(f);
}
}

6.LISTARE
S se scrie programul care listeaz, ntr-un fiier text, produsele care pot
obtine cel mai mare profit, avand cea mai mare valoare determinata de
produsul dintre cantitate si pret.
#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);
if (!(f = fopen(nume, "rb")))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);
}
}

7.CONSULTARE CU SELECTIE
Sa se scrie intr-un fisier text produsele ale caror pret este mai mare
de 10 lei.
#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);
if (!(f = fopen(nume, "rb")))printf("\nFisierul %s nu poate fi deschis", nume);
else {
printf("\nFisier text: "); gets(nume); g = fopen(nume, "w");
max = 0; cod = 0;
fseek(f, 0, 0);
fprintf(g, "\n Produsele sunt:");
fread(&p, sizeof(PRODUS), 1, f);
while (!feof(f))
{
if (p.is)
{
if (p.pret > 10)
fprintf(g, " %s %f\n", p.nume, p.pret);
fread(&p, sizeof(PRODUS), 1, f);
}
fclose(g);
fclose(f);
}
}

8.STERGERE CU SELECTIE

S se scrie programul pentru stergerea produselor care au lipsit din stoc


minim 6 luni.
#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);
if (!(f = fopen(nume, "rb+")))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<6; i++) if (p.cant[i] == 0) e++;
if (e >= 6)
{
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