Advertisement
NAEGAKURE

kruzna lista

May 9th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.41 KB | None | 0 0
  1. /* Napisati program koji evidentira redoslijed odlaska zaposlenika
  2. na godišnji odmor. Podaci zaposlenika su OIB, godine radnog
  3. staža i broj preostalih dana godišnjeg odmora (implementirati
  4. pomoću dvije strukture – podatkovni dio staviti u zasebnu).
  5. Korisnik putem izbornika bira želi li unijeti podatke o
  6. zaposleniku, obrisati zaposlenika, poslati zaposlenika na godišnji
  7. odmor (pritom unosi i broj radnih dana) ili ispisati podatke o
  8. svim zaposlenicima. Pravo na godišnji odmor zaposlenici stječu
  9. kružno (jednostruko povezana kružna lista), a svaki novi koji se
  10. unese stavlja se na kraj liste. */
  11.  
  12. #include <iostream>
  13. #include <iomanip>
  14. #include <cstring>
  15. using namespace std;
  16.  
  17. struct employee
  18. {
  19.     char oib[12];
  20.     int dani, staz;
  21. };
  22.  
  23. struct node
  24. {
  25.     employee data;
  26.     node *link;
  27. };
  28.  
  29. void input(node *&last); // unos u kruznu listu
  30. void write(node *last); //ispis kruzne liste
  31. void deleteNode(node *&last);
  32. void goOnVacation(node *&last);
  33.  
  34. int main()
  35. {
  36.     node *last=0, *current=0, *temp=0;
  37.     int odg;
  38.     do
  39.     {
  40.         cout<<"\n\n* * * * * IZBORNIK * * * * *\n\n\n____________________________\n\n";
  41.         cout<<"1. Unos podataka o novom zaposleniku\n\n2. Ispis svih zaposlenika\n\n3. Prekid radnog odnosa\n\n";
  42.             cout<<"4. Godisnji odmor\n\n0. Kraj interakcije\n\nVas odabir: ";
  43.         cin>>odg;
  44.         switch(odg)
  45.         {
  46.         case 1:
  47.             input(last);
  48.             break;
  49.         case 2:
  50.             write(last);
  51.             break;
  52.         case 3:
  53.             deleteNode(last);
  54.             break;
  55.         case 4:
  56.             goOnVacation(last);
  57.             break;
  58.         case 0:
  59.             break;
  60.         default:
  61.             cout<<"Odabrali ste nepodrzanu opciju!\n\n";
  62.         }
  63.     }
  64.     while (odg!=0);
  65.     /*
  66.     DEALOKACIJA
  67.     */
  68.     //NADOPUNITI KOD
  69.     //napisati dealokaciju
  70.  
  71.     return 0;
  72. }
  73.  
  74.  
  75. //NADOPUNITI KOD
  76. //napisati definicije funkcija
  77.  
  78. void input(node *&last)
  79. {
  80.     node *novi = new node;
  81.  
  82.     cout<<"OIB:"<<endl;
  83.     cin>>novi->data.oib;
  84.  
  85.     cout<<"Staz:"<<endl;
  86.     cin>>novi->data.staz;
  87.  
  88.     cout<<"Dani godisnjeg odmora:"<<endl;
  89.     cin>>novi->data.dani;
  90.  
  91.     if(last==0)
  92.     {
  93.        novi->link=novi;
  94.     }
  95.     else
  96.     {
  97.         novi->link=last->link;
  98.         last->link=novi;
  99.     }
  100.     last=novi; // novi je postao zadnji
  101.  
  102. }
  103.  
  104. void write(node *last)
  105. {
  106.     if(last==0)
  107.         cout<<"Nema zaposlenika."<<endl;
  108.     else
  109.     {
  110.         node *current=last->link;
  111.         do
  112.         {
  113.             cout<<current->data.oib<<" "<<current->data.staz<<" "<<current->data.dani<<endl;
  114.             current=current->link;
  115.         }while(current!=last->link);
  116.     }
  117. }
  118.  
  119. void deleteNode(node *&last)
  120. {
  121.     if(last==0)
  122.         cout<<"Nema zaposlenika."<<endl;
  123.     else //isto ko u write samo sto nema cout nego ispitivanje
  124.     {
  125.         char o[12];
  126.  
  127.         cout<<"Unesi oib zaposlenika za brisanje."<<endl;
  128.         cin>>o;
  129.  
  130.         node *current=last->link, *pre=last;
  131.         do
  132.         {
  133.             if(strcmp(current->data.oib, o)==0) //trazi razlike izmedju ta dva stringa/chara/whatever, tj ako je nula onda su isti
  134.                 break; //prekine se lista ako su isti, to znaci da je element pronadjen
  135.             pre=current;
  136.             current=current->link;
  137.         }while(current!=last->link);
  138.  
  139.         if(strcmp(current->data.oib, o)==0) //za brisanje
  140.         {
  141.             pre->link=current->link;
  142.  
  143.             if(pre==current) //ILI: if(last->link=last)
  144.                 last=0;
  145.  
  146.             else if(current==last)
  147.                 last=pre;
  148.  
  149.             delete current;
  150.             current=0;
  151.         }
  152.         else
  153.             cout<<"OIB nije pronadjen."<<endl;
  154.     }
  155. }
  156.  
  157. void goOnVacation(node *&last)
  158. {
  159.     if(last==0)
  160.         cout<<"Nema zaposlenika."<<endl;
  161.     else
  162.     {
  163.         node *current=last->link;
  164.         do
  165.         {
  166.             if(current->data.dani>0)
  167.                 break; //ici ce dalje ako su dani=0
  168.         }while(current!=last->link); //dok se ne napravi djir naokolo
  169.  
  170.         if(current->data.dani==0)
  171.             cout<<"Nema radnika s pravom na godisnji odmor."<<endl;
  172.         else
  173.         {
  174.             int d;
  175.  
  176.             cout<<"Koliko dana zaposlenik ide na godisnji?"<<endl;
  177.             cin>>d;
  178.  
  179.             if(d>current->data.dani) //jer inace bi islo u minus
  180.                 cout<<"Zaposlenik nema pravo na toliko dana godisnjeg odmora."<<endl;
  181.             else
  182.             {
  183.                 current->data.dani-=d; //umanji se broj preostalih dana odmora za d
  184.                 last=current;
  185.  
  186.             }
  187.  
  188.         }
  189.  
  190.  
  191.     }
  192.  
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement