Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- char crtice[] = "\n===============================================\n";
- class Vrijeme{
- int _sati;
- int _minute;
- int _sekunde;
- public:
- //Konstruktor bez parametara
- Vrijeme() {
- _sati = _minute = _sekunde = 0;
- }
- //Konstruktor sa 3 parametra (sati, minute i sekunde)
- Vrijeme(int sati, int minute, int sekunde) {
- _sati = sati;
- _minute = minute;
- _sekunde = sekunde;
- }
- //Konstruktor sa 2 parametra (sati i minute)
- Vrijeme(int sati, int minute) {
- _sati = sati;
- _minute = minute;
- _sekunde = 0;
- }
- //Funkcija Info sa neobaveznim parametrom tipa bool koji određuje da li će vrijeme biti
- //ispisano u punom formatu
- //(hh:mm:ss) ili u skraćenom formatu (hh:mm). Default-no funkcija vrši ispis u punom formatu.
- void Info(bool fullFormat = true)const {
- if(fullFormat)
- cout << _sati << ":" << _minute << ":" << _sekunde;
- else
- cout << _sati << ":" << _minute;
- }
- //Funkcije seteri za sate, minute i sekunde
- void setVrijeme(int sati, int minute, int sekunde) { _sati = sati; _minute = minute; _sekunde = sekunde; }
- void setSati(int sati) { _sati = sati; }
- void setMinute(int minute) { _minute = minute; }
- void setSekunde(int sekunde) { _sekunde = sekunde; }
- //Funkcije geteri za sate, minute i sekunde
- int getSati()const { return _sati; }
- int getMinute()const { return _minute; }
- int getSekunde()const { return _sekunde; }
- //Funkcija Add kao rezultat vraća novi objekat tipa vrijeme koji predstavlja
- //sumu vremena poslijeđenog kao parametar i instance this.
- Vrijeme Add(Vrijeme v) {
- int sekundeUkupno = (_sati * 3600 + _minute * 60 + _sekunde) + (v._sati * 3600 + v._minute * 60 + v._sekunde);
- return Vrijeme(sekundeUkupno/3600, sekundeUkupno%3600/60, sekundeUkupno%60);
- }
- //Funkcija Add kao rezultat vraća novi objekat tipa vrijeme koji predstavlja
- //sumu parametra izraženog u minutama i vremena instance this.
- Vrijeme Add(int minute)const {
- int sekundeUkupno = (_sati * 3600 + _minute * 60 + _sekunde) + (minute * 60);
- return Vrijeme(sekundeUkupno/3600, sekundeUkupno%3600/60, sekundeUkupno%60);
- }
- //Funkcija CompareTo vraća vrijednost tipa int u zavisnosti od toga da li je vrijeme
- //instance this prije, jednako ili poslije vremena proslijeđenog kao parametar.
- //Moguće povratne vrijednosti:
- //-1 - vrijeme instance this nastupa prije vremena v2
- // 0 - vrijeme instance this je jednako vremenu v2
- // 1 - vrijeme instance this nastupa nakon vremena v2
- int CompareTo(Vrijeme v) {
- int sekundeInstance = _sati * 3600 + _minute * 60 + _sekunde;
- int sekundeParametra = v._sati * 3600 + v._minute * 60 + v._sekunde;
- if(sekundeInstance < sekundeParametra)
- return -1;
- else if(sekundeInstance == sekundeParametra)
- return 0;
- else return 1;
- }
- };
- class Polazak{
- char _odrediste[50];
- int _brojVoza;
- int _brojPerona;
- //Informacija da li se radi o lokalnom ili brzom vozu (false = lokalni, true = brzi)
- bool _vrstaVoza;
- Vrijeme _polazak;
- //Kasnjenje u minutama
- int _kasnjenje;
- public:
- //Potrebni konstruktori
- Polazak() {
- strcpy_s(_odrediste, 50, "<Nije uneseno>");
- _brojVoza = 0;
- _brojPerona = 0;
- _vrstaVoza = 0;
- _kasnjenje = 0;
- }
- Polazak(char* o, int brVoza, int brPerona, bool vrsta, int satiPolaska, int minPolaska) {
- strcpy_s(_odrediste, 50, o);
- _brojVoza = brVoza;
- _brojPerona = brPerona;
- _vrstaVoza = vrsta;
- _polazak.setVrijeme(satiPolaska, minPolaska, 0);
- _kasnjenje = 0;
- }
- //Ukoliko voz kasni metoda vraća true, u suprotnom vraća false
- bool Kasni()const { return _kasnjenje > 0; }
- //Potrebni geteri za funkcije koje slijede
- int getBrojVoza() { return _brojVoza; }
- char * getOdrediste() { return _odrediste; }
- int getKasnjenje() { return _kasnjenje; }
- Vrijeme getPolazak() { return _polazak; }
- //Očekivano vrijeme polaska se formira na osnovu predviđenog vremena i
- //kašnjenja izraženog u minutama
- Vrijeme getOcekivanoVrijemePolaska()const {
- Vrijeme temp = _polazak.Add(_kasnjenje);
- return temp;
- }
- //U slučaju polaska bez kašnjenja ispis je sljedeći:
- //Lokalni voz broj 3256, odrediste Tuzla, polazi sa perona 5 u 14:30 Putnicima i voznom
- //osoblju zelimo ugodno putovanje.
- //U slučaju da se radi o polasku koji kasni primjer ispisa je:
- //Brzi voz broj 256, odrediste Dubrovnik, sa predvidjenim vremenom polaska u 6:20, kasni oko
- //35 minuta. Voz ce krenuti sa perona 2 u 6:55. Izvinjavamo se putnicima zbog eventualnih neugodnosti.
- void Info()const{
- if(_vrstaVoza) cout << "Brzi ";
- else cout << "Lokalni ";
- if(Kasni()) {
- cout << " voz broj " << _brojVoza << ", odrediste " << _odrediste
- << ", sa predvidjenim vremenom polaska u "; _polazak.Info(false);
- cout << ", kasni oko " << _kasnjenje << " minuta. Voz ce krenuti sa perona "
- << _brojPerona << " u "; getOcekivanoVrijemePolaska().Info(false);
- cout << ".\nIzvinjavamo se putnicima zbog eventualnih neugodnosti." << endl;
- }
- else {
- cout << " voz broj " << _brojVoza << ", odrediste " << _odrediste <<
- ", polazi sa perona " << _brojPerona << " u "; _polazak.Info(false);
- cout << ".\nPutnicima i voznom osoblju zelimo ugodno putovanje." << endl;
- }
- }
- //Funkcija Uporedi vraća logičku vrijednost “true” ukoliko polazak zadan objektom koji poziva funkciju nastupa prije
- //polaska zadanog drugim argumentom, u suprotnom vraća “false”.
- //Prilikom upoređvanja uzima se u obzir i očekivano vrijeme kašnjenja, a ne samo planirano
- //vrijeme polaska.
- bool Uporedi(const Polazak& p2) {
- if(getOcekivanoVrijemePolaska().CompareTo(p2.getOcekivanoVrijemePolaska()) == -1)
- return true;
- return false;
- }
- //Povećava kašnjenje za vrijednost zadanu parametrom min.
- void UvecajKasnjenje(int min) {
- _kasnjenje += min;
- }
- };
- class RedVoznje{
- int brojPolazaka;
- Polazak polasci[100];
- public:
- //Potrebne konstruktor funkcije
- RedVoznje() {
- brojPolazaka = 0;
- }
- //Funkcija geter za broj polazaka
- int getBrojPolazaka()const { return brojPolazaka; }
- //Funkcija za dodavanje novog polaska u red vožnje.
- //Prilikom dodavanja provjerava se da voz već nije zauzet u tom vremenu.
- void AddPolazak(Polazak p) {
- if(brojPolazaka > 100)
- return;
- for(int i = 0; i < brojPolazaka; i++)
- if(p.getBrojVoza() == polasci[i].getBrojVoza() && p.getPolazak().CompareTo(polasci[i].getPolazak()) == 0)
- return;
- polasci[brojPolazaka] = p;
- brojPolazaka++;
- }
- //Funkcija uklanja sve polaske određenog voza.
- void RemovePolaske(int brojVoza) {
- for(int i = 0; i < brojPolazaka; i++)
- if(polasci[i].getBrojVoza() == brojVoza) {
- polasci[i] = polasci[brojPolazaka - 1];
- brojPolazaka--;
- i--;
- }
- }
- //Funkcija dodaje kasnjenje odredjenom polasku
- void AddKasnjenje(int polazak, int minute) {
- polasci[polazak].UvecajKasnjenje(minute);
- }
- //Funkcija ispisuje samo polaske zadanog odredišta.
- void Info(char * odrediste) {
- for(int i = 0; i < brojPolazaka; i++)
- if(strcmp(polasci[i].getOdrediste(), odrediste) == 0)
- polasci[i].Info();
- }
- //Funkcija pronalazi i ispisuje samo polaske koji kasne više od 30 minuta.
- void IspisPolazakaKojiKasne() {
- for(int i = 0; i < brojPolazaka; i++)
- if(polasci[i].getKasnjenje() > 30)
- polasci[i].Info();
- }
- //Funkcija za ispis reda vožnje.
- void IspisRedaVoznje() {
- for(int i = 0; i < brojPolazaka; i++)
- polasci[i].Info();
- }
- };
- void main()
- {
- // Testiranje svih dostupnih funkcionalnosti
- RedVoznje redVoznje;
- char odrediste[50];
- int izbor, brojVoza, brojPerona, kasnjenje, sati, minute;
- bool vrstaVoza;
- do {
- cout << crtice << "\t::IZBORNIK::" << crtice;
- cout << "1. Dodaj polazak" << endl;
- cout << "2. Izbrisi polaske odredjenog voza" << endl;
- cout << "3. Uvecaj kasnjenje" << endl;
- cout << "4. Ispis reda voznje" << endl;
- cout << "5. Ispis polazaka koji kasne vise od 30 min." << endl;
- cout << "6. Ispis polazaka odredjenog odredista" << endl;
- cout << "7. IZLAZ" <<endl;
- cout << crtice << "Vas izbor: ";
- cin >> izbor;
- cin.ignore();
- switch(izbor) {
- case 1:
- system("cls");
- {
- cout << crtice << "\t::UNOS NOVOG POLASKA::" << crtice;
- cout << "Unesite odrediste: ";
- cin.getline(odrediste, 50);
- cout << "Unesite broj voza: ";
- cin >> brojVoza;
- cout << "Unesite broj perona: ";
- cin >> brojPerona;
- cout << "Unesite vrstu voza (0 - lokalni, 1 - brzi): ";
- cin >> vrstaVoza;
- cout << "Vrijeme polaska (hh:mm): ";
- cin >> sati >> minute;
- Polazak unosPolaska(odrediste, brojVoza, brojPerona, vrstaVoza, sati, minute);
- redVoznje.AddPolazak(unosPolaska);
- }
- break;
- case 2:
- system("cls");
- {
- cout << crtice << "\t::UKLANJANJE POLASKA::" << crtice;
- cout << "Unesite broj voza kojeg zelite ukloniti: ";
- cin >> brojVoza;
- redVoznje.RemovePolaske(brojVoza);
- }
- break;
- case 3:
- system("cls");
- {
- cout << crtice << "\t::UVECAVANJE KASNJENJA::" << crtice;
- do {
- cout << "Unesite broj polaska kojem zelite povecati kasnjenje: ";
- cin >> izbor;
- izbor--;
- } while(izbor < 0 || izbor > redVoznje.getBrojPolazaka() - 1);
- cout << "Unesite kasnjenje (izrazeno u minutama): ";
- cin >> kasnjenje;
- redVoznje.AddKasnjenje(izbor, kasnjenje);
- }
- break;
- case 4:
- system("cls");
- {
- cout << crtice << "\t::ISPIS REDA VOZNJE::" << crtice;
- redVoznje.IspisRedaVoznje();
- }
- break;
- case 5:
- system("cls");
- {
- cout << crtice << "\t::ISPIS POLAZAKA KOJI KASNE VISE OD 30 MIN.::" << crtice;
- redVoznje.IspisPolazakaKojiKasne();
- }
- break;
- case 6:
- system("cls");
- {
- cout << crtice << "::ISPIS POLAZAKA ODREDJENOG ODREDISTA::" << crtice;
- cout << "Unesite odrediste: ";
- cin.getline(odrediste, 50);
- cout << "\tISPISUJEM POLASKE ZA ODREDISTE '" << odrediste << "':" << endl;
- redVoznje.Info(odrediste);
- }
- break;
- case 7:
- return;
- default:
- system("cls");
- cout << "Takva opcija ne postoji!" << endl;
- }
- } while(1);
- system("pause>0");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement