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());
}
}