aaa213

Artikal _proslegeneracije

Feb 7th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.86 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. //Klasa čuva podatke o jednom prodajnom artiklu
  5. class Artikal
  6. {
  7. char _sifra[30];
  8. char _naziv[50];
  9. double _cijena;
  10. int _kolicina;
  11. public:
  12. //Kreirati funkciju Unos bez parametara
  13. void Unos();
  14.  
  15. //Kreirati funkciju Unos sa parametrima za sve atribute klase
  16. void Unos(char*, char*, double, int);
  17.  
  18. //Kreirati Get funkcije za svaki od atributa
  19. const char* GetSifra();
  20. const char* GetNaziv();
  21. double GetCijena();
  22. int GetKolicina();
  23. //Omogućiti naknadnu izmjenu atributa naziv i cijena funkcijama Set
  24. void SetNaziv(char*);
  25. void SetCijena(double);
  26.  
  27. //Funkcija UmanjiKolicinu ima zadatak da promijeni stanje na skladištu artikla
  28. //Izvršiti neophodne provjere prije promjene vrijednosti
  29. void UmanjiKolicinu(int);
  30.  
  31. //Ispisuje podatke o artiklu
  32. void Info();
  33. };
  34. void Artikal::Unos() {
  35. cout<<endl<<"Unesite sifru artikla:\t";
  36. cin.getline(_sifra,29);
  37. cout<<endl<<"Unesite naziv artikla:\t";
  38. cin.getline(_naziv,49);
  39. cout<<endl<<"Unesite cijenu artikla:\t";
  40. cin>>_cijena;
  41. cout<<endl<<"Unesite kolicinu:\t";
  42. cin>>_kolicina;
  43. cin.ignore();
  44. cout<<endl;
  45. }
  46. void Artikal::Unos(char* sifra, char* naziv, double cijena, int kolicina) {
  47. strcpy(_sifra, sifra);
  48. strcpy(_naziv, naziv);
  49. _cijena = cijena;
  50. _kolicina = kolicina;
  51. }
  52. const char* Artikal::GetSifra() {
  53. return _sifra;
  54. }
  55. const char* Artikal::GetNaziv() {
  56. return _naziv;
  57. }
  58. double Artikal::GetCijena() {
  59. return _cijena;
  60. }
  61. int Artikal::GetKolicina() {
  62. return _kolicina;
  63. }
  64. void Artikal::SetNaziv(char *naziv) {
  65. strcpy(_naziv,naziv);
  66. }
  67. void Artikal::SetCijena(double cijena) {
  68. _cijena = cijena;
  69. }
  70. void Artikal::UmanjiKolicinu(int k) {
  71. if(_kolicina >= k)
  72. _kolicina -= k;
  73. else cout<<"Nemoguce umanjiti kolicinu za "<<k<<endl;
  74. }
  75. void Artikal::Info() {
  76. cout<<endl<<"---------------------------"<<endl;
  77. cout<<"Sifra Artikla:\t"<<_sifra<<endl;
  78. cout<<"Naziv Artikla:\t"<<_naziv<<endl;
  79. cout<<"Cijena Artikla:\t"<<_cijena<<endl;
  80. cout<<"Na stanju:\t"<<_kolicina<<endl;
  81. }
  82. class StavkaRacuna
  83. {
  84. Artikal _artikal;
  85. int _kolicina;
  86. public:
  87. //Funkcija Unos sa jednim parametrom tipa Artikal; Kolicina se postavlja na vrijednost 1
  88. void Unos(Artikal);
  89. void Unos(Artikal, int);
  90. void Info();
  91. const char *getSifraArtikla();
  92. void setKolicina(int _k);
  93. int getKolicina();
  94. double getCijena();
  95. };
  96. void StavkaRacuna::Unos(Artikal artikal) {
  97. _artikal = artikal;
  98. _kolicina = 1;
  99. }
  100. void StavkaRacuna::Unos(Artikal artikal, int kolicina) {
  101. _artikal = artikal;
  102. _kolicina = kolicina;
  103. }
  104. void StavkaRacuna::Info() {
  105. _artikal.Info();
  106. cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
  107. cout<<"Kolicina:\t"<<_kolicina<<endl;
  108. cout<<"---------------------------"<<endl;
  109. }
  110. const char * StavkaRacuna::getSifraArtikla() {
  111. return _artikal.GetSifra();
  112. }
  113. void StavkaRacuna::setKolicina(int _k) {
  114. _kolicina = _k;
  115. }
  116. int StavkaRacuna::getKolicina() {
  117. return _kolicina;
  118. }
  119. double StavkaRacuna::getCijena() {
  120. return _artikal.GetCijena();
  121. }
  122. class Racun
  123. {
  124. int _brojRacuna;
  125. StavkaRacuna _stavke[100];
  126. int _brojStavki;
  127. double _iznosBezPDV;
  128. double _iznosSaPDV;
  129. bool _izdato;
  130.  
  131. public:
  132. void Unos(int brojRacuna);
  133.  
  134. //Dodaje novi artikal u stavke računa; Voditi računa o tome da li je račun već naplaćen
  135. //Ukoliko nema dovoljno artikala na stanju, potrebno ispisati odgovarajuću poruku
  136. //Ukoliko artikal već postoji potrebno je samo uvećati količinu za odgovarajuću stavku
  137. void DodajArtikal(Artikal & a, int kolicina);
  138.  
  139. //Funkcija PrintRacun treba da izračuna ukupan iznos računa za naplatu, i postavi atribute _iznosBezPDV i _iznosSaPDV
  140. //Nakon toga ispisati sve stavke računa zajedno sa iznosom za plaćanje
  141. //Na kraju omogućiti da se unese iznos novca koji je klijent platio, a kao povratnu vrijednost funkcije vratiti iznos kusura
  142. double PrintRacun();
  143.  
  144. };
  145. void Racun::Unos(int brojRacuna) {
  146. _brojRacuna = brojRacuna;
  147. _brojStavki = 0;
  148. _iznosBezPDV = 0;
  149. _iznosSaPDV = 0;
  150. _izdato = false;
  151. }
  152. //Morao sam proslijediti artikal po referenci kako bih mogao umanjiti vrijednost artikla!
  153. void Racun::DodajArtikal(Artikal & a, int kolicina) {
  154. if(_izdato) cout<<"Racun je vec izdat!"<<endl;
  155. else {
  156. if(kolicina > a.GetKolicina()) cout<<"Nema dovoljno jedinica artikla na stanju!"<<endl;
  157. else {
  158. bool postavljen = false;
  159. for (int i = 0; i <= _brojStavki; i++) {
  160. if(strcmp(_stavke[i].getSifraArtikla(),a.GetSifra())==0) {
  161. _stavke[i].setKolicina(_stavke[i].getKolicina() + kolicina);
  162. a.UmanjiKolicinu(kolicina);
  163. postavljen = true;
  164. }
  165. }
  166. if(!postavljen) {
  167. _stavke[_brojStavki].Unos(a,kolicina);
  168. _brojStavki += 1;
  169. a.UmanjiKolicinu(kolicina);
  170. }
  171. }
  172. }
  173. }
  174. double Racun::PrintRacun() {
  175. for (int i = 0; i < _brojStavki; i++) {
  176. _iznosBezPDV = _iznosBezPDV + _stavke[i].getCijena() * _stavke[i].getKolicina();
  177. }
  178. _iznosSaPDV = _iznosBezPDV + _iznosBezPDV * 0.17;
  179. for (int i = 0; i < _brojStavki; i++) {
  180. _stavke[i].Info();
  181. }
  182. cout<<"Iznos bez PDV:\t"<<_iznosBezPDV<<endl;
  183. cout<<"Iznos sa PDV:\t"<<_iznosSaPDV<<endl;
  184. cout<<endl<<"Unesite iznos za placenje: ";
  185. double iznos=0, kusur=0;
  186. cin>>iznos;
  187. kusur = iznos - _iznosSaPDV;
  188. _izdato = true;
  189. return kusur;
  190. }
  191.  
  192. int main()
  193. {
  194. //Testirati dostupne funkcionalnosti
  195. Artikal a,b,c,d,e,f,g;
  196.  
  197. a.Unos();
  198. g.Unos();
  199.  
  200. b.Unos("123456","Sarma",5,7);
  201. c.Unos("123457","Sogan Dolma",5.8,12);
  202. d.Unos("123458","Gurabija",12,10);
  203. e.Unos("123459","Rahat Lokum",3.5,255);
  204. f.Unos("123460","Futrovane paprike",5.5,60);
  205.  
  206. Racun rac;
  207. rac.Unos(111);
  208. rac.DodajArtikal(b,2);
  209. rac.DodajArtikal(b,12);
  210. rac.DodajArtikal(b,2);
  211. rac.DodajArtikal(c,2);
  212. rac.DodajArtikal(d,9);
  213. rac.DodajArtikal(e,2);
  214. rac.DodajArtikal(f,5);
  215.  
  216. double kusur = 0;
  217.  
  218. kusur = rac.PrintRacun();
  219. cout<<endl<<"Kusur:\t"<<kusur<<endl;
  220.  
  221. b.Info();
  222. cout<<endl;
  223. c.Info();
  224. cout<<endl;
  225. d.Info();
  226. cout<<endl;
  227.  
  228.  
  229. return 0;
  230. }
Add Comment
Please, Sign In to add comment