import java.io.*;

class Rollgehalt {
  // Gehaltsabrechnung der Firma "Rollertel"

  Mitarbeiter a1 = new Innendienst("Erika Elsner", 5);
  Mitarbeiter a2 = new Innendienst("Petra Pieper", 3);

  Mitarbeiter[] AListe = {a1, a2};

  Mitarbeiter r1 = new Reisender("Rudolf Ruffert", 4);

  Mitarbeiter[] RListe = {r1};

  Mitarbeiter i1 = new Instruktor("Doris Dobermann",     "A");
  Mitarbeiter i2 = new Instruktor("Ernst-Erich Eberkat", "B");
  Mitarbeiter i3 = new Instruktor("Horst Hofzwerg",      "C");

  Mitarbeiter[] IListe = {i1, i2, i3};

  Mitarbeiter h1 = new Hilfskraft("Bert Busse",  2, 39);
  Mitarbeiter h2 = new Hilfskraft("Hans Husing", 5, 39);

  Mitarbeiter[] HListe = {h1, h2};
 
  int Gehalt (Mitarbeiter[] liste) {
    int summe = 0;
    for (int i = 0; i < liste.length; i = i + 1)
      summe = summe + liste[i].Gehalt();
    return summe;
    } // Ende Gehalt

  int Gesamtgehalt()
    {return Gehalt(AListe) + Gehalt(RListe) 
                           + Gehalt(IListe) + Gehalt(HListe);}

  } // Ende Rollgehalt

class RollgehaltTF extends Rollgehalt {

  InputStreamReader lies = new InputStreamReader(System.in);
  BufferedReader    eing = new BufferedReader(lies);

  void anzeige() {   
    System.out.println("\nGehaltsabrechnung der Firma Rollertel");
    System.out.println("-------------------------------------");
    while(true) try {
      System.out.print("\nA(gestellte I(nstruktoren ");
      System.out.println("H(ilfskräfte G(esamtgehalt E(nde");
      System.out.print("Wählen Sie! ");
      String taste = eing.readLine();
      if (taste.equals("e"))
        break;
      else if (taste.equals("a")) {
        System.out.print("Gehaltsumme der Angestellten: ");
        System.out.println(Gehalt(AListe) + " EUR");
        } //Ende if
      else if (taste.equals("i")) {
        InstruktorEingabe();
        System.out.print("Gehaltsumme der Instruktoren: ");
        System.out.println(Gehalt(IListe) + " EUR");
        } // Ende if
      else if (taste.equals("h")) {  
        // Eingabe Hilfskräfte einfügen  
        System.out.print("Lohnsumme der Hilfskräfte: ");
        System.out.println(Gehalt(HListe) + " EUR");
        } // Ende if
      else {
        System.out.print("Gehaltsumme aller Mitarbeiter: ");
        System.out.println(Gesamtgehalt () + " EUR");
        } // Ende else
      } // Ende try
    catch(IOException e) {}
    } // Ende anzeige

  void InstruktorEingabe() throws IOException {
    for (int i = 0; i < IListe.length; i = i + 1) {
      Instruktor kursleiter = (Instruktor) IListe[i];
      System.out.print("Wie viele Kurse hat "); 
      System.out.print(kursleiter.Name() + " abgehalten? ");
      int n = Integer.parseInt(eing.readLine());
      kursleiter.setzKursanzahl(n);
      } // Ende for
    } // Ende InstruktorEingabe

  static void main (String[] xy)
    {new RollgehaltTF().anzeige();}

  } // Ende RollgehaltTF

abstract class Mitarbeiter {
  // Mitarbeiter der Firma "Rollertel"

  String name;

  Mitarbeiter (String n)
    {name = n;}

  String Name()
    {return name;}

  abstract int Gehalt();
  
  } // Ende Mitarbeiter

abstract class Angestellter extends Mitarbeiter {
  // im Außen- und Innendienst

  int dienstalter;

  Angestellter (String n, int d)
    {super(n); dienstalter = d;}

  abstract int Gehalt();

  } // Ende Angestellter

class Innendienst extends Angestellter {
  // Angestellter im Innendienst
  // Büroangestellter und Verkäufer

  final int grundgehalt = 600;

  Innendienst (String n, int d)
    {super(n, d);}
  
  int Gehalt()
    {return grundgehalt + 3 * dienstalter;}

  } // Ende Innendienst

class Reisender extends Angestellter {
  // Angestellter im Außendienst (Reisender)

  final int    grundgehalt = 400;
  final double provisionssatz = 0.05;

  int verkaufswert;

  Reisender (String n, int d)
    {super(n, d);}

  void setzVerkaufswert (int wert)
    {verkaufswert = 2000;}
  
  int Gehalt() {
    double provision = verkaufswert * provisionssatz;
    int gehalt = grundgehalt + 2 * dienstalter
                             + (int) provision;
    return gehalt;
    } // Ende gehalt

  } // Ende Reisender

class Instruktor extends Mitarbeiter {
  // Lehrer der Inlineschule

  String qualifikation;
  int    kursanzahl;

  Instruktor (String n, String q)
    {super(n); qualifikation = q; kursanzahl = 0;}

  void setzKursanzahl (int k)
    {kursanzahl = k;}

  int Gehalt() {
    if (qualifikation.equals("A"))
      return 120 * kursanzahl;
    else if (qualifikation.equals("B"))
      return 100 * kursanzahl;
    else
      return 80 * kursanzahl;
    } // Ende Gehalt

  } // Ende Instruktor

class Hilfskraft extends Mitarbeiter {
  // Lager- und Hallenarbeiter

  final int stundenlohn = 15;
  
  int dienstalter;
  int stundenzahl;
 
  Hilfskraft (String n, int d, int s) 
    {super(n); dienstalter = d; stundenzahl = s;}

  int Gehalt()
    {return stundenlohn * stundenzahl + 2 * dienstalter;}
  
  } // Ende Hilfskraft






