// PROIECT LA LIMBAJE EVOLUATE: BILET NR. 10 #include "stdafx.h" #include #include #include #include #include //********************CLASA DE BAZA********************************** class bd_ang; class angajat { protected: int varsta,vechime; long cnp; public: friend class bd_ang; char nume[20]; int marca; long salariu; // angajat(); angajat(char *,long,int,int,long,int); // angajat(angajat & ); ~angajat(); void print(); int spune_varsta() {return varsta;} int spune_vechime() {return vechime;} long spune_cnp() {return cnp;} friend ostream &operator<<(ostream & , angajat); friend istream &operator>>(istream & , angajat &); virtual long calcul_salariu(){return salariu;} long operator +(long suma){salariu+=suma; return salariu;} long operator -(long suma){salariu-=suma; return salariu;} operator long(){return salariu;}//cast conversie Angajat in long operator int(){return varsta;}//cast conversie Angajat in int operator char*(){return nume;}//cast conversie Angajat in char * long operator +(angajat &a){ return salariu+=a.salariu;}//adun obiecte long operator -(angajat &a){ return salariu-=a.salariu;}//scad obiecte void operator ++(){++varsta;++vechime;} }; // angajat::angajat(char n[]="X",long c=0,int m=0, int v=0,long sal=0,int vech=0) :salariu(sal),cnp(c),marca(m),varsta(v),vechime(vech) { strcpy(nume,n); } angajat::~angajat() { } /*angajat::angajat() { salariu=0; cnp=0; marca=0; varsta=0; vechime=0; strcpy(nume,"X "); total++; }*/ /*angajat::angajat(angajat &a) { salariu=a.salariu; cnp=a.cnp; marca=a.marca; varsta=a.varsta; vechime=a.vechime; strcpy(nume,a.nume); total++; }*/ void angajat::print() { cout<<"\nNumele angajatului:"<>(istream & intrare, angajat &a) { cout<<"Numele noului angajat: "; intrare>>a.nume; cout<<"Cod numeric personal: "; intrare>>a.cnp; cout<<"Marca: "; intrare>>a.marca; cout<<"Varsta: "; intrare>>a.varsta; cout<<"Vechimea: "; intrare>>a.vechime; cout<<"Salariu: "; intrare>>a.salariu; return intrare; } //*********************** CLASA INDEX ******************************* class bd_ang { public: friend class angajat; static int total; static angajat *lista[20]; static char cautare_binara(int, int &); void inserare(angajat *); static void stergere(angajat *); angajat * operator[](int); static void afisare(); }; angajat * bd_ang::lista[20]; int bd_ang::total = 0; void bd_ang::inserare(angajat *pa) { int i, poz; if (!bd_ang::cautare_binara(pa->marca,poz)) { for(i=bd_ang::total;i>poz;i--) { bd_ang::lista[i]=bd_ang::lista[i-1]; } bd_ang::lista[poz]=pa; } bd_ang::total++; } angajat *bd_ang::operator[](int marca) { int poz; if(cautare_binara(marca,poz))return lista[poz]; else return NULL; } char bd_ang::cautare_binara(int marca,int &poz) { int i=0, sf=bd_ang::total, m; if(bd_ang::total==0) { poz=0; return 0; } while(imarca==marca) { poz=m; return 1; } if (bd_ang::lista[m]->marcamarca,poz)) { for(;pozmarca<<" " <nume<<" " <spune_cnp()<<" " <spune_varsta()<<" " <spune_vechime()<<" " <calcul_salariu()<print(); } //cout<<*(bd_ang::lista[i])<>(istream & , angajat_acord &); long calcul_salariu(){ salariu=salariu_piesa*nr_piese; return salariu;} void print() { angajat::print(); cout<<"Salariu pe piesa lucrata:"<>(istream & intrare, angajat_acord &a) { cout<<"Numele noului angajat: "; intrare>>a.nume; cout<<"Cod numeric personal: "; intrare>>a.cnp; cout<<"Marca: "; intrare>>a.marca; cout<<"Varsta: "; intrare>>a.varsta; cout<<"Vechimea: "; intrare>>a.vechime; cout<<"Salariu pe piesa: "; intrare>>a.salariu_piesa; cout<<"Numar de piese: "; intrare>>a.nr_piese; return intrare; } //********************* CLASA DERIVATA 2 *********************** class angajat_cu_ziua :public angajat { long salariu_zi; int nr_zile; public: angajat_cu_ziua(char n[]="X",long c=0,int m=0, int v=0,long sal=0,long s_z=0,int nr=0,int vech=0) :angajat(n,c,m,v,vech) { salariu_zi=s_z; nr_zile=nr; } long spune_sal_zi(){return salariu_zi;} int spune_nr_zile(){return nr_zile;} friend ostream &operator<<(ostream & , angajat_cu_ziua); friend istream &operator>>(istream & , angajat_cu_ziua &); long calcul_salariu(){ salariu=salariu_zi*nr_zile;return salariu;} void print() { angajat::print(); cout<<"Salariu pe zi:"<>(istream & intrare, angajat_cu_ziua &a) { cout<<"Numele noului angajat: "; intrare>>a.nume; cout<<"Cod numeric personal: "; intrare>>a.cnp; cout<<"Marca: "; intrare>>a.marca; cout<<"Varsta: "; intrare>>a.varsta; cout<<"Vechimea: "; intrare>>a.vechime; cout<<"Salariu pe zi: "; intrare>>a.salariu_zi; cout<<"Numar zile: "; intrare>>a.nr_zile; return intrare; } //************************* MENIU************************* void meniu() { cout<<"\nAdaugare angajat ---------------------------------- 1"<>opt; }while(opt<0 || opt>13); switch(opt) { case 1: cin>>a; bd.inserare(&a); cout<<"\n"<>ang; bd.inserare(&ang); cout<<"\n"<>a_z; bd.inserare(&a_z); cout<<"\n"<>marca; if(bd_ang::cautare_binara(marca,poz)) bd_ang::stergere(bd_ang::lista[poz]); break; case 6: cout<<"\nIntroduceti marca angajatului: "; cin>>marca; if(bd_ang::cautare_binara(marca,poz)) { bd_ang::lista[poz]->print(); } break; case 7: cout<<"\nIntroduceti suma de adaugat la salariu: "; cin>>suma; for( i=0;isalariu = (*(bd_ang::lista[i])) + suma; } bd_ang::afisare(); break; case 8: cout<<"\nIntroduceti suma de retinut din salariu: "; cin>>suma; for( i=0;isalariu = (*(bd_ang::lista[i])) - suma; } bd_ang::afisare(); break; case 9: suma=0; for(i=0;icalcul_salariu(); cout<<"\nFondul de salarii este: "<