MartinSRB

Новогодишњи украси

Dec 16th, 2021 (edited)
1,623
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.53 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_SIZE (30 + 1)
  6. #define UKRAS_LAMPICE "lampice"
  7. #define UKRAS_LAMPIONI "lampioni"
  8. #define UKRAS_JELKA "jelka"
  9.  
  10. typedef struct ukras_st{
  11.     char prodavnica[MAX_SIZE];
  12.     char ukras[MAX_SIZE];
  13.     char vrsta[MAX_SIZE];
  14.     double cena;
  15.     struct ukras_st *sl;
  16. }UKRAS;
  17.  
  18. void list_init(UKRAS**);
  19. void delete_list(UKRAS**);
  20. UKRAS* make_ukras(char*,char*,char*,double);
  21. void add_to_list(UKRAS**,UKRAS*);
  22. UKRAS* find(UKRAS*,char*);
  23.  
  24. FILE* safe_open(char*,char*);
  25. void load(FILE*,UKRAS**);
  26. void save(FILE*,UKRAS*);
  27.  
  28. int main(int argc,char** argv){
  29.     if(argc != 3){
  30.         printf("Nepravilan poziv programa.");
  31.         return EXIT_FAILURE;
  32.     }else{
  33.         UKRAS* glava;
  34.         FILE* file = safe_open(argv[1],"r");
  35.         list_init(&glava);
  36.         load(file,&glava);
  37.         fclose(file);
  38.         file = safe_open(argv[2],"w");
  39.         save(file,glava);
  40.         fclose(file);
  41.         delete_list(&glava);
  42.         return EXIT_SUCCESS;
  43.     }
  44. }
  45.  
  46. void list_init(UKRAS** glava){
  47.     *glava = NULL;
  48.     return;
  49. }
  50.  
  51. void delete_list(UKRAS** glava){
  52.     UKRAS* tmp;
  53.     while(*glava != NULL){
  54.         tmp = *glava;
  55.         *glava = (*glava)->sl;
  56.         free(tmp);
  57.     }
  58.     return;
  59. }
  60.  
  61. UKRAS* make_ukras(char* prodavnica,char* ukras,char* vrsta,double cena){
  62.     UKRAS* new = (UKRAS*)malloc(sizeof(UKRAS));
  63.     if(new == NULL){
  64.         printf("Nije moguce zauzeti memoriju.");
  65.         exit(EXIT_FAILURE);
  66.     }
  67.     strcpy(new->prodavnica,prodavnica);
  68.     strcpy(new->ukras,ukras);
  69.     strcpy(new->vrsta,vrsta);
  70.     new->cena = cena;
  71.     new->sl   = NULL;
  72.     return new;
  73. }
  74.  
  75. void add_to_list(UKRAS** glava,UKRAS* new){
  76.     if(*glava == NULL){
  77.         *glava = new;
  78.     }else{
  79.         UKRAS* t = *glava;
  80.         while(t->sl != NULL){
  81.             t = t->sl;
  82.         }
  83.         t->sl = new;
  84.     }
  85.     return;
  86. }
  87.  
  88. FILE* safe_open(char* name,char* mode){
  89.     FILE* f = fopen(name,mode);
  90.     if(f == NULL){
  91.         printf("Nije moguce otviriti fajl %s.",name);
  92.         exit(EXIT_FAILURE);
  93.     }
  94.     return f;
  95. }
  96.  
  97. void load(FILE* f,UKRAS** glava){
  98.     char prodavnica[MAX_SIZE],
  99.          ukras[MAX_SIZE],
  100.          vrsta[MAX_SIZE];
  101.     double cena;
  102.     while(fscanf(f,"%s %s %s %lf",
  103.                                 prodavnica,
  104.                                 ukras,
  105.                                 vrsta,
  106.                                 &cena) != EOF){
  107.         add_to_list(glava,make_ukras(prodavnica,ukras,vrsta,cena));
  108.     }
  109.     return;
  110. }
  111.  
  112. void save(FILE* f,UKRAS* glava){
  113.     UKRAS* min;
  114.     double sum = 0;
  115.     if((min = find(glava,UKRAS_JELKA)) != NULL){
  116.         fprintf(f,"%.2lf %s %s\n",min->cena,min->ukras,min->prodavnica);
  117.         sum += min->cena;
  118.     }
  119.     if((min = find(glava,UKRAS_LAMPIONI)) != NULL){
  120.         fprintf(f,"%.2lf %s %s\n",min->cena,min->ukras,min->prodavnica);
  121.         sum += min->cena;
  122.     }
  123.     if((min = find(glava,UKRAS_LAMPICE)) != NULL){
  124.         fprintf(f,"%.2lf %s %s\n",min->cena,min->ukras,min->prodavnica);
  125.         sum += min->cena;
  126.     }
  127.     fprintf(f,"\nUkupna cena je: %.2lf",sum);
  128.     return;
  129. }
  130.  
  131. UKRAS* find(UKRAS* glava,char* param){
  132.     UKRAS* min = NULL;
  133.     while(glava != NULL){
  134.         if(strcmp(glava->vrsta,param) == 0){
  135.             if(min == NULL){
  136.                 min = glava;
  137.             }else{
  138.                 if(min->cena > glava->cena){
  139.                     min = glava;
  140.                 }
  141.             }
  142.         }
  143.         glava = glava->sl;
  144.     }
  145.     return min;
  146. }
Add Comment
Please, Sign In to add comment