Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <string.h>
- #define _CRT_SECURE_NO_WARNINGS
- typedef struct _artikal
- {
- char sifra[7];
- char naziv[16];
- float cijena;
- struct _artikal* next;
- } artikal;
- typedef struct _kosarica
- {
- char sifra[7];
- float kolicina;
- struct _kosarica* next;
- }kosarica;
- void CreateArtikal(artikal*);
- void InsertArtikal(artikal*, char*, char*, float);
- void PrintArtikal(artikal*);
- void CreateKosarica(kosarica*);
- void InsertKosarica(kosarica*, char*, float);
- void PrintKosarica(kosarica*);
- void Solution(artikal*, kosarica*);
- int main()
- {
- artikal A;
- kosarica K;
- A.next = NULL;
- K.next = NULL;
- CreateArtikal(&A);
- PrintArtikal(A.next);
- printf("\n\n");
- CreateKosarica(&K);
- PrintKosarica(K.next);
- printf("\n\n");
- Solution(A.next, K.next);
- }
- void CreateArtikal(artikal* A)
- {
- FILE* fp;
- char sifra[7];
- char naziv[16];
- float cijena =0;
- errno_t err; //zanemari ovo, ne radi i fopen bez ovoga jer je VS2015
- // fp = fopen("artikli.txt", "r") - ODKOMENTIRAJ OVO
- if (err= fopen_s(&fp, "artikli.txt","r" ) ) //ti pises samo if(!fp)
- {
- perror("Greska pri otvaranju datoteke!\n");
- return;
- }
- else
- {
- while (!feof(fp))
- {
- fscanf_s(fp, "%s %s %f", sifra, 7, naziv,16, &cijena); //citamo sifru, naziv i cijenu iz datoteke
- InsertArtikal(A, sifra, naziv, cijena); //za svaki redak datoteke posebno ulazimo u funkciju za unos
- }
- }
- fclose(fp);
- }
- void InsertArtikal(artikal* A, char* sifra, char* naziv, float cijena)
- {
- artikal* noviartikal;
- while (A->next) //idemo do kraja liste, umećemo novi element na kraj
- {
- A = A->next;
- }
- noviartikal = (artikal*)malloc(sizeof(artikal)); //alokacija memorije
- if (!noviartikal)
- {
- perror("Neuspjesna alokacija!\n");
- return;
- }
- else
- {
- strcpy_s(noviartikal->sifra, strlen(sifra)+1 ,sifra); //ako pises strcpy bez _s, izbaci ovo srednje sa strlen, to je ono duljina ka i kod scanf_s
- strcpy_s(noviartikal->naziv, strlen(naziv)+1, naziv);
- noviartikal->cijena = cijena;
- noviartikal->next = NULL;
- A->next = noviartikal;
- }
- }
- void PrintArtikal(artikal* A)
- {
- while (A)
- {
- printf("%s\t%s\t%f\n", A->sifra, A->naziv, A->cijena);
- A = A->next;
- }
- }
- void CreateKosarica(kosarica* K)
- {
- FILE* fp;
- char sifra[7];
- float kolicina =0;
- errno_t err; //zanemari ovo, ne radi i fopen bez ovoga jer je VS2015
- // fp = fopen("kosarica.txt", "r") - ODKOMENTIRAJ OVO
- if (err = fopen_s(&fp, "kosarica.txt", "r")) //ti pises samo if(!fp)
- {
- perror("Greska pri otvaranju datoteke!\n");
- return;
- }
- else
- {
- while (!feof(fp))
- {
- fscanf_s(fp, "%s %f", sifra, 7, &kolicina); //citamo sifru i kolicinu iz datoteke
- InsertKosarica(K, sifra, kolicina); //za svaki redak datoteke posebno ulazimo u funkciju za unos, tamo cemo provjeravat sta se ponavlja
- }
- }
- fclose(fp);
- }
- void InsertKosarica(kosarica* K, char* sifra, float kolicina)
- {
- kosarica* novakosarica;
- kosarica *temp; //triba nam neki element s kojim cemo setat po listi da vidimo ponavlja li se neki od elemenata
- temp = K; //postavaljamo temp na pocetak
- novakosarica = (kosarica*)malloc(sizeof(kosarica));
- if (!novakosarica)
- {
- perror("Greska pri alokaciji memorije!\n");
- return;
- }
- else
- {
- novakosarica->next = NULL;
- strcpy_s(novakosarica->sifra, strlen(sifra) + 1, sifra);
- novakosarica->kolicina = kolicina;
- while (temp->next && strcmp(temp->sifra, novakosarica->sifra)) //dok temp nije NULL i dok sifra
- {
- temp = temp->next;
- }
- if (!strcmp(temp->sifra, novakosarica->sifra)) // provjera jesmo li iz gornje petlje izašli jer smo pronašli "duplu šifru"
- {
- temp->kolicina = temp->kolicina + novakosarica->kolicina; //ako je sifra novekosarice pronadjena, onda cemo pribrojit tu kolicinu pronadjenoj
- }
- else // ode ulazimo ako smo iz while petlje izašli jer smo dosli do kraja liste tj nismo pronasli ponavljajucu sifru. Tad tribamo uvezat taj element jer dotad ne postoji u listi kosarice
- {
- temp->next = novakosarica;
- }
- }
- }
- void PrintKosarica (kosarica* K)
- {
- while (K)
- {
- printf("%s\t%f\n", K->sifra, K->kolicina);
- K = K->next;
- }
- }
- void Solution(artikal* A, kosarica* K)
- {
- artikal* pocetak; // ic cemo za svaki element kosarice prolistat cilu listu artikala. Kad pridjemo na drugi element kosarice, moramo se vratit na pocetak artikala i pocet opet listat. Za to nam sluzi ovaj element- da uvik vratimo artikal na pocetak
- pocetak = A;
- float ukupno = 0; //varijabla koju koristimo za zbrojit sve cijene
- while (K)
- {
- A = pocetak;
- while (A)
- {
- if (!strcmp(A->sifra, K->sifra))
- {
- printf("%s\t %f\t %f\n", A->naziv, K->kolicina, K->kolicina*A->cijena);
- ukupno = ukupno + (K->kolicina*A->cijena);
- }
- A = A->next;
- }
- K = K->next;
- }
- printf("****************************************\n");
- printf("\n\t\tUkupno: %f", ukupno);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement