/*
 I professori di una Facoltà possono essere a tempo pieno e a tempo parziale.
 Quelli a tempo pieno ricevono uno stipendio fisso più una indennità proporzionale alle ore di lezione.
 Quelli a tempo parziale ricevono solo lo stipendio fisso (eguale a quello dei colleghi a tempo pieno).
 Generato a caso un array di 100 professori tra tempo pieno e tempo parziale,
 e stabilite a caso le ore di lezione insegnate dai professori a tempo pieno si vuole
 conoscere quanto spende la università in un mese per tutti i professori.
*/
public class Uni {
  
  //creo Array di Docenti
  private static Docente[] docenti = new Docente[100];
    
  //Il programma inizia con una chiamata al metodo main().
  public static void main(String args[]) {

    //creo i docenti
    for (int c=0; c<docenti.length; c++)
      if (Math.random()>.5) docenti[c] = new Fulltime((int)(Math.random()*20+1));
      else docenti[c] = new Parttime();
    
    //calcola spesa Facoltà
    float spesa=0.0F;
    for (int c=0; c<docenti.length; c++) {
      spesa += docenti[c].getStipendio();
      System.out.println(docenti[c]);
    }
    System.out.println("\nSpesa totale: " + spesa);
    

  }
}

interface costanti {
  public final float STIPENDIO = 1000.0F;
  public final float COSTO_ORA = 15.0F;
  int[] costi = {1,2,3};
}

abstract class Docente implements costanti {
  public abstract float getStipendio();  
    
}

class Fulltime extends Docente {
  private int ore;
  //costruttore
  public Fulltime(int ore) {
    this.ore = ore;
  }
  //metodo pubblico
  public float getStipendio() {
    return STIPENDIO + ((float)ore * COSTO_ORA);
  }
  public String toString() {return "Docente a tempo pieno con "+ore+" ore";}
}

class Parttime extends Docente {
  //metodo pubblico
  public float getStipendio() {
    return STIPENDIO;
  }
  public String toString() {return "Docente a tempo parziale";}
}