Advertisement
BlueBear

xkostrej.c

May 5th, 2014
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct zamestnanec
  6. {
  7.     char meno[31];
  8.     char priezvisko[31];
  9.     int typ;
  10.     float mzda;
  11.     char datum[10];
  12.     struct zamestnanec *next;
  13. }zam_t;
  14.  
  15. zam_t *nacitaj()
  16. {
  17.     FILE *fp = fopen("zamestnanci.txt", "r");
  18.     int pocet = 0;
  19.     zam_t *first = NULL;
  20.     zam_t *actual = NULL;
  21.     char placeholder;
  22.     if(fp == NULL)
  23.     {
  24.         printf("Zaznamy neboli nacitane\n");
  25.         return NULL;
  26.     }
  27.     else
  28.     {
  29.         first = (zam_t *)malloc(sizeof(zam_t));
  30.         fscanf(fp, "%s\n", first->meno);
  31.         fscanf(fp, "%s\n", first->priezvisko);
  32.         fscanf(fp, "%d\n", &first->typ);
  33.         fscanf(fp, "%f\n", &first->mzda);
  34.         fscanf(fp, "%s\n", first->datum);
  35.         fscanf(fp, "%c\n", &placeholder);
  36.  
  37.         first->next = (zam_t *)malloc(sizeof(zam_t));
  38.         actual = first->next;
  39.  
  40.         pocet++;
  41.  
  42.         while(!feof(fp))
  43.         {
  44.             fscanf(fp, "%s\n", actual->meno);
  45.             fscanf(fp, "%s\n", actual->priezvisko);
  46.             fscanf(fp, "%d\n", &actual->typ);
  47.             fscanf(fp, "%f\n", &actual->mzda);
  48.             fscanf(fp, "%s\n", actual->datum);
  49.             fscanf(fp, "%c\n", &placeholder);
  50.             if(!feof(fp))
  51.             {
  52.                 actual->next = (zam_t *)malloc(sizeof(zam_t));
  53.                 actual = actual->next;
  54.             }
  55.             pocet++;
  56.         }
  57.         actual->next = NULL;
  58.  
  59.         printf("Nacitalo sa %d zaznamov\n", pocet);
  60.     }
  61.  
  62.     return first;
  63. }
  64.  
  65. int vypis(zam_t *record)
  66. {
  67.     zam_t *actual = record;
  68.     int pocet = 1;
  69.     while(actual != NULL)
  70.     {
  71.         printf("%d.\n", pocet);
  72.         printf("%s\n", actual->meno);
  73.         printf("%s\n", actual->priezvisko);
  74.         if(actual->typ == 1)
  75.         {
  76.             printf("Riadiaci pracovnik\n");
  77.         }
  78.         else if(actual->typ == 0)
  79.         {
  80.             printf("Bezny zamestnanec\n");
  81.         }
  82.         printf("%.2f\n", actual->mzda);
  83.         printf("%s\n", actual->datum);
  84.         pocet++;
  85.         actual = actual->next;
  86.     }
  87. }
  88.  
  89. void pridaj(zam_t **zoznam)
  90. {
  91.     int pozicia, i;
  92.     zam_t *novy_zaznam = (zam_t*)malloc(sizeof(zam_t));
  93.     zam_t *actual;
  94.  
  95.     scanf("%d\n", &pozicia);
  96.     scanf(" %s", novy_zaznam->meno);
  97.     scanf(" %s", novy_zaznam->priezvisko);
  98.     scanf(" %d", &novy_zaznam->typ);
  99.     scanf(" %f", &novy_zaznam->mzda);
  100.     scanf(" %s", novy_zaznam->datum);
  101.  
  102.     if (*zoznam == NULL) // zoznam je prazdny, pridaj na 1. miesto
  103.     {
  104.         *zoznam = novy_zaznam;
  105.         return;
  106.     }
  107.  
  108.     actual = *zoznam; // zaznam_pred najprv bude 1. zaznam v zozname
  109.  
  110.     for (i = 1; i < pozicia - 1; i++)
  111.     {
  112.         if (actual->next == NULL)
  113.         {
  114.             break;
  115.         }
  116.         actual = actual->next;
  117.     }
  118.  
  119.     if (pozicia == 1)
  120.     {
  121.         novy_zaznam->next = *zoznam;
  122.         *zoznam = novy_zaznam;
  123.     }
  124.     else
  125.     {
  126.         novy_zaznam->next = actual->next; // ten prvok, co nasledoval za nim bude nasledujuci prvok nasho noveho prvku
  127.         actual->next = novy_zaznam; // nasledujuci prvok bude nas novy zaznam
  128.     }
  129.  
  130.     return;
  131. }
  132.  
  133. zam_t *zmaz(zam_t *start)
  134. {
  135.     zam_t *ptr1, *ptr2, *dup;
  136.     ptr1 = start;
  137.  
  138.     /* Pick elements one by one */
  139.     while(ptr1 != NULL && ptr1->next != NULL)
  140.     {
  141.         ptr2 = ptr1;
  142.  
  143.         /* Compare the picked element with rest of the elements */
  144.         while(ptr2->next != NULL)
  145.         {
  146.             /* If duplicate then delete it */
  147.             if(strcmp(ptr1->meno, ptr2->next->meno) == 0)
  148.             {
  149.                 if(strcmp(ptr1->priezvisko, ptr2->next->priezvisko) == 0)
  150.                 {
  151.                     dup = ptr2->next;
  152.                     ptr2->next = ptr2->next->next;
  153.                     free(dup);
  154.                 }
  155.             }
  156.             else /* This is tricky */
  157.             {
  158.                 ptr2 = ptr2->next;
  159.             }
  160.         }
  161.         ptr1 = ptr1->next;
  162.     }
  163.     return start;
  164. }
  165.  
  166. zam_t *aktualizuj(float mzda, zam_t *record)
  167. {
  168.     zam_t *first = record;
  169.     zam_t *actual = first;
  170.     int pocet = 0;
  171.     while(actual != NULL)
  172.     {
  173.         if(mzda < actual->mzda)
  174.         {
  175.             actual->mzda = mzda;
  176.             pocet++;
  177.         }
  178.         actual = actual->next;
  179.     }
  180.     printf("Aktualizovalo sa %d zaznamov\n", pocet);
  181.     return first;
  182. }
  183.  
  184. int main()
  185. {
  186.     char vyber[10];
  187.     zam_t *zamestnanci = NULL;
  188.     float pos;
  189.     while(1)
  190.     {
  191.         scanf(" %s", &vyber);
  192.         if(strcmp(vyber, "koniec") == 0)
  193.         {
  194.             return 0;
  195.         }
  196.         else if(strcmp(vyber, "nacitaj") == 0)
  197.         {
  198.             zamestnanci = nacitaj();
  199.         }
  200.         else if(strcmp(vyber, "vypis") == 0)
  201.         {
  202.             vypis(zamestnanci);
  203.         }
  204.         else if(strcmp(vyber, "pridaj") == 0)
  205.         {
  206.             pridaj(&zamestnanci);
  207.         }
  208.         else if(strcmp(vyber, "zmaz") == 0)
  209.         {
  210.             zamestnanci = zmaz(zamestnanci);
  211.         }
  212.         else if(strcmp(vyber, "aktualizuj") == 0)
  213.         {
  214.             scanf("%f", &pos);
  215.             zamestnanci = aktualizuj(pos, zamestnanci);
  216.         }
  217.     }
  218.     return 0;
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement