Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Napisati program koji evidentira redoslijed odlaska zaposlenika
- na godišnji odmor. Podaci zaposlenika su OIB, godine radnog
- staža i broj preostalih dana godišnjeg odmora (implementirati
- pomoću dvije strukture – podatkovni dio staviti u zasebnu).
- Korisnik putem izbornika bira želi li unijeti podatke o
- zaposleniku, obrisati zaposlenika, poslati zaposlenika na godišnji
- odmor (pritom unosi i broj radnih dana) ili ispisati podatke o
- svim zaposlenicima. Pravo na godišnji odmor zaposlenici stječu
- kružno (jednostruko povezana kružna lista), a svaki novi koji se
- unese stavlja se na kraj liste. */
- #include <iostream>
- #include <iomanip>
- #include <cstring>
- using namespace std;
- struct employee
- {
- char oib[12];
- int dani, staz;
- };
- struct node
- {
- employee data;
- node *link;
- };
- void input(node *&last); // unos u kruznu listu
- void write(node *last); //ispis kruzne liste
- void deleteNode(node *&last);
- void goOnVacation(node *&last);
- int main()
- {
- node *last=0, *current=0, *temp=0;
- int odg;
- do
- {
- cout<<"\n\n* * * * * IZBORNIK * * * * *\n\n\n____________________________\n\n";
- cout<<"1. Unos podataka o novom zaposleniku\n\n2. Ispis svih zaposlenika\n\n3. Prekid radnog odnosa\n\n";
- cout<<"4. Godisnji odmor\n\n0. Kraj interakcije\n\nVas odabir: ";
- cin>>odg;
- switch(odg)
- {
- case 1:
- input(last);
- break;
- case 2:
- write(last);
- break;
- case 3:
- deleteNode(last);
- break;
- case 4:
- goOnVacation(last);
- break;
- case 0:
- break;
- default:
- cout<<"Odabrali ste nepodrzanu opciju!\n\n";
- }
- }
- while (odg!=0);
- /*
- DEALOKACIJA
- */
- //NADOPUNITI KOD
- //napisati dealokaciju
- return 0;
- }
- //NADOPUNITI KOD
- //napisati definicije funkcija
- void input(node *&last)
- {
- node *novi = new node;
- cout<<"OIB:"<<endl;
- cin>>novi->data.oib;
- cout<<"Staz:"<<endl;
- cin>>novi->data.staz;
- cout<<"Dani godisnjeg odmora:"<<endl;
- cin>>novi->data.dani;
- if(last==0)
- {
- novi->link=novi;
- }
- else
- {
- novi->link=last->link;
- last->link=novi;
- }
- last=novi; // novi je postao zadnji
- }
- void write(node *last)
- {
- if(last==0)
- cout<<"Nema zaposlenika."<<endl;
- else
- {
- node *current=last->link;
- do
- {
- cout<<current->data.oib<<" "<<current->data.staz<<" "<<current->data.dani<<endl;
- current=current->link;
- }while(current!=last->link);
- }
- }
- void deleteNode(node *&last)
- {
- if(last==0)
- cout<<"Nema zaposlenika."<<endl;
- else //isto ko u write samo sto nema cout nego ispitivanje
- {
- char o[12];
- cout<<"Unesi oib zaposlenika za brisanje."<<endl;
- cin>>o;
- node *current=last->link, *pre=last;
- do
- {
- if(strcmp(current->data.oib, o)==0) //trazi razlike izmedju ta dva stringa/chara/whatever, tj ako je nula onda su isti
- break; //prekine se lista ako su isti, to znaci da je element pronadjen
- pre=current;
- current=current->link;
- }while(current!=last->link);
- if(strcmp(current->data.oib, o)==0) //za brisanje
- {
- pre->link=current->link;
- if(pre==current) //ILI: if(last->link=last)
- last=0;
- else if(current==last)
- last=pre;
- delete current;
- current=0;
- }
- else
- cout<<"OIB nije pronadjen."<<endl;
- }
- }
- void goOnVacation(node *&last)
- {
- if(last==0)
- cout<<"Nema zaposlenika."<<endl;
- else
- {
- node *current=last->link;
- do
- {
- if(current->data.dani>0)
- break; //ici ce dalje ako su dani=0
- }while(current!=last->link); //dok se ne napravi djir naokolo
- if(current->data.dani==0)
- cout<<"Nema radnika s pravom na godisnji odmor."<<endl;
- else
- {
- int d;
- cout<<"Koliko dana zaposlenik ide na godisnji?"<<endl;
- cin>>d;
- if(d>current->data.dani) //jer inace bi islo u minus
- cout<<"Zaposlenik nema pravo na toliko dana godisnjeg odmora."<<endl;
- else
- {
- current->data.dani-=d; //umanji se broj preostalih dana odmora za d
- last=current;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement