mihainan

Examen - PC

Sep 7th, 2014
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.06 KB | None | 0 0
  1. /*
  2.     Program implementat de Nan Mihai
  3.     Pregatire examen restanta PC - 2014
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10. typedef struct Bon{
  11.     char nume[30];
  12.     int cantitate;
  13.     double valoare;
  14. }Bon;
  15.  
  16. typedef struct Stoc{
  17.     Bon* vect;
  18.     int dim;
  19. }Stoc;
  20.  
  21. //Adaugare bonuri la sfarsit de fisier
  22. void adaugare(char* nume_fisier)
  23. {
  24.     FILE* f;
  25.     Bon b;
  26.     f = fopen(nume_fisier, "rb");
  27.     if(f == NULL)
  28.     {
  29.         printf("Fisier inexistente!");
  30.         //Creare fisier
  31.         f = fopen(nume_fisier, "wb");
  32.         assert(f != NULL);
  33.     }
  34.     else
  35.     {
  36.         f = fopen(nume_fisier, "ab");
  37.         while(scanf("%s %d %lf ", b.nume, &b.cantitate, &b.valoare) != EOF)
  38.             fwrite(&b, sizeof(b), 1, f);
  39.         fclose(f);
  40.     }
  41. }
  42.  
  43. //Afisarea tuturor bonurilor din fisier
  44. void afisare(char* nume_fisier)
  45. {
  46.     FILE* f;
  47.     Bon b;
  48.     f = fopen(nume_fisier, "rb");
  49.     assert(f != NULL);
  50.     while(fread(&b, sizeof(b), 1, f) == 1)
  51.     {
  52.         printf("%s %d %lf\n", b.nume, b.cantitate, b.valoare);
  53.     }
  54.     fclose(f);
  55. }
  56.  
  57. //Citire informatii si realizare vector de structuri
  58. Stoc citire(char* nume_fisier)
  59. {
  60.     Stoc s;
  61.     Bon b;
  62.     int dim, k;
  63.     FILE* f;
  64.     f = fopen(nume_fisier, "rb");
  65.     assert(f != NULL);
  66.     dim = 10;
  67.     s.dim = 0;
  68.     k = 0;
  69.     s.vect = (Bon*) malloc(dim*sizeof(Bon));
  70.     while(fread(&b, sizeof(b), 1, f) == 1)
  71.     {
  72.         strcpy(s.vect[k].nume, b.nume);
  73.         s.vect[k].cantitate = b.cantitate;
  74.         s.vect[k].valoare = b.valoare;
  75.         k++;
  76.         s.dim++;
  77.         if(k == dim)
  78.         {
  79.             dim = 2*dim;
  80.             //Realocare vector de structuri
  81.             s.vect = (Bon*) realloc(s.vect, dim*sizeof(Bon));
  82.         }
  83.     }
  84.     return s;
  85. }
  86.  
  87. //Totatlizare valoare bonuri pt un anumit produs
  88. void total(Stoc s, char* nume)
  89. {
  90.     int i;
  91.     float sum;
  92.     sum = 0;
  93.     for(i=0;i<s.dim;i++)
  94.     {
  95.         if(strcmp(s.vect[i].nume, nume) == 0)
  96.         {
  97.             sum += s.vect[i].valoare;
  98.         }
  99.     }
  100.     printf("Valoarea totala pentru produsul %s este %lf!\n", nume, sum);
  101. }
  102.  
  103. int main(int argc, char** argv)
  104. {
  105.     char* nume;
  106.     Stoc s;
  107.     s = citire(argv[1]);
  108.     adaugare(argv[1]);
  109.     nume = (char*) malloc(30*sizeof(char));
  110.     scanf("%s\n", nume);
  111.     total(s, nume);
  112.     afisare(argv[1]);
  113.     return 0;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment