Advertisement
Guest User

Untitled

a guest
Nov 28th, 2015
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.37 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6. struct zoznam
  7. {
  8.     char *pomlcky;
  9.     char *sign;
  10.     char *isbn;
  11.     char *kniha;
  12.     char *autor;
  13.     char *datum;
  14.     char *preukaz;
  15.     struct zoznam *dalsi;
  16. };
  17.  
  18. typedef struct zoznam ZOZNAM;
  19.  
  20.  
  21. ZOZNAM *nacit(void)  //funkcia N
  22. {
  23.     FILE *fr;
  24.     int pocetzaz=0;
  25.     char x;
  26.     ZOZNAM *pom = NULL;
  27.     fr=fopen ("kniznica.txt", "r");             //otvori subor na citanie
  28.  
  29.     if (fr == NULL)                             //kontrola ci sa podarilo otvorit subor
  30.     {
  31.         printf("Zaznamy neboli nacitane\n");   //ak nie, vypise Zaznamy neboli nacitane
  32.         return 0;
  33.     }
  34.  
  35.     while((x=getc(fr))!=EOF)               //zisti pocet zaznamov
  36.     {if (x=='-')
  37.         {x=getc(fr);
  38.             if (x=='-')
  39.             { x=getc(fr);
  40.                 if(x=='-')
  41.                     pocetzaz++;}}}
  42.  
  43.     printf("Nacitalo sa %d zaznamov\n", pocetzaz);
  44.     rewind(fr);       //nastavi indikator na zaciatok suboru
  45.  
  46.     char riadok[128];
  47.     ZOZNAM *akt, *prvy;
  48.  
  49.     prvy = akt = NULL;
  50.  
  51.     while((x=getc(fr))!=EOF)
  52.     {
  53.         ungetc (x,fr);
  54.         pom = malloc(sizeof(ZOZNAM));
  55.         fgets(riadok, sizeof(riadok), fr);
  56.         pom->pomlcky = strdup(riadok);
  57.         fgets(riadok, sizeof(riadok), fr);
  58.         pom->sign = strdup(riadok);
  59.         fgets(riadok, sizeof(riadok), fr);
  60.         pom->isbn = strdup(riadok);
  61.         fgets(riadok, sizeof(riadok), fr);
  62.         pom->kniha = strdup(riadok);
  63.         fgets(riadok, sizeof(riadok), fr);
  64.         pom->autor = strdup(riadok);
  65.         fgets(riadok, sizeof(riadok), fr);
  66.         pom->datum = strdup(riadok);
  67.         fgets(riadok, sizeof(riadok), fr);
  68.         pom->preukaz = strdup(riadok);
  69.         pom->dalsi =NULL;
  70.         if(prvy == NULL)
  71.         {
  72.             akt = prvy = pom;
  73.         }
  74.         else
  75.         {
  76.             akt = akt->dalsi = pom;
  77.         }
  78.     }
  79.  
  80.     fclose(fr);   //zatvori subor
  81.     //pocet=pocetzaz;
  82.     return prvy;
  83. }
  84.  
  85.  
  86.  
  87. void vypis(ZOZNAM *prvy)  //funkcia N
  88. {
  89.     int i=1;
  90.  
  91.     ZOZNAM *akt;
  92.  
  93.       for(akt = prvy; akt ; akt=akt->dalsi){
  94.         printf("%d.\n", i); i++;
  95.         printf("signatura: %s", akt->sign);
  96.         printf("isbn: %s", akt->isbn);
  97.         printf("nazov: %s", akt->kniha);
  98.         printf("autori: %s", akt->autor);
  99.         printf("datum: %s", akt->datum);
  100.         printf("preukaz: %s", akt->preukaz);
  101.     }
  102. }
  103.  
  104. void pridaj(ZOZNAM *prvy)  //funkcia P
  105. {
  106.         int c1;
  107.         int i = 1;
  108.         char riadok[128];
  109.  
  110.         scanf("%d", &c1);
  111.  
  112.         if (prvy == NULL) return;
  113.         ZOZNAM *pom = NULL;
  114.         ZOZNAM *akt = prvy;
  115.  
  116.         pom = malloc(sizeof(ZOZNAM));
  117.         gets(riadok);
  118.         pom->pomlcky = strdup(riadok);
  119.         gets(riadok);
  120.         pom->sign = strdup(riadok);
  121.         gets(riadok);
  122.         pom->isbn = strdup(riadok);
  123.         gets(riadok);
  124.         pom->kniha = strdup(riadok);
  125.         gets(riadok);
  126.         pom->autor = strdup(riadok);
  127.         gets(riadok);
  128.         pom->datum = strdup(riadok);
  129.         gets(riadok);
  130.         pom->preukaz = strdup(riadok);
  131.         pom->dalsi =NULL;
  132.         if(prvy == NULL)
  133.         {
  134.             akt = prvy = pom;
  135.         }
  136.         else
  137.         {
  138.             akt = akt->dalsi = pom;
  139.         }
  140.  
  141.         while (akt)
  142.         {
  143.                 // nasli sme poziciu alebo pridame na koniec
  144.                 if (i - 1 == c1 || akt->dalsi == NULL)
  145.                 {
  146.                         ZOZNAM *dalsi = akt->dalsi;
  147.  
  148.                         ZOZNAM *novy = (ZOZNAM *)malloc(sizeof(ZOZNAM)); // wtf nechapem zadaniu
  149.  
  150.                         akt->dalsi = novy;
  151.  
  152.                         novy->dalsi = dalsi;
  153.  
  154.                         break;
  155.                 }
  156.  
  157.                 akt = akt->dalsi;
  158.                 i++;
  159.         }
  160. }
  161.  
  162. int main()
  163. {
  164.     ZOZNAM *pom = NULL;
  165.     double *pole = NULL;
  166.     char c;
  167.  
  168.     while ((c = getchar()) != 'k')//nacitava znaky pokial nepride k
  169.     {
  170.         if (c == 'n') pom=nacit();          //volanie funkcie N
  171.         if (c == 'v') vypis(pom);          //volanie funkcie V
  172.         if (c == 'p') pridaj(pom);          //volanie funkcie P
  173.         if (c == 'z');          //volanie funkcie Z
  174.         if (c == 'h');          //volanie funkcie H
  175.         if (c == 'a');          //volanie funkcie A
  176.     }
  177.     free(pole); //dealokuje pole
  178.     return 0;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement