MartinSRB

Тема 6 - Задатак 2

Dec 12th, 2021 (edited)
898
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.51 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_INDEX (11 + 1)
  6. #define MAX_IME (20 + 1)
  7. #define MAX_PREZIME (30 + 1)
  8.  
  9. typedef struct student_st{
  10.     char br_indexa[MAX_INDEX];
  11.     char ime[MAX_IME];
  12.     char prezime[MAX_PREZIME];
  13.     unsigned int oc1;
  14.     unsigned int oc2;
  15.     unsigned int oc3;
  16.     unsigned int oc4;
  17.     double prosek;
  18.     struct student_st *sl;
  19. } STUDENT;
  20.  
  21. FILE* safe_open(char*,char*);
  22. void list_init(STUDENT**);
  23. STUDENT *napravi_cvor(char*,char*,char*,unsigned,unsigned,unsigned,unsigned);
  24. void dodaj_na_kraj(STUDENT**,STUDENT*);
  25. void ucitaj(FILE*,STUDENT**);
  26. void free_st(STUDENT**);
  27. void ispisi(FILE*,STUDENT*);
  28. void nadji(char*,STUDENT*);
  29.  
  30. int main(int argc, char **argv){
  31.     FILE *s_file;
  32.     STUDENT *glava;
  33.     list_init(&glava);
  34.     if(argc != 4){
  35.         printf("Nepravilan broj argumenata.");
  36.     }else{
  37.         s_file = fopen(argv[1],"r");
  38.         ucitaj(s_file,&glava);
  39.         fclose(s_file);
  40.         s_file = safe_open(argv[2],"w");
  41.         ispisi(s_file,glava);
  42.         fclose(s_file);
  43.         nadji(argv[3],glava);
  44.         free_st(&glava);
  45.     }
  46.     return 0;
  47. }
  48.  
  49. FILE* safe_open(char* file,char* mode){
  50.     FILE* f = fopen(file,mode);
  51.     if(f == NULL){
  52.         printf("Doslo je do greske.");
  53.         exit(EXIT_FAILURE);
  54.     }
  55.     return f;
  56. }
  57.  
  58. void list_init(STUDENT **glava){
  59.     *glava = NULL;
  60. }
  61.  
  62. STUDENT *napravi_cvor(char* br_i,char* ime,char* prezime,unsigned o1,unsigned o2,unsigned o3,unsigned o4){
  63.     STUDENT *novi = (STUDENT*)malloc(sizeof(STUDENT));
  64.     if(novi == NULL){
  65.         printf("nema dosta memorije.");
  66.         exit(EXIT_FAILURE);
  67.     }
  68.     strcpy(novi->br_indexa,br_i);
  69.     strcpy(novi->ime,ime);
  70.     strcpy(novi->prezime,prezime);
  71.     novi->oc1 = o1;
  72.     novi->oc2 = o2;
  73.     novi->oc3 = o3;
  74.     novi->oc4 = o4;
  75.     novi->prosek = (o1+o2+o3+o4)/4.;
  76.     novi->sl = NULL;
  77.     return novi;
  78. }
  79.  
  80. void dodaj_na_kraj(STUDENT** glava,STUDENT* st){
  81.     if(*glava == NULL){
  82.         *glava = st;
  83.     }else{
  84.         STUDENT *t = *glava;
  85.         while(t->sl != NULL){
  86.             t = t->sl;
  87.         }
  88.         t->sl = st;
  89.     }
  90. }
  91.  
  92. void ucitaj(FILE* f,STUDENT **glava){
  93.     char br[MAX_INDEX],
  94.          ime[MAX_IME],
  95.          prezime[MAX_PREZIME];
  96.     int o1,
  97.         o2,
  98.         o3,
  99.         o4;
  100.     while(fscanf(f,"%s %s %s %u %u %u %d",
  101.                                         br,
  102.                                         ime,
  103.                                         prezime,
  104.                                         &o1,
  105.                                         &o2,
  106.                                         &o3,
  107.                                         &o4) != EOF){
  108.         dodaj_na_kraj(glava,napravi_cvor(br,ime,prezime,o1,o2,o3,o4));
  109.     }
  110. }
  111.  
  112. void free_st(STUDENT** glava){
  113.     STUDENT *tmp;
  114.     while(*glava != NULL){
  115.         tmp = *glava;
  116.         *glava = (*glava)->sl;
  117.         tmp->sl = NULL;
  118.         free(tmp);
  119.     }
  120. }
  121.  
  122. void ispisi(FILE* f,STUDENT* glava){
  123.     STUDENT *t = glava;
  124.     while(t != NULL){
  125.         fprintf(f,"%s %s %s %u %u %u %u %.2lf\n",t->br_indexa,t->ime,t->prezime,t->oc1,t->oc2,t->oc3,t->oc4,t->prosek);
  126.         t = t->sl;
  127.     }
  128. }
  129.  
  130. void nadji(char* indeks,STUDENT* glava){
  131.     STUDENT *t = glava;
  132.     while(t != NULL){
  133.         if(strcmp(indeks,t->br_indexa) == 0){
  134.             printf("Student %s %s ima prosek %.2lf.",t->ime,t->prezime,t->prosek);
  135.             return;
  136.         }
  137.         t = t->sl;
  138.     }
  139.     printf("Ne postoji student sa zadatim brojem indeksa.");
  140. }
Add Comment
Please, Sign In to add comment