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