TP6 Java Avance 2015 Tondeur Hervé Exercice 1 Ecrire les
Transcription
TP6 Java Avance 2015 Tondeur Hervé Exercice 1 Ecrire les
TP6 Java Avance 2015 Tondeur Hervé Exercice 1 Ecrire les applications client et serveur qui délivrent l’heure lors d’un appel par le client sous la technologie Java RMI. Votre serveur devra comporter les méthodes d’appels distants suivantes : getHeure() renvoie le chiffre des heures. getMinute() renvoie le chiffre des minutes. getSeconde() renvoie le chiffre des secondes. getFormatHeure() revoie l’heure complète formaté (HH :MM :SS) Exercice 2 Soit l’applet suivante, modifiez le code en utilisant la technologie des « Thread » Java pour faire tourner le cube dans le sens trigonométrique de manière continue et fluide. Nb : la rotation est exprimée en radian, pour rappel 1°= 0.0174532777777778 Radian. import java.applet.Applet; import java.awt.*; import java.util.*; public class RotSquare extends Applet { int cx,cy,r,x,y,x1,y1,x2,y2,x3,y3; double rot=0.0; public void init() { carre(100,100,50,rot); repaint() ; } public void carre(int cex, int cey, int ray,double a){ cx=cex; cy=cey; r=ray; x=(int)(r*Math.cos(a)+cx); y=(int)(r*Math.sin(a)+cy); x1=(int)(r*Math.cos(a+Math.PI/2)+cx); y1=(int)(r*Math.sin(a+Math.PI/2)+cy); x2=(int)(r*Math.cos(a+Math.PI)+cx); y2=(int)(r*Math.sin(a+Math.PI)+cy); x3=(int)(r*Math.cos(a+Math.PI*1.5)+cx); y3=(int)(r*Math.sin(a+Math.PI*1.5)+cy); } public void paint(Graphics g){ g.setColor(Color.red); g.drawLine(x, y, x1, y1); g.drawLine(x1, y1, x2, y2); g.drawLine(x2, y2, x3, y3); g.drawLine(x3, y3, x, y); 1 TP6 Java Avance 2015 Tondeur Hervé } } //fin de l’applet Exercice 3 Reprendre l’exercice suivant Ecrire une petite application Java permettant de simuler la commande “ls” ou “dir”, cette application permet de donner en entête le chemin du répertoire complet, puis la liste des fichiers contenu dans ce répertoire. Si ce répertoire contient des sous répertoires, il faut explorer de manière récursive ces sous répertoires. Afficher pour chaque répertoire et fichier le type <REP> pour répertoire et <FICH> pour les fichiers ainsi que les modes d’accès permis « r « si accessible en lecture, « w » si accessible en écriture, x pour exécutable. Attention aux exceptions, et aux arguments de la ligne de commande. Exemple d’affichage : F:\universite\Tp java\httpd\www <REP> rw..\httpd\www\bidon.htm <FICH> rw..\httpd\www\tp1.htm <FICH> rw..\httpd\www\tp2.htm <FICH> rw..\httpd\iconsMimetype <FICH> rw..\httpd\HttpConnection.class <FICH> rw..\httpd\HttpLog.class <FICH> rw..\httpd\Httpd.class <FICH> rw..\httpd\Main.class <FICH> rw- On se propose d’améliorer le programme a réalisé ci-dessus, en le transformant en une application graphique fenêtrée basée sur la technologie JavaFX2. L’interface graphique ressemblera à celle-ci : 2 TP6 Java Avance 2015 Tondeur Hervé Exercice 4 Partage d'ensembles de coordonnées 2D en client-serveur On souhaite stocker sur un serveur de données un ensemble de coordonnées 2D décrivant les positions d'un certain nombre de véhicules dans le plan x, y. Ces coordonnées 2D seront sauvegardées dans une base de données Java DB (Derby). Le client communiquera avec ce serveur par messages, les trois types de messages possibles seront : NUMBER => le serveur répond au client par le nombre de coordonnées présente dans le fichier. GETALL=> le serveur répond au client par l’envoie du contenu du fichier complet des coordonnées. CREATE XX YY => le serveur intègre dans le fichier les coordonnées XX et YY et répond au client « ACK » si les coordonnées sont correctement intégrés dans la base de données. Ce serveur devra inclure les fonctionnalités suivantes: accès au nombre de positions, (NUMBER) accès en lecture aux positions, (GETALL) création d'une nouvelle position. (CREATE XX YY) Ecrire l'application serveur basé sur les sockets Java qui permet de réaliser les demandes cidessus. 3 TP6 Java Avance 2015 Tondeur Hervé Exercice 5 Soit le code source de l’application « carnet d’adresses » mode console ci-dessous, écrivez le code qui permettra de « sérializer » sur disque les données du conteneur de type Vector. Lecture et écriture du fichier de persistance des données. import java.util.*; import java.io.*; class ADR implements { public String nom, prenom, rue, cp, ville, email, tel; ADR(String n, String p, String r, String c, String v, String e, String t) { nom=n; prenom=p; rue=r; cp=c; ville=v; email=e; tel=t; } public void afficher() { System.out.println("==========================="); System.out.println ("Nom : "+nom); System.out.println ("prenom : "+prenom); System.out.println ("rue : "+rue); System.out.println ("ville : "+ville); System.out.println ("cp : "+cp); System.out.println ("email : "+email); System.out.println ("tel : "+tel); System.out.println("==========================="); } }//fin class ADR public class AdresseSer { Vector v; BufferedReader bf; String ligne=""; public AdresseSer() { v=new Vector(); bf=new BufferedReader(new InputStreamReader(System.in)); menu(); } void ajouter(){ String nom="",prenom="",rue="",ville="",email="",cp="",tel=""; System.out.println("Ajouter une personne :"); try{ System.out.print("Nom : ");nom=bf.readLine(); System.out.print("prenom : ");prenom=bf.readLine(); System.out.print("rue : ");rue=bf.readLine(); System.out.print("ville : ");ville=bf.readLine(); System.out.print("cp : ");cp=bf.readLine(); 4 TP6 Java Avance 2015 Tondeur Hervé System.out.print("email : ");email=bf.readLine(); System.out.print("tel : ");tel=bf.readLine(); }catch(Exception e) {} v.add(new ADR(nom,prenom,rue,cp,ville,email,tel)); System.out.println("Personne ajouter...");System.out.println();System.out.println(); } void trier(){ ADR tmp; String s1,s2; System.out.println ("Trier les noms :"); for (int i=0;i<v.size();i++){ for(int j=0;j<v.size()-1;j++) { s1=((ADR)v.elementAt(j)).nom; s2=((ADR)v.elementAt(j+1)).nom; if (s1.compareToIgnoreCase(s2)>0) { tmp=(ADR)v.elementAt(j); v.setElementAt((ADR)v.elementAt(j+1),j); v.setElementAt(tmp,j+1); } } } System.out.println("Fin du tri des noms..."); System.out.println(); System.out.println(); } void lister(){ System.out.println ("Lister les personnes : "); for (int rec=0;rec<v.size();rec++){System.out.println(((ADR)v.elementAt(rec)).nom+" "+((ADR)v.elementAt(rec)).prenom);} System.out.println(); System.out.println(); } void afficher() { System.out.println("Info sur une personne : ");System.out.println(); System.out.print("Nom de la personne ? : " ); String leNom=""; try{leNom=bf.readLine();} catch(Exception e){} for (int rec=0; rec<v.size();rec++) { if (((ADR)v.elementAt(rec)).nom.compareToIgnoreCase(leNom)==0) {((ADR)v.elementAt(rec)).afficher();} } System.out.println(); System.out.println(); } public void menu() {int choix; // afficher menu while(true){ System.out.println("1 Ajouter un nom"); System.out.println("2 Trier par nom"); System.out.println("3 Lister les noms"); System.out.println("4 Afficher info d'un nom"); System.out.println ("5 Quitter"); try{ 5 TP6 Java Avance 2015 Tondeur Hervé System.out.print("Votre choix ? ");ligne=bf.readLine();}catch(Exception e) {} try {choix=Integer.parseInt(ligne);} catch (Exception e) {choix=0;} switch(choix) { case 1: ajouter();break; case 2: trier();break; case 3: lister();break; case 4: afficher();break; case 5: { System.exit(0); } default: System.out.println ("Erreur de choix..."); } } } public static void main(String args[]) { AdresseSer adr=new AdresseSer(); } } 6