Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- enum JobPosition{junior=1,senior,hoe};
- class Abstract{
- public:
- // mora da se preoptovari
- virtual float salary()=0;
- // ne mora da se preoptovari zoshto ima pocetna vrednost
- virtual float tax(){
- return 5;
- }
- virtual JobPosition getPozicija()=0;
- virtual float posleDanok()=0;
- virtual void print()=0;
- };
- class Programer{
- protected:
- char *ime;
- JobPosition pozicija;
- int saatiNedelno;
- static float programerRate;
- public:
- Programer(){
- ime=new char[0];
- }
- Programer(char *ime,int saatiNedelno,JobPosition pozicija){
- this->ime=new char[strlen(ime)+1];
- strcpy(this->ime,ime);
- this->saatiNedelno=saatiNedelno;
- this->pozicija=pozicija;
- }
- JobPosition getPozicija(){
- return pozicija;
- }
- void print(){
- cout<<ime<<" "<<saatiNedelno<<" "<<pozicija<<endl;
- }
- ~Programer(){
- delete []ime;
- }
- };
- float Programer::programerRate=250;
- class WebDeveloper: public Programer, public Abstract{
- private:
- bool daliRabotiOdDoma;
- public:
- WebDeveloper(){}
- WebDeveloper(char *ime,int saatiNedelno, JobPosition pozicija, bool daliRabotiOdDoma):Programer(ime,saatiNedelno,pozicija){
- this->daliRabotiOdDoma=daliRabotiOdDoma;
- }
- float tax(){
- if(daliRabotiOdDoma){
- return 10;
- }else{
- return 15;
- }
- }
- // nedelnoSaati*programerRate*pozicija
- float salary(){
- if(daliRabotiOdDoma){
- return 0.8*saatiNedelno*programerRate*pozicija;
- }else{
- return saatiNedelno*programerRate*pozicija;
- }
- }
- float posleDanok(){
- return WebDeveloper::salary()-WebDeveloper::salary()/WebDeveloper::tax();
- }
- JobPosition getPozicija(){
- return pozicija;
- }
- void print(){
- cout<<"WebDeveloper "<<ime<<" "<<saatiNedelno<<"h "<<pozicija<<" "<<daliRabotiOdDoma<<endl;
- }
- ~WebDeveloper(){}
- };
- class BackEndDeveloper: public Programer, public Abstract{
- private:
- int kolkuJazici;
- public:
- BackEndDeveloper(){}
- BackEndDeveloper(char *ime,int saatiNedelno,JobPosition pozicija,int kolkuJazici):Programer(ime,saatiNedelno,pozicija){
- this->kolkuJazici=kolkuJazici;
- }
- // ne preoptovaruvame tax() zoshto ima pocetna vrednost
- float salary(){
- if(kolkuJazici<2){
- return 0.7*saatiNedelno*programerRate*pozicija;
- }else if(kolkuJazici>=2 && kolkuJazici<=5){
- return 0.9*saatiNedelno*programerRate*pozicija;
- }else{
- return 1.2*saatiNedelno*programerRate*pozicija;
- }
- }
- float posleDanok(){
- return BackEndDeveloper::salary()-BackEndDeveloper::salary()/BackEndDeveloper::tax();
- }
- void print(){
- cout<<"BackEndDeveloper "<<ime<<" "<<saatiNedelno<<"h "<<pozicija<<" "<<kolkuJazici<<endl;
- }
- JobPosition getPozicija(){
- return pozicija;
- }
- ~BackEndDeveloper(){}
- };
- class FullStackDeveloper: public Programer, public Abstract{
- private:
- int godiniIskustvo;
- public:
- FullStackDeveloper(){}
- FullStackDeveloper(char *ime,int saatiNedelno,JobPosition pozicija,int godiniIskustvo):Programer(ime,saatiNedelno,pozicija){
- this->godiniIskustvo=godiniIskustvo;
- }
- float tax(){
- if(godiniIskustvo<10){
- return 15;
- }else if(godiniIskustvo>=10 && godiniIskustvo<25){
- return 7;
- }else{
- //return 5;
- return Abstract::tax();
- }
- }
- JobPosition getPozicija(){
- return pozicija;
- }
- float salary(){
- if(godiniIskustvo<5 && pozicija!=3){
- return 1.15*saatiNedelno*programerRate*pozicija;
- }else if(godiniIskustvo>=5 && pozicija!=3){
- return 1.3*saatiNedelno*programerRate*pozicija;
- }else if(godiniIskustvo>=5 && pozicija==3){
- return 2*saatiNedelno*programerRate*pozicija;
- }else{
- return saatiNedelno*programerRate*pozicija;
- }
- }
- float posleDanok(){
- return FullStackDeveloper::salary()-FullStackDeveloper::salary()/FullStackDeveloper::tax();
- }
- void print(){
- cout<<"FullStackDeveloper "<<ime<<" "<<saatiNedelno<<"h "<<pozicija<<" "<<godiniIskustvo<<endl;
- }
- ~FullStackDeveloper(){}
- };
- void print(Abstract **niza,int n){
- for(int i=0;i<n;i++){
- niza[i]->print();
- }
- }
- void printSalaries(Abstract **niza,int n){
- for(int i=0;i<n;i++){
- niza[i]->print();
- cout<<"Platata mu e :"<<niza[i]->salary()<<endl;
- }
- }
- void printSalariesAfterTax(Abstract **niza,int n){
- float samoDanok;
- for(int i=0;i<n;i++){
- niza[i]->print();
- cout<<"Platata mu e :"<<niza[i]->salary()<<endl;
- samoDanok=niza[i]->salary()/niza[i]->tax();
- cout<<"Posle danok platata e "<<niza[i]->salary()-samoDanok<<endl;
- }
- }
- // max
- void najPlatenProgramer(Abstract **niza,int n){
- float maxPlata=0;
- int pamtiIndex;
- for(int i=0;i<n;i++){
- if(niza[i]->salary()>maxPlata){
- maxPlata=niza[i]->salary();
- pamtiIndex=i;
- }
- }
- cout<<"Najplaten programer e "<<endl;
- niza[pamtiIndex]->print();
- }
- //
- /*
- void najmalkuDanok(Abstract **niza,int n){
- float minDanok=0;
- int pamtiIndex;
- for(int i=0;i<n;i++){
- if(niza[i]->salary() - niza[i]->posleDanok()<minDanok){
- minDanok=niza[i]->salary() - niza[i]->posleDanok();
- pamtiIndex=i;
- }
- }
- cout<<"Najmalku danok plakja "<<endl;
- niza[pamtiIndex]->print();
- cout<<"Platil danok "<<minDanok<<endl;
- }
- */
- void kolkuOdSekojaOblast(Abstract **niza,int n){
- int brojJunior=0;
- int brojSenior=0;
- int brojHoe=0;
- for(int i=0;i<n;i++){
- if(niza[i]->getPozicija()==1){
- brojJunior++;
- }else if(niza[i]->getPozicija()==2){
- brojSenior++;
- }else{
- brojHoe++;
- }
- }
- cout<<"Junior:"<<brojJunior<<" Senior:"<<brojSenior<<" Hoe:"<<brojHoe<<endl;
- }
- int main(){
- Abstract **niza=new Abstract*[8];
- niza[0]=new WebDeveloper("Maja",18,(JobPosition)1,true);
- niza[1]=new BackEndDeveloper("ViktorijaLevo",14,(JobPosition)2,2);
- niza[2]=new BackEndDeveloper("ViktorijaDesno",20,(JobPosition)3,6);
- niza[3]=new FullStackDeveloper("Jovan",15,(JobPosition)3,2);
- niza[4]=new WebDeveloper("Luka",28,(JobPosition)1,false);
- niza[5]=new WebDeveloper("Stefan",24,(JobPosition)2,true);
- niza[6]=new FullStackDeveloper("Pavel",26,(JobPosition)3,11);
- niza[7]=new BackEndDeveloper("Boris",16,(JobPosition)1,2);
- kolkuOdSekojaOblast(niza,8);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment