Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- typedef struct {
- char naziv[30];
- double cena;
- int kolicina;
- } ARTIKAL;
- typedef struct cvorA* PCVORA;
- typedef struct cvorA {
- ARTIKAL podatak;
- PCVORA sledeci;
- } CVORA;
- typedef struct {
- char imePrezime[51];
- int brojArtikala;
- PCVORA glavaA;
- } POTROSAC;
- typedef struct cvorP* PCVORP;
- typedef struct cvorP {
- POTROSAC podatak;
- PCVORP sledeci;
- } CVORP;
- void ubaciArtikal(PCVORA *glava, ARTIKAL podatak) {
- PCVORA noviCvor = malloc(sizeof(CVORA));
- noviCvor->podatak = podatak;
- noviCvor->sledeci = NULL;
- if (*glava == NULL)
- *glava = noviCvor;
- else {
- PCVORA temp = *glava;
- while (temp->sledeci != NULL)
- temp = temp->sledeci;
- temp->sledeci = noviCvor;
- }
- }
- void ubaciPotrosaca(PCVORP *glava, POTROSAC podatak) {
- PCVORP noviCvor = malloc(sizeof(CVORP));
- noviCvor->podatak = podatak;
- noviCvor->sledeci = NULL;
- if (*glava == NULL)
- *glava = noviCvor;
- else {
- PCVORP temp = *glava;
- while (temp->sledeci != NULL)
- temp = temp->sledeci;
- temp->sledeci = noviCvor;
- }
- }
- POTROSAC vratiPotrosaca(char string[]) {
- POTROSAC p;
- p.glavaA = NULL;
- char* token;
- token = strtok(string, "-");
- strcpy(p.imePrezime, token);
- token = strtok(NULL, ":");
- p.brojArtikala = atoi(token);
- for (int i = 0; i < p.brojArtikala; i++)
- {
- ARTIKAL a;
- token = strtok(NULL, ":");
- strcpy(a.naziv, token);
- token = strtok(NULL, ":");
- a.cena = atof(token);
- token = strtok(NULL, ":");
- a.kolicina = atoi(token);
- ubaciArtikal(&p.glavaA, a);
- }
- return p;
- }
- void ucitajPodatkeIzDatoteke(PCVORP* glavaP) {
- FILE* fp = fopen("korpa.txt", "r");
- char linija[100];
- while (fgets(linija, 100, fp) != NULL) {
- POTROSAC p = vratiPotrosaca(linija);
- ubaciPotrosaca(glavaP, p);
- }
- fclose(fp);
- /*POTROSAC p1 = { "Jana Janic", 3, NULL };
- ARTIKAL a1 = { "mleko", 85, 25 };
- ARTIKAL a2 = { "meso", 550, 5 };
- ARTIKAL a3 = { "sir", 450, 4 };
- ubaciArtikal(&p1.glavaA, a1);
- ubaciArtikal(&p1.glavaA, a2);
- ubaciArtikal(&p1.glavaA, a3);
- POTROSAC p2 = { "Dejan Denic", 0, NULL };
- ubaciPotrosaca(glavaP, p1);
- ubaciPotrosaca(glavaP, p2);*/
- }
- void prikaziArtikal(ARTIKAL a) {
- printf("%-20s%-20.2lf%-20d\n", a.naziv, a.cena, a.kolicina);
- }
- void prikaziArtikle(PCVORA glavaA) {
- printf("Artikli:\n");
- printf("%-20s%-20s%-20s\n", "Naziv", "Cena", "Kolicina");
- while (glavaA != NULL) {
- prikaziArtikal(glavaA->podatak);
- glavaA = glavaA->sledeci;
- }
- }
- void prikaziPotrosaca(POTROSAC p) {
- printf("%s\n", p.imePrezime);
- if (p.brojArtikala > 0) {
- prikaziArtikle(p.glavaA);
- }
- else {
- printf("Nema artikala.\n");
- }
- printf("\n");
- }
- void prikaziPotrosace(PCVORP glavaP) {
- printf("***POTROSACI***\n");
- while (glavaP != NULL) {
- prikaziPotrosaca(glavaP->podatak);
- glavaP = glavaP->sledeci;
- }
- }
- double ukupanIznosKorpe(PCVORA glavaA) {
- double iznos = 0;
- while (glavaA != NULL) {
- iznos = iznos + (glavaA->podatak.cena * glavaA->podatak.kolicina);
- glavaA = glavaA->sledeci;
- }
- return iznos;
- }
- void sortirajPotrosace(PCVORP glavaP) {
- PCVORP spori = glavaP;
- while (spori->sledeci != NULL) {
- PCVORP brzi = spori->sledeci;
- while (brzi != NULL) {
- double iznosSpori = ukupanIznosKorpe(spori->podatak.glavaA);
- double iznosBrzi = ukupanIznosKorpe(brzi->podatak.glavaA);
- if (iznosSpori < iznosBrzi ||
- iznosSpori == iznosBrzi && spori->podatak.brojArtikala < brzi->podatak.brojArtikala) {
- POTROSAC pom = spori->podatak;
- spori->podatak = brzi->podatak;
- brzi->podatak = pom;
- }
- brzi = brzi->sledeci;
- }
- spori = spori->sledeci;
- }
- }
- int artikalPostoji(PCVORA glavaA, char naziv[]) {
- while (glavaA != NULL) {
- if (strcmp(glavaA->podatak.naziv, naziv) == 0) {
- return 1;
- }
- glavaA = glavaA->sledeci;
- }
- return 0;
- }
- void napuniListuArtikala(PCVORA* glavaA, PCVORP glavaP) {
- while (glavaP != NULL) {
- PCVORA pom = glavaP->podatak.glavaA;
- while (pom != NULL) {
- if (!artikalPostoji(*glavaA, pom->podatak.naziv)) {
- ubaciArtikal(glavaA, pom->podatak);
- }
- pom = pom->sledeci;
- }
- glavaP = glavaP->sledeci;
- }
- }
- int ukupnaKolicina(char naziv[], PCVORP glavaP) {
- int kolicina = 0;
- while (glavaP != NULL) {
- PCVORA pom = glavaP->podatak.glavaA;
- while (pom != NULL) {
- if (strcmp(pom->podatak.naziv, naziv) == 0) {
- kolicina = kolicina + pom->podatak.kolicina;
- }
- pom = pom->sledeci;
- }
- glavaP = glavaP->sledeci;
- }
- return kolicina;
- }
- void prikaziKolicinuZaSvakiArtikal(PCVORP glavaP) {
- PCVORA glavaA = NULL;
- napuniListuArtikala(&glavaA, glavaP);
- printf("%-20s%-20s\n", "Naziv", "Ukupna kolicina");
- while (glavaA != NULL) {
- printf("%-20s%-20d\n", glavaA->podatak.naziv, ukupnaKolicina(glavaA->podatak.naziv, glavaP));
- glavaA = glavaA->sledeci;
- }
- }
- int artikalPostojiUKorpama(PCVORP glavaP, char naziv[]) {
- while (glavaP != NULL) {
- PCVORA pom = glavaP->podatak.glavaA;
- while (pom != NULL) {
- if (strcmp(pom->podatak.naziv, naziv) == 0) {
- return 1;
- }
- pom = pom->sledeci;
- }
- glavaP = glavaP->sledeci;
- }
- return 0;
- }
- double vratiCenuArtikla(PCVORP glavaP, char naziv[]) {
- while (glavaP != NULL) {
- PCVORA pom = glavaP->podatak.glavaA;
- while (pom != NULL) {
- if (strcmp(pom->podatak.naziv, naziv) == 0) {
- return pom->podatak.cena;
- }
- pom = pom->sledeci;
- }
- glavaP = glavaP->sledeci;
- }
- return -1;
- }
- int potrosacPostoji(PCVORP glavaP, char imePrezime[]) {
- while (glavaP != NULL) {
- if (strcmp(glavaP->podatak.imePrezime, imePrezime) == 0) {
- return 1;
- }
- glavaP = glavaP->sledeci;
- }
- return 0;
- }
- void azurirajArtikal(PCVORA glavaA, ARTIKAL a) {
- while (glavaA != NULL) {
- if (strcmp(glavaA->podatak.naziv, a.naziv) == 0) {
- glavaA->podatak.kolicina += a.kolicina;
- break;
- }
- glavaA = glavaA->sledeci;
- }
- }
- void azurirajPotrosaca(PCVORP glavaP, char imePrezime[], ARTIKAL a) {
- while (glavaP != NULL) {
- if (strcmp(glavaP->podatak.imePrezime, imePrezime) == 0) {
- if (artikalPostoji(glavaP->podatak.glavaA, a.naziv)) {
- azurirajArtikal(glavaP->podatak.glavaA, a);
- }
- else {
- ubaciArtikal(&glavaP->podatak.glavaA, a);
- }
- break;
- }
- glavaP = glavaP->sledeci;
- }
- }
- void unesiNoviArtikal(PCVORP* glavaP) {
- POTROSAC p;
- printf("Unesite ime i prezime: ");
- gets(p.imePrezime);
- ARTIKAL a;
- printf("Unesite naziv artikla: ");
- gets(a.naziv);
- if (artikalPostojiUKorpama(*glavaP, a.naziv)) {
- a.cena = vratiCenuArtikla(*glavaP, a.naziv);
- }
- else {
- printf("Unesite cenu artikla: ");
- scanf("%lf", &a.cena);
- }
- printf("Unesite kolicinu artikla: ");
- scanf("%d", &a.kolicina);
- if (potrosacPostoji(*glavaP, p.imePrezime)) {
- azurirajPotrosaca(*glavaP, p.imePrezime, a);
- }
- else {
- p.glavaA = NULL;
- ubaciArtikal(&p.glavaA, a);
- p.brojArtikala = 1;
- ubaciPotrosaca(glavaP, p);
- }
- }
- void meni(PCVORP* glavaP) {
- int izbor;
- while (1) {
- printf("Korisnicki meni:\n");
- printf("\t1) Ucitaj podatke iz datoteke\n");
- printf("\t2) Prikazi potrosace\n");
- printf("\t3) Sortiraj potrosace\n");
- printf("\t4) Prikazi ukupnu kolicinu za svaki artikal\n");
- printf("\t5) Unesi novi artikal\n");
- printf("\t6) Kraj programa\n");
- printf("\t Vas izbor: ");
- scanf("%d", &izbor);
- getchar();
- switch (izbor) {
- case 1:
- ucitajPodatkeIzDatoteke(glavaP);
- break;
- case 2:
- prikaziPotrosace(*glavaP);
- break;
- case 3:
- sortirajPotrosace(*glavaP);
- break;
- case 4:
- prikaziKolicinuZaSvakiArtikal(*glavaP);
- break;
- case 5:
- unesiNoviArtikal(glavaP);
- break;
- case 6:
- return;
- default:
- printf("Pogresan izbor.\n");
- break;
- }
- }
- }
- int main() {
- PCVORP glavaP = NULL;
- meni(&glavaP);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement