Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- char crt[] = { "-------------------------------------------\n"};
- class NedozvoljenaOperacija : public exception{
- int linijaKoda;
- public:
- //Konstruktor sa dva parametra (poruka i linija koda u kojoj je greška nastala)
- NedozvoljenaOperacija(char * poruka, int lin);
- //Funkcija za ispis informacija o nastaloj grešci
- void ErrorInfo();
- };
- //KATALOŠKA PRODAJA
- class Proizvod
- {
- char _sifra[10];
- char* _naziv;
- double _cijena;
- double _popust;
- public:
- //Potrebne konstruktor i destruktor funkcije
- //U slučaju nedozvoljenih vrijednosti za cijenu i popust baciti izuzetak
- Proizvod(char* sifra, char* naziv, double cijena, double popust)
- {
- strncpy_s(_sifra, sifra, 10);
- int vel = strlen(naziv) + 1;
- _naziv = new char[vel];
- strcpy_s(_naziv, vel, naziv);
- _cijena = cijena;
- _popust = popust;
- }
- Proizvod(Proizvod & obj){
- strncpy_s(_sifra, obj._sifra, 10);
- int vel = strlen(obj._naziv) + 1;
- _naziv = new char[vel];
- strcpy_s(_naziv, vel, obj._naziv);
- _cijena = obj._cijena;
- _popust = obj._popust;
- }
- ~Proizvod()
- {
- delete[] _naziv;
- _naziv = NULL;
- }
- virtual void info(){
- cout << crt << "\tPROIZVOD" << endl << crt;
- cout << "SIFRA: " << _sifra << endl;
- cout << "NAZIV: " << _naziv << endl;
- cout << "CIJENA: " << _cijena << endl;
- cout << "POPUST: " << _popust << endl;
- }
- //getSifra za poredjenje pri dodavanju prozivoda u katalog
- char * getSifra()const{
- char * temp = new char[10];
- strcpy_s(temp, 10, _sifra);
- return temp;
- }
- };
- class Odjeca: public Proizvod {
- char* _velicina; //34, 36, 38 ili XS, S, M...
- char* _boja; //crna, bijela, siva
- public:
- Odjeca(char* sifra, char* naziv, double cijena, double popust, char * velicina, char * boja) :Proizvod(sifra, naziv, cijena, popust){
- int vel = strlen(velicina) + 1;
- _velicina = new char[vel];
- strcpy_s(_velicina, vel, velicina);
- vel = strlen (boja) + 1;
- _boja = new char[vel];
- strcpy_s(_boja, vel, boja);
- }
- Odjeca(Odjeca & obj):Proizvod(obj){
- int vel = strlen(obj._velicina) + 1;
- _velicina = new char[vel];
- strcpy_s(_velicina, vel, obj._velicina);
- vel = strlen(obj._boja) + 1;
- _boja = new char[vel];
- strcpy_s(_boja, vel, obj._boja);
- }
- ~Odjeca()
- {
- delete[] _velicine;
- _velicine = NULL;
- delete[] _boje;
- _boje = NULL;
- }
- /////////////////////////////////////////////////////
- void info(){
- cout << crt << "\tODJECA" << endl << crt;
- Proizvod::info();
- cout << "VELICINA: " << _velicina;
- cout << "BOJA: " << _boja;
- }
- };
- class Katalog
- {
- char* _naslov;
- char* _vrijediDoDatum; // datum
- Proizvod* _proizvodi[100];
- int _trenutnoProizvoda = 0;
- public:
- Katalog(char * naslov = "-------", char * vrijediDoDatum = "--/--/--"){
- int vel = strlen(naslov) + 1;
- _naslov = new char[vel];
- strcpy_s(_naslov, vel, naslov);
- vel = strlen(vrijediDoDatum) + 1;
- _vrijediDoDatum = new char[vel];
- strcpy_s(_vrijediDoDatum, vel, vrijediDoDatum);
- }
- ~Katalog(){
- delete[]_naslov;
- delete[]_vrijediDoDatum;
- _naslov = nullptr;
- _vrijediDoDatum = nullptr;
- }
- void dodajProizvod(Proizvod * pok){
- //U slučaju prekoračenja baciti izuzetak
- if (_trenutnoProizvoda >= 100)
- throw NedozvoljenaOperacija("Broj prozivoda ne moze biti veci od 100!", __LINE__);
- // dodaj proizvod zavisno od klase
- for (int i = 0; i < _trenutnoProizvoda; i++){
- // ispitati nalazi li se proizvod vec u listi, provjerii na osnovu sifre
- if (strcmp(_proizvodi[i]->getSifra(), pok->getSifra()) == 0){
- // prozivod se nalazi u listi, baci error i izadji iz funkcije
- throw NedozvoljenaOperacija("Proizvod se vec nalazi u katalogu!", __LINE__);
- }
- else { // ako se prozivod ne nalazi dodaj
- if (typeid(*pok) == typeid(Odjeca)){
- _proizvodi[_trenutnoProizvoda] = new Odjeca(*(Odjeca*)pok);
- _trenutnoProizvoda++;
- }
- else {
- _proizvodi[_trenutnoProizvoda] = new Proizvod(*pok);
- _trenutnoProizvoda++;
- }
- }
- }
- }
- void ukloniProizvod(char * sifra){
- // potrazi proizvod u katalogu na osnovu sifre
- for (int i = 0; i < _trenutnoProizvoda; i++){
- if (strcmp(_proizvodi[i]->getSifra(), sifra) == 0){
- }
- }
- }
- //Funkciju za uklanjanje proizvoda iz kataloga na osnovu sifre
- //Ukoliko se ne pronađe traženi proizvod baciti izuzetak
- //Preklopiti operator za ispis kataloške ponude
- friend ostream & operator <<(ostream & cout, Katalog & obj);
- };
- ostream & operator <<(ostream & cout, Katalog & obj){
- cout << crt << "\tKATALOG" << endl << crt;
- cout << "NASLOV: " << obj._naslov << endl;
- cout << "VRIJEDI DO: " << obj._vrijediDoDatum << endl;
- if (obj._trenutnoProizvoda > 0){
- char z;
- cout << "Zelite li ispisati artikle iz kataloga? [D-N]";
- do{
- cin >> z;
- } while (z != 'D' || z != 'd' || z != 'N' || z != 'n' );
- if (z == 'D' || z == 'd'){
- for (int i = 0; i < obj._trenutnoProizvoda; i++){
- obj._proizvodi[i]->info();
- }
- }
- }
- }
- //Sve funkcije implementirati van klase
- //Baciti izuzetak po potrebi
- template<class T>
- class Stack
- {
- int _size;
- int _top;
- T* _elements;
- public:
- //Konstruktor postavlja početne vrijednosti i alocira dinamički niz elemenata tipa T
- Stack();
- ~Stack();
- //Provjeravaju stanje na stack-u, prazan ili popunjen
- //Iskoristiti prilikom implementacije funkcija Push i Pop
- bool IsEmpty()const;
- bool IsFull()const;
- //Dodaje novi element na stack
- void Push(const T& element);
- //Uzima posljednji element sa stack-a
- T Pop();
- //Vraća broj elemenata na stack-u
- int GetSize()const;
- //Vraća element sa stack-a na poziciji indeks (pozicije počinju od 1)
- T operator[](int indeks)const;
- //Operator za ispis elemenata na stack-u
- };
- class Uposlenik
- {
- char* _imePrezime;
- char* _radnoMjesto;
- public:
- //Potrebne konstruktor i destruktor funkcije
- Uposlenik(char* imePrezime, char* radnoMjesto)
- {
- int vel = strlen(imePrezime) + 1;
- _imePrezime = new char[vel];
- strcpy_s(_imePrezime, vel, imePrezime);
- vel = strlen(radnoMjesto) + 1;
- _radnoMjesto = new char[vel];
- strcpy_s(_radnoMjesto, vel, radnoMjesto);
- }
- ~Uposlenik()
- {
- delete[] _imePrezime;
- _imePrezime = NULL;
- delete[] _radnoMjesto;
- _radnoMjesto = NULL;
- }
- };
- class Narudzba
- {
- int _brojNarudzbe;
- char* _datumIsporuke;
- Uposlenik* _uposlenik;
- Stack<Proizvod>* _proizvodi;
- int _brojProizvoda;
- public:
- //Potrebne konstruktor i destruktor funkcije
- //Narudžbu može izdati samo uposlenik sa radnim mjestom "Prodavač". U suprotnom baciti izuzetak.
- //Kreirati funkciju za dodavanje proizvoda narudžbe
- //Ukoliko proizvod više nije dostupan baciti izuzetak (po potrebi dopuniti atribute odgovarajuće klase).
- //Dozvoliti dodavanje istog proizvoda više puta (po potrebi dopuniti atribute odgovarajuće klase)
- //Funkciju za uklanjanje proizvoda iz narudžbe
- //Dodati funkciju za proračun ukupne cijene narudžbe
- //Voditi računa o mogućnosti dodavanja više istih proizvoda
- //Uračunati popust u slučaju da je definisan
- //Preklopiti operator za ispis podataka o narudžbi zajedno sa cijenom
- };
- int main(){
- //Dodati minimalno 5 proizvoda u katalog
- //Ispisati ponudu kupcu
- //Omogućiti kreiranje narudžbe na osnovu izbora kupca
- system("pause > null");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement