Facebook
From matt, 2 Months ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 173
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <conio.h>
  4. //fisiere binare organizate relativ creare si populare cu informatii despre produse si cantitati aferente in 12 luni
  5. typedef struct {
  6.     char denumire[20];
  7.     int pret;
  8.     int cant[12];
  9.     int is; //indice de stare {0,1} - 0 daca articolul NU e scris/ valid; 1 daca articolul e scris valid
  10. }Produs;
  11. int nrart(FILE* f, int l) //lungimea unui articol; nrart = nr articole
  12. {
  13.     int n;
  14.     long p;
  15.     p = ftell(f); //pozitia curenta din fisier
  16.     fseek(f, 0, 2); // fseek(f, 0, SEEK_END); SEEK_CUR - curent(1); SEEK_SET - inceput(0)
  17.     n = ftell(f) / l;
  18.     fseek(f, p, 0); // revenire la pozitia initiala
  19.     return n;
  20. }
  21. int main()
  22. {
  23.     FILE* f;
  24.     Produs p;
  25.     char nume[20];
  26.     int i, cod; // cod - indica pozitia in fisier pentru fiecare articol
  27.     printf("Nume fisier:"); gets_s(nume, 20);
  28.     f = fopen(nume, "wb+");
  29.    
  30.     printf("dati codul produsului: "); scanf("%d", &cod;);
  31.     while(!feof(stdin))
  32.     {
  33.         if (cod >= nrart(f, sizeof(Produs)))
  34.         { //preformarea fisierului cu articole goale
  35.             p.is = 0;
  36.             fseek(f, 0, 2);
  37.             for (i = nrart(f, sizeof(Produs)); i <= cod; i++)
  38.                 fwrite(&p, sizeof(Produs), 1, f);
  39.         }
  40.         fseek(f, cod * sizeof(Produs), 0);//pozitionare la inceputul articolului cu codul respectiv
  41.         fread(&p, sizeof(Produs), 1, f); // iau din fisier
  42.         if (p.is) //p.is == 1
  43.             printf("nArticolul exista deja!!");
  44.         else
  45.         {
  46.             fseek(f, cod * sizeof(Produs), 0);
  47.             printf("Denumire: "); scanf("%s", &p.denumire);
  48.             printf("Pret: "); scanf("%d", &p.pret);
  49.             for (i = 0; i < 12; i++)
  50.             {
  51.                 printf("Cant in luna %d: ", i + 1); scanf("%d", &p.cant[i]);
  52.             }
  53.             p.is = 1; //marcheaza scrierea articolului in fisier
  54.             fwrite(&p, sizeof(Produs), 1, f); // scriere articol in fisier
  55.         }
  56.         printf("Noul cod de produs: "); scanf("%d", &cod;);
  57.     }
  58.     fclose(f); return 0;
  59. }
  60.