rendered paste body#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
// klasa polazak
class Polazak{
string odrediste, oznaka;
int broj_perona, sati, minute, trajanje, kasnjenje;
public:
Polazak(string odrediste, string oznaka_voznje, int broj_perona,
int sat_polaska, int minute_polaska, int trajanje_voznje);
void PostaviKasjenje(int kasnjenje){
if(kasjnenje<0) throw "Neispravan unos";
this->kasnjenje=kasnjenje;}
bool DaLiKasni() const{ if(kasnjenje>0) return true; return false; }
int DajTrajanje() const{ return trajanje;}
void OcekivanoVrijemePolaska (int &sati, int &minute) const;
void OcekivanoVrijemeDolaska (int &sati, int &minute) const;
void Ispisi() const;
};
// klasa polasci
class Polasci{
Polazak **polasci;
int broj_polazaka;
int max_polazaka;
public:
explicit Polasci(int max_broj_polazaka);
~Polasci(){ for(int i=0; i<max_polazaka; i++) delete polasci[i];
delete[] polasci;}
Polasci(const Polasci &polasci);
Polasci &operator =(const Polasci &polasci);
void RegistrirajPolazak(string odrediste, string oznaka_voznje,
int broj_perona, int sat_polaska, int minute_polaska,
int trajanje_voznje);
void RegistrirajPolazak(Polazak *polazak);
int DajBrojPolazaka() const { return broj_polazaka; }
int DajBrojPolazakaKojiKasne() const{ int pom(0);
for(int i=0; i<broj_polazaka; i++)
if(polasci[i]->DaLiKasni()) pom++;
return pom;}
int DajProsjecnoTrajanjeVoznji() const{int pom(0);
for(int i=0; i<broj_polazaka; i++)
pom=pom+polasci[i]->DajTrajanje();
return pom/broj_polazaka;}
Polazak &DajPrviPolazak() const { sort(polasci, polasci+broj_polazaka, Uporedi); return *polasci[0]; }
Polazak &DajPosljednjiPolazak() const { sort(polasci, polasci+broj_polazaka, Uporedi); return *polasci[broj_polazaka-1]; }
void IsprazniKolekciju(){for(int i=0; i<broj_polazaka_max; i++){delete polasci[i];polasci[i]=0;}
delete[] polasci;
broj_polazaka=0;}
void Ispisi() const;
bool Uporedi(const Polazak* p1,const Polazak* p2); // dodata metoda??'
};
Polazak::Polazak(string odrediste, string oznaka_voznje, int broj_perona, int sat_polaska, int minute_polaska, int trajanje_voznje){
if(trajanje_voznje<0) throw "Neispravno uneseno trajanje voznje!";
if((sat_polaska>23 || sat_polaska<0) || (minute_polaska>59 || minute_polaska<0)) throw "Neispravno uneseno vrijeme polaska";
if(broj_perona<1 || broj_perona>15) throw "Neispravano unesen broj perona!";
trajanje=trajanje_voznje;
minute=minute_polaska;
sati=sat_polaska;
this->odrediste=odrediste;
this->oznaka=oznaka_voznje;
this->broj_perona=broj_perona;
kasnjenje=0;
}
void Polazak::OcekivanoVrijemePolaska (int &sati, int &minute) const{
if(kasnjenje>0){
int pom;
pom=sati*60+minute;
pom=pom+kasnjenje;
sati=pom/60;
minute=pom-sati*60;
}
}
void Polazak::OcekivanoVrijemeDolaska (int &sati, int &minute) const{
OcekivanoVrijemePolaska(sati, minute);
if(kasnjenje>0){
int s(0), m(0);
s=(trajanje+kasnjenje)/60;
m=(trajanje+kasnjenje)-s*60;
if(sati+s>23){
if(sati=23 && s=1)sati=0;
if(sati=23 && s>1 && s<23) sati=s-1;
else sati=s%24;
}
}
else{
int s(0), m(0);
s=trajanje/60;
m=trajanje-s*60;
if(sati+s>23){
if(sati=23 && s=1)sati=0;
if(sati=23 && s>1 && s<23) sati=s-1;
else sati=s%24;
}
}
void Polazak::Ispisi()const{
int m1(minute), s1(sati), t1(this->trajanje);
if(DaLiKasni){
int s(0), m(0);
s=(t1+kasnjenje)/60;
m=(t1+kasnjenje)-s*60;
if(s1i+s>23){
if(s1=23 && s=1)sati=0;
if(s1=23 && s>1 && s<23) s1=s-1;
else sati=s%24;
cout << setw(10) << oznaka
<< setw(30) << odrediste
<< right << setw(5)<< s1<< ":" << right << setw(5)<< m1
<< " (Planirano "<<sati<<":"<<minute
<< ",Kasni "<<kasnjenje<<"min) "
<< setw(8) << broj_perona << endl;
else {
s=t1/60;
m=t1-s*60;
if(s1+s>23){
if(s1=23 && s=1)s1=0;
if(s1=23 && s>1 && s<23) s1=s-1;
else s1=s%24;
};
cout << left << setw(10)<< oznaka
<< setw(30) << odrediste
<< right << setw(5) << sati <<":"<< left << setw(5)<< minute
<< right << setw(5)<< s1<<":"<< left << setw(5)<< m1
<< setw(8) << broj_perona << endl;
}
}
Polasci::Polasci(const Polasci &polasci){
this->polasci=new Polazak*[polasci.max_polazaka];
max_polazaka=polasci.max_polazaka;
broj_polazaka=polasci.broj_polazaka;
for(int i=0; i<broj_polazaka; i++){
this->polasci[i]=new Polazak("", "", 1, 0, 0, 0);
*(this->polasci[i])=*polasci.polasci[i];
}
}
void Polasci::RegistrirajPolazak(string odrediste, string oznaka_voznje, int broj_perona, int sat_polaska, int minute_polaska, int trajanje_voznje){
if(broj_polazaka==max_polazaka) throw "Nema mjesta!";
delete polasci[broj_polazaka];
polasci[broj_polazaka]=new Polazak(odrediste, oznaka_voznje, broj_perona, sat_polaska, minute_polaska, trajanje_voznje);
broj_polazaka++;
}
void Polasci::RegistrirajPolazak(Polazak *polazak){
if(broj_polazaka==max_polazaka) throw "Nema mjesta!";
delete polasci[broj_polazaka];
polasci[broj_polazaka]=polazak;
broj_polazaka++;
}
bool Polasci::Uporedi(const Polazak* p1,const Polazak* p2){
int sati1(0),sati2(0), min1(0), min2(0), pom1(0), pom2(0);
p1->OcekivanoVrijemePolaska(sati1, min1);
p2->OcekivanoVrijemePolaska(sati2, min2);
pom1=sati1*60+min1;
pom2=sati2*60+min2;
if(pom1<pom2)return true;
return false;
}
void Polasci::Ispisi() const {
sort(polasci, polasci+broj_polazaka, Uporedi);
cout << left << setw(10)<< "Vožnja: "
<< setw(30) << "Odredište: "
<< setw(10) <<"Polazak: "
<< setw(10) << "Dolazak: "
<< setw(8) <<"Peron: " << endl;
cout <<"--------------------------------------------------------------------" << endl;
for(int i=0; i<broj_polazaka; i++){
polasci[i]->Ispisi();
}
}
int main(int argc, char *argv[])
{
system("PAUSE");
return EXIT_SUCCESS;
}