Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- //Klasa čuva podatke o jednom prodajnom artiklu
- class Artikal
- {
- char _sifra[30];
- char _naziv[50];
- double _cijena;
- int _kolicina;
- public:
- //Kreirati funkciju Unos bez parametara
- void Unos();
- //Kreirati funkciju Unos sa parametrima za sve atribute klase
- void Unos(char*, char*, double, int);
- //Kreirati Get funkcije za svaki od atributa
- const char* GetSifra();
- const char* GetNaziv();
- double GetCijena();
- int GetKolicina();
- //Omogućiti naknadnu izmjenu atributa naziv i cijena funkcijama Set
- void SetNaziv(char*);
- void SetCijena(double);
- //Funkcija UmanjiKolicinu ima zadatak da promijeni stanje na skladištu artikla
- //Izvršiti neophodne provjere prije promjene vrijednosti
- void UmanjiKolicinu(int);
- //Ispisuje podatke o artiklu
- void Info();
- };
- void Artikal::Unos() {
- cout<<endl<<"Unesite sifru artikla:\t";
- cin.getline(_sifra,29);
- cout<<endl<<"Unesite naziv artikla:\t";
- cin.getline(_naziv,49);
- cout<<endl<<"Unesite cijenu artikla:\t";
- cin>>_cijena;
- cout<<endl<<"Unesite kolicinu:\t";
- cin>>_kolicina;
- cin.ignore();
- cout<<endl;
- }
- void Artikal::Unos(char* sifra, char* naziv, double cijena, int kolicina) {
- strcpy(_sifra, sifra);
- strcpy(_naziv, naziv);
- _cijena = cijena;
- _kolicina = kolicina;
- }
- const char* Artikal::GetSifra() {
- return _sifra;
- }
- const char* Artikal::GetNaziv() {
- return _naziv;
- }
- double Artikal::GetCijena() {
- return _cijena;
- }
- int Artikal::GetKolicina() {
- return _kolicina;
- }
- void Artikal::SetNaziv(char *naziv) {
- strcpy(_naziv,naziv);
- }
- void Artikal::SetCijena(double cijena) {
- _cijena = cijena;
- }
- void Artikal::UmanjiKolicinu(int k) {
- if(_kolicina >= k)
- _kolicina -= k;
- else cout<<"Nemoguce umanjiti kolicinu za "<<k<<endl;
- }
- void Artikal::Info() {
- cout<<endl<<"---------------------------"<<endl;
- cout<<"Sifra Artikla:\t"<<_sifra<<endl;
- cout<<"Naziv Artikla:\t"<<_naziv<<endl;
- cout<<"Cijena Artikla:\t"<<_cijena<<endl;
- cout<<"Na stanju:\t"<<_kolicina<<endl;
- }
- class StavkaRacuna
- {
- Artikal _artikal;
- int _kolicina;
- public:
- //Funkcija Unos sa jednim parametrom tipa Artikal; Kolicina se postavlja na vrijednost 1
- void Unos(Artikal);
- void Unos(Artikal, int);
- void Info();
- const char *getSifraArtikla();
- void setKolicina(int _k);
- int getKolicina();
- double getCijena();
- };
- void StavkaRacuna::Unos(Artikal artikal) {
- _artikal = artikal;
- _kolicina = 1;
- }
- void StavkaRacuna::Unos(Artikal artikal, int kolicina) {
- _artikal = artikal;
- _kolicina = kolicina;
- }
- void StavkaRacuna::Info() {
- _artikal.Info();
- cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
- cout<<"Kolicina:\t"<<_kolicina<<endl;
- cout<<"---------------------------"<<endl;
- }
- const char * StavkaRacuna::getSifraArtikla() {
- return _artikal.GetSifra();
- }
- void StavkaRacuna::setKolicina(int _k) {
- _kolicina = _k;
- }
- int StavkaRacuna::getKolicina() {
- return _kolicina;
- }
- double StavkaRacuna::getCijena() {
- return _artikal.GetCijena();
- }
- class Racun
- {
- int _brojRacuna;
- StavkaRacuna _stavke[100];
- int _brojStavki;
- double _iznosBezPDV;
- double _iznosSaPDV;
- bool _izdato;
- public:
- void Unos(int brojRacuna);
- //Dodaje novi artikal u stavke računa; Voditi računa o tome da li je račun već naplaćen
- //Ukoliko nema dovoljno artikala na stanju, potrebno ispisati odgovarajuću poruku
- //Ukoliko artikal već postoji potrebno je samo uvećati količinu za odgovarajuću stavku
- void DodajArtikal(Artikal & a, int kolicina);
- //Funkcija PrintRacun treba da izračuna ukupan iznos računa za naplatu, i postavi atribute _iznosBezPDV i _iznosSaPDV
- //Nakon toga ispisati sve stavke računa zajedno sa iznosom za plaćanje
- //Na kraju omogućiti da se unese iznos novca koji je klijent platio, a kao povratnu vrijednost funkcije vratiti iznos kusura
- double PrintRacun();
- };
- void Racun::Unos(int brojRacuna) {
- _brojRacuna = brojRacuna;
- _brojStavki = 0;
- _iznosBezPDV = 0;
- _iznosSaPDV = 0;
- _izdato = false;
- }
- //Morao sam proslijediti artikal po referenci kako bih mogao umanjiti vrijednost artikla!
- void Racun::DodajArtikal(Artikal & a, int kolicina) {
- if(_izdato) cout<<"Racun je vec izdat!"<<endl;
- else {
- if(kolicina > a.GetKolicina()) cout<<"Nema dovoljno jedinica artikla na stanju!"<<endl;
- else {
- bool postavljen = false;
- for (int i = 0; i <= _brojStavki; i++) {
- if(strcmp(_stavke[i].getSifraArtikla(),a.GetSifra())==0) {
- _stavke[i].setKolicina(_stavke[i].getKolicina() + kolicina);
- a.UmanjiKolicinu(kolicina);
- postavljen = true;
- }
- }
- if(!postavljen) {
- _stavke[_brojStavki].Unos(a,kolicina);
- _brojStavki += 1;
- a.UmanjiKolicinu(kolicina);
- }
- }
- }
- }
- double Racun::PrintRacun() {
- for (int i = 0; i < _brojStavki; i++) {
- _iznosBezPDV = _iznosBezPDV + _stavke[i].getCijena() * _stavke[i].getKolicina();
- }
- _iznosSaPDV = _iznosBezPDV + _iznosBezPDV * 0.17;
- for (int i = 0; i < _brojStavki; i++) {
- _stavke[i].Info();
- }
- cout<<"Iznos bez PDV:\t"<<_iznosBezPDV<<endl;
- cout<<"Iznos sa PDV:\t"<<_iznosSaPDV<<endl;
- cout<<endl<<"Unesite iznos za placenje: ";
- double iznos=0, kusur=0;
- cin>>iznos;
- kusur = iznos - _iznosSaPDV;
- _izdato = true;
- return kusur;
- }
- int main()
- {
- //Testirati dostupne funkcionalnosti
- Artikal a,b,c,d,e,f,g;
- a.Unos();
- g.Unos();
- b.Unos("123456","Sarma",5,7);
- c.Unos("123457","Sogan Dolma",5.8,12);
- d.Unos("123458","Gurabija",12,10);
- e.Unos("123459","Rahat Lokum",3.5,255);
- f.Unos("123460","Futrovane paprike",5.5,60);
- Racun rac;
- rac.Unos(111);
- rac.DodajArtikal(b,2);
- rac.DodajArtikal(b,12);
- rac.DodajArtikal(b,2);
- rac.DodajArtikal(c,2);
- rac.DodajArtikal(d,9);
- rac.DodajArtikal(e,2);
- rac.DodajArtikal(f,5);
- double kusur = 0;
- kusur = rac.PrintRacun();
- cout<<endl<<"Kusur:\t"<<kusur<<endl;
- b.Info();
- cout<<endl;
- c.Info();
- cout<<endl;
- d.Info();
- cout<<endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment