CORRECTION
GESTION DES NOTES DE MODULES

1. Résultat de la consultation

 

Spec des méthodes :

 

Vector()

Constructs an empty vector so that its internal data array has size 10 and its standard capacity increment is zero.

void addElement(Object obj)

Adds the specified component to the end of this vector, increasing its size by one.

Enumeration elements()

Returns an enumeration of the components of this vector.

int size()

Returns the number of components in this vector.

 

A remarquer :

a.    paramètre de type Object. Cela implique pour stocker une note de type réel de convertir cette note en une instance de la classe java.lang.Float. Puis lors de la récupération de cet objet, il est nécessaire de « caster » le type Object pour retrouver un Float !

b.    découverte de l’interface Enumeration.

c.    Redéfinition de toString() pour l’affichage des informations de la classe !

 

/**

 * CumulNotes.java

 * Classe permettant de cumuler une série de notes et d'en calculer la moyenne

 * Created on 9 octobre 2000, 13:29

 */

package note;

import java.lang.*;

import java.util.*;

import java.io.*;

 

public class CumulNotes {

  private Vector notes; // Vecteur de notes

  public static final int MIN_VALUE = 0; // Note minimale

  public static final int MAX_VALUE = 20; // Note maximale

 

/** Creates new CumulNotes */

  public CumulNotes() {

    notes = new Vector();

  }

  /** Insertion d'une note */

  public void insererNote(float n) {

    notes.addElement(new Float(n));

  }

/** Calcul de la moyenne */

  public float calculerMoyenne() {

    float somme = 0;

    Enumeration e = notes.elements();

    while (e.hasMoreElements()) {

      somme = somme + ((Float)e.nextElement()).floatValue();    }

    return somme/notes.size(); 

  } 

 

  public String toString() {

    // Rq. possibilité d'écrire:

    // return notes.toString(); // liaison dynamique

    // mais le formatage proposé ne nous convient pas

    // à savoir: [7.0 , 14.5, 16.5]

    // D’où, notre développement :

    String s = new String();

    Enumeration e = notes.elements();

    while (e.hasMoreElements()) {
           s = s + " " + (e.nextElement()).toString();    }

    return s; 

  }

}

 

2. Classe Module

a.    classe Hashtable

Une table de hachage sert à associer des objets à d'autres objets; ces derniers servent de clé, ce qui signifie essentiellement qu'ils doivent être tous distincts; nous les appellerons donc les clés ; on retrouvera un objet en donnant la valeur de la clé associée. En Java, tous ces objets, clés ou objet accédés par les clés, doivent être des instances de la classe Object ou d'une sous-classe de la classe Object. L'organisation interne d'une telle structure fait que les objets sont retrouvés avec une grande rapidité. Pour qu'une table de hachage puisse fonctionner, il faut que la classe des clés redéfinisse les méthodes hashCode() et equals() de la classe java.lang.Object.

 

Dans la classe Module, nous devons associer des noms (de matière) a deux informations : coefficient + un cumul de notes.

Or, seulement des objets peuvent être stockés dans une table, nous devons donc créer une classe interne à la classe Module juste pour les besoins de stockage.

D’où, la définition de la classe Matiere (sans attribut « nom » puisse le nom de la matière constituera la clé de la Hashtable).

 

/*

 * Module.java

*/

package note;

import java.lang.*;

import java.util.*;

import java.io.*;

 

public class Module extends Object {

  private class Matiere {

    public CumulNotes notes;

    public float coeff;

    public Matiere(float c) {

      coeff = c;

      notes = new CumulNotes();

    }

    public String toString() {

      return "Coefficient : "+coeff+"\n"+notes.toString();

    }

  } // class Matiere

 

  private String nom; // nom du module

  private Hashtable matieres; // table des matières

 

} // class Module

 

b.    Developpement

 

  /** Creates new Module */

  public Module(String n) {

    nom = n;

    matieres = new Hashtable();

  }

  public void insererNouvelleMatiere(String m, float c){

    matieres.put(m, new Matiere(c));

  }

  public void insererNoteMatiere(String m, float n) {

   Matiere mat = (Matiere)matieres.get(m);

   mat.notes.insererNote(n);

  }

 

  public float calculerMoyenneModule(){

    float s = 0; // somme des moyennes des matières pondérées

    Enumeration m = matieres.keys();

    while (m.hasMoreElements()) {

      String libMat = (String) m.nextElement();

      Matiere matiere = (Matiere)matieres.get(libMat);

      s = s + (matiere.notes.calculerMoyenne()*matiere.coeff);

    }

    return s;

  }

 

  public String toString() {

    String s = new String("MODULE : "+nom);

    Enumeration m = matieres.keys();

    while (m.hasMoreElements()) {

      String libMat = (String) m.nextElement();

      Matiere matiere = (Matiere)matieres.get(libMat);

      s = s + "\nMatiere : " + libMat + "\n" + matiere.toString();

    }

    return s;

  }

}

 

3. TEST

//  test.java

package note;

 

public class Test {

 

  /**

  * @param args the command line arguments

  */

public static void main (String args[]) {

    Module pJava = new Module("Programmation Java");

    pJava.insererNouvelleMatiere("JavaDeBase",(float)1/4);

    pJava.insererNouvelleMatiere("JavaReseau", (float)1/4);

    pJava.insererNouvelleMatiere("Projet", (float)1/2);

    pJava.insererNoteMatiere("JavaDeBase", (float)10.0);

    pJava.insererNoteMatiere("JavaDeBase", (float)15.0);

    pJava.insererNoteMatiere("JavaReseau", (float)13.5);

    pJava.insererNoteMatiere("JavaReseau", (float)9.0);

    pJava.insererNoteMatiere("Projet", (float)15.0);

    System.out.println(pJava.toString());

 System.out.println("Moyenne du module :"+pJava.calculerMoyenneModule());

  } // main()

} // class