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; } }