Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Program implementat de Nan Mihai
- Pregatire examen restanta PC - 2014
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct Bon{
- char nume[30];
- int cantitate;
- double valoare;
- }Bon;
- typedef struct Stoc{
- Bon* vect;
- int dim;
- }Stoc;
- //Adaugare bonuri la sfarsit de fisier
- void adaugare(char* nume_fisier)
- {
- FILE* f;
- Bon b;
- f = fopen(nume_fisier, "rb");
- if(f == NULL)
- {
- printf("Fisier inexistente!");
- //Creare fisier
- f = fopen(nume_fisier, "wb");
- assert(f != NULL);
- }
- else
- {
- f = fopen(nume_fisier, "ab");
- while(scanf("%s %d %lf ", b.nume, &b.cantitate, &b.valoare) != EOF)
- fwrite(&b, sizeof(b), 1, f);
- fclose(f);
- }
- }
- //Afisarea tuturor bonurilor din fisier
- void afisare(char* nume_fisier)
- {
- FILE* f;
- Bon b;
- f = fopen(nume_fisier, "rb");
- assert(f != NULL);
- while(fread(&b, sizeof(b), 1, f) == 1)
- {
- printf("%s %d %lf\n", b.nume, b.cantitate, b.valoare);
- }
- fclose(f);
- }
- //Citire informatii si realizare vector de structuri
- Stoc citire(char* nume_fisier)
- {
- Stoc s;
- Bon b;
- int dim, k;
- FILE* f;
- f = fopen(nume_fisier, "rb");
- assert(f != NULL);
- dim = 10;
- s.dim = 0;
- k = 0;
- s.vect = (Bon*) malloc(dim*sizeof(Bon));
- while(fread(&b, sizeof(b), 1, f) == 1)
- {
- strcpy(s.vect[k].nume, b.nume);
- s.vect[k].cantitate = b.cantitate;
- s.vect[k].valoare = b.valoare;
- k++;
- s.dim++;
- if(k == dim)
- {
- dim = 2*dim;
- //Realocare vector de structuri
- s.vect = (Bon*) realloc(s.vect, dim*sizeof(Bon));
- }
- }
- return s;
- }
- //Totatlizare valoare bonuri pt un anumit produs
- void total(Stoc s, char* nume)
- {
- int i;
- float sum;
- sum = 0;
- for(i=0;i<s.dim;i++)
- {
- if(strcmp(s.vect[i].nume, nume) == 0)
- {
- sum += s.vect[i].valoare;
- }
- }
- printf("Valoarea totala pentru produsul %s este %lf!\n", nume, sum);
- }
- int main(int argc, char** argv)
- {
- char* nume;
- Stoc s;
- s = citire(argv[1]);
- adaugare(argv[1]);
- nume = (char*) malloc(30*sizeof(char));
- scanf("%s\n", nume);
- total(s, nume);
- afisare(argv[1]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment