MartinSRB

Право је време за кафу

Dec 14th, 2021 (edited)
1,022
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.02 KB | None | 0 0
  1.     #include <stdio.h>
  2.     #include <stdlib.h>
  3.     #include <string.h>
  4.  
  5.     #define MAX_SIZE (20 + 1)
  6.  
  7.     typedef struct kafa_st{
  8.         char kafic[MAX_SIZE];
  9.         char kafa[MAX_SIZE];
  10.         float cena;
  11.         struct kafa_st *sl;
  12.     }KAFA;
  13.  
  14.     void list_init(KAFA**);
  15.     void delete_list(KAFA**);
  16.     KAFA* make_kafa(char*,char*,float);
  17.     void add_to_list(KAFA**,KAFA*);
  18.  
  19.     FILE* safe_open(char*,char*);
  20.     void load(FILE*,KAFA**);
  21.  
  22.     void save(KAFA*,char*);
  23.  
  24.     int main(int argc,char** argv){
  25.         if(argc != 3){
  26.             printf("Nepravilan poziv programa.");
  27.             return EXIT_FAILURE;
  28.         }else{
  29.             KAFA* glava;
  30.             FILE* file = safe_open(argv[2],"r");
  31.             list_init(&glava);
  32.             load(file,&glava);
  33.             fclose(file);
  34.             save(glava,argv[1]);
  35.             delete_list(&glava);
  36.             return EXIT_SUCCESS;
  37.         }
  38.     }
  39.  
  40.     void list_init(KAFA** glava){
  41.         *glava = NULL;
  42.         return;
  43.     }
  44.  
  45.     void delete_list(KAFA** glava){
  46.         KAFA* t;
  47.         while(*glava != NULL){
  48.             t = *glava;
  49.             *glava = (*glava)->sl;
  50.             free(t);
  51.         }
  52.         return;
  53.     }
  54.  
  55.     KAFA* make_kafa(char* kafic,char* kafa,float cena){
  56.         KAFA* new = (KAFA*)malloc(sizeof(KAFA));
  57.         if(new == NULL){
  58.             printf("Nije moguce zauzeti memoriju.");
  59.             exit(EXIT_FAILURE);
  60.         }
  61.         strcpy(new->kafic,kafic);
  62.         strcpy(new->kafa,kafa);
  63.         new->cena = cena;
  64.         new->sl = NULL;
  65.         return new;
  66.     }
  67.  
  68.     void add_to_list(KAFA** glava,KAFA* new){
  69.         KAFA* t = *glava;
  70.         if(*glava == NULL){
  71.             *glava = new;
  72.         }else{
  73.             while(t->sl != NULL){
  74.                 t = t->sl;
  75.             }
  76.             t->sl = new;
  77.         }
  78.         return;
  79.     }
  80.  
  81.     FILE* safe_open(char* name,char* mode){
  82.         FILE* f = fopen(name,mode);
  83.         if(f == NULL){
  84.             printf("NIje moguce otvoriti datoteku %s.\n",name);
  85.             exit(EXIT_FAILURE);
  86.         }
  87.         return f;
  88.     }
  89.  
  90.     void load(FILE* f,KAFA** glava){
  91.         char kafic[MAX_SIZE];
  92.         char kafa[MAX_SIZE];
  93.         float cena;
  94.         while(fscanf(f,"%s %s %f",
  95.                                 kafic,
  96.                                 kafa,
  97.                                 &cena) != EOF){
  98.             add_to_list(glava,make_kafa(kafic,kafa,cena));
  99.         }
  100.         return;
  101.     }
  102.  
  103.     void save(KAFA* glava,char* param){
  104.         KAFA *t   = glava;
  105.         float sum = 0;
  106.         int count = 0;
  107.         while(t != NULL){
  108.             printf("%6.2f %s %s\n",t->cena,t->kafa,t->kafic);
  109.             if(strcmp(t->kafa,param) == 0){
  110.                 sum += (*t).cena;
  111.                 count++;
  112.             }
  113.             t = t->sl;
  114.         }
  115.         if(count != 0){
  116.             printf("\nProsecna cena %s kafe je = %.2f",param,sum/(float)count);
  117.         }else{
  118.             printf("\n%s kafa nije u ponudi!",param);
  119.         }
  120.     }
Advertisement
Add Comment
Please, Sign In to add comment