Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Datum
- {
- public:
- int mesec;
- int godina;
- Datum()
- {
- mesec = 1;
- godina = 2019;
- }
- Datum(int mesec, int godina)
- {
- this->mesec = mesec;
- this->godina = godina;
- }
- bool jednakSa(Datum d)
- {
- return mesec == d.mesec && godina == d.godina;
- }
- void ispis()
- {
- cout << mesec << "/" << godina;
- }
- };
- class Karta
- {
- public:
- int id;
- virtual bool valjana(float cena, Datum datum) = 0;
- virtual void ispis() = 0;
- };
- class MesecnaKarta : public Karta
- {
- public:
- string imeVlasnika;
- Datum datumVazenja;
- MesecnaKarta()
- {
- imeVlasnika = "Kambo";
- }
- void produzi(int mesec, int godina)
- {
- datumVazenja.mesec += mesec;
- datumVazenja.godina += godina;
- }
- bool valjana(float cena, Datum datum)
- {
- if (datumVazenja.godina < datum.godina)
- return false;
- else if (datumVazenja.godina == datum.godina)
- {
- if (datumVazenja.mesec < datumVazenja.mesec)
- return false;
- else
- return true;
- }
- else
- return true;
- }
- void ispis()
- {
- cout << imeVlasnika << endl;
- cout << "vazi do: ";
- datumVazenja.ispis();
- cout << endl;
- }
- };
- class PojedinacnaKarta : public Karta
- {
- public:
- float uplaceniIznos;
- PojedinacnaKarta()
- {
- uplaceniIznos = 50;
- }
- PojedinacnaKarta(float iznos)
- {
- uplaceniIznos = iznos;
- }
- void dopuni(float iznos)
- {
- uplaceniIznos += iznos;
- }
- bool valjana(float cena, Datum datum)
- {
- bool ok = uplaceniIznos >= cena;
- uplaceniIznos -= cena;
- return ok;
- }
- void ispis()
- {
- cout << "uplaceni iznos je: " << uplaceniIznos << endl;
- }
- };
- class Aparat
- {
- public:
- Karta **karte; // niz pokazivaca (jedan * je za niz, a drugi za pokazivace)
- int brojKarata; // broj elemenata niza
- Aparat(int brKarata = 10)
- {
- brojKarata = brKarata;
- karte = new Karta*[brojKarata];
- for (int i = 0; i < brojKarata; i++)
- {
- char izbor;
- cout << "Je li karta mesecna ili pojedinacna? (m/p): ";
- cin >> izbor;
- if (izbor == 'm')
- {
- karte[i] = new MesecnaKarta();
- string imeVlasnika;
- cout << "Unesite ime vlasnika: ";
- cin >> imeVlasnika;
- ((MesecnaKarta *) karte[i])->imeVlasnika = imeVlasnika;
- cout << "Unesite mesec vazenja: ";
- int mesec;
- cin >> mesec;
- cout << "Unesite godinu vazenja: ";
- int godina;
- cin >> godina;
- Datum datumVazenja(mesec, godina);
- ((MesecnaKarta *) karte[i])->datumVazenja = datumVazenja;
- unosIdentifikatora(i);
- }
- else
- {
- karte[i] = new PojedinacnaKarta();
- cout << "Unesite uplaceni iznos: ";
- float iznos;
- cin >> iznos;
- ((PojedinacnaKarta *) karte[i])->uplaceniIznos = iznos;
- unosIdentifikatora(i);
- }
- }
- }
- // Trazi korisniku da unese identifikator sve dok ne unese ispravan.
- // Ispravan je ako ne postoji ni jedan isti u nisu (pre njega).
- void unosIdentifikatora(int indeks)
- {
- int id;
- // beskonacna petlja
- for (;;)
- {
- cout << "Unesite identifikator: ";
- cin >> id;
- for (int i = 0; i < indeks; i++)
- {
- if (karte[i]->id == id)
- {
- cout << "Vec postoji takav identifikator, pokusajte ponovo" << endl;
- continue;
- }
- }
- break; // id je u redu, moze da se doda karti
- }
- karte[indeks]->id = id;
- }
- void valjanostKarti(float cena, Datum datum)
- {
- for (int i = 0; i < brojKarata; i++)
- {
- string valjanost = karte[i]->valjana(cena, datum) ? " je valjana" : " nije valjana";
- karte[i]->ispis();
- cout << " - ";
- cout << karte[i]->id;
- cout << " - ";
- cout << valjanost << endl;
- }
- }
- };
- int main()
- {
- Aparat a(3);
- Datum d(5, 2020);
- a.valjanostKarti(12, d);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement