/*
 * "Grundkurs Programmieren in Java - Band 1 (4. Auflage, 2007)"
 * 2001-2007, Carl Hanser Verlag
 * Loesungsvorschlag zu Aufgabe 10.3 (Version 4.0)
 * (c) 2001-2007 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger
 *
 * Benoetigt 'Student.java'
 *
 */

public class KarlsruherStudent extends Student {

  /* *** Konstruktor (noetig, weil Konstruktoren nicht vererbt werden) *** */
  public KarlsruherStudent( int geburtsjahr ) {
    super( geburtsjahr );
  }

  // Methode ueberschreiben
  public boolean validateNummer() {

    int[] faktor = {2, 1, 4, 3, 2, 1};
    int[] ziffer;
    int matrikel;
    int summe;

    System.out.println( "KarlsruherStudent.validateNummer() aufgerufen" ); // um zu zeigen, dass Polymorphie auch klappt

    matrikel = getNummer();
    ziffer = new int[7];

    // Matrikel-Nummer in ihre Ziffern aufspalten
    for (int i = 6; i >= 0; i--) {  // Index laeuft rueckwaerts!
      ziffer[i] = matrikel % 10;
      matrikel /= 10;
    }


    if (matrikel != 0) {
      System.out.println( "Matrikel-Nr. hat zu viele Stellen!" );
      return false;
    }

    // gewichtete Summe berechnen
    summe = 0;
    for (int i = 0; i < 6; i++)
      summe += ziffer[i] * faktor[i];

    summe %= 10; // wir brauchen nur die letzte Ziffer der gew. Summe


    if (summe == ziffer[6]) {
      System.out.println( "Matrikel-Nr. zulaessig!" );
      return true;
    }
    else {
      System.out.println( "Matrikel-Nr. unzulaessig!" );
      return false;
    }
  }

   /* ****** Eintritts-Funktion ****** */
   public static void main (String[] args) {

     Student student1;
     Student student2;

     student1 = new KarlsruherStudent(25);
     student2 = new KarlsruherStudent(21);

     student1.setNummer(  111111 ); // zulaessige Nr.
     student2.setNummer( 1234567 ); // unzulaessige Nr.

     System.out.println();

     System.out.println( student1.getNummer() );
     System.out.println( student2.getNummer() ); // gibt '0' aus, da validate fehlgeschlagen

   }

}
