Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- char * crt = "\n----------------------------------------------------\n";
- template<class T1, class T2>
- class Kolekcija {
- T1 * _elementi1;
- T2 * _elementi2;
- int * _trenutno;
- public:
- Kolekcija()
- {
- _elementi1 = nullptr;
- _elementi2 = nullptr;
- _trenutno = new int(0);
- }
- Kolekcija(const Kolekcija & k)
- {
- _elementi1 = new T1(*k._trenutno);
- _elementi2 = new T2(*k._trenutno);
- _trenutno = new int(*k._trenutno);
- for (int i = 0; i < *_trenutno; i++)
- {
- _elementi1[i] = k._elementi1[i];
- _elementi2[i] = k._elementi2[i];
- }
- }
- Kolekcija & operator=(const Kolekcija & k)
- {
- if (this == &k)
- return *this;
- delete[]_elementi1;
- delete[]_elementi2;
- delete _trenutno;
- _elementi1 = new T1(*k._trenutno);
- _elementi2 = new T2(*k._trenutno);
- _trenutno = new int(*k._trenutno);
- for (int i = 0; i < *_trenutno; i++)
- {
- _elementi1[i] = k._elementi1[i];
- _elementi2[i] = k._elementi2[i];
- }
- return *this;
- }
- //1. potrebne funkcije
- ~Kolekcija()
- {
- delete[]_elementi1; _elementi1 = nullptr;
- delete[]_elementi2; _elementi2 = nullptr;
- delete _trenutno; _trenutno = nullptr;
- }
- T1 & getElement1(int lok)
- {
- if (lok >= 0 && lok < *_trenutno)
- return _elementi1[lok];
- }
- T2 & getElement2(int lok)
- {
- if (lok >= 0 && lok < *_trenutno)
- return _elementi2[lok];
- }
- int getTrenutno()const { return *_trenutno; }
- void AddElement(T1 t1, T2 t2)
- {
- T1 * temp1 = new T1[*_trenutno + 1];
- T2 * temp2 = new T2[*_trenutno + 1];
- for (int i = 0; i < *_trenutno; i++)
- {
- temp1[i] = _elementi1[i];
- temp2[i] = _elementi2[i];
- }
- temp1[*_trenutno] = t1;
- temp2[*_trenutno] = t2;
- delete[]_elementi1;
- delete[]_elementi2;
- _elementi1 = temp1;
- _elementi2 = temp2;
- (*_trenutno)++;
- }
- friend ostream & operator<<(ostream & cout, const Kolekcija<T1,T2> & k)
- {
- for (int i = 0; i < k.getTrenutno(); i++)
- cout << k._elementi1[i] << " " << k._elementi2[i] << endl;
- return cout;
- }
- };
- class Datum {
- int *_dan, *_mjesec, *_godina;
- public:
- Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
- _dan = new int(dan);
- _mjesec = new int(mjesec);
- _godina = new int(godina);
- }
- Datum(const Datum & d)
- {
- _dan = new int(*d._dan);
- _mjesec = new int(*d._mjesec);
- _godina = new int(*d._godina);
- }
- ~Datum() {
- delete _dan; _dan = nullptr;
- delete _mjesec; _mjesec = nullptr;
- delete _godina; _godina = nullptr;
- }
- Datum & operator=(const Datum & d)
- {
- if(this == &d)
- return *this;
- *_dan = *d._dan;
- *_mjesec = *d._mjesec;
- *_godina = *d._godina;
- return *this;
- }
- friend ostream& operator<< (ostream &COUT, const Datum &obj) {
- COUT << *obj._dan << " " << *obj._mjesec << " " << *obj._godina;
- return COUT;
- }
- //1. potrebne funkcije
- };
- class Osoba {
- protected:
- char * _imePrezime;
- Datum * _datumRodjenja;
- public:
- Osoba(char * imePrezime, Datum datum) {
- _imePrezime = new char[strlen(imePrezime) + 1];
- strcpy_s(_imePrezime, strlen(imePrezime) + 1, imePrezime);
- _datumRodjenja = new Datum(datum);
- }
- Osoba(const Osoba & obj) {
- _imePrezime = new char[strlen(obj._imePrezime) + 1];
- strcpy_s(_imePrezime, strlen(obj._imePrezime) + 1, obj._imePrezime);
- _datumRodjenja = new Datum(*obj._datumRodjenja);
- }
- ~Osoba() { delete[]_imePrezime; delete _datumRodjenja; }
- //1. potrebne funkcije
- };
- class Kupac {
- //svaki kupac ima popust koji mu se zaracunava prilikom svake kupovine
- //pocetni popust je 0.10%
- //svaka kupovina u iznosu 100 - 500KM povecava iznos popusta za 0.15%
- //svaka kupovina u iznosu 500 - 1000KM povecava iznos popusta za 0.25%
- //svaka kupovina u iznosu vecem od 1000KM povecava iznos popusta za 0.30%
- float _odobreniPopust;
- public:
- //1. potrebne funkcije
- };
- class Artikal {
- string _barCode;
- char * _naziv;
- float _cijena;
- public:
- Artikal(char * naziv, float cijena, string barCode) {
- int vel = strlen(naziv) + 1;
- _naziv = new char[vel];
- strcpy_s(_naziv, vel, naziv);
- _cijena = cijena;
- _barCode = barCode;
- }
- ~Artikal() { delete[]_naziv; _naziv = nullptr; }
- friend ostream& operator<< (ostream &COUT, const Artikal &obj) { COUT << obj._naziv << " " << obj._cijena << " KM" << endl; return COUT; }
- //1. potrebne funkcije
- };
- class Racun {
- //format broja racuna: RN6005491
- //osigurati automatsko generisanje broja racuna pocevsi od RN0000001
- char _brojRacuna[10];
- Datum _datumKreiranja;
- //prvi argument je Artikal, a drugi kolicina/broj artikala koju je kupac uzeo
- Kolekcija<Artikal *, int> * _stavkeRacuna;
- Kupac * _kupac;
- public:
- /*
- 1. potrebne (de)konstruktor i druge funkcije
- 2. DodajArtikal - dodaje novi artikal u listu artikala zajedno sa njegovom kolicinom. Onemoguciti ponavljanje artikala na nacin da se uvecava samo kolicina ukoliko korisnik vise puta pokusa dodati isti artikal.
- 3. operator<< - ispisuje racun u formatu prikazanom na slici(nije obavezno da bude identican, ali je svakako pozeljno).Nakon ispisa svakog racuna, ukoliko su ispunjeni definisani uslovi, kupcu se uvecava popust.
- 4. Sortiraj - sortira artikle (rastuci) po kolicini novca kojom ucestvuju u ukupnom iznosu racuna
- */
- };
- void main() {
- /****************************************************************************
- 1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
- 2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR CE BITI OZNACENO KAO "RE"
- 3. SPASAVAJTE PROJEKAT KAKO BI SE SPRIJECILO GUBLJENJE URADJENOG ZADATKA
- 4. PROGRAMSKI CODE SE TAKODJER NALAZI U FAJLU CODE_.TXT
- 5. NAZIV I LISTA PARAMETARA FUNKCIJA MORAJU BITI IDENTIČNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U.
- 6. NIJE POTREBNO BACATI IZUZETKE.
- ****************************************************************************/
- #pragma region TestiranjeDatuma
- Datum danas(26, 11, 2015);
- Datum sutra(danas);
- Datum prekosutra;
- prekosutra = danas;
- cout << danas << endl << sutra << endl << prekosutra << crt;
- #pragma endregion
- #pragma region TestiranjeKolekcije
- Kolekcija<int, int> kolekcija1;
- int brojElemenata = 15;
- for (size_t i = 0; i < brojElemenata; i++)
- kolekcija1.AddElement(i, i);
- cout << kolekcija1.getElement1(0) << " " << kolekcija1.getElement2(0) << endl;
- cout << kolekcija1 << endl;
- Kolekcija<int, int> kolekcija2;
- kolekcija2 = kolekcija1;
- cout << kolekcija2 << crt;
- if (kolekcija1.getTrenutno() == kolekcija2.getTrenutno())
- cout << "ISTI BROJ ELEMENATA" << endl;
- Kolekcija<int, int> kolekcija3(kolekcija2);
- cout << kolekcija3 << crt;
- //#pragma endregion
- //#pragma region TestiranjeKupca
- // Kupac jasmin("Jasmin Azemovic", Datum(15, 2, 1980));
- // Kupac adel("Adel Handzic", Datum(15, 10, 1981));
- // Kupac jasmin2 = jasmin;
- // cout << jasmin << endl << jasmin2 << endl;
- // jasmin = jasmin2;
- // cout << jasmin << endl << jasmin2 << endl;
- //#pragma endregion
- //#pragma region TestiranjeArtikla
- // Artikal sokCppyNarandza("Cappy narandza", 2.10, "699511236545");
- // Artikal cokoladaMilkaMilkins("Milka Milkins", 2.55, "622445875463");
- // Artikal jogurtMeggle("Meggle jogurt", 2.55, "155338774458");
- //
- // cout << sokCppyNarandza << cokoladaMilkaMilkins << jogurtMeggle << endl;
- // sokCppyNarandza = cokoladaMilkaMilkins;
- // cout << sokCppyNarandza << endl;
- // if (sokCppyNarandza == cokoladaMilkaMilkins)
- // cout << "Artikli su isti" << endl;
- //#pragma endregion
- //#pragma region TestiranjeRacuna
- // /*GenerisiSljedeciBrojRacuna - globalna funkcija koja generise i vraca naredni broj racuna u prethodno definisanom formatu*/
- // Racun racun1(GenerisiSljedeciBrojRacuna(), danas, &jasmin);
- //
- // racun1.DodajArtikal(cokoladaMilkaMilkins, 15);
- // racun1.DodajArtikal(sokCppyNarandza, 20);
- // racun1.DodajArtikal(jogurtMeggle, 20);
- //
- // cout << racun1 << endl;
- //
- // Racun racun2(GenerisiSljedeciBrojRacuna(), sutra, &jasmin);
- // racun2.DodajArtikal(cokoladaMilkaMilkins, 15);
- // racun2.DodajArtikal(sokCppyNarandza, 20);
- // racun2.DodajArtikal(jogurtMeggle, 20);
- // cout << racun2 << endl;
- //
- // Racun racun3(racun2);
- // cout << racun3 << endl;
- // racun3.Sortiraj();
- //
- //#pragma endregion
- // system("pause");
- }
- //popust mozete izracunati kao procenat od ukupne sume racuna (pozeljna opcija) ili kao vrijednost u KM-ovima (kao u nastavku)
- /*
- FITStore::Racun::RN000001
- | RB Artikal Cijena Kolicina Ukupno |
- | 1. Milka Milkins 2.55 15 38.25 |
- | 2. Cappy narandza 2.1 20 42 |
- | 3. Meggle jogurt 2.55 20 51 |
- | Suma:131.25KM
- | Popust : 0.1KM
- | Za platiti : 131.15KM
- FITStore::Racun::RN000002
- | RB Artikal Cijena Kolicina Ukupno |
- | 1. Milka Milkins 2.55 15 38.25 |
- | 2. Cappy narandza 2.1 20 42 |
- | 3. Meggle jogurt 2.55 20 51 |
- | Suma:131.25KM
- | Popust : 0.25KM
- | Za platiti : 131KM
- FITStore::Racun::RN000002
- | RB Artikal Cijena Kolicina Ukupno |
- | 1. Milka Milkins 2.55 15 38.25 |
- | 2. Cappy narandza 2.1 20 42 |
- | 3. Meggle jogurt 2.55 20 51 |
- | Suma:131.25KM
- | Popust : 0.4KM
- | Za platiti : 130.85KM
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement