Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. char * crt = "\n----------------------------------------------------\n";
  7. template<class T1, class T2>
  8. class Kolekcija {
  9.     T1 * _elementi1;
  10.     T2 * _elementi2;
  11.     int * _trenutno;
  12. public:
  13.     Kolekcija()
  14.     {
  15.         _elementi1 = nullptr;
  16.         _elementi2 = nullptr;
  17.         _trenutno = new int(0);
  18.     }
  19.     Kolekcija(const Kolekcija & k)
  20.     {
  21.         _elementi1 = new T1(*k._trenutno);
  22.         _elementi2 = new T2(*k._trenutno);
  23.         _trenutno = new int(*k._trenutno);
  24.        
  25.         for (int i = 0; i < *_trenutno; i++)
  26.         {
  27.             _elementi1[i] = k._elementi1[i];
  28.             _elementi2[i] = k._elementi2[i];
  29.         }
  30.        
  31.     }
  32.     Kolekcija & operator=(const Kolekcija & k)
  33.     {
  34.         if (this == &k)
  35.             return *this;
  36.  
  37.         delete[]_elementi1;
  38.         delete[]_elementi2;
  39.         delete _trenutno;
  40.  
  41.         _elementi1 = new T1(*k._trenutno);
  42.         _elementi2 = new T2(*k._trenutno);
  43.         _trenutno = new int(*k._trenutno);
  44.  
  45.         for (int i = 0; i < *_trenutno; i++)
  46.         {
  47.             _elementi1[i] = k._elementi1[i];
  48.             _elementi2[i] = k._elementi2[i];
  49.         }
  50.         return *this;
  51.  
  52.     }
  53.     //1. potrebne funkcije
  54.     ~Kolekcija()
  55.     {
  56.         delete[]_elementi1; _elementi1 = nullptr;
  57.         delete[]_elementi2; _elementi2 = nullptr;
  58.         delete _trenutno; _trenutno = nullptr;
  59.     }
  60.     T1 & getElement1(int lok)
  61.     {
  62.         if (lok >= 0 && lok < *_trenutno)
  63.             return _elementi1[lok];
  64.     }
  65.     T2 & getElement2(int lok)
  66.     {
  67.         if (lok >= 0 && lok < *_trenutno)
  68.             return _elementi2[lok];
  69.     }
  70.     int getTrenutno()const { return *_trenutno; }
  71.     void AddElement(T1 t1, T2 t2)
  72.     {
  73.         T1 * temp1 = new T1[*_trenutno + 1];
  74.         T2 * temp2 = new T2[*_trenutno + 1];
  75.  
  76.         for (int i = 0; i < *_trenutno; i++)
  77.         {
  78.             temp1[i] = _elementi1[i];
  79.             temp2[i] = _elementi2[i];
  80.         }
  81.  
  82.         temp1[*_trenutno] = t1;
  83.         temp2[*_trenutno] = t2;
  84.  
  85.         delete[]_elementi1;
  86.         delete[]_elementi2;
  87.  
  88.         _elementi1 = temp1;
  89.         _elementi2 = temp2;
  90.  
  91.         (*_trenutno)++;
  92.     }
  93.     friend ostream & operator<<(ostream & cout, const Kolekcija<T1,T2> & k)
  94.     {
  95.         for (int i = 0; i < k.getTrenutno(); i++)
  96.             cout << k._elementi1[i] << " " << k._elementi2[i] << endl;
  97.         return cout;
  98.     }
  99. };
  100. class Datum {
  101.     int *_dan, *_mjesec, *_godina;
  102. public:
  103.     Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
  104.         _dan = new int(dan);
  105.         _mjesec = new int(mjesec);
  106.         _godina = new int(godina);
  107.     }
  108.     Datum(const Datum & d)
  109.     {
  110.         _dan = new int(*d._dan);
  111.         _mjesec = new int(*d._mjesec);
  112.         _godina = new int(*d._godina);
  113.     }
  114.     ~Datum() {
  115.         delete _dan; _dan = nullptr;
  116.         delete _mjesec; _mjesec = nullptr;
  117.         delete _godina; _godina = nullptr;
  118.     }
  119.     Datum & operator=(const Datum & d)
  120.     {
  121.         if(this == &d)
  122.             return *this;
  123.  
  124.         *_dan = *d._dan;
  125.         *_mjesec = *d._mjesec;
  126.         *_godina = *d._godina;
  127.         return *this;
  128.     }
  129.     friend ostream& operator<< (ostream &COUT, const Datum &obj) {
  130.         COUT << *obj._dan << " " << *obj._mjesec << " " << *obj._godina;
  131.         return COUT;
  132.     }
  133.     //1. potrebne funkcije
  134.  
  135. };
  136. class Osoba {
  137. protected:
  138.     char * _imePrezime;
  139.     Datum * _datumRodjenja;
  140. public:
  141.     Osoba(char * imePrezime, Datum datum) {
  142.         _imePrezime = new char[strlen(imePrezime) + 1];
  143.         strcpy_s(_imePrezime, strlen(imePrezime) + 1, imePrezime);
  144.         _datumRodjenja = new Datum(datum);
  145.     }
  146.     Osoba(const Osoba & obj) {
  147.         _imePrezime = new char[strlen(obj._imePrezime) + 1];
  148.         strcpy_s(_imePrezime, strlen(obj._imePrezime) + 1, obj._imePrezime);
  149.         _datumRodjenja = new Datum(*obj._datumRodjenja);
  150.     }
  151.     ~Osoba() { delete[]_imePrezime; delete _datumRodjenja; }
  152.     //1. potrebne funkcije
  153. };
  154. class Kupac {
  155.     //svaki kupac ima popust koji mu se zaracunava prilikom svake kupovine
  156.     //pocetni popust je 0.10%
  157.     //svaka kupovina u iznosu 100 - 500KM povecava iznos popusta za 0.15%
  158.     //svaka kupovina u iznosu 500 - 1000KM povecava iznos popusta za 0.25%
  159.     //svaka kupovina u iznosu vecem od 1000KM povecava iznos popusta za 0.30%
  160.     float _odobreniPopust;
  161. public:
  162.     //1. potrebne funkcije
  163.  
  164. };
  165. class Artikal {
  166.     string _barCode;
  167.     char * _naziv;
  168.     float _cijena;
  169. public:
  170.     Artikal(char * naziv, float cijena, string barCode) {
  171.         int vel = strlen(naziv) + 1;
  172.         _naziv = new char[vel];
  173.         strcpy_s(_naziv, vel, naziv);
  174.         _cijena = cijena;
  175.         _barCode = barCode;
  176.     }
  177.     ~Artikal() { delete[]_naziv; _naziv = nullptr; }
  178.     friend ostream& operator<< (ostream &COUT, const Artikal &obj) { COUT << obj._naziv << " " << obj._cijena << " KM" << endl; return COUT; }
  179.     //1. potrebne funkcije
  180.  
  181. };
  182. class Racun {
  183.     //format broja racuna: RN6005491
  184.     //osigurati automatsko generisanje broja racuna pocevsi od RN0000001
  185.     char _brojRacuna[10];
  186.     Datum _datumKreiranja;
  187.     //prvi argument je Artikal, a drugi kolicina/broj artikala koju je kupac uzeo
  188.     Kolekcija<Artikal *, int> * _stavkeRacuna;
  189.     Kupac * _kupac;
  190. public:
  191.     /*
  192.     1. potrebne (de)konstruktor i druge funkcije
  193.     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.
  194.     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.
  195.     4. Sortiraj - sortira artikle (rastuci) po kolicini novca kojom ucestvuju u ukupnom iznosu racuna
  196.     */
  197. };
  198. void main() {
  199.  
  200.     /****************************************************************************
  201.     1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
  202.     2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR CE BITI OZNACENO KAO "RE"
  203.     3. SPASAVAJTE PROJEKAT KAKO BI SE SPRIJECILO GUBLJENJE URADJENOG ZADATKA
  204.     4. PROGRAMSKI CODE SE TAKODJER NALAZI U FAJLU CODE_.TXT
  205.     5. NAZIV I LISTA PARAMETARA FUNKCIJA MORAJU BITI IDENTIČNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U.
  206.     6. NIJE POTREBNO BACATI IZUZETKE.
  207.     ****************************************************************************/
  208. #pragma region TestiranjeDatuma
  209.     Datum danas(26, 11, 2015);
  210.     Datum sutra(danas);
  211.     Datum prekosutra;
  212.     prekosutra = danas;
  213.     cout << danas << endl << sutra << endl << prekosutra << crt;
  214. #pragma endregion
  215. #pragma region TestiranjeKolekcije
  216.     Kolekcija<int, int> kolekcija1;
  217.     int brojElemenata = 15;
  218.     for (size_t i = 0; i < brojElemenata; i++)
  219.         kolekcija1.AddElement(i, i);
  220.     cout << kolekcija1.getElement1(0) << " " << kolekcija1.getElement2(0) << endl;
  221.     cout << kolekcija1 << endl;
  222.     Kolekcija<int, int> kolekcija2;
  223.     kolekcija2 = kolekcija1;
  224.     cout << kolekcija2 << crt;
  225.     if (kolekcija1.getTrenutno() == kolekcija2.getTrenutno())
  226.         cout << "ISTI BROJ ELEMENATA" << endl;
  227.     Kolekcija<int, int> kolekcija3(kolekcija2);
  228.     cout << kolekcija3 << crt;
  229. //#pragma endregion
  230. //#pragma region TestiranjeKupca
  231. //  Kupac jasmin("Jasmin Azemovic", Datum(15, 2, 1980));
  232. //  Kupac adel("Adel Handzic", Datum(15, 10, 1981));
  233. //  Kupac jasmin2 = jasmin;
  234. //  cout << jasmin << endl << jasmin2 << endl;
  235. //  jasmin = jasmin2;
  236. //  cout << jasmin << endl << jasmin2 << endl;
  237. //#pragma endregion
  238. //#pragma region TestiranjeArtikla
  239. //  Artikal sokCppyNarandza("Cappy narandza", 2.10, "699511236545");
  240. //  Artikal cokoladaMilkaMilkins("Milka Milkins", 2.55, "622445875463");
  241. //  Artikal jogurtMeggle("Meggle jogurt", 2.55, "155338774458");
  242. //
  243. //  cout << sokCppyNarandza << cokoladaMilkaMilkins << jogurtMeggle << endl;
  244. //  sokCppyNarandza = cokoladaMilkaMilkins;
  245. //  cout << sokCppyNarandza << endl;
  246. //  if (sokCppyNarandza == cokoladaMilkaMilkins)
  247. //      cout << "Artikli su isti" << endl;
  248. //#pragma endregion
  249. //#pragma region TestiranjeRacuna
  250. //  /*GenerisiSljedeciBrojRacuna - globalna funkcija koja generise i vraca naredni broj racuna u prethodno definisanom formatu*/
  251. //  Racun racun1(GenerisiSljedeciBrojRacuna(), danas, &jasmin);
  252. //
  253. //  racun1.DodajArtikal(cokoladaMilkaMilkins, 15);
  254. //  racun1.DodajArtikal(sokCppyNarandza, 20);
  255. //  racun1.DodajArtikal(jogurtMeggle, 20);
  256. //
  257. //  cout << racun1 << endl;
  258. //
  259. //  Racun racun2(GenerisiSljedeciBrojRacuna(), sutra, &jasmin);
  260. //  racun2.DodajArtikal(cokoladaMilkaMilkins, 15);
  261. //  racun2.DodajArtikal(sokCppyNarandza, 20);
  262. //  racun2.DodajArtikal(jogurtMeggle, 20);
  263. //  cout << racun2 << endl;
  264. //
  265. //  Racun racun3(racun2);
  266. //  cout << racun3 << endl;
  267. //  racun3.Sortiraj();
  268. //
  269. //#pragma endregion
  270. //  system("pause");
  271. }
  272. //popust mozete izracunati kao procenat od ukupne sume racuna (pozeljna opcija) ili kao vrijednost u KM-ovima (kao u nastavku)
  273. /*
  274. FITStore::Racun::RN000001
  275. | RB Artikal Cijena Kolicina Ukupno |
  276. | 1. Milka Milkins 2.55 15 38.25 |
  277. | 2. Cappy narandza 2.1 20 42 |
  278. | 3. Meggle jogurt 2.55 20 51 |
  279. | Suma:131.25KM
  280. | Popust : 0.1KM
  281. | Za platiti : 131.15KM
  282.  
  283.  
  284. FITStore::Racun::RN000002
  285. | RB Artikal Cijena Kolicina Ukupno |
  286. | 1. Milka Milkins 2.55 15 38.25 |
  287. | 2. Cappy narandza 2.1 20 42 |
  288. | 3. Meggle jogurt 2.55 20 51 |
  289. | Suma:131.25KM
  290. | Popust : 0.25KM
  291. | Za platiti : 131KM
  292.  
  293.  
  294. FITStore::Racun::RN000002
  295. | RB Artikal Cijena Kolicina Ukupno |
  296. | 1. Milka Milkins 2.55 15 38.25 |
  297. | 2. Cappy narandza 2.1 20 42 |
  298. | 3. Meggle jogurt 2.55 20 51 |
  299. | Suma:131.25KM
  300. | Popust : 0.4KM
  301. | Za platiti : 130.85KM
  302. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement