////////////////////////////////////////////////////////////////////////////
// ITS – Visoka Škola Strukovnih Studija Za Informacione Tehnologije
//
https://www.its.edu.rs/
// Predmet: Osnovi Programiranja – Programski jezik C
// Primer: Datoteka sadrzi podatke o proizvodima koji se prodaju u okviru
// odredjene prodavnice.
// Svaki proizvod se odlikuje sledecim podacima: bar-kod, ime, cena i pdv.
// Na standardni izlaz ispisati podatke o svim proizvodima koji se prodaju u
// prodavnici.
////////////////////////////////////////////////////////////////////////////

#include <stdio.h>

 

// Maksimalna duzina imena proizvoda
#define MAX_IME 30

// Maksimalni broj artikala
#define MAX_ARTIKALA 1000

 

// Struktura za cuvanje podataka o jednom artiklu
typedef struct artikal{
int bar_kod;
char ime[MAX_IME];
float cena;
float pdv;
} Artikal;

 

// Niz struktura u kome se cuvaju podaci o artiklima
Artikal artikli[MAX_ARTIKALA];

// Broj trenutno ucitanih artikala
int br_artikala = 0;

 

// Ucitava podatke o jednom artiklu iz date datoteke. Vraca da li su podaci uspesno procitani
int ucitaj_artikal(FILE* f, Artikal *a)
{

     // Citamo bar kod, ime, cenu, pdv
     fscanf(f, "%d%s%f%f", &(a->bar_kod), a->ime, &(a->cena), &(a->pdv));

 

     // Ukoliko smo dosli do kraja datoteke prilikom pokusaja ucitavanja prijavljujemo neuspeh
    
if (feof(f))
              
return 0;

     // Prijavljujemo uspeh
    
return 1;
}

 

// Izracunavanje ukupne cene datog artikla
float cena(Artikal a)
{
    
return a.cena*(1+a.pdv);
}

 

// Ispisuje podatke o svim artiklima
void ispisi_artikle()
{
     int i;
     for (i = 0; i<br_artikala; i++)
    
printf("%-5d %-10s %.2f * %.2f = %.2f
", artikli[i].bar_kod, artikli[i].ime, artikli[i].cena, artikli[i].pdv, cena(artikli[i]));
}

 

main()
{
    
FILE* f;

 

     // Ucitavamo ime datoteke
    
char ime_datoteke[256];
    
printf("U kojoj datoteci se nalaze podaci o proizvodima: ");
    
scanf("%s", ime_datoteke);

 

     // Otvaramo datoteku i proveravamo da li smo uspeli
    
if ( (f = fopen(ime_datoteke, "r")) == NULL)
    
{
         
printf("Greska prilikom otvaranja datoteke %s
", ime_datoteke);
         
return 1;
    
}

    

          // Ucitavamo artikle
          while (ucitaj_artikal(f, &artikli[br_artikala]))
         
br_artikala++;

         

          // Ispisujemo podatke o svim artiklima
         
ispisi_artikle();

    

          // Zatvara se datoteka
         
fclose(f);
}