Solution

Transcription

Solution
Université Mohammed Premier
Faculté des Sciences
Département de Mathématiques
et d’Informatique
Année universitaire 2012-2013
Filière SMI
Module : POO Java
Semestre : S5
Responsable : E.M. DAOUDI
Solution de l’examen de TP : Session ordinaire
Le lundi 25 Février 2013
Partie I
1. Ecrire une classe nommée « Etudiant » pour modéliser un étudiant. Elle possède :
- Quatre attributs privés, à savoir:
 nom : de type String, pour mémoriser le nom de l’étudiant.
 cne : de type int, pour mémoriser le code national de l’étudiant.
 notes : un tableau de type double, pour mémoriser les notes des modules. On suppose que qu’il n’y a
que 2 modules (M1 et M2) et que chaque module est composé d’un seul élément.
 moy : de type double pour mémoriser la moyenne des notes.
- Au moins un constructeur: pour créer un objet et initialiser les attributs « nom » et « cne ».
- Deux méthodes publiques, en cas de besoin vous rajoutez d’autres méthodes, à savoir :
o « setNotes(…) » : pour mettre à jour les notes des modules.
o « setMoyenne(…) » : pour calculer la moyennes des notes et l’affecter à l’attribut « moy ». Cette
méthode doit générer une exception si au moins une des notes n’est pas valide.
N.B. Une note x est valide si elle vérifie : 0≤x≤20.
2. Ecrire une classe nommée « Test » qui contient la méthode « main() ». Pour les tests :
- On crée les deux objets suivants :
Etudiant e1=new Etudiant("Mohammed",123);
Etudiant e2 = new Etudiant(450, "Ali");
- Mettre à jour les notes: on ne fait pas la saisie des notes. On fait des tests pour différentes valeurs (par
exemple, on suppose que les notes de l’étudiants « e1 » sont 12 et -1).
- On calcule la moyenne de chaque étudiant.
- Lorsqu’il n’y a pas d’exception, on affiche pour chaque étudiant « ei » (avec i=1 ou 2) le nom et la
moyenne en utilisant l’instruction « System.out.println(ei) ». En cas d’exception, on affiche le message
suivant : " les notes ne sont pas valides ".
Solution
class ErrNotes extends Exception {
public ErrNotes(String msg){
super(msg);
}
}
class Etudiant {
private String nom;
private int cne;
private double notes []=new double[2];
private double moy;
public Etudiant(String nom, int cne){
this.nom=nom;
this.cne=cne;
}
public Etudiant(int cne, String nom){
this.nom=nom;
this.cne=cne;
}
public void setNotes(double n1, double n2){
notes[0]=n1;
notes[1]=n2;
}
public void setMoyenne( ) throws ErrNotes{
double n1=notes[0];
double n2=notes[1];
if ((n1<0||20<n1)||(n2<0||20<n2)) throw new ErrNotes("les notes ne sont pas valides");
moy=0.0;
for(int i=0;i<notes.length;i++){
moy+=notes[i];
}
moy=moy/2;
}
public String toString(){
return "Nom: "+nom+" Moyenne = "+moy;
}
}
public class Test {
public static void main(String[] args) {
try {
Etudiant e1=new Etudiant("Mohammed",123);
Etudiant e2=new Etudiant(450,"Ali");
e1.setNotes(12,-1);
e1.setMoyenne();
System.out.println(e1);
e2.setNotes(3,23);
e2.setMoyenne();
System.out.println(e2);
}
catch (ErrNotes e){
System.out.println(e.getMessage());
}
}
}
3. Adapter la méthode «setMoyenne(…)» afin qu’en cas d’exception, on affiche l’un des messages suivants:
- "les notes des deux modules M1 et M2 ne sont pas valides" : si les 2 notes ne sont pas valides.
- "la note du module M1 n'est pas valide" : si, uniquement la note du module M1 qui n’est pas valide.
- "la note du module M2 n'est pas valide" : si, uniquement la note du module M2 qui n’est pas valide.
Solution
public void setMoyenne( ) throws ErrNotes{ // question 3
double n1=notes[0];
double n2=notes[1];
if ((n1<0||20<n1) && (n2<0||20<n2)) throw new ErrNotes("les notes des deux modules M1
et M2 ne sont pas valides");
if ((n1<0||20<n1)) throw new ErrNotes("la note du module M1 n'est pas valide");
if ((n2<0||20<n2)) throw new ErrNotes("la note du module M2 n'est pas valide");
moy=0.0;
for(int i=0;i<notes.length;i++){
moy+=notes[i];
}
moy=moy/2;
}
4. Dans cette question, on suppose qu’une note égale à -1 indique que l’étudiant s’est absenté. Réécrire la
méthode «setMoyenne(… ) » pour traiter cette exception. Pour les tests, on reprend la question 2.
Lorsqu’il n’y a pas d’exception, on affiche pour chaque étudiant « ei » (avec i=1 ou 2) le nom et la
moyenne en utilisant l’instruction « System.out.println(ei) ». En cas d’exception, l’un des messages sera
affiché.
- "l’étudiant s’est absenté dans un module " si l’une des deux notes est égale à -1.
- "l’étudiant s’est absenté dans les deux modules " si les deux notes sont égales à -1.
- "les notes ne sont pas valides": si au moins une note n’est pas valide et que les 2 notes sont différentes de -1.
Solution
public void setMoyenne( ) throws ErrNotes{
double n1=notes[0];
double n2=notes[1];
if ( ((n1<0)&&(n1!=-1))||(20<n1)||((n2<0)&&(n2!=-1))||(20<n2) ) throw new ErrNotes("les notes ne
sont pas valides");
if ((n1==-1)&&(n2==-1)) throw new ErrNotes(" l’étudiant s’est absenté dans les deux modules ");
if ((n1==-1)||(n2==-1)) throw new ErrNotes(" l’étudiant s’est absenté dans un module");
moy=0.0;
for(int i=0;i<notes.length;i++){
moy+=notes[i];
}
moy=moy/2;
}
Partie II
Définir la classe « Personne ». Elle possède :
- un attribut privé, nommé « nom » de type String.
- un constructeur pour créer un objet de type « Personne » et initialiser l’attribut « nom ».
N.B. en cas de besoin vous rajoutez d’autres méthodes.
On suppose que la classe « Etudiant » hérite de la classe « Personne ». Dans ce cas l’attribut « nom » ne sera
pas un champ propre de la classe « Etudiant », mais il sera hérité de la classe « Personne ».
- Adapter la classe « Etudiant ».
- Pour les tests, on reprend la question 2 du partie I.
Solution
class Personne {
private String nom;
public Personne(String nom){
this.nom=nom;
}
public String toString(){ // à rajouter
return nom;
}
}
class Etudiant extends Personne{
private int cne;
private double notes []=new double[2];
private double moy;
public Etudiant(String nom, int cne){
super(nom); // héritage
this.cne=cne;
}
public Etudiant(int cne, String nom){
super(nom); // héritage
this.cne=cne;
}
// Les mêmes méthodes setNotes(…. ) et setMoyenne( )
public String toString(){ // à rajouter. On appelle super.toString() pour afficher le nom
return "Nom: "+super.toString()+" Moyenne = "+moy;
}
}