Advertisement
neogz

W9 wip

Feb 7th, 2015
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.28 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. char crt[] = { "-------------------------------------------\n"};
  5. class NedozvoljenaOperacija : public exception{
  6.     int linijaKoda;
  7. public:
  8.  
  9.     //Konstruktor sa dva parametra (poruka i linija koda u kojoj je greška nastala)
  10.     NedozvoljenaOperacija(char * poruka, int lin);
  11.  
  12.     //Funkcija za ispis informacija o nastaloj grešci
  13.     void ErrorInfo();
  14. };
  15.  
  16. //KATALOŠKA PRODAJA
  17. class Proizvod
  18. {
  19.     char _sifra[10];
  20.     char* _naziv;
  21.     double _cijena;
  22.     double _popust;
  23. public:
  24.     //Potrebne konstruktor i destruktor funkcije
  25.     //U slučaju nedozvoljenih vrijednosti za cijenu i popust baciti izuzetak
  26.     Proizvod(char* sifra, char* naziv, double cijena, double popust)
  27.     {
  28.         strncpy_s(_sifra, sifra, 10);
  29.  
  30.         int vel = strlen(naziv) + 1;
  31.         _naziv = new char[vel];
  32.         strcpy_s(_naziv, vel, naziv);
  33.  
  34.         _cijena = cijena;
  35.         _popust = popust;
  36.     }
  37.     Proizvod(Proizvod & obj){
  38.         strncpy_s(_sifra, obj._sifra, 10);
  39.  
  40.         int vel = strlen(obj._naziv) + 1;
  41.         _naziv = new char[vel];
  42.         strcpy_s(_naziv, vel, obj._naziv);
  43.  
  44.         _cijena = obj._cijena;
  45.         _popust = obj._popust;
  46.     }
  47.     ~Proizvod()
  48.     {
  49.         delete[] _naziv;
  50.         _naziv = NULL;
  51.     }
  52.     virtual void info(){
  53.         cout << crt << "\tPROIZVOD" << endl << crt;
  54.  
  55.         cout << "SIFRA:  " << _sifra << endl;
  56.         cout << "NAZIV:  " << _naziv << endl;
  57.         cout << "CIJENA: " << _cijena << endl;
  58.         cout << "POPUST: " << _popust << endl;
  59.     }
  60.  
  61.     //getSifra za poredjenje pri dodavanju prozivoda u katalog
  62.     char * getSifra()const{
  63.         char * temp = new char[10];
  64.         strcpy_s(temp, 10, _sifra);
  65.         return temp;
  66.     }
  67. };
  68. class Odjeca: public Proizvod {
  69.     char* _velicina; //34, 36, 38 ili XS, S, M...
  70.     char* _boja; //crna, bijela, siva
  71. public:
  72.     Odjeca(char* sifra, char* naziv, double cijena, double popust, char * velicina, char * boja) :Proizvod(sifra, naziv, cijena, popust){
  73.         int vel = strlen(velicina) + 1;
  74.         _velicina = new char[vel];
  75.         strcpy_s(_velicina, vel, velicina);
  76.  
  77.         vel = strlen (boja) + 1;
  78.         _boja = new char[vel];
  79.         strcpy_s(_boja, vel, boja);
  80.     }
  81.     Odjeca(Odjeca & obj):Proizvod(obj){
  82.         int vel = strlen(obj._velicina) + 1;
  83.         _velicina = new char[vel];
  84.         strcpy_s(_velicina, vel, obj._velicina);
  85.  
  86.         vel = strlen(obj._boja) + 1;
  87.         _boja = new char[vel];
  88.         strcpy_s(_boja, vel, obj._boja);
  89.     }
  90.     ~Odjeca()
  91.     {
  92.         delete[] _velicine;
  93.         _velicine = NULL;
  94.         delete[] _boje;
  95.         _boje = NULL;
  96.     }
  97.     /////////////////////////////////////////////////////
  98.     void info(){
  99.         cout << crt << "\tODJECA" << endl << crt;
  100.         Proizvod::info();
  101.         cout << "VELICINA: " << _velicina;
  102.         cout << "BOJA:     " << _boja;
  103.     }
  104. };
  105. class Katalog
  106. {
  107.     char* _naslov;
  108.     char* _vrijediDoDatum;  // datum
  109.     Proizvod* _proizvodi[100];
  110.     int _trenutnoProizvoda = 0;
  111. public:
  112.     Katalog(char * naslov = "-------", char * vrijediDoDatum = "--/--/--"){
  113.         int vel = strlen(naslov) + 1;
  114.         _naslov = new char[vel];
  115.         strcpy_s(_naslov, vel, naslov);
  116.  
  117.         vel = strlen(vrijediDoDatum) + 1;
  118.         _vrijediDoDatum = new char[vel];
  119.         strcpy_s(_vrijediDoDatum, vel, vrijediDoDatum);
  120.     }
  121.     ~Katalog(){
  122.         delete[]_naslov;
  123.         delete[]_vrijediDoDatum;
  124.  
  125.         _naslov = nullptr;
  126.         _vrijediDoDatum = nullptr;
  127.    
  128.     }
  129.  
  130.     void dodajProizvod(Proizvod * pok){
  131.     //U slučaju prekoračenja baciti izuzetak
  132.         if (_trenutnoProizvoda >= 100)
  133.             throw NedozvoljenaOperacija("Broj prozivoda ne moze biti veci od 100!", __LINE__);
  134.  
  135.     // dodaj proizvod zavisno od klase 
  136.         for (int i = 0; i < _trenutnoProizvoda; i++){
  137.             // ispitati nalazi li se proizvod vec u listi, provjerii na osnovu sifre
  138.             if (strcmp(_proizvodi[i]->getSifra(), pok->getSifra()) == 0){
  139.                 // prozivod se nalazi u listi, baci error i izadji iz funkcije
  140.                 throw NedozvoljenaOperacija("Proizvod se vec nalazi u katalogu!", __LINE__);
  141.             }
  142.             else {      // ako se prozivod ne nalazi dodaj
  143.                 if (typeid(*pok) == typeid(Odjeca)){
  144.                     _proizvodi[_trenutnoProizvoda] = new Odjeca(*(Odjeca*)pok);
  145.                     _trenutnoProizvoda++;
  146.                 }
  147.                 else        {
  148.                     _proizvodi[_trenutnoProizvoda] = new Proizvod(*pok);
  149.                     _trenutnoProizvoda++;
  150.                 }
  151.             }
  152.         }
  153.        
  154.     }
  155.     void ukloniProizvod(char * sifra){
  156.         // potrazi proizvod u katalogu na osnovu sifre
  157.         for (int i = 0; i < _trenutnoProizvoda; i++){  
  158.             if (strcmp(_proizvodi[i]->getSifra(),  sifra) == 0){
  159.             }
  160.         }
  161.     }
  162.     //Funkciju za uklanjanje proizvoda iz kataloga na osnovu sifre
  163.     //Ukoliko se ne pronađe traženi proizvod baciti izuzetak
  164.  
  165.     //Preklopiti operator za ispis kataloške ponude
  166.     friend ostream & operator <<(ostream & cout, Katalog & obj);
  167. };
  168. ostream & operator <<(ostream & cout, Katalog & obj){
  169.     cout << crt << "\tKATALOG" << endl << crt;
  170.     cout << "NASLOV: " << obj._naslov << endl;
  171.     cout << "VRIJEDI DO: " << obj._vrijediDoDatum << endl;
  172.     if (obj._trenutnoProizvoda > 0){
  173.         char z;
  174.         cout << "Zelite li ispisati artikle iz kataloga? [D-N]";
  175.         do{
  176.             cin >> z;
  177.         } while (z != 'D' || z != 'd' || z != 'N' || z != 'n' );
  178.  
  179.         if (z == 'D' || z == 'd'){
  180.             for (int i = 0; i < obj._trenutnoProizvoda; i++){
  181.                 obj._proizvodi[i]->info();
  182.             }
  183.         }
  184.     }
  185. }
  186.  
  187. //Sve funkcije implementirati van klase
  188. //Baciti izuzetak po potrebi
  189. template<class T>
  190. class Stack
  191. {
  192.     int _size;
  193.     int _top;
  194.     T* _elements;
  195. public:
  196.     //Konstruktor postavlja početne vrijednosti i alocira dinamički niz elemenata tipa T
  197.     Stack();
  198.     ~Stack();
  199.  
  200.  
  201.     //Provjeravaju stanje na stack-u, prazan ili popunjen
  202.     //Iskoristiti prilikom implementacije funkcija Push i Pop
  203.     bool IsEmpty()const;
  204.     bool IsFull()const;
  205.  
  206.     //Dodaje novi element na stack
  207.     void Push(const T& element);
  208.  
  209.     //Uzima posljednji element sa stack-a
  210.     T Pop();
  211.  
  212.  
  213.     //Vraća broj elemenata na stack-u
  214.     int GetSize()const;
  215.  
  216.     //Vraća element sa stack-a na poziciji indeks (pozicije počinju od 1)
  217.     T operator[](int indeks)const;
  218.  
  219.     //Operator za ispis elemenata na stack-u
  220. };
  221.  
  222.  
  223. class Uposlenik
  224. {
  225.     char* _imePrezime;
  226.     char* _radnoMjesto;
  227. public:
  228.     //Potrebne konstruktor i destruktor funkcije
  229.     Uposlenik(char* imePrezime, char* radnoMjesto)
  230.     {
  231.         int vel = strlen(imePrezime) + 1;
  232.         _imePrezime = new char[vel];
  233.         strcpy_s(_imePrezime, vel, imePrezime);
  234.  
  235.         vel = strlen(radnoMjesto) + 1;
  236.         _radnoMjesto = new char[vel];
  237.         strcpy_s(_radnoMjesto, vel, radnoMjesto);
  238.     }
  239.  
  240.     ~Uposlenik()
  241.     {
  242.         delete[] _imePrezime;
  243.         _imePrezime = NULL;
  244.         delete[] _radnoMjesto;
  245.         _radnoMjesto = NULL;
  246.     }
  247.  
  248. };
  249.  
  250. class Narudzba
  251. {
  252.     int _brojNarudzbe;
  253.     char* _datumIsporuke;
  254.     Uposlenik* _uposlenik;
  255.     Stack<Proizvod>* _proizvodi;
  256.     int _brojProizvoda;
  257. public:
  258.     //Potrebne konstruktor i destruktor funkcije
  259.     //Narudžbu može izdati samo uposlenik sa radnim mjestom "Prodavač". U suprotnom baciti izuzetak.
  260.  
  261.     //Kreirati funkciju za dodavanje proizvoda narudžbe
  262.     //Ukoliko proizvod više nije dostupan baciti izuzetak (po potrebi dopuniti atribute odgovarajuće klase).
  263.     //Dozvoliti dodavanje istog proizvoda više puta (po potrebi dopuniti atribute odgovarajuće klase)
  264.  
  265.     //Funkciju za uklanjanje proizvoda iz narudžbe
  266.  
  267.     //Dodati funkciju za proračun ukupne cijene narudžbe
  268.     //Voditi računa o mogućnosti dodavanja više istih proizvoda
  269.     //Uračunati popust u slučaju da je definisan
  270.  
  271.     //Preklopiti operator za ispis podataka o narudžbi zajedno sa cijenom
  272. };
  273.  
  274.  
  275. int main(){
  276.     //Dodati minimalno 5 proizvoda u katalog
  277.     //Ispisati ponudu kupcu
  278.     //Omogućiti kreiranje narudžbe na osnovu izbora kupca
  279.  
  280.     system("pause > null");
  281.     return 0;
  282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement