Exercices POO Java: Concepts et Implémentations
Exercices POO Java: Concepts et Implémentations
M.Youssfi
Support dexercices POO Java : Objet Class Hritage Accessibilit Polymorphisme Exceptions Entres Sorties Interfaces graphiques
Par M.Youssfi
1/41
Support dexercices
M.Youssfi
Premire Application :
public class PremierProgramme { public static void main(String[] args) { System.out.println("First Test"); } } Lancer un diteur de texte ASCII et Ecrire le code source de ce programme. Enregistrer ce fichier dans un nouveau rpertoire c:\exojava sous le nom PremierProgramme.java Compiler ce programme sur ligne de commande Dos : c:\exojava>javac PremierProgramme.java Corriger les Erreurs de compilation Excuter le programme sur ligne de commande c:\exojava>java PremierProgramme
2/41
Support dexercices
M.Youssfi
3/41
Support dexercices
M.Youssfi
4/41
Support dexercices
M.Youssfi
import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class DeuxiemeApplet extends Applet implements ActionListener { // Dclarer etcrer les composants graphiques Label lNom=new Label("Nom:"); TextField tNom=new TextField(12); List listNoms=new List(); Button b=new Button("OK"); // Initialisation de l'applet public void init() { // Ajouter les composants l'applet add(lNom);add(tNom);add(listNoms);add(b); // En cliquant sur le bouton b le gestionnaire // des vnnements actionPerformed s'excute b.addActionListener(this); } //Mthode qui permet de grer les vnements public void actionPerformed(ActionEvent e) { if(e.getSource()==b){ // Lire le contenu de la zone de texte String nom=tNom.getText(); // Ajouter ce contenu dans la liste listNoms.add(nom); } } }
5/41
Support dexercices
M.Youssfi
P1(x, y)
Un segment est dfini par deux points p1 et p2. Chaque point est dfini par son abscisse x et son ordonne y. Dans ce problme, nous allons commencer tout dabord par dfinir la classe Point dfinie par : Les attributs : x et y de type int Un constructeur qui permet de dfinir les valeurs de x et de y. Une mthode toString() qui retourne une chane de caractres de type POINT(x,y). Ensuite on dfinit la classe Segment2D par : Les attributs p1 et p2 qui reprsentent les deux points des deux extrmits du segment. Pour crer un Segment2D, il faut prciser les deux points p1 et p2. Les oprations que lon souhaite excuter sur un Segment2D sont : o getLongueur() : retourne la longueur du segment. o toString() : retourne une chane de caractres de type SEGMENT[P1(x,y)|P2(x,y)] o appartient(Point p) : retourne si le point p appartient au segment ou non. 1234Faire une reprsentation du diagramme de classes. Implmenter la classe Point.java Implmenter la classe Segment2D.java Crer une application TestSegment2D qui permet de : a. Crer deux points. p1(10,20) et p2(50,60) b. Crer un objet de la classe Segment2D en utilisant les deux points crs.
6/41
Support dexercices
c. Afficher ltat de ce segment en utilisant la mthode toString() d. Afficher la longueur de ce segment. e. Afficher si le point p(22,33) appartient ce segment.
M.Youssfi
Exercice 4 :
P2(x,y) R C(x,y)
Une cercle est dfini par : Un point qui reprsente son centre : centre(x,y) Son rayon r On peut crer un cercle de deux manires : Soit en prcisant son centre et son rayon Soit en prcisant son centre et un point du cercle. Les oprations que lon souhaite excuter sur un cercle sont : getPerimetre() : retourne le primtre du cercle getSurface() : retourne la surface du cercle. appartient(Point p) : retourne si le point p appartient ou non au cercle. toString() : retourne une chane de caractres de type CERCLE(x,y,R) 1- Etablir le diagramme de classes 2- Crer la classe Cercle en exploitant les classes Point et Segment2D de lexerci 3- Crer une application qui permet de : a. Crer un cercle dfini par le centre c(100,100) et de rayon r=50 b. Crer un cercle dfini par le centre c(130,100) et de rayon r=40 c. Afficher le primtre et le rayon des deux cercles. d. Afficher si le point p(120,100) appartient lintersection des deux cercles ou non.
7/41
M.Youssfi
2- Structure du projet :
8/41
Support dexercices
M.Youssfi
3- Implmentation java de la classe Segment : package fig; public class Segment { public int extr1; public int extr2; // Constructeur public Segment(int a,int b){ extr1=a;extr2=b;ordonne(); } public void ordonne(){ if(extr1>extr2){ int z=extr1; extr1=extr2; extr2=z; } } public int getLongueur(){ return(extr2-extr1); } public boolean appartient(int x){ if((x>extr1)&&(x<extr2)) return true; else return false; } public String toString(){ return ("segment["+extr1+","+extr2+"]"); } }
9/41
Support dexercices
M.Youssfi
4- Application :
package test; import java.util.Scanner;import fig.Segment; public class Application { public static void main(String[] args) { Scanner clavier=new Scanner(System.in); System.out.print("Donner Extr1:");int e1=clavier.nextInt(); System.out.print("Donner Extr2:");int e2=clavier.nextInt(); Segment s=new Segment(e1, e2); System.out.println("Longueur du"+s.toString()+" est :"+ s.getLongueur()); System.out.print("Donner X:");int x=clavier.nextInt(); if(s.appartient(x)==true) System.out.println(x+" Appartient au "+s); else System.out.println(x+" N'appartient pas au "+s); } }
Excution :
Donner Extr1:67 Donner Extr2:13 Longueur dusegment[13,67] est :54 Donner X:7 7 N'appartient pas au segment[13,67]
10/41
M.Youssfi
11/41
Support dexercices
M.Youssfi
12/41
Support dexercices
M.Youssfi
1. 2. 3. 4. 5.
Par quoi est caractris un objet. Quelle est la particularit des membres statiques dune classe. Quelle est la diffrence entre une classe abstraite et une interface. Pour quelles raisons, on dclare une variable ou une mthode de type final. Quelle est la diffrence entre les autorisations private, protected et package.
d.Mthode abstraite.
6. Donner une dfinition des concepts suivants : a. Classe abstraite b.Interface c.Classe final e. Variable transient.
B- Exercice
On souhaite crer une application java qui permet de calculer de cots de transport de marchandises. Les marchandises transportes sont des instances de la classe Marchandise dfinie par : Les attributs numro, poids et volume Un constructeur avec paramtre et un autre sans paramtre Une mthode toString Les getters et setters Une cargaison peut transporter plusieurs marchandises. Il existe deux types de cargaisons : Routire et Arienne. La classe abstraite Cargaison est dfinie par la distance sur laquelle elle est transporte (distance du parcours) qui est connue au moment de se cration et un vecteur de marchandises. Les oprations de cette classe sont : Une mthode qui permet dajouter une marchandise au vecteur des marchandises. Une mthode qui permet dafficher toutes les marchandises. Une mthode abstraite cout () qui permet de retourner le cot de la cargaison. Une mthode qui permet de retourner une marchandise sachant son numro. Une cargaison arienne est une cargaison dont le cout est calcul selon la formule suivante : cout=10 x distance x poids total des marchandises si le volume total est infrieur 80000 cout=12 x distance x poids total des marchandises si le volume total est suprieur ou gal 80000 Une cargaison routire est une cargaison dont le cout est calcul selon la formule suivante : cout=4 x distance x poids total si le volume total est infrieur 380000 cout=6 x distance x poids total si le volume total est suprieur ou gale 380000 Questions : 1- Crer un diagramme de classe simplifi (Mentionner uniquement les attributs ) 2- Ecrire le code java de la classe Marchandise 3- Ecrire le code java de la classe Cargaison 4- Ecrire le code java de la classe CargaisonRoutire 5- Ecrire le code java de la classe CargaisonArienne 6- Ecrire le code java dune application qui permet de : a. Crer une cargaison routire b. Ajouter la cette cargaison 3 marchandises c. Afficher toutes les marchandises de cette cargaison d. Afficher le cout de cette cargaison e. Crer une cargaison arienne f. Afficher le cout de cette cargaison
13/41
M.Youssfi
Nous souhaitons concevoir et implmenter une application oriente objet qui permet de grer un cinma. Le cinma contient un ensemble de salles. Chaque salle est dfinir par un numro, un nom et le nombre de places quelle offre. Il existe deux types de salles les salles normales et les salles VIP. Le prix dune place est dfini en fonction du type de salle. Nous supposons que le prix dune place dans salle normale est fix 30 DH alors que le prix dune place dans une salle VIP est fix 60 DH. Le cinma mmorise galement un ensemble de films. Chaque film est dfini par son titre et son ralisateur. Le cinma mmorise galement les sances des projections. Chaque sance de projection concerne un film et se droule dans une salle. Pour chaque sance de projection, on doit mmoriser la date de projection ainsi que le nombre de places vendues. Nous prvoyons galement de dfinir dans la classe Sance une mthode qui permet de ventre un certain nombre de places. Cette application peut tre exploite par un utilisateur, un vendeur et ladministrateur. Un utilisateur peut effectuer les oprations suivantes :
Consulter un film sachant son titre. Consulter les films dans le titre contient un mot cl. Consulter une salle sachant son numro Consulter les films des sances programmes. Acheter une place, si elle est disponible, pour un film donn.
Un vendeur peut effectuer toutes les oprations quun utilisateur peut effectuer. En plus, il peut effectuer lopration suivante :
Vendre un certain nombre de places pour un film donn. Ajouter un nouveau film Ajouter une novelle salle Ajouter une nouvelle sance. Consulter le chiffre daffaire (Total des prix des places vendues de toutes les sances) Consulter le taux de remplissage pour un film donn Charger les films partir dun fichier texte. Srialiser les donnes du cinma.
Le vendeur et ladministrateur doivent sauthentifier avant toute opration. Travail faire : 1- Etablir un diagramme Use Case pour ce problme 2- Etablir un diagramme de classes qui montre les structures de donnes manipules par le systme ainsi que les mthodes implmenter. Les mthodes daccs aux attributs (Getters et Setters) ne seront pas reprsentes. La classe Cinema devrait implmenter les trois interfaces IUserCinema, IVendeurCinema et IAdminCinema 3- Implmenter, en java, les classes Salle, SalleNormale,SalleVIP, Film et Seance 4- Ecrire le code java des trois interfaces IUserCinema, IVendeurCinema et IAdminCinema. 5- Ecrire le code java de la classe Cinema. Nous supposons que les films sont stocks dans un fichier nomm cinema.txt . chaque ligne de ce fichier contient le titre du filme et le ralisateurs spars par un point virgule titre;ralisaeur 6- Crer un diagramme de squence qui permet de traduire , dans une application, les oprations suivantes :
a. b. c. d. e. f. g. h. Crer un nouvel objet Cinema. Charger les films partir dun fichier texte. Ajouter un nouveau film. Ajouter une nouvelle salle. Ajouter une nouvelle sance concernant le film X3D dans la salle 4. Consulter le chiffre daffaire Consulter le taux de remplissage pour le film X3D Srialiser les donnes du cinma.
7- Ecrire le code java dune application qui implmente le diagramme de squence prcdent
14/41
Support dexercices
M.Youssfi
8- Crer une application graphique SWING qui permet de saisir un mot cl et qui affiche les films dont le titre contient ce mot cl. On suppose que les films sont stocks dans une base de donnes
15/41
Support dexercices
M.Youssfi
Support dexercices
M.Youssfi
Lassociation entre cargaison et Marchandise est bidirectionnelle. 3- Ecrire le code java des classes entits Marchandise, Cargaison, CargaisonRoutire et CargaisonArienne 4- Ecrire le code java des deux interfaces IClientTransport et IAdminTransport 5- Crer une premire implmentation java de ces deux interfaces 6- Etablir un diagramme de squence puis crer une application java de type console qui permet de raliser les oprations suivantes : Crer une instance de SocieteTransport pour un administrateur. Ajouter trois cargaisons routires et une cargaison arienne socit de transport : CR1 , CA1 et CR2 Ajouter 3 marchandises la cargaison dont la rfrence est CR1 (Numros 1, 2, 3) Ajouter 2 marchandises la cargaison dont la rfrence est CA1 (Numros 4,5) Afficher toutes les informations concernant la cargaison CR1 Afficher toutes les informations concernant la marchandise 3. Srialiser les donnes dans le fichier transport1.data 7- Etablir un diagramme de squence puis crer une deuxime application java de type console qui permet de raliser les oprations suivantes : Crer une instance de la classe SocieteTransport pour un client. Charger les donnes partir du fichier transport1.data Afficher toutes les informations concernant la cargaison CA1 8- Crer une application SWING qui permet la saisie, lajout, la suppression, la consultation des donnes de lapplication. 9- Etablir un modle logique de donnes relationnel relatif au diagramme de classe. 10- Crer la base de donnes MYSQL. 11- Crer une nouvelle implmentation des deux interfaces pour une gestion de donnes stockes dans la base de donnes en faisant le mapping objet relationnel. Trouver une solution qui permet lapplication de changer limplmentation de SocieteTransport, sans modifier le code source de lapplication. Autrement dit, lapplication doit tre ferme la m
17/41
M.Youssfi
Dans cette annexe, nous vous donnons quelques exemples de code java des problmes traits en TD et TP. Ce code na aucune relation avec le problme trait. Toute fois, il pourra vous servir pour des consultations syntaxiques.
1- Exemple de classe Abstraite qui contient des mthodes : Figure.java package graphisme;import java.awt.*; public abstract class Figure { protected Point[] points; protected boolean selected; protected Color couleurContour=Color.blue; protected Color couleurRemplissage=Color.YELLOW; public abstract void dessiner(Graphics g); public abstract double getSurface(); public abstract double getPerimetre(); public abstract double distanceAuCentre(Point p); public void selectionner(){selected=true;} public void deSelectionner(){selected=false; } // Getters et Setters } 2- Exemple de classe Cercle qui hrite de la classe Figure package graphisme; import java.awt.Graphics; public class Cercle extends Figure { private double rayon; public Cercle(Point c,double r){ points=new Point[1];points[0]=c;rayon=r; } public Cercle(Point c,Point p2){ points=new Point[1];points[0]=c;rayon=c.distance(p2); } public void dessiner(Graphics g) { g.setColor(couleurContour); int x1=(int)(points[0].x-rayon); int y1=(int)(points[0].y-rayon); g.drawOval(x1, y1, (int)(2*rayon),(int)(2*rayon)); if(selected==true) g.drawOval(x1-2, y1-2, (int)(2*rayon)+4,(int)(2*rayon)+4); g.setColor(couleurRemplissage); g.fillOval(x1, y1, (int)(2*rayon),(int)(2*rayon)); } public double getSurface() { return Math.PI*rayon*rayon; } public double getPerimetre() { return 2*Math.PI*rayon; } public double distanceAuCentre(Point p) { double distance=points[0].distance(p); return distance; } public String toString() { return "Cercle("+points[0].x+","+points[0].y+","+rayon+")"; } }
18/41
Support dexercices
M.Youssfi
3- Exemple dinterface java : package graphisme; import java.awt.Graphics; public interface IDessin { public void addFigure(Figure f); public Figure getFigurePlusProche(Point p); public void dessiner(Graphics g); public void afficher(); public void supprimer(Figure f); } 4- Exemple de classe implmentant cette interface : package graphisme; import java.awt.*;import java.util.ArrayList; import java.util.List; public class Dessin implements IDessin{ private List<Figure> figures=new ArrayList<Figure>(); public void addFigure(Figure f) { figures.add(f); } public Figure getFigurePlusProche(Point p) { double dMin=figures.get(0).distanceAuCentre(p); int index=0; for(int i=1;i<figures.size();i++) if(figures.get(i).distanceAuCentre(p)<dMin){ dMin=figures.get(i).distanceAuCentre(p); index=i; } return figures.get(index); } public void dessiner(Graphics g) { for(Figure f:figures) f.dessiner(g); } public void afficher() { for(Figure f:figures) System.out.println(f.toString()); } public void supprimer(Figure f) { figures.remove(f); } } 5- Exemple dapplication java : package graphisme; public class Application { public static void main(String[] args) { Dessin d=new Dessin(); d.addFigure(new Cercle(new Point(50,70),60)); d.addFigure(new Rectangle(new Point(100,100), new Point(200,200))); d.addFigure(new Cercle(new Point(90,90),
19/41
Support dexercices
new Point(150,150))); d.afficher(); Figure f=d.getFigurePlusProche(new Point(150,200)); System.out.println("Figures plus poche:"); System.out.println(f.toString()); System.out.println("Surface de "+f+"="+f.getSurface()); System.out.println("Surface de "+f+"="+f.getPerimetre()); f.selectionner(); } }
M.Youssfi
6- Exemple de mthodes qui manipulent les fichiers : Une mthode qui permet de charger une liste lesChaines dobjets de type Chaine dont les donnes sont lues partir du fichier texte
public void chargerChaines(){ File f=new File("chaines.txt"); if(f.exists()){ try { FileReader fr=new FileReader(f); BufferedReader br=new BufferedReader(fr); String s; while((s=br.readLine())!=null){ Chaine ch=new Chaine(); String[] tab=s.split(";"); ch.setNumero(Integer.parseInt(tab[0])); ch.setNomChaine(tab[1]); ch.setFrequence(Float.parseFloat(tab[2])); ch.setPolarite(tab[3].charAt(0)); lesChaines.add(ch); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else{ System.out.println("Fichier introuvable"); } }
Mthode pour srialiser la liste des chaines dans un fichier
public void serialiser(){ File f=new File(nom+".dat"); try { FileOutputStream fos=new FileOutputStream(f); ObjectOutputStream oos=new ObjectOutputStream(fos); oos.writeObject(lesChaines); oos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
20/41
Support dexercices
M.Youssfi
21/41
Support dexercices
M.Youssfi
Corrig :
22/41
Support dexercices
M.Youssfi
23/41
Support dexercices
M.Youssfi
JVM
main()
IOException NegException NumberFormatException ArithmeticException
Saisir() Solution :
calcul()
2- Application :
import java.io.*; public class Vitesse { public static void main(String[] args) { try { int temps=saisir(); int v=calcul(temps); System.out.println("Vitesse="+v+"Km/h"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NegException e) { // TODO Auto-generated catch block System.out.println(e.getMessage()); } catch(ArithmeticException e){ System.out.println("Le temps ne peut pas tre nul"); } catch(NumberFormatException e){ System.out.println("Il faut saisir un nombre");
24/41
Support dexercices
M.Youssfi
} } public static int saisir()throws IOException,NegException { BufferedReader br=new BufferedReader( new InputStreamReader(System.in)); System.out.print("Temps:"); String s=br.readLine(); int t=Integer.parseInt(s); if(t<0) throw new NegException("valeur ngative"); return t; } public static int calcul(int t){ return(3600/t); } }
Excussion 1 : Temps:100 Vitesse=36 Km/h Excussion 2 : Temps:0 Le temps ne peut pas tre nul Excussion 3 : Temps:-10 valeur ngative Excussion 4 : Temps:azaze Il faut saisir un nombre
25/41
Support dexercices
M.Youssfi
26/41
Support dexercices
M.Youssfi
e. En cliquant sur une autre bouton dssrialiser les chanes vers le rcepteur slectionn. f. En slectionnant chaque rcepteur, afficher toutes ses chanes dans une autre liste. g. En cliquant sur un autre bouton, supprimer la chane slectionne du rcepteur slectionn. Exercice 2 Crer une application java qui permet de : Saisir le nom dun dossier Afficher le contenu de ce dossier ainsi que celui de toute son arborescence
Exercice 3 Crer une application java qui permet de : Saisir le nom dun dossier Compresser le contenu de ce dossier dans un fichier.zip Crer une autre application qui permet de dcompresser cette archive Rdiger un rapport pour ce TP
27/41
M.Youssfi
28/41
Support dexercices
M.Youssfi
29/41
Support dexercices
M.Youssfi
Routeur
RouterPort
EthernetPort
SerialPort
La classe RouterPort est abstraite et dfinie par ses attributs : portName : reprsente le nom du port avec une valeur initiale Eth ipAdress : reprsente ladresse IP du port mask : reprsente le masque avec une valeur par dfaut de 255.255.0.1. nbPorts : un attribut statique qui reprsente le nombre de ports Cette classe possde un constructeur sans argument qui permet dincrmenter le nombre de ports et dinitialiser le mask la chaine "255.255.255.0" et ladresse IP "192.168.1.x" avec x reprsente le nombre de ports. La mthode toString() de cette classe retourne une chane de caractres qui contient le nom du port, ladresse IP et le masque. Le reste des mthodes tant les getters et setters. - La classe EthernetPort est dfinie par : une variable dinstance macAdress une variable statique nbEthernets qui reprsente le nombre de EthernetPort cres. Pour crer un objet de cette classe, il faut prciser la valeur de macAdress. Le constructeur de cette classe doit galement initialiser le nom de ce port par une chane "Ethernet" suivie par la valeur de nbEthernets . Cette classe possde galement un constructeur sans argument qui permet dinitialiser la valeur de macAdress par une valeur alatoire comprise entre 1 et 50000 et initialiser le nom de ce port par une chane "Ethernet" suivie par la valeur de nbEthernets. La mthode toString() de cette classe retourne une chane de caractres de type "portName/ipAdress/mask/macAdress". Le reste des mthodes tant des getters et des setters. - La classe SerialPort possde la mme structure que la classe EthernetPort sauf quil faut remplacer macAdress par serialId et la variable statique nbEthernets par nbSerials. - La classe Routeur est dfinie par : routerName qui reprsente le nom du routeur.
30/41
Support dexercices
M.Youssfi
un vecteur dobjets de type RouterPort qui permet de stocker les ports sries et Ethernet de ce routeur. Pour crer un routeur, il faut connatre le nombre de ports Ethernet nbEth et le nombre de port srie nbSer de ce routeur. A sa cration un routeur possde nbSer ports sries et nbEth ports Ethernet. Cette classe possde galement un constructeur sans argument qui permet de crer un routeur possdant un port srie et un port ethernet. Les oprations que lon souhaite dfinir pour cette classe sont : addRouterPort(RouterPort rp) : Une mthode qui permet dajouter un port rp au routeur viewConfiguration() : Une mthode qui permet dafficher les caractristiques de tous les ports de ce routeur. getRouterPort(String portName) : Mthode qui permet de retourner un objet RouterPort sachant le nom du port. Si ce port est introuvable, gnrer une exception qui porte le message Port non valide . ipConfig(String portName, String ipAdresse, String mask) : Une mthode qui permet de chercher le port dont le nom est portName et de modifier ladresse IP et le masque de ce port. loadConfig(String fileName) : Une mthode qui permet de modifier la configuration du routeur par des donnes rcupres partir dun fichier texte dont le nom est fileName Ce fichier contient un ensemble de lignes dont chacune contient le nom de du port, ladresse IP et le masque de ce port. Ces trois valeurs sont spares par un point virgule. Exemple dune ligne : ethernet1 ; 192.168.1.1 ; 255.255.255.0 serialiser(String fileName) : Une mthode qui permet de srialiser le routeur dans le fichier fileName deserialiser(String fileName) : Une mthode qui permet de dsrialiser le routeur partir du fichier filename.
Travail demand :
1- Complter le diagramme de classes en inscrivant sur chaque classe ses attributs, ses constructeurs et ses mthodes. 2- Ecrire le code java de la classe RouterPort 3- Ecrire le code java de la classe EthernetPort 4- Ecrire le code java de la classe SerialPort 5- Ecrire le code java de la classe Routeur 6- Ecrire le code java dune application qui permet de : a. Crer un routeur possdant un port srie et un port ethernet. b. Dfinir le nom de ce routeur CISCO SB 107 c. Ajouter deux ports Ethernet et un port srie ce routeur. d. Dfinir ladresse IP 192.168..11 et le masque 255.255.0.1 du port Ethernet1 e. Afficher la configuration de ce routeur f. Charger la configuration partir du fichier cisco11.ini dans ce routeur g. Afficher nouveau la configuration de ce routeur h. Srialiser le routeur 7- Crer une application graphique AWT qui permet de : Saisir le nom du routeur dans une zone de texte En cliquant sur un bouton crer , Crer un routeur dont le nom est celui qui a t saisi. Charger la configuration de ce routeur partir du fichier config12.ini Afficher la configuration de ce routeur dans une zone de liste.
31/41
Support dexercices
M.Youssfi
ANNEXE
Dans cette annexe, vous trouverez le corrig du Tp entre-sorties Ce problme traite le cas dun rcepteur qui contient plusieurs chanes qui sont charges partir dun fichier texte. Le problme trait dans cette annexe na aucun lien avec le problme de lexamen, toutefois, elle peut vous servir pour faire des consultation syntaxiques.
1- Classe Chaine.java package rec; import java.io.Serializable; public class Chaine implements Serializable { private int numero; private String nomChaine; private float frequence; private char polarite; public Chaine() { super(); } public Chaine(int numero, String nomChaine, float frequence, char polarite) { super(); this.numero = numero; this.nomChaine = nomChaine; this.frequence = frequence; this.polarite = polarite; } // Getters et Setters } 2- Classe Recepteur.java
package rec; import java.io.*; import java.util.Vector; public class Recepteur { private String nom; public Vector<Chaine>lesChaines=new Vector<Chaine>(); public Recepteur(String nom) { this.nom = nom; } public void addChaine(Chaine ch){ lesChaines.add(ch); } public void suppChaine(Chaine ch){ lesChaines.remove(ch); } public void chargerChaines(){ File f=new File("chaines.txt"); if(f.exists()){ try { FileReader fr=new FileReader(f); BufferedReader br=new BufferedReader(fr);
32/41
Support dexercices
M.Youssfi
String s; while((s=br.readLine())!=null){ Chaine ch=new Chaine(); String[] tab=s.split(";"); ch.setNumero(Integer.parseInt(tab[0])); ch.setNomChaine(tab[1]); ch.setFrequence(Float.parseFloat(tab[2])); ch.setPolarite(tab[3].charAt(0)); addChaine(ch); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else{ System.out.println("Fichier introuvable"); } } public void afficher(){ for(int i=0;i<lesChaines.size();i++){ Chaine ch=lesChaines.elementAt(i); System.out.println(ch.getNumero()+"\t"+ ch.getNomChaine()+"\t\t"+ ch.getFrequence()+"\t"+ ch.getPolarite()); } } public void serialiser(){ File f=new File(nom+".dat"); try { FileOutputStream fos=new FileOutputStream(f); ObjectOutputStream oos=new ObjectOutputStream(fos); oos.writeObject(lesChaines); oos.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void desserialiser(String nomFic){ File f=new File(nomFic); try { FileInputStream fis=new FileInputStream(f); ObjectInputStream ois=new ObjectInputStream(fis); lesChaines=(Vector<Chaine>) ois.readObject(); ois.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
33/41
Support dexercices
M.Youssfi
3- Application TestRecepteur.java
import rec.Chaine; import rec.Recepteur; public class TestRecapteur { public static void main(String[] args) { System.out.println("Rcepteur r1"); Recepteur r1=new Recepteur("SONY"); r1.chargerChaines(); r1.afficher(); r1.addChaine(new Chaine(9,"RTM",11097,'V')); r1.serialiser(); System.out.println("Rcepteur r2"); Recepteur r2=new Recepteur("Ech Star"); r2.desserialiser("SONY.dat"); r2.afficher(); } }
4- Interface graphique
import rec.Chaine; import rec.Recepteur; public class FenetreRecepteur extends Frame{ Label l1=new Label("Nom Rec:"); TextField tNom=new TextField("Rec SONY"); List listRec=new List(); List listChaines=new List(); Button bAjout=new Button("Ajouter"); Button bCharger=new Button("Charger"); Vector<Recepteur>lesRecepteurs=new Vector<Recepteur>(); class Handller implements ActionListener{ public void actionPerformed(ActionEvent e) { if(e.getSource()==bAjout){ String nom=tNom.getText(); Recepteur r=new Recepteur(nom); lesRecepteurs.add(r); listRec.add(nom); } else if(e.getSource()==bCharger){ listChaines.removeAll(); int index=listRec.getSelectedIndex(); Recepteur r=lesRecepteurs.elementAt(index); r.chargerChaines(); Vector<Chaine> lesChaines=r.lesChaines; for(int i=0;i<lesChaines.size();i++){ listChaines.add(lesChaines.elementAt(i).getNomChaine()); }
34/41
Support dexercices
} } } public FenetreRecepteur(){ this.setLayout(new FlowLayout()); this.add(l1);add(tNom);add(bAjout); add(listRec);add(listChaines); add(bCharger); Handller h=new Handller(); bAjout.addActionListener(h); bCharger.addActionListener(h); this.setBounds(10,10,500,500); this.setVisible(true); } }
5- Application de linterface graphique
M.Youssfi
public class TestInterface { public static void main(String[] args) { FenetreRecepteur fr=new FenetreRecepteur(); } }
35/41
Support dexercices
M.Youssfi
1- Application AWT :
AppInterface.java
import java.awt.*; import java.awt.event.*; public class AppInterface { Label labelNom=new Label("Nom:"); TextField textNom=new TextField(""); Button bAjout=new Button("Ajouter"); List listNom=new List(); MenuBar menu1=new MenuBar(); Menu fic=new Menu("Fichier"); MenuItem enregistrer=new MenuItem("Enregistrer"); MenuItem quitter=new MenuItem("Quitter"); class Handler implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getSource()==bAjout){
36/41
Support dexercices
String nom=textNom.getText(); listNom.add(nom); } else if(e.getSource()==quitter){ System.exit(0); } } } class Handler2 extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); } } public AppInterface(){ Frame f=new Frame("Application graphique"); f.setLayout(new FlowLayout()); textNom.setText("Saisir un nom ici"); f.add(labelNom); f.add(textNom); f.add(bAjout); f.add(listNom); Handler h=new Handler(); Handler2 h2=new Handler2(); f.addWindowListener(h2); bAjout.addActionListener(h); f.setBounds(10,10,500,500); fic.add(enregistrer); fic.add(quitter); menu1.add(fic); f.setMenuBar(menu1); quitter.addActionListener(h); f.setVisible(true); } public static void main(String[] s){ new AppInterface(); } }
M.Youssfi
Travail faire :
1. 2. 3. 4. Implmenter cette application et essayez de comprendre les concepts Ajouter un bouton qui permet de supprimer un lment de la liste Ajouter un bouton qui permet de dplacer un lment dune liste vers une autre liste Crer la mme application en utilisant Visual Editor de Eclipse.
37/41
Support dexercices
M.Youssfi
- AppletTest.java
import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class AppletTest extends Applet implements ActionListener { TextField textEchelle=new TextField("100"); Button bTracer=new Button("Tracer"); private int echelle=100; public void actionPerformed(ActionEvent e){ echelle=Integer.parseInt(textEchelle.getText()); repaint(); } double f(double x){ return 200+(Math.cos(x/7)+Math.sin(x/3))*echelle; }
38/41
Support dexercices
public void init(){ this.setLayout(new FlowLayout()); this.add(textEchelle); this.add(bTracer); bTracer.addActionListener(this); } public void paint(Graphics g){ for(int x=0;x<400;x++) g.drawLine(x,(int)f(x),x+1,(int)f(x+1)); } }
M.Youssfi
- Page.htm
<html> <head> <title> </title> </head> <body> <applet code="AppletTest.class" width="500" height="500"></applet> </body> </html> Application : Ajouter lapplet la possibilit de choisir la couleur du trac.
39/41
M.Youssfi
Code :
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class RecepteurSWING extends JFrame implements ActionListener { private JLabel jl=new JLabel("Rcepteur"); private JTextField jtf1=new JTextField(12); private JButton jb1=new JButton("Add"); private JButton jb2=new JButton("Charcger"); private JButton jb3=new JButton("Srialiser"); private List liste1=new List(); private List liste2=new List(); private JLabel jlErr=new JLabel("OK"); public RecepteurSWING(){ this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLayout(new BorderLayout()); JPanel jp1=new JPanel(); jp1.setLayout(new FlowLayout()); jp1.add(jl);jp1.add(jtf1);jp1.add(jb1);jp1.add(jb2); jp1.add(jb3); JPanel jp2=new JPanel(); jp2.setLayout(new GridLayout());
40/41
Support dexercices
jp2.add(liste1); jp2.add(liste2); this.add(jp1,BorderLayout.NORTH); this.add(jp2,BorderLayout.CENTER); this.add(jlErr,BorderLayout.SOUTH); jb1.addActionListener(this); jb2.addActionListener(this); jb3.addActionListener(this); this.setBounds(10, 10, 500, 400); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==jb1){ String n=jtf1.getText(); liste1.add(n); jlErr.setText("Cration d'un rcepteur"); /* * A complter */ } else if(e.getSource()==jb2){ jlErr.setText("Chargement des chaines"); /* * A complter */ } else if(e.getSource()==jb3){ /* * A complter */ jlErr.setText("Srialisation"); } } public static void main(String[] args) { new RecepteurSWING(); } }
M.Youssfi
41/41