Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.01 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. typedef struct {
  7.     char naziv[30];
  8.     double cena;
  9.     int kolicina;
  10. } ARTIKAL;
  11. typedef struct cvorA* PCVORA;
  12. typedef struct cvorA {
  13.     ARTIKAL podatak;
  14.     PCVORA sledeci;
  15. } CVORA;
  16.  
  17. typedef struct {
  18.     char imePrezime[51];
  19.     int brojArtikala;
  20.     PCVORA glavaA;
  21. } POTROSAC;
  22. typedef struct cvorP* PCVORP;
  23. typedef struct cvorP {
  24.     POTROSAC podatak;
  25.     PCVORP sledeci;
  26. } CVORP;
  27.  
  28. void ubaciArtikal(PCVORA *glava, ARTIKAL podatak) {
  29.     PCVORA noviCvor = malloc(sizeof(CVORA));
  30.     noviCvor->podatak = podatak;
  31.     noviCvor->sledeci = NULL;
  32.     if (*glava == NULL)
  33.         *glava = noviCvor;
  34.     else {
  35.         PCVORA temp = *glava;
  36.         while (temp->sledeci != NULL)
  37.             temp = temp->sledeci;
  38.         temp->sledeci = noviCvor;
  39.     }
  40. }
  41.  
  42. void ubaciPotrosaca(PCVORP *glava, POTROSAC podatak) {
  43.     PCVORP noviCvor = malloc(sizeof(CVORP));
  44.     noviCvor->podatak = podatak;
  45.     noviCvor->sledeci = NULL;
  46.     if (*glava == NULL)
  47.         *glava = noviCvor;
  48.     else {
  49.         PCVORP temp = *glava;
  50.         while (temp->sledeci != NULL)
  51.             temp = temp->sledeci;
  52.         temp->sledeci = noviCvor;
  53.     }
  54. }
  55.  
  56. POTROSAC vratiPotrosaca(char string[]) {
  57.  
  58.     POTROSAC p;
  59.     p.glavaA = NULL;
  60.  
  61.     char* token;
  62.  
  63.     token = strtok(string, "-");
  64.     strcpy(p.imePrezime, token);
  65.  
  66.     token = strtok(NULL, ":");
  67.     p.brojArtikala = atoi(token);
  68.  
  69.     for (int i = 0; i < p.brojArtikala; i++)
  70.     {
  71.         ARTIKAL a;
  72.         token = strtok(NULL, ":");
  73.         strcpy(a.naziv, token);
  74.         token = strtok(NULL, ":");
  75.         a.cena = atof(token);
  76.         token = strtok(NULL, ":");
  77.         a.kolicina = atoi(token);
  78.         ubaciArtikal(&p.glavaA, a);
  79.     }
  80.  
  81.     return p;
  82.  
  83. }
  84.  
  85. void ucitajPodatkeIzDatoteke(PCVORP* glavaP) {
  86.  
  87.     FILE* fp = fopen("korpa.txt", "r");
  88.  
  89.     char linija[100];
  90.  
  91.     while (fgets(linija, 100, fp) != NULL) {
  92.  
  93.         POTROSAC p = vratiPotrosaca(linija);
  94.  
  95.         ubaciPotrosaca(glavaP, p);
  96.  
  97.     }
  98.  
  99.     fclose(fp);
  100.  
  101.     /*POTROSAC p1 = { "Jana Janic", 3, NULL };
  102.     ARTIKAL a1 = { "mleko", 85, 25 };
  103.     ARTIKAL a2 = { "meso", 550, 5 };
  104.     ARTIKAL a3 = { "sir", 450, 4 };
  105.     ubaciArtikal(&p1.glavaA, a1);
  106.     ubaciArtikal(&p1.glavaA, a2);
  107.     ubaciArtikal(&p1.glavaA, a3);
  108.  
  109.     POTROSAC p2 = { "Dejan Denic", 0, NULL };
  110.  
  111.     ubaciPotrosaca(glavaP, p1);
  112.     ubaciPotrosaca(glavaP, p2);*/
  113.  
  114.  
  115. }
  116.  
  117. void prikaziArtikal(ARTIKAL a) {
  118.     printf("%-20s%-20.2lf%-20d\n", a.naziv, a.cena, a.kolicina);
  119. }
  120.  
  121. void prikaziArtikle(PCVORA glavaA) {
  122.  
  123.     printf("Artikli:\n");
  124.     printf("%-20s%-20s%-20s\n", "Naziv", "Cena", "Kolicina");
  125.     while (glavaA != NULL) {
  126.         prikaziArtikal(glavaA->podatak);
  127.         glavaA = glavaA->sledeci;
  128.     }
  129.  
  130. }
  131.  
  132. void prikaziPotrosaca(POTROSAC p) {
  133.  
  134.     printf("%s\n", p.imePrezime);
  135.  
  136.     if (p.brojArtikala > 0) {
  137.         prikaziArtikle(p.glavaA);
  138.     }
  139.     else {
  140.         printf("Nema artikala.\n");
  141.     }
  142.  
  143.     printf("\n");
  144.  
  145. }
  146.  
  147. void prikaziPotrosace(PCVORP glavaP) {
  148.  
  149.     printf("***POTROSACI***\n");
  150.  
  151.     while (glavaP != NULL) {
  152.  
  153.         prikaziPotrosaca(glavaP->podatak);
  154.  
  155.         glavaP = glavaP->sledeci;
  156.     }
  157.  
  158. }
  159.  
  160. double ukupanIznosKorpe(PCVORA glavaA) {
  161.  
  162.     double iznos = 0;
  163.  
  164.     while (glavaA != NULL) {
  165.  
  166.         iznos = iznos + (glavaA->podatak.cena * glavaA->podatak.kolicina);
  167.  
  168.         glavaA = glavaA->sledeci;
  169.     }
  170.  
  171.     return iznos;
  172.  
  173. }
  174.  
  175. void sortirajPotrosace(PCVORP glavaP) {
  176.  
  177.     PCVORP spori = glavaP;
  178.     while (spori->sledeci != NULL) {
  179.         PCVORP brzi = spori->sledeci;
  180.         while (brzi != NULL) {
  181.  
  182.             double iznosSpori = ukupanIznosKorpe(spori->podatak.glavaA);
  183.             double iznosBrzi = ukupanIznosKorpe(brzi->podatak.glavaA);
  184.  
  185.             if (iznosSpori < iznosBrzi ||
  186.                 iznosSpori == iznosBrzi && spori->podatak.brojArtikala < brzi->podatak.brojArtikala) {
  187.                 POTROSAC pom = spori->podatak;
  188.                 spori->podatak = brzi->podatak;
  189.                 brzi->podatak = pom;
  190.             }
  191.  
  192.             brzi = brzi->sledeci;
  193.         }
  194.         spori = spori->sledeci;
  195.     }
  196.  
  197. }
  198.  
  199. int artikalPostoji(PCVORA glavaA, char naziv[]) {
  200.  
  201.     while (glavaA != NULL) {
  202.  
  203.         if (strcmp(glavaA->podatak.naziv, naziv) == 0) {
  204.  
  205.             return 1;
  206.  
  207.         }
  208.  
  209.         glavaA = glavaA->sledeci;
  210.     }
  211.  
  212.     return 0;
  213.  
  214. }
  215.  
  216. void napuniListuArtikala(PCVORA* glavaA, PCVORP glavaP) {
  217.  
  218.     while (glavaP != NULL) {
  219.  
  220.         PCVORA pom = glavaP->podatak.glavaA;
  221.  
  222.         while (pom != NULL) {
  223.  
  224.             if (!artikalPostoji(*glavaA, pom->podatak.naziv)) {
  225.  
  226.                 ubaciArtikal(glavaA, pom->podatak);
  227.  
  228.             }
  229.  
  230.             pom = pom->sledeci;
  231.         }
  232.  
  233.         glavaP = glavaP->sledeci;
  234.     }
  235.  
  236. }
  237.  
  238. int ukupnaKolicina(char naziv[], PCVORP glavaP) {
  239.  
  240.     int kolicina = 0;
  241.  
  242.     while (glavaP != NULL) {
  243.  
  244.         PCVORA pom = glavaP->podatak.glavaA;
  245.  
  246.         while (pom != NULL) {
  247.  
  248.             if (strcmp(pom->podatak.naziv, naziv) == 0) {
  249.  
  250.                 kolicina = kolicina + pom->podatak.kolicina;
  251.  
  252.             }
  253.  
  254.             pom = pom->sledeci;
  255.         }
  256.  
  257.         glavaP = glavaP->sledeci;
  258.     }
  259.  
  260.     return kolicina;
  261.  
  262. }
  263.  
  264. void prikaziKolicinuZaSvakiArtikal(PCVORP glavaP) {
  265.  
  266.     PCVORA glavaA = NULL;
  267.  
  268.     napuniListuArtikala(&glavaA, glavaP);
  269.  
  270.     printf("%-20s%-20s\n", "Naziv", "Ukupna kolicina");
  271.  
  272.     while (glavaA != NULL) {
  273.  
  274.         printf("%-20s%-20d\n", glavaA->podatak.naziv, ukupnaKolicina(glavaA->podatak.naziv, glavaP));
  275.  
  276.         glavaA = glavaA->sledeci;
  277.     }
  278.  
  279. }
  280.  
  281. int artikalPostojiUKorpama(PCVORP glavaP, char naziv[]) {
  282.  
  283.     while (glavaP != NULL) {
  284.  
  285.         PCVORA pom = glavaP->podatak.glavaA;
  286.  
  287.         while (pom != NULL) {
  288.  
  289.             if (strcmp(pom->podatak.naziv, naziv) == 0) {
  290.  
  291.                 return 1;
  292.  
  293.             }
  294.  
  295.             pom = pom->sledeci;
  296.         }
  297.  
  298.         glavaP = glavaP->sledeci;
  299.     }
  300.  
  301.     return 0;
  302.  
  303. }
  304.  
  305. double vratiCenuArtikla(PCVORP glavaP, char naziv[]) {
  306.  
  307.     while (glavaP != NULL) {
  308.  
  309.         PCVORA pom = glavaP->podatak.glavaA;
  310.  
  311.         while (pom != NULL) {
  312.  
  313.             if (strcmp(pom->podatak.naziv, naziv) == 0) {
  314.  
  315.                 return pom->podatak.cena;
  316.  
  317.             }
  318.  
  319.             pom = pom->sledeci;
  320.         }
  321.  
  322.         glavaP = glavaP->sledeci;
  323.     }
  324.  
  325.     return -1;
  326.  
  327. }
  328.  
  329. int potrosacPostoji(PCVORP glavaP, char imePrezime[]) {
  330.  
  331.     while (glavaP != NULL) {
  332.  
  333.         if (strcmp(glavaP->podatak.imePrezime, imePrezime) == 0) {
  334.  
  335.             return 1;
  336.  
  337.         }
  338.  
  339.         glavaP = glavaP->sledeci;
  340.     }
  341.  
  342.     return 0;
  343.  
  344. }
  345.  
  346. void azurirajArtikal(PCVORA glavaA, ARTIKAL a) {
  347.  
  348.     while (glavaA != NULL) {
  349.  
  350.         if (strcmp(glavaA->podatak.naziv, a.naziv) == 0) {
  351.  
  352.             glavaA->podatak.kolicina += a.kolicina;
  353.  
  354.             break;
  355.  
  356.         }
  357.  
  358.         glavaA = glavaA->sledeci;
  359.     }
  360.  
  361. }
  362.  
  363. void azurirajPotrosaca(PCVORP glavaP, char imePrezime[], ARTIKAL a) {
  364.  
  365.     while (glavaP != NULL) {
  366.  
  367.         if (strcmp(glavaP->podatak.imePrezime, imePrezime) == 0) {
  368.  
  369.             if (artikalPostoji(glavaP->podatak.glavaA, a.naziv)) {
  370.                 azurirajArtikal(glavaP->podatak.glavaA, a);
  371.             }
  372.             else {
  373.                 ubaciArtikal(&glavaP->podatak.glavaA, a);
  374.             }
  375.  
  376.             break;
  377.  
  378.         }
  379.  
  380.         glavaP = glavaP->sledeci;
  381.     }
  382.  
  383. }
  384.  
  385. void unesiNoviArtikal(PCVORP* glavaP) {
  386.  
  387.     POTROSAC p;
  388.     printf("Unesite ime i prezime: ");
  389.     gets(p.imePrezime);
  390.  
  391.     ARTIKAL a;
  392.     printf("Unesite naziv artikla: ");
  393.     gets(a.naziv);
  394.     if (artikalPostojiUKorpama(*glavaP, a.naziv)) {
  395.         a.cena = vratiCenuArtikla(*glavaP, a.naziv);
  396.     }
  397.     else {
  398.         printf("Unesite cenu artikla: ");
  399.         scanf("%lf", &a.cena);
  400.     }
  401.     printf("Unesite kolicinu artikla: ");
  402.     scanf("%d", &a.kolicina);
  403.  
  404.     if (potrosacPostoji(*glavaP, p.imePrezime)) {
  405.         azurirajPotrosaca(*glavaP, p.imePrezime, a);
  406.     }
  407.     else {
  408.         p.glavaA = NULL;
  409.         ubaciArtikal(&p.glavaA, a);
  410.         p.brojArtikala = 1;
  411.         ubaciPotrosaca(glavaP, p);
  412.     }
  413.  
  414. }
  415.  
  416. void meni(PCVORP* glavaP) {
  417.  
  418.     int izbor;
  419.  
  420.     while (1) {
  421.  
  422.         printf("Korisnicki meni:\n");
  423.         printf("\t1) Ucitaj podatke iz datoteke\n");
  424.         printf("\t2) Prikazi potrosace\n");
  425.         printf("\t3) Sortiraj potrosace\n");
  426.         printf("\t4) Prikazi ukupnu kolicinu za svaki artikal\n");
  427.         printf("\t5) Unesi novi artikal\n");
  428.         printf("\t6) Kraj programa\n");
  429.         printf("\t   Vas izbor: ");
  430.         scanf("%d", &izbor);
  431.         getchar();
  432.  
  433.         switch (izbor) {
  434.         case 1:
  435.             ucitajPodatkeIzDatoteke(glavaP);
  436.             break;
  437.         case 2:
  438.             prikaziPotrosace(*glavaP);
  439.             break;
  440.         case 3:
  441.             sortirajPotrosace(*glavaP);
  442.             break;
  443.         case 4:
  444.             prikaziKolicinuZaSvakiArtikal(*glavaP);
  445.             break;
  446.         case 5:
  447.             unesiNoviArtikal(glavaP);
  448.             break;
  449.         case 6:
  450.             return;
  451.         default:
  452.             printf("Pogresan izbor.\n");
  453.             break;
  454.  
  455.         }
  456.  
  457.     }
  458.  
  459. }
  460.  
  461. int main() {
  462.  
  463.     PCVORP glavaP = NULL;
  464.  
  465.     meni(&glavaP);
  466.  
  467.     system("pause");
  468.     return 0;
  469. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement