borisdexter

Ispitna 2 chas

Jan 26th, 2020
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.35 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. enum JobPosition{junior=1,senior,hoe};
  4.  
  5. class Abstract{
  6. public:
  7. // mora da se preoptovari
  8. virtual float salary()=0;
  9. // ne mora da se preoptovari zoshto ima pocetna vrednost
  10. virtual float tax(){
  11. return 5;
  12. }
  13. virtual JobPosition getPozicija()=0;
  14. virtual float posleDanok()=0;
  15. virtual void print()=0;
  16. };
  17. class Programer{
  18. protected:
  19. char *ime;
  20. JobPosition pozicija;
  21. int saatiNedelno;
  22. static float programerRate;
  23. public:
  24. Programer(){
  25. ime=new char[0];
  26. }
  27. Programer(char *ime,int saatiNedelno,JobPosition pozicija){
  28. this->ime=new char[strlen(ime)+1];
  29. strcpy(this->ime,ime);
  30. this->saatiNedelno=saatiNedelno;
  31. this->pozicija=pozicija;
  32. }
  33.  
  34. JobPosition getPozicija(){
  35. return pozicija;
  36. }
  37.  
  38. void print(){
  39. cout<<ime<<" "<<saatiNedelno<<" "<<pozicija<<endl;
  40. }
  41.  
  42. ~Programer(){
  43. delete []ime;
  44. }
  45. };
  46.  
  47. float Programer::programerRate=250;
  48.  
  49. class WebDeveloper: public Programer, public Abstract{
  50. private:
  51. bool daliRabotiOdDoma;
  52. public:
  53. WebDeveloper(){}
  54.  
  55. WebDeveloper(char *ime,int saatiNedelno, JobPosition pozicija, bool daliRabotiOdDoma):Programer(ime,saatiNedelno,pozicija){
  56. this->daliRabotiOdDoma=daliRabotiOdDoma;
  57. }
  58.  
  59. float tax(){
  60. if(daliRabotiOdDoma){
  61. return 10;
  62. }else{
  63. return 15;
  64. }
  65. }
  66. // nedelnoSaati*programerRate*pozicija
  67. float salary(){
  68. if(daliRabotiOdDoma){
  69. return 0.8*saatiNedelno*programerRate*pozicija;
  70. }else{
  71. return saatiNedelno*programerRate*pozicija;
  72. }
  73. }
  74.  
  75. float posleDanok(){
  76. return WebDeveloper::salary()-WebDeveloper::salary()/WebDeveloper::tax();
  77. }
  78. JobPosition getPozicija(){
  79. return pozicija;
  80. }
  81.  
  82. void print(){
  83. cout<<"WebDeveloper "<<ime<<" "<<saatiNedelno<<"h "<<pozicija<<" "<<daliRabotiOdDoma<<endl;
  84. }
  85.  
  86. ~WebDeveloper(){}
  87.  
  88. };
  89.  
  90. class BackEndDeveloper: public Programer, public Abstract{
  91. private:
  92. int kolkuJazici;
  93. public:
  94. BackEndDeveloper(){}
  95.  
  96. BackEndDeveloper(char *ime,int saatiNedelno,JobPosition pozicija,int kolkuJazici):Programer(ime,saatiNedelno,pozicija){
  97. this->kolkuJazici=kolkuJazici;
  98. }
  99.  
  100. // ne preoptovaruvame tax() zoshto ima pocetna vrednost
  101.  
  102. float salary(){
  103. if(kolkuJazici<2){
  104. return 0.7*saatiNedelno*programerRate*pozicija;
  105. }else if(kolkuJazici>=2 && kolkuJazici<=5){
  106. return 0.9*saatiNedelno*programerRate*pozicija;
  107. }else{
  108. return 1.2*saatiNedelno*programerRate*pozicija;
  109. }
  110. }
  111.  
  112. float posleDanok(){
  113. return BackEndDeveloper::salary()-BackEndDeveloper::salary()/BackEndDeveloper::tax();
  114. }
  115.  
  116. void print(){
  117. cout<<"BackEndDeveloper "<<ime<<" "<<saatiNedelno<<"h "<<pozicija<<" "<<kolkuJazici<<endl;
  118. }
  119. JobPosition getPozicija(){
  120. return pozicija;
  121. }
  122. ~BackEndDeveloper(){}
  123.  
  124. };
  125.  
  126. class FullStackDeveloper: public Programer, public Abstract{
  127. private:
  128. int godiniIskustvo;
  129. public:
  130. FullStackDeveloper(){}
  131.  
  132. FullStackDeveloper(char *ime,int saatiNedelno,JobPosition pozicija,int godiniIskustvo):Programer(ime,saatiNedelno,pozicija){
  133. this->godiniIskustvo=godiniIskustvo;
  134. }
  135.  
  136. float tax(){
  137. if(godiniIskustvo<10){
  138. return 15;
  139. }else if(godiniIskustvo>=10 && godiniIskustvo<25){
  140. return 7;
  141. }else{
  142. //return 5;
  143. return Abstract::tax();
  144. }
  145. }
  146. JobPosition getPozicija(){
  147. return pozicija;
  148. }
  149. float salary(){
  150. if(godiniIskustvo<5 && pozicija!=3){
  151. return 1.15*saatiNedelno*programerRate*pozicija;
  152. }else if(godiniIskustvo>=5 && pozicija!=3){
  153. return 1.3*saatiNedelno*programerRate*pozicija;
  154. }else if(godiniIskustvo>=5 && pozicija==3){
  155. return 2*saatiNedelno*programerRate*pozicija;
  156. }else{
  157. return saatiNedelno*programerRate*pozicija;
  158. }
  159. }
  160.  
  161. float posleDanok(){
  162. return FullStackDeveloper::salary()-FullStackDeveloper::salary()/FullStackDeveloper::tax();
  163. }
  164.  
  165. void print(){
  166. cout<<"FullStackDeveloper "<<ime<<" "<<saatiNedelno<<"h "<<pozicija<<" "<<godiniIskustvo<<endl;
  167. }
  168.  
  169. ~FullStackDeveloper(){}
  170.  
  171. };
  172.  
  173. void print(Abstract **niza,int n){
  174. for(int i=0;i<n;i++){
  175. niza[i]->print();
  176. }
  177. }
  178.  
  179. void printSalaries(Abstract **niza,int n){
  180. for(int i=0;i<n;i++){
  181. niza[i]->print();
  182. cout<<"Platata mu e :"<<niza[i]->salary()<<endl;
  183. }
  184. }
  185.  
  186.  
  187.  
  188. void printSalariesAfterTax(Abstract **niza,int n){
  189. float samoDanok;
  190. for(int i=0;i<n;i++){
  191. niza[i]->print();
  192. cout<<"Platata mu e :"<<niza[i]->salary()<<endl;
  193. samoDanok=niza[i]->salary()/niza[i]->tax();
  194. cout<<"Posle danok platata e "<<niza[i]->salary()-samoDanok<<endl;
  195. }
  196. }
  197.  
  198. // max
  199. void najPlatenProgramer(Abstract **niza,int n){
  200. float maxPlata=0;
  201. int pamtiIndex;
  202. for(int i=0;i<n;i++){
  203. if(niza[i]->salary()>maxPlata){
  204. maxPlata=niza[i]->salary();
  205. pamtiIndex=i;
  206. }
  207. }
  208. cout<<"Najplaten programer e "<<endl;
  209. niza[pamtiIndex]->print();
  210. }
  211.  
  212. //
  213. /*
  214. void najmalkuDanok(Abstract **niza,int n){
  215. float minDanok=0;
  216. int pamtiIndex;
  217. for(int i=0;i<n;i++){
  218. if(niza[i]->salary() - niza[i]->posleDanok()<minDanok){
  219. minDanok=niza[i]->salary() - niza[i]->posleDanok();
  220. pamtiIndex=i;
  221. }
  222. }
  223. cout<<"Najmalku danok plakja "<<endl;
  224. niza[pamtiIndex]->print();
  225. cout<<"Platil danok "<<minDanok<<endl;
  226. }
  227. */
  228.  
  229. void kolkuOdSekojaOblast(Abstract **niza,int n){
  230. int brojJunior=0;
  231. int brojSenior=0;
  232. int brojHoe=0;
  233. for(int i=0;i<n;i++){
  234. if(niza[i]->getPozicija()==1){
  235. brojJunior++;
  236. }else if(niza[i]->getPozicija()==2){
  237. brojSenior++;
  238. }else{
  239. brojHoe++;
  240. }
  241. }
  242. cout<<"Junior:"<<brojJunior<<" Senior:"<<brojSenior<<" Hoe:"<<brojHoe<<endl;
  243. }
  244.  
  245. int main(){
  246. Abstract **niza=new Abstract*[8];
  247. niza[0]=new WebDeveloper("Maja",18,(JobPosition)1,true);
  248. niza[1]=new BackEndDeveloper("ViktorijaLevo",14,(JobPosition)2,2);
  249. niza[2]=new BackEndDeveloper("ViktorijaDesno",20,(JobPosition)3,6);
  250. niza[3]=new FullStackDeveloper("Jovan",15,(JobPosition)3,2);
  251. niza[4]=new WebDeveloper("Luka",28,(JobPosition)1,false);
  252. niza[5]=new WebDeveloper("Stefan",24,(JobPosition)2,true);
  253. niza[6]=new FullStackDeveloper("Pavel",26,(JobPosition)3,11);
  254. niza[7]=new BackEndDeveloper("Boris",16,(JobPosition)1,2);
  255. kolkuOdSekojaOblast(niza,8);
  256. return 0;
  257. }
Advertisement
Add Comment
Please, Sign In to add comment