zadaa 5 - samo materijali i materijali · na pocetni ekran; u tekstualnoj datoteci skladiste,...

16
UNIVERZITET U SARAJEVU ELEKTROTEHNIČKI FAKULTET Zadaća 5 OSNOVE RAčUNARSTVA Student: Armin Dajić Grupa: (Svi studenti) Broj indeksa: 15738 Potpis: Ocjena: 2 Potpis tutora:

Upload: others

Post on 02-Sep-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

Zadaća 5

OSNOVE RAčUNARSTVA

Student: Armin Dajić

Grupa: (Svi studenti)

Broj indeksa: 15738

Potpis:

Ocjena:

2

Potpis tutora:

Page 2: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

Zadatak 1. 1.c

/* Multifunkcionalni program za vodenje evidencije u nekoj prodavnici i ispis racuna Napomena: Ako se u bilo kojem dijelu programa desi greska pri otvaranju fajla ubilo kojem modu, program ce se vratiti na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju bititacno u odredenom formatu! Promjena podataka vezanih za vec postojece artikle, moze se izvrsiti samopreko sifre tog artikla! Radi poteskoca pri citanju stringa sastavljenog od vise rijeci, znakoviSPACE i _ su podjednako interpretirani, odnosno naziv artikla se u fajl upisuje bez ijedne oznake SPACE - ti seznakovi odmah po unosu mijenjaju sa _ */ #include <stdio.h>#include <stdlib.h> struct podaci { int sifra,kolicina; char naziv [51]; float cijena;}artikal,nizart[100],pomart; void smece () { /* Funkcija za ciscenje buffer-a */ char trash='p'; while (trash!='\n') trash=getchar();} void convert (char *string) { while (*string!='\0') { if (*string==' ') *string='_'; string++; }} void revert (char *string) { while (*string!='\0') { if (*string=='_') *string=' '; string++; }} void kopiraj (char *string1, char *string2) { /* Kopira string2 u string1 */ int i; for (i=0; *(string2+i)!='\0'; i++) { *(string1+i)=*(string2+i); if (*(string2+i+1)=='\0') {*(string1+i+1)='\0';} }} void smanji (char *string1, char *string2) { /* Funkcija koja konvertuje naziv napodnosljivih 13, ako je potrebno! */ int i,kraj; kraj=0; for (i=0; i<=12; i++) {

Stranica 2

Page 3: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

if (*(string2+i)=='\0') {*(string1+i)='\0'; kraj=1; break;} *(string1+i)=*(string2+i); } if (!kraj) { /* Ima makar 13 slova */ if (*(string2+13)!='\0') { /* Ima 14 i vishe slova */ *(string1+12)='.'; *(string1+13)='\0'; } else if (*(string2+13)=='\0') *(string1+13)='\0'; /* Ima tacno 13 slova */ }} int funkcija1() { /* Unos novih artikala */  int pom1,pom4; /* Malo pomocnih varijabli */ char pom2[51]; float pom3;  int br,ispravno,k,mod,current,s,znak; FILE *fd,*fr,*fp;  while (1==1) { if (!(fd=fopen("skladiste.txt","a"))) {printf("<--Greska prilikom otvaranjadatoteke za dodavanje podataka-->\n"); return (1);} printf("\n<--UNOS NOVOG ARTIKLA-->\n"); printf("-1 za pocetni izbornik\n"); printf("-2 za izlaz iz programa\n");  ispravno=0; while(!ispravno) { ispravno=1; printf("%-23s","Sifra novog artikla: "); if (!scanf("%d",&artikal.sifra)) {artikal.sifra=-100; ispravno=0;} smece(); if (artikal.sifra==-1) {fclose(fd); return(1);} else if (artikal.sifra==-2) {fclose(fd); return(0);} else if (artikal.sifra<100 || artikal.sifra>999) {ispravno=0;} if (!ispravno) printf("<--Neispravan unos!-->\n"); } /* Provjera da li vec postoji artikal sa tom sifrom/nazivom */ mod=2; if (!(fr=fopen("skladiste.txt","r"))) { printf("<--Greska prilikom otvaranja datoteke za citanje (radi provjere dali artikal vec postoji)-->\n"); fclose(fd); /* Zatvaram vec otvoreni fajl za dodavanje novih artikala ivracam se na pocetni ekran */ return (1); } while (fscanf(fr,"%d %s %f %d\n",&pom1,pom2,&pom3,&pom4)!=EOF) { if (pom1==artikal.sifra) { printf("<--Vec postoji artikal sa istom sifrom u skladistu!-->\n"); printf("Zelite li promjeniti njegove podatke: 1-DA 0-NE\n"); mod=-100; while(!(mod>=-2 && mod<=1)) { if (!scanf("%d",&mod)) {mod=-100;} smece();

Stranica 3

Page 4: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

if (!(mod>=-2 && mod<=1)) printf("<--Neispravan unos!-->\n"); } if (mod==-1) { fclose(fd); /* Zatvaram vec otvorene fajlove i vracam se napocetni ekran */ fclose(fr); return (1); } else if (mod==-2) { fclose(fd); /* Zatvaram vec otvorene fajlove i vracam se napocetni ekran */ fclose(fr); return (0); } break; }  } fclose(fr);  if (mod>0) { /* Treba dodati novi artikal ili promjeniti podatke vecpostojeceg, pa korisnik unosi podatke */ ispravno=0; znak=0; while(!ispravno) { ispravno=1; printf("%-23s","Naziv novog artikla: "); for (k=0; k<=50; k++) { if (k==50) {smece(); artikal.naziv[k]='\0'; break;} /* Nakon unosa odnajmanje 50 slova, uzimamo samo tih prvih 50, ostala idu u smece */ artikal.naziv[k]=getchar(); if (artikal.naziv[k]==' ') {artikal.naziv[k]='_'; znak=1;} if (artikal.naziv[k]=='_') znak=1; if (artikal.naziv[k]=='\n') {artikal.naziv[k]='\0'; break;} } if (k==0) ispravno=0; if (k==2 && artikal.naziv[0]=='-' && artikal.naziv[1]=='1') {fclose(fd); return(1);} else if (k==2 && artikal.naziv[0]=='-' && artikal.naziv[1]=='2') {fclose(fd); return(0);} if (!ispravno) printf("<--Neispravan unos!-->\n"); } if (znak==1) {printf("NAPOMENA: Znakovi SPACE \" \" i \"_\" su u ovomprogramu ekvivalentni!\n");}  ispravno=0; while(!ispravno) { ispravno=1; printf("%-23s","Cijena novog artikla: "); if (!scanf("%f",&artikal.cijena)) {artikal.cijena=-100; ispravno=0;} smece(); if (artikal.cijena==-1) {fclose(fd); return(1);} else if (artikal.cijena>999.994) {printf("<--Prevelika cijena (veca od 999.99),nece stati u format ispisa racuna!-->\n"); ispravno=0;} else if (artikal.cijena==-2) {fclose(fd); return(0);} else if (artikal.cijena<0) {ispravno=0;} if (!ispravno) printf("<--Neispravan unos!-->\n");

Stranica 4

Page 5: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

}  ispravno=0; while(!ispravno) { ispravno=1; printf("%-23s","Kolicina na skladistu: "); if (!scanf("%d",&artikal.kolicina)) {artikal.kolicina=-100; ispravno=0;} smece(); if (artikal.kolicina<-2) {ispravno=0;} else if (artikal.kolicina>999) {printf("<--Prevelika kolicina (veca od 999),nece stati u format ispisa racuna!-->\n"); ispravno=0;} else if (artikal.kolicina==-1) {fclose(fd); return(1);} else if (artikal.kolicina==-2) {fclose(fd); return(0);} if (!ispravno) printf("<--Neispravan unos!-->\n"); } }  if (mod==1) { /* Promjena podataka artikla sa naznacenom sifrom ili imenom */ fclose(fd); /* Da bih mijenjao podatke, treba da prvo zatvorim datoteku a nakon toga je opet otvorim u modu za dodavanje, za slucajda treba da dodamo jos artikala */  if (!(fp=fopen("skladiste.txt","r+"))) { printf("<--Greska prilikom otvaranja datoteke za promjenu podataka-->\n"); return (1); }  current=0; while (fscanf(fp,"%d %s %f %d\n",&pom1,pom2,&pom3,&pom4)!=EOF) { current+=83; if (pom1==artikal.sifra) { fseek (fp, current-83, SEEK_SET); fprintf(fp,"%d %-50s %-15.2f %-10d\n",artikal.sifra,artikal.naziv printf("ARTIKAL USPJESNO ZAMIJENJEN\n"); break; }  } fclose(fp); if (!(fd=fopen("skladiste.txt","a"))) { printf("<--Greska prilikom otvaranja datoteke za dodavanjepodataka-->\n"); return (1); } } else  if (mod==2) { fprintf(fd,"%d %-50s %-15.2f %-10d\n",artikal.sifra,artikal.naziv,artikal.cijena,artikal.kolicina); printf("ARTIKAL USPJESNO DODAN\n"); } fclose(fd); }  return (1);

Stranica 5

Page 6: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

}  int funkcija2() { /* Promjena postojecih artikala */  int pom1,pom4; /* Malo pomocnih varijabli */ char pom2[51]; float pom3;  FILE *fp,*fr; int mod,ispravno,postoji,current,current2,k,znak;  /* Trazenje po sifri */ while (1==1) { ispravno=0; while(!ispravno) { ispravno=1; printf("\n<--PROMJENA POSTOJECIH ARTIKALA-->\n-1 za pocetni izbornik\n-2za izlaz iz programa\n"); printf("Unesite sifru artikla cije podatke zelite mijenjati: "); if (!scanf("%d",&artikal.sifra)) {artikal.sifra=-100; ispravno=0;} smece(); if (artikal.sifra==-1) {return(1);} else if (artikal.sifra==-2) {return(0);} else if (artikal.sifra<100 || artikal.sifra>999) {ispravno=0;} if (!ispravno) printf("<--Neispravan unos!-->\n"); }  if (!(fp=fopen("skladiste.txt","r+"))) { printf("<--Greska prilikom otvaranja datoteke za citanje i pisanje-->\n"); return (1); } postoji=0; current=0; while (fscanf(fp,"%d %s %f %d\n",&pom1,pom2,&pom3,&pom4)!=EOF) { current+=83; if (pom1==artikal.sifra) { postoji=1; printf("\n<--Artikal je pronaden - INFORMACIJE:-->\n"); revert(pom2); printf("%-9s %d\n","Sifra:",pom1); printf("%-9s %s\n","Naziv:",pom2); printf("%-9s %.2f\n","Cijena:",pom3); printf("%-9s %d\n\n","Kolicina:",pom4); convert(pom2); printf("Novi podaci za ovaj artikal:\n");  ispravno=0; while(!ispravno) { ispravno=1; printf("%-23s","Unesite novu sifru: "); if (!scanf("%d",&artikal.sifra)) {artikal.sifra=-100; ispravno=0;} smece(); if (artikal.sifra==-1) {fclose(fp); return(1);} else if (artikal.sifra==-2) {fclose(fp); return(0);} else if (artikal.sifra<100 || artikal.sifra>999) {ispravno=0;} if (!ispravno) printf("<--Neispravan unos!-->\n");

Stranica 6

Page 7: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

} /* Provjera da li vec postoji artikal sa tom sifrom/nazivom */ fclose(fp);  if (!(fr=fopen("skladiste.txt","r"))) { printf("<--Greska prilikom otvaranja datoteke za citanje (radiprovjere da li artikal vec postoji)-->\n"); return (1); } current2=0; while (fscanf(fr,"%d %s %f %d\n",&pom1,pom2,&pom3,&pom4)!=EOF) { current2+=83; if (pom1==artikal.sifra && current2!=current) { printf("<--Vec postoji artikal sa istom sifrom u skladistu!--> fclose(fr); return (1); } } fclose(fr);  if (!(fp=fopen("skladiste.txt","r+"))) { printf("<--Greska prilikom otvaranja datoteke za citanje ipisanje-->\n"); return (1); }  /* Ako program stigne do ove linije, znaci da je unesena nova sifra,koje nema u skladistu Sada mozemo unijeti Naziv, Cijenu i Kolicinu, te zamjeniti artikalsa pozicije current */ ispravno=0; znak=0; while(!ispravno) { ispravno=1; printf("%-23s","Naziv novog artikla: "); for (k=0; k<=50; k++) { if (k==50) {smece(); artikal.naziv[k]='\0'; break;} /* Nakon unosaod najmanje 50 slova, uzimamo samo tih prvih 50, ostala idu u smece */ artikal.naziv[k]=getchar(); if (artikal.naziv[k]==' ') {artikal.naziv[k]='_'; znak=1;} if (artikal.naziv[k]=='_') znak=1; if (artikal.naziv[k]=='\n') {artikal.naziv[k]='\0'; break;} } if (k==0) ispravno=0; if (k==2 && artikal.naziv[0]=='-' && artikal.naziv[1]=='1') {fclose(fp if (k==2 && artikal.naziv[0]=='-' && artikal.naziv[1]=='2') {fclose(fp if (!ispravno) printf("<--Neispravan unos!-->\n"); } if (znak==1) {printf("NAPOMENA: Znakovi SPACE \" \" i \"_\" su u ovomprogramu ekvivalentni!\n");}  ispravno=0; while(!ispravno) { ispravno=1; printf("%-23s","Cijena novog artikla: "); if (!scanf("%f",&artikal.cijena)) {artikal.cijena=-100; ispravno=0;} smece();

Stranica 7

Page 8: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

if (artikal.cijena==-1) {fclose(fp); return(1);} else if (artikal.cijena>999.994) {printf("<--Prevelika cijena (veca od999.99), nece stati u format ispisa racuna!-->\n"); ispravno=0;} else if (artikal.cijena==-2) {fclose(fp); return(0);} else if (artikal.cijena<0) {ispravno=0;} if (!ispravno) printf("<--Neispravan unos!-->\n"); }  ispravno=0; while(!ispravno) { ispravno=1; printf("%-23s","Kolicina na skladistu: "); if (!scanf("%d",&artikal.kolicina)) {artikal.kolicina=-100; ispravno=0 smece(); if (artikal.kolicina<-2) {ispravno=0;} else if (artikal.kolicina>999) {printf("<--Prevelika kolicina (veca od999), nece stati u format ispisa racuna!-->\n"); ispravno=0;} else if (artikal.kolicina==-1) {fclose(fp); return(1);} else if (artikal.kolicina==-2) {fclose(fp); return(0);} if (!ispravno) printf("<--Neispravan unos!-->\n"); }  fseek (fp, current-83, SEEK_SET); fprintf(fp,"%d %-50s %-15.2f %-10d\n",artikal.sifra,artikal.naziv,artikal.cijena,artikal.kolicina); printf("ARTIKAL USPJESNO ZAMIJENJEN\n"); break; } } if (!postoji) printf("<--Nema tog artikla u skladistu!-->\n"); fclose(fp); }  return (1);}  int funkcija3() { /* Brisanje artikala iz skladista */  int pom1,pom4; /* Malo pomocnih varijabli */ char pom2[51]; float pom3;  FILE *fr,*fw; int ispravno,postoji,success;  /* Trazenje po sifri */ while (1==1) { ispravno=0; while(!ispravno) { ispravno=1; printf("\n<--BRISANJE ARTIKALA IZ SKLADISTA-->\n-1 za pocetni izbornik\n-2za izlaz iz programa\n"); printf("Unesite sifru artikla koji zelite izbrisati: "); if (!scanf("%d",&artikal.sifra)) {artikal.sifra=-100; ispravno=0;} smece();

Stranica 8

Page 9: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

if (artikal.sifra==-1) {return(1);} else if (artikal.sifra==-2) {return(0);} else if (artikal.sifra<100 || artikal.sifra>999) {ispravno=0;} if (!ispravno) printf("<--Neispravan unos!-->\n"); }  if (!(fr=fopen("skladiste.txt","r"))) { printf("<--Greska prilikom otvaranja datoteke za citanje-->\n"); return (1); }  if (!(fw=fopen("temp.txt","w"))) { printf("<--Greska prilikom otvaranja temp datoteke za pisanje-->\n"); fclose(fr); return (1); }  postoji=0; while (fscanf(fr,"%d %s %f %d\n",&pom1,pom2,&pom3,&pom4)!=EOF) { if (pom1==artikal.sifra) { postoji=1; printf("\n<--Artikal je pronaden - INFORMACIJE:-->\n"); revert(pom2); printf("%-9s %d\n","Sifra:",pom1); printf("%-9s %s\n","Naziv:",pom2); printf("%-9s %.2f\n","Cijena:",pom3); printf("%-9s %d\n","Kolicina:",pom4); convert(pom2); } else { fprintf(fw,"%d %-50s %-15.2f %-10d\n",pom1,pom2,pom3,pom4); } }  fclose(fr); fclose(fw); if (!postoji) { printf("<--Nema tog artikla u skladistu!-->\n"); if (remove("temp.txt")) { printf("<--Greska: Neuspjelo brisanje temp fajla-->\n"); } } else { success=1; if (remove("skladiste.txt")) { printf("<--Greska: Neuspjelo brisanje fajla-->\n"); success=0; } if (rename("temp.txt","skladiste.txt")) { success=0; printf("<--Greska: Neuspjela izmjena naziva fajla-->\n"); } if (!success) { printf("-Postoji mogucnost da, zbog neomogucenog pristupa fajlovima,dode do gubitka podataka.\n"); printf("-Da biste to sprijecili, rucno preimenujte fajl \"temp.txt\" u\"skladiste.txt\"!\n"); return (0); } else {

Stranica 9

Page 10: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

printf("ARTIKAL USPJESNO IZBRISAN\n"); } } } return (1);}  int funkcija4() { /* Unos i ispis racuna */  int pom1,pom4; /* Malo pomocnih varijabli */ char pom2[51],naziv[14]; float pom3;  FILE *fr,*fw; int mod,ispravno,znak,k,i,broj,br,isto,postoji,success; float ukupno,pdv,platiti;  printf("\n<--UNOS RACUNA-->\n-1 za pocetni izbornik\n-2 za izlaz iz programa\n"); broj=0; while(1==1) { if (broj==100) { printf("<--Unijeli ste vec 100 artikala-->\n");mod=2; } else { mod=-100; while(!(mod>=-2 && mod<=2)) { printf("\n0 * Unos artikla preko sifre\n"); printf("1 * Unos artikla preko naziva\n"); printf("2 * Kraj unosa i ispis racuna\n"); if (!scanf("%d",&mod)) {mod=-100;} smece(); if (!(mod>=-2 && mod<=2)) printf("<--Neispravan unos!-->\n"); } } if (mod==-1) {return (1);} else if (mod==-2) {return (0);} else if (mod==1) { /* Ovdje ide kod za unos artikla preko naziva */  printf("\n<--Unos artikla preko naziva-->\n"); ispravno=0; znak=0; while(!ispravno) { ispravno=1; printf("%-18s","Naziv artikla: "); for (k=0; k<=50; k++) { if (k==50) {smece(); artikal.naziv[k]='\0'; break;} /* Nakon unosaod najmanje 50 slova, uzimamo samo tih prvih 50, ostala idu u smece */ artikal.naziv[k]=getchar(); if (artikal.naziv[k]==' ') {artikal.naziv[k]='_'; znak=1;} if (artikal.naziv[k]=='_') znak=1; if (artikal.naziv[k]=='\n') {artikal.naziv[k]='\0'; break;} } if (k==0) ispravno=0; if (k==2 && artikal.naziv[0]=='-' && artikal.naziv[1]=='1') {return(1) if (k==2 && artikal.naziv[0]=='-' && artikal.naziv[1]=='2') {return(0) if (!ispravno) printf("<--Neispravan unos!-->\n");

Stranica 10

Page 11: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

} if (znak==1) {printf("NAPOMENA: Znakovi SPACE \" \" i \"_\" su u ovomprogramu ekvivalentni!\n");}  /* Potraga za unesenim nazivom */ if (!(fr=fopen("skladiste.txt","r"))) { printf("<--Greska prilikom otvaranja datoteke za citanje-->\n"); return (1); }  br=0; /* Broj artikala koji sadrze taj string */ while (fscanf(fr,"%d %s %f %d\n",&pom1,pom2,&pom3,&pom4)!=EOF) { for (i=0; *(pom2+i)!='\0';i++) { isto=1; for (k=0; *(artikal.naziv+k)!='\0'; k++) { if ((artikal.naziv[k]>=65 && artikal.naziv[k]<=90) && (pom2[i+k]>=97 && pom2[i+k]<=122)) { artikal.naziv[k]+=32; } else if ((artikal.naziv[k]>=97 && artikal.naziv[k]<=122) && (pom2[i+k]>=65 && pom2[i+k]<=90)) { artikal.naziv[k]-=32; } if (artikal.naziv[k]!=pom2[i+k]) {isto=0; break;} } if (isto) break; } if (isto) { br++; if (br==2) { /* Postoje makar 2 u skladistu koji u nazivu sadrzeuneseni naziv */ printf("<--Pronadeni artikli koji u nazivu imaju trazenistring-->\n"); revert(pomart.naziv); printf("%d --> %s\n",pomart.sifra,pomart.naziv); convert(pomart.naziv); } pomart.sifra=pom1; kopiraj(pomart.naziv,pom2); /* Kopira pom2 u pomart.naziv */ pomart.cijena=pom3; pomart.kolicina=pom4; if (br>=2) { revert(pomart.naziv); printf("%d --> %s\n",pomart.sifra,pomart.naziv); convert(pomart.naziv); } } }  if (br==0) {printf("<--Nije pronaden nijedan artikal koji u nazivu ima tajstring-->\n");} else if (br==1) { /* Pronaden je tacno 1 artikal koji sadrzi taj string */  ispravno=0; /* Unos kolicine */ while(!ispravno) { ispravno=1;

Stranica 11

Page 12: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

printf("%-18s","Trazena kolicina: "); if (!scanf("%d",&artikal.kolicina)) {artikal.kolicina=-100; ispravno=0 smece(); if (artikal.kolicina<-2) {ispravno=0;} else if (artikal.kolicina==-1) {fclose(fr); return(1);} else if (artikal.kolicina==-2) {fclose(fr); return(0);} if (!ispravno) printf("<--Neispravan unos!-->\n"); }  if (artikal.kolicina>pomart.kolicina) { /* Potraznja veca od ponude */ printf("<--U skladistu nema dovoljno artikala!-->\n"); } else { nizart[broj].sifra=pomart.sifra; kopiraj(nizart[broj].naziv,pomart.naziv); /* Kopira pom2 upomart.naziv */ nizart[broj].cijena=pomart.cijena; nizart[broj].kolicina=artikal.kolicina; broj++; }  } fclose(fr); } else if (mod==0) { /* Ovdje ide kod za unos preko sifre */  printf("\n<--Unos artikla preko sifre-->\n"); ispravno=0; while(!ispravno) { ispravno=1; printf("%-18s","Sifra artikla: "); if (!scanf("%d",&artikal.sifra)) {artikal.sifra=-100; ispravno=0;} smece(); if (artikal.sifra==-1) {return(1);} else if (artikal.sifra==-2) {return(0);} else if (artikal.sifra<100 || artikal.sifra>999) {ispravno=0;} if (!ispravno) printf("<--Neispravan unos!-->\n"); }  /* Potraga za unesenom sifrom */ if (!(fr=fopen("skladiste.txt","r"))) { printf("<--Greska prilikom otvaranja datoteke za citanje-->\n"); return (1); }  postoji=0; while (fscanf(fr,"%d %s %f %d\n",&pom1,pom2,&pom3,&pom4)!=EOF) { if (pom1==artikal.sifra) { pomart.sifra=pom1; kopiraj(pomart.naziv,pom2); /* Kopira pom2 u pomart.naziv */ pomart.cijena=pom3; pomart.kolicina=pom4; postoji=1; break; } }

Stranica 12

Page 13: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

if (!postoji) {printf("<--Nije pronaden artikal sa trazenom sifrom!-->\n") if (postoji) { /* Pronaden je artikal sa trazenom sifrom */ revert(pomart.naziv); printf("%-18s%s\n","Naziv artikla:",pomart.naziv); convert(pomart.naziv); ispravno=0; /* Unos kolicine */ while(!ispravno) { ispravno=1; printf("%-18s","Trazena kolicina: "); if (!scanf("%d",&artikal.kolicina)) {artikal.kolicina=-100; ispravno=0 smece(); if (artikal.kolicina<-2) {ispravno=0;} else if (artikal.kolicina==-1) {fclose(fr); return(1);} else if (artikal.kolicina==-2) {fclose(fr); return(0);} if (!ispravno) printf("<--Neispravan unos!-->\n"); }  if (artikal.kolicina>pomart.kolicina) { /* Potraznja veca od ponude */ printf("<--U skladistu nema dovoljno artikala!-->\n"); } else { nizart[broj].sifra=pomart.sifra; kopiraj(nizart[broj].naziv,pomart.naziv); /* Kopira pomart unizart */ nizart[broj].cijena=pomart.cijena; nizart[broj].kolicina=artikal.kolicina; broj++; } }  fclose (fr); } else if (mod==2) { /* Konacan ispis racuna */ ukupno=0; printf("\nArtikal Cijena Kol Uk. cijena \n"); printf("--------------------------------------------------- \n"); for (i=0; i<broj; i++) { smanji(naziv,nizart[i].naziv); revert(naziv); printf("%d %-13s %-6.2f KM %-3d %9.2f KM\n",nizart[i].sifra,naziv,nizart[i].cijena,nizart[i].kolicina,nizart[i].kolicina*nizart[i].cijena); ukupno+=nizart[i].kolicina*nizart[i].cijena; } printf("--------------------------------------------------- \n"); printf("UKUPNO BEZ PDV-a: %24.2f KM \n",ukupno); pdv=(17.0/100)*ukupno; platiti=pdv+ukupno; printf("PDV (17%%): %31.2f KM \n\n",pdv); printf("UKUPNO ZA PLATITI: %23.2f KM \n",platiti);  /* Azuriranje skladista */ if (!(fr=fopen("skladiste.txt","r"))) { printf("<--Greska prilikom otvaranja datoteke za citanje-->\n"); return (1); } 

Stranica 13

Page 14: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

if (!(fw=fopen("temp.txt","w"))) { printf("<--Greska prilikom otvaranja temp datoteke za pisanje-->\n"); fclose (fr); return (1); }  while (fscanf(fr,"%d %s %f %d\n",&pom1,pom2,&pom3,&pom4)!=EOF) { for (i=0; i<broj; i++) { if (pom1==nizart[i].sifra) { pom4-=nizart[i].kolicina; break; } } fprintf(fw,"%d %-50s %-15.2f %-10d\n",pom1,pom2,pom3,pom4); }  fclose (fr); fclose(fw);  success=1; if (remove("skladiste.txt")) { printf("<--Greska: Neuspjelo brisanje fajla-->\n"); success=0; } if (rename("temp.txt","skladiste.txt")) { success=0; printf("<--Greska: Neuspjela izmjena naziva fajla-->\n"); } if (!success) { printf("-Postoji mogucnost da, zbog neomogucenog pristupa fajlovima,dode do gubitka podataka.\n"); printf("-Da biste to sprijecili, rucno preimenujte fajl \"temp.txt\" u\"skladiste.txt\"!\n"); return (0); } /* ----------------------------------------------------------------- */ ispravno=0; printf("\n<--SADA UNESITE-->\n"); while (!ispravno) { printf("-1 za pocetni izbornik\n-2 za izlaz iz programa\n"); if (!scanf("%d",&i)) {i=0; ispravno=0;} smece(); if (i==-1) return (1); if (i==-2) return (0); } } }} int funkcija5() {  int pom1,pom4; /* Malo pomocnih varijabli */ char pom2[51]; float pom3;  FILE *fr; int i,ispravno,MOD; if (!(fr=fopen("skladiste.txt","r"))) {

Stranica 14

Page 15: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

printf("<--Greska prilikom otvaranja datoteke za citanje-->\n"); return (1); }  printf("\n<--LISTA ARTIKALA IZ SKLADISTA-->\n"); i=0; while (fscanf(fr,"%d %s %f %d\n",&pom1,pom2,&pom3,&pom4)!=EOF) { i++; printf("<--Artikal BR. %d-->\n",i); revert(pom2); printf("%-9s %d\n","Sifra:",pom1); printf("%-9s %s\n","Naziv:",pom2); printf("%-9s %.2f\n","Cijena:",pom3); printf("%-9s %d\n\n","Kolicina:",pom4); convert(pom2); }  fclose(fr);  ispravno=0; printf("UNESITE:\n"); while (!ispravno) { printf("-1 za pocetni izbornik\n-2 za izlaz iz programa\n"); if (!scanf("%d",&MOD)) {MOD=0; ispravno=0;} smece(); if (MOD==-1) return (1); if (MOD==-2) return (0); }} int main(){ int MOD,ispravno,ponovi=1;  while (ponovi) { printf("\n<--POCETNI IZBORNIK-->\n"); printf("Unesite broj prikazan ispred komande koju zelite izvrsiti:\n"); printf("1 * Dodavanje novih artikala i\n"); printf(" promjena postojecih, ako unesemo sifru\n"); printf(" artikla koji vec postoji u skladistu\n"); printf("2 * Promjena postojecih artikala\n"); printf("3 * Brisanje artikala\n"); printf("4 * Unos racuna\n"); printf("5 * Ispis kompletnog skladista\n"); printf("-1 * Pocetni izbornik (u svakom trenutku dostupna komanda)\n"); printf("-2 * Izlaz iz programa (u svakom trenutku dostupna komanda)\n"); ispravno=1; if (!scanf("%d",&MOD)) {MOD=0; ispravno=0;} smece(); if (MOD<-2 || MOD>5 || MOD==0) {MOD=0; ispravno=0;} if (!ispravno) printf("<--Neispravan unos!-->\n");  /* Ako neka od funkcija vrati 0 - izlazi se iz programa, ako vrati 1 - program seponavlja */ if (MOD==1) {ponovi=funkcija1();} else if (MOD==2) {ponovi=funkcija2();} else if (MOD==3) {ponovi=funkcija3();} else

Stranica 15

Page 16: Zadaa 5 - Samo materijali i materijali · na pocetni ekran; U tekstualnoj datoteci skladiste, podaci moraju biti tacno u odredenom formatu! Promjena podataka vezanih za vec postojece

UNIVERZITET U SARAJEVU

ELEKTROTEHNIČKI FAKULTET

if (MOD==4) {ponovi=funkcija4();} else if (MOD==5) {ponovi=funkcija5();} else if (MOD==-1) {ponovi=1;} else if (MOD==-2) ponovi=0; }  return 0;}

Stranica 16