Problema36

Pachetul "angajati" contine:

package angajati;

public abstract class angajat {

private String numeAngajat;

public angajat(String numeAngajat){

this.numeAngajat=numeAngajat;

}

public abstract double calculSalar();

public String getNumeAngajat(){

return this.numeAngajat;

}

public boolean equals(Object obj){

if(obj instanceof angajat)

return (((angajat)obj).getNumeAngajat().equals(this.numeAngajat));

else

return false;

}

}

package angajati;

public class angajatSalarFix extends angajat {

private double salarFix;

public angajatSalarFix(String numeAngajat,double salar){

super(numeAngajat);

this.salarFix=salar;

}

public double calculSalar(){

return this.salarFix;

}

public void schimbaSalarFix(double salarNou){

this.salarFix=salarNou;

}

}

package angajati;

public class angajatSalarOra extends angajat{

private double salarOra;

private double[] oreLucrate;

private int zileLucrate=0;

private static final int maxOreLucrate=31;

public angajatSalarOra(String numeAngajat, double salarOra){

super(numeAngajat);

this.salarOra=salarOra;

oreLucrate=new double[maxOreLucrate];

}

public void schimbaSalarOra(double salarNou){

this.salarOra=salarNou;

}

public void adaugaOre(double ore){

if(zileLucrate<oreLucrate.length) {

oreLucrate[zileLucrate] = ore;

zileLucrate++;

}

else

return;

}

public double calculSalar(){

double rezultat=0;

for(int i=0;i<zileLucrate;i++)

rezultat=rezultat+oreLucrate[i]*salarOra;

return rezultat;

}

}

Pachetul "firma" contine:

package firma;

import angajati.*;

public class firma {

private angajat[] angajati;

private static int nrMaximAngajati=1024;

private int nrAngajati=0;

public firma(){

angajati = new angajat[nrMaximAngajati];

}

public int angajeaza(angajat a){

if(nrAngajati==nrMaximAngajati)

return -1;

else {

for (int i = 0; i < nrAngajati; i++)

if (a.equals(angajati[i]))

return -2;

}

angajati[nrAngajati]=a;

nrAngajati++;

return 0;

}

public double salarMediu(){

if(nrAngajati==0)

return 0;

else {

double salarMediu = 0;

for (int i = 0; i < nrAngajati; i++)

salarMediu = salarMediu + angajati[i].calculSalar();

return salarMediu / (double) nrAngajati;

}

}

}

Iar metoda "main" se regaseste in:

package com.company;

import angajati.*;

import firma.*;

public class Main {

public static void main(String[] args) {

firma f1=new firma();

angajat a1=new angajatSalarFix("Angajat 1",1500);

angajat a2=new angajatSalarFix("Angajat 2",1600);

angajat a3=new angajatSalarOra("Angajat 3",50);

angajat a4=new angajatSalarOra("Angajat 4",60);

System.out.println("Angajare a1: "+f1.angajeaza(a1));

System.out.println("Angajare a2: "+f1.angajeaza(a2));

System.out.println("Angajare a1: "+f1.angajeaza(a1));

System.out.println("Angajare a3: "+f1.angajeaza(a3));

System.out.println("Angajare a4: "+f1.angajeaza(a4));

((angajatSalarFix)a1).schimbaSalarFix(1400);

((angajatSalarOra)a4).schimbaSalarOra(50);

((angajatSalarOra)a3).adaugaOre(10.0);

((angajatSalarOra)a3).adaugaOre(20.0);

System.out.println("Salariul mediu: "+f1.salarMediu());

}

}