Giter Club home page Giter Club logo

zadatak_3_civcija_tomislav's Introduction

#include #include #include #include #include <windows.h> #include <conio.h> #include using namespace std;

struct kliStrukt { short ai, bi, ci, di; char ime [21], prezime [26], spol; int datum [3]; }; //#include "red_pokazivac.h" #include "red_polje.h"

redStrukt *glavniRed=InitQ(glavniRed), *posiljkaRed=InitQ(posiljkaRed), *racunRed=InitQ(racunRed), *lutrijaRed=InitQ(lutrijaRed), *unionRed=InitQ(unionRed), *evoTvRed=InitQ(evoTvRed), *brziRed=InitQ(brziRed);

int //aiPosiljka=0, // aiRacun=0, // aiLutrija=0, // aiUnion=0, // aiEvoTv=0, biPosiljka=0, biRacun=0, biLutrija=0, biUnion=0, biEvoTv=0, prvaDva=0; struct podaci{ char ime [21], prezime [26], spol; }; bool brziSim=false; short brojElemenata, brElemRed; time_t t =time(0); tm *DATUM= localtime(&t);

short dajGodine(kliStrukt osoba){ short godina=DATUM->tm_year+1900, mjesec=DATUM->tm_mon+1, dan=DATUM->tm_mday; if(osoba.datum[1]>mjesec) return godina-osoba.datum[2]-1; else if(osoba.datum[1]<mjesec) return godina-osoba.datum[2]; else{ if(osoba.datum[0]>dan) return godina-osoba.datum[2]-1; else return godina-osoba.datum[2]; } } //1a 2a 1b 3a 1c 2b 3b

//1a 1b 1c 2a 3a void genNtorku(kliStrukt &klijent){ klijent.ai=rand()%491+10; klijent.bi=rand()%721+80; int br=rand(); if(br%6==0){ klijent.di=3; } else klijent.di=br%5+1;

do{ klijent.ci=rand()%5+1; if(dajGodine(klijent) < 65 && klijent.ci==4)//mlađi od 65 a mirovljenik continue; if(klijent.spol=='m'&&klijent.ci==3)//muško a trudan continue;//ponovno generiramo break; } while (1); }

void obrniRed(redStrukt* red){ if(IsEmptyQ(red)) return; kliStrukt pom=FrontQ(red); DeQueueQ(red); obrniRed(red); EnQueueQ(pom, red); }

void sortPrioritet(redStrukt *red, short domet){ struct elemLista { kliStrukt klijent; elemLista sl; }; elemLista lista=new elemLista; lista->sl=NULL; elemLista *trazi; kliStrukt pomElem; if(domet==1){//dodajem prvog na prvo mjesto trazi=lista->sl=new elemLista; trazi->klijent=FrontQ(red); DeQueueQ(red); trazi->sl=NULL; } while(!(IsEmptyQ(red))){ pomElem=FrontQ(red); DeQueueQ(red); trazi=lista; if(domet==1)//a dodavam sortirano tek nakon prvog elementa trazi=trazi->sl; //while(trazi->sl && (strcmp(unos.mBrend, trazi->sl->mBrend)==0) && trazi->sl->cijena<unos.cijena)

while(trazi->sl && trazi->sl->klijent.ci <= pomElem.ci) 
  trazi=trazi->sl;

elemLista* cuvaj=trazi->sl;
trazi=trazi->sl=new elemLista;
trazi->klijent=pomElem; 
trazi->sl=cuvaj;

} for(elemLista *pom=lista->sl; pom; pom=pom->sl){//vraćam vezanu listu u red //cout<klijent.ci<<" "; EnQueueQ(pom->klijent, red); } }

void ispis(redStrukt *red){ if(IsEmptyQ(red)) return; kliStrukt pom=FrontQ(red); brElemRed++; cout<<setw(12)<<left<<pom.ime<<setw(13)<<left<<pom.prezime<<setw(6)<<left<<pom.ai<<setw(6)<<left<<pom.bi<<setw(4)<<left<<pom.ci<<setw(4)<<left<<pom.di<<endl; DeQueueQ(red); ispis(red); EnQueueQ(pom, red); }

bool obradiKlijente(redStrukt *red, kliStrukt klijent, int &bi){ if(IsEmptyQ(red)) return false; int ai=klijent.ai; while(1){ if(bi<=ai){//mušterija je obrađena a novi još nije ušao jer je vrijeme ulaska novog (ai) > vrijeme obrade trenutnog (bi) cout<<"Izasao je "<<FrontQ(red).ime<<" "<<FrontQ(red).prezime<<" na salter "<<FrontQ(red).di<<endl; DeQueueQ(red); ai=ai-bi; Sleep(35); if(IsEmptyQ(red)){ bi=0; return false; } bi=FrontQ(red).bi; } else if (ai<bi) {//ako se klijent obrađuje a novi uđe, neka se novog stavlja na njegovo mjesto (pomocu sorta) bi-=ai; //cout<<"Zasad valja"<<endl; //sortPrioritet(red, 1); return true; } } }

void dodajKlijente( podaci *imeSpol){ cout<<"Unesi broj klijenata (minimalno 200): "; while(1){ cin>>brojElemenata; if(brojElemenata>0) break; cout<<"Pogresan unos! Unesite ponovno: "; } cout<<"///POSLOVNICA ZAPOCINJE POSAO ZA 2 SEKUNDE///"<<endl; Sleep(2000); kliStrukt klijent; bool dosaoPrije;

for(int i=0; i<brojElemenata; i++){ short random=rand()%52; //za ime i spol strcpy(klijent.ime, imeSpol[random].ime); klijent.spol=imeSpol[random].spol; random=rand()%52;//za prezime strcpy(klijent.prezime, imeSpol[random].prezime); genNtorku(klijent); klijent.datum[0]=rand()%30+1; if(rand()%3==0) klijent.datum[1]=12; else klijent.datum[1]=rand()%12+1; klijent.datum[2]=rand()%53+1943;//1942 - 1995 godišta (max starost = 72, max mladost = 18) EnQueueQ(klijent, glavniRed);

dosaoPrije=false;
if(klijent.di==1){
  if(!IsEmptyQ(posiljkaRed))
    dosaoPrije=obradiKlijente(posiljkaRed, klijent, biPosiljka);
  else biPosiljka=klijent.bi;
  EnQueueQ(klijent, posiljkaRed);
  sortPrioritet(posiljkaRed, 1);
}
else if(klijent.di==2){
  if(!IsEmptyQ(racunRed))
    dosaoPrije=obradiKlijente(racunRed, klijent, biRacun);
  else biRacun=klijent.bi;
  EnQueueQ(klijent, racunRed);
  sortPrioritet(racunRed, 1);
}
else if(klijent.di==3){
  if(!IsEmptyQ(lutrijaRed)) 
    dosaoPrije=obradiKlijente(lutrijaRed, klijent, biLutrija);
  else biLutrija=klijent.bi;
  EnQueueQ(klijent, lutrijaRed);
  sortPrioritet(lutrijaRed, 1);
}
else if(klijent.di==4){
  if(!IsEmptyQ(unionRed))
    dosaoPrije=obradiKlijente(unionRed, klijent, biUnion);
  else biUnion=klijent.bi;
  EnQueueQ(klijent, unionRed);
  sortPrioritet(unionRed, 1);
}
else if(klijent.di==5){
  if(!IsEmptyQ(evoTvRed))
    dosaoPrije=obradiKlijente(evoTvRed, klijent, biEvoTv);
  else biEvoTv=klijent.bi;
  EnQueueQ(klijent, evoTvRed);
  sortPrioritet(evoTvRed, 1);
}
cout<<"Usao je "<<" "<<klijent.ime<<" "<<klijent.prezime<<" na salter"<<klijent.di<<" ";
if(dajGodine(klijent)<40 && klijent.di==3 && ((klijent.datum[0]>=22 && klijent.datum[1]==12)||(klijent.datum[0]<=12 && klijent.datum[1]==1))){
  cout<<"- Igra lutriju, (di="<<klijent.di<<"), h. znak Jarac, starost "<<dajGodine(klijent);
  cout<<"\nPritisnite bilo sto za nastavak simulacije poslovanja";
  getch();
  cout<<endl;
  }
cout<<endl;
Sleep(35);

} }

void trudnice(redStrukt *red, short uvjet){ if(IsEmptyQ(red)) return; kliStrukt pom=FrontQ(red); DeQueueQ(red); trudnice(red, uvjet); if(pom.ci!=3||pom.di!=5)//ako nije trudnica ili ako ne pripada evoTV usluzi - vraćamo je u red EnQueueQ(pom, red); else if(uvjet) cout<<"Trudnica "<<pom.ime<<" "<<pom.prezime<<" je cekala za evoTV, sada izlazi iz poslovnice"<<endl; }

void prepisiRed(redStrukt *izvor, redStrukt *destinacija){ if(IsEmptyQ(izvor))//rubni return;

kliStrukt pom=FrontQ(izvor); DeQueueQ(izvor);

prepisiRed(izvor, destinacija);//rek. EnQueueQ(pom, izvor); EnQueueQ(pom, destinacija); }

void obrisiRed(redStrukt *red){ while((!IsEmptyQ(red))) DeQueueQ(red); }

void azurirajGlavni(){ obrisiRed(glavniRed);

prepisiRed(posiljkaRed, glavniRed); prepisiRed(racunRed, glavniRed); prepisiRed(lutrijaRed, glavniRed); prepisiRed(unionRed, glavniRed); prepisiRed(evoTvRed, glavniRed); prepisiRed(brziRed, glavniRed);

obrniRed(posiljkaRed); obrniRed(racunRed); obrniRed(lutrijaRed); obrniRed(unionRed); obrniRed(evoTvRed); obrniRed(brziRed); }

void dajBrziSalter(redStrukt *red){ if(IsEmptyQ(red)){//ako smo dosli do kraja reset glob. varijablu na 0 prvaDva=0; return; } kliStrukt pom=FrontQ(red); DeQueueQ(red); if(prvaDva<=1){//prva dva stavljamo u brziRed EnQueueQ(pom, brziRed); prvaDva++; } dajBrziSalter(red); if(pom.ci==4){//ako se radi o umirovljeniku zapisujemo u brziRed EnQueueQ(pom, brziRed); } else //Inače vraćamo u red odakle je dosao EnQueueQ(pom, red); }

void brziSalter(){ brziSim=true; dajBrziSalter(evoTvRed); dajBrziSalter(unionRed); dajBrziSalter(lutrijaRed); dajBrziSalter(racunRed); dajBrziSalter(posiljkaRed);

obrniRed(posiljkaRed); obrniRed(racunRed); obrniRed(lutrijaRed); obrniRed(unionRed); obrniRed(evoTvRed);

sortPrioritet(brziRed,0); }

bool citajDatoteku(podaci *imeSpol){ ifstream ulaznaDat("podaciTomislavCivcija.txt", ios::binary); if(!ulaznaDat) return false; char linija [100]; short poz; for(int i=0; i<52; i++){//vadimo podatke ulaznaDat.getline(imeSpol[i].ime, 21, '.'); ulaznaDat.getline(imeSpol[i].prezime, 26, '.'); ulaznaDat.get(imeSpol[i].spol); poz=ulaznaDat.tellg(); poz+=2; ulaznaDat.seekg(poz); } return true; }

int main (){ srand(time(0)%32768); podaci* imeSpol=new podaci [52]; bool procitano=citajDatoteku(imeSpol); if(procitano==false){ cout<<"Datoteka potrebna za rad programa nije na disku! \nProgram ce se sada zavrsiti."; Sleep(2000); return 0; } dodajKlijente(imeSpol); cout<<"\n/////////////////////////////////\nSimulacija poslovanja je zavrsena\n/////////////////////////////////"<<endl<<endl; cout<<"Pritisnite bilo sto za nastavak programa..."; getch(); system("cls"); int izbor;

do { cout<<"GLAVNI IZBORNIK: " "\n0 Izlaz iz programa" "\n1 Izlaz trudnica" "\n2 Ispis redova" "\n3 Azuriranje glavnog reda" "\n4 Simulacija brzog saltera" "\n Izbor: "; cin>>izbor; switch (izbor){ case 0: return 0; case 1: trudnice(glavniRed, 1); trudnice(evoTvRed, 0); cout<<"Trudnice su izasle zbog predugog cekanja"<<endl; break; case 2: brElemRed=0; system("cls"); cout<<"IZBORNIK ZA ISPIS: " "\n 0. Glavni red" "\n 1. Posiljka red" "\n 2. Racun red" "\n 3. Lutrija red" "\n 4. West-Union red" "\n 5. Evo TV red" "\n 6. Brzi red" "\n Izbor: "; cin>>izbor; cout<<setw(12)<<left<<"Ime"<<setw(13)<<left<<"Prezime"<<setw(6)<<left<<"ai"<<setw(6)<<left<<"bi"<<setw(4)<<left<<"ci"<<setw(4)<<left<<"di"<<endl; cout<<setw(12)<<left<<"---"<<setw(13)<<left<<"-------"<<setw(6)<<left<<"--"<<setw(6)<<left<<"--"<<setw(4)<<left<<"--"<<setw(4)<<left<<"--"<<endl; switch(izbor) { case 0: ispis(glavniRed); obrniRed(glavniRed);break; case 1: ispis(posiljkaRed); obrniRed(posiljkaRed); break; case 2: ispis(racunRed);obrniRed(racunRed); break; case 3: ispis(lutrijaRed);obrniRed(lutrijaRed); break; case 4: ispis(unionRed);obrniRed(unionRed); break; case 5: ispis(evoTvRed);obrniRed(evoTvRed); break; case 6: ispis(brziRed);obrniRed(brziRed); break;
} cout<<"\n///////KRAJ ISPISA///////"<<endl<<endl; cout<<"U redu se nalazi "<<brElemRed<<" osoba"<<endl<<endl; break; case 3: azurirajGlavni(); break; case 4: if(brziSim==true){ cout<<"Simulacija je vec pokrenuta! Pokrecem ispis reda brzog saltera "<<endl; Sleep(2000); cout<<setw(12)<<left<<"Ime"<<setw(13)<<left<<"Prezime"<<setw(6)<<left<<"ai"<<setw(6)<<left<<"bi"<<setw(4)<<left<<"ci"<<setw(4)<<left<<"di"<<endl; cout<<setw(12)<<left<<"---"<<setw(13)<<left<<"-------"<<setw(6)<<left<<"--"<<setw(6)<<left<<"--"<<setw(4)<<left<<"--"<<setw(4)<<left<<"--"<<endl; ispis(brziRed); obrniRed(brziRed); cout<<"\n///////KRAJ ISPISA///////"<<endl<<endl; cout<<"U redu se nalazi "<<brElemRed<<" osoba"<<endl<<endl; break; } brziSalter(); } cout<<"Pritisnite bilo sto za nastavak programa..."; getch(); system("cls"); } while (1); }

zadatak_3_civcija_tomislav's People

Contributors

tomislavcivcija avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.