Sunteți pe pagina 1din 5

/*

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: denumire, pret, cantitate.
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;
char is;
}PRODUS;

int nrart(FILE* f, int l)


{
long p; //pozitia
int n; //nr total de inregistrari
//stocam in variabila p pozitia curenta din fisier
p = ftell(f);
//mutam file pointer-ul la sfarsitul fisierului
fseek(f, 0, 2);
n = ftell(f) / l;
//mutăm pointerul către fișier înapoi la poziția originală stocată în p.
fseek(f, p, 0);
// returnam numărul calculat de înregistrări n
return n;
}
void main()
{
FILE* f;
char nume[20];
PRODUS p;
int i, cod;
printf("\nFisier: ");
gets(nume);
f = fopen(nume, "wb+");
printf("\nCod: ");
scanf("%d", &cod);
while (!feof(stdin))
{
//Se citește un cod de produs de la utilizator și se
// verifică dacă există deja un produs cu acest cod în fișier.
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 {
//Dacă nu există, utilizatorul este solicitat să introducă informații despre produs (denumire, preț, cantitate) și aceste
informații sunt salvate în fișier.
fseek(f, cod * sizeof(PRODUS), 0);
printf("Denumire: ");
getchar();
gets(p.denumire);
printf("pret:");
scanf("%f", &p.pret);
printf("Cant: ");
scanf("%d", &p.cant);
p.is = 1;
fwrite(&p, sizeof(PRODUS), 1, f);
}
printf("\nCod: ");
scanf("%d", &cod);
}
fclose(f);
}

/*Să se scrie subprogramul care listează, într-un fişier text,


produsele și un exemplu de apel. */

#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;
char is; // is -indicator de stare
}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;
}
raport(FILE* f) //primeste ca parametrul fisierul
{
FILE* raport;
char numeRaport[30];
PRODUS p;
//citim de la tastatura numele raportului
printf("Introduceti numele raportului: ");
scanf("%s", numeRaport);
//deschidem raportul
raport = fopen(numeRaport, "w");
if (!raport)
printf("Eroare");
else
{
//se tipareste in fisierul txt (raport),pe primul rand capul de tabel
fprintf(raport, "Nr.crt Cod produs Denumire Cantitate Pret\n");

/declaram 2 variabile de tip intreg nrcrt si codul produsului


int nrcrt = 0, cod = 0;
//parcurgem fis binar si scriem totul in fisier txt
fread(&p, sizeof(PRODUS), 1, f);
while (!feof(f))
{
//prelucrare
if (p.is == 1)
{
nrcrt++; //nrcrt creste de fiecare data cand scriem in fisierul txt
fprintf(raport, "%-7d %-10d %-11s %-9d %.2f\n", nrcrt, cod, p.denumire, p.cant, p.pret);
}
cod++;

//citire
fread(&p, sizeof(PRODUS), 1, f);
}
fclose(raport);
}
}
void main()
{
FILE* f;
char nume[20];
PRODUS p;
printf("Nume fisier binar = ");
scanf("%s", nume);
//deschidem fisierul binar
f = fopen(nume, "rb");
//verificam
if (!f)
printf("Eroare");
else
{
//apelam raportul
raport(f);
//inchidem raportul
fclose(f);
}
}

/*Să se scrie subprogramul care modifică cantitatea (aprovizionare) pentru produsele ale căror coduri se introduc de la
tastatură și un exemplu de apel. 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;
char is; // is -indicator de stare
}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 raport(FILE* f) //primeste ca parametrul fisierul


{
//declaram fisierul
FILE* raport;
char numeRaport[30];
PRODUS p;
//citim de la tastatura numele raportului
printf("Introduceti numele raportului: ");
scanf("%s", numeRaport);
//deschidem raportul
raport = fopen(numeRaport, "w");
if (!raport)
printf("Eroare");
else
{

//pe primul rand avem capul de tabel


fprintf(raport, "Nr.crt Cod produs Denumire Cantitate Pret\n");
int nrcrt = 0, cod = 0;
//parcurgem fis binar si scriem totul in fisier txt
fread(&p, sizeof(PRODUS), 1, f);
while (!feof(f))
{
//prelucrare
if (p.is == 1)
{
nrcrt++; //nrcrt creste de fiecare data cand scriem in fisierul txt
fprintf(raport, "%-7d %-10d %-11s %-9d %.2f\n", nrcrt, cod, p.denumire, p.cant,
p.pret);

}
cod++;

//citire
fread(&p, sizeof(PRODUS), 1, f);
}
fclose(raport);
}
}
void main()
{
FILE* f;
char nume[20];
PRODUS p;
int cod;
printf("Nume fisier binar = ");
scanf("%s", nume);
//deschidem fisierul binar
f = fopen(nume, "rb+");
//verificam
if (!f)
printf("Eroare");
else
{
//apelam raportul
raport(f);
printf("\nCe produs doriti sa stergeti (cod) ");
scanf("%d", &cod);
while (!feof(stdin))
{
//comparam codul introdus de la tastatura cu nr de articole din fisier
if(cod>=nrart(f,sizeof(PRODUS)))
printf("Nu exista produsul!");
else
{
fseek(f, cod*sizeof(PRODUS), 0);
//citim articolul
fread(&p, sizeof(PRODUS), 1, f);
if (p.is == 0)
printf("Nu exista produsul");
else
{
printf("Nume %s Pret %f Cant %d", p.denumire, p.pret, p.cant);
//stergere
p.is = 0;
fseek(f, cod * sizeof(PRODUS), 0);
fwrite(&p, sizeof(PRODUS), 1, f);

}
}
printf("\nCe produs doriti sa stergeti (cod) ");
scanf("%d", &cod);

//inchidem raportul
fclose(f);
}
}

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