[PDF] [PDF] Examen de Java Correction

Examen de Java Correction FIUPSO 3/DESS – Année 2001/2002 Hugues MOUNIER 1 février 2002 Modalités – Durée : 4 heures – Tous les documents sont 



Previous PDF Next PDF





[PDF] 1 Corrigé de Examen Programmation par les Objets en Java 1A Juin

Quel est l'intérêt de déclarer une interface pour ensuite l'implémenter avec des classes ? Ne peut-on déclarer directement des classes sans passer par une 



[PDF] Examen de Java Correction

Examen de Java Correction FIUPSO 3/DESS – Année 2001/2002 Hugues MOUNIER 1 février 2002 Modalités – Durée : 4 heures – Tous les documents sont 



[PDF] Examen Programmation Par les Objets en Java Juin 2108, 1A

Soit la classe Article vue en cours/TP On voudrait en dériver un certain nombre de sous-classes dont une classe TV qui redéfinit la prixTTC() d'un article avec une 



[PDF] QCM de Java corrigé - IRIF

La marginalisation n'a rien `a voir avec la programmation La liaison tardive dy- namique permet d'utiliser pour chaque objet sa propre version d'une méthode ( en



[PDF] correction - Loria

CORRECTION CORRECTION Examen 2012-2013 - Durée : 1h30 En Java, toutes les classes de base et les autres classes héritent de la classe Object D M Une méthode System out print(" de noël avec "+nbBoules+" boules"); 7



[PDF] correction - Loria

CORRECTION CORRECTION Examen 2014-2015 - Durée : 1h30 java util List numbers; 5 } > Question 2 En considérant le code suivant, indiquer les  



[PDF] Correction Examen POO janvier 2003 - Formations en Informatique

Correction Examen POO janvier 2003 Exercice 1 : Q1 Q 1 1 L'attribut de classe (statique) import java util *; public class CompteCheque implements Compte 



[PDF] CORRECTION 1 PARTIE : COURS (sans document) 1 QCM (35

Examen 1ère session 2015-2016 page 1 consacrée à des questions de cours, et une deuxième partie, avec document, consacrée à la réalisation de En JAVA , il est possible d'écrire des méthodes en dehors de toute classe On écrit les



[PDF] Examen final de Programmation Objet : Corrigé-type

Il faut pour cela qu'elles aient été définies auparavant dans la superclasse Robot avec le modificateur public (pour être utilisées par n'importe quelle classe) ou 



[PDF] Exercices en Java: 175 exercices corrigés - Couvre Java 8 (Noire

Synthèse : gestion de résultats d'examens entièrement sur les composants Swing introduits avec Java 2, ceci aussi bien pour les private boolean correct ;

[PDF] examen java corrigé

[PDF] examen javascript corrigé

[PDF] examen juge arbitre athletisme

[PDF] examen logique combinatoire

[PDF] examen math 2 st pdf

[PDF] examen math 3 st

[PDF] examen math 3 st pdf

[PDF] examen mecanique des fluides corrigé

[PDF] examen mecanique du point corrigé

[PDF] examen médical immigration canada

[PDF] examen medical immigration usa

[PDF] examen microbiologie l2

[PDF] examen microbiologie qcm

[PDF] examen microéconomie s2 qcm

[PDF] examen microscopique des bactéries apres coloration au bleu de methylene

Examen de Java

Correction

FIUPSO 3/DESS - Ann

´ee 2001/2002

HuguesMOUNIER

1 f

´evrier 2002

Modalit

´es

Dur

´ee: 4 heures

Tous les documents sont autoris

´es.

Les sources java r

´epondant`a chaque exercice, etseulement les sourcesseront obli- gatoirement copi ´es dans le r´epertoireexamenjava(tout en minuscules) cr´ee`a la racine de votre compte.

Solution de l"ex. 1 Calculatrice

Voici une solution possible:

// Gestion simpliste de banque utilisant des sockets import java.util.*; import java.io.*; public class Calculette { static double resultat = 0; /* methodes */ static int somme(int a, int b) { return(a+b); } static int soustraction(int a, int b) { return(a-b); } static int multiplication(int a, int b) { return(a*b); } static double division(int a, int b) { return(a/b); } public static void main(String args[]) { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // Boucle infinie for(;;) { try { // Afficher une invite a l"utilisateur

System.out.println("1 Somme de deux entiers\n" +

"2 Soustraction de deux entiers\n" + "3 Multiplication de deux entiers\n" + "4 Division de deux entiers\n" + "5 Sortie du programme\n\n" + "Veuillez entrer votre choix :\n"); // Lire une ligne entree par l"utilisateur

String line = in.readLine();

1

Examen Java FIUPSO 3/DESS 2001/2002

// Si l"on rencontre une fin de fichier, ou si l"utilisateur // entre "quit", on sort if ((line == null) || line.equals("5")) break; // On essaie de formatter l"entree de l"utilisateur, int choix = Integer.parseInt(line); System.out.print("Veuillez entrer le 1er entier : "); line = in.readLine(); int x = Integer.parseInt(line); System.out.print("Veuillez entrer le 2eme entier : "); line = in.readLine(); int y = Integer.parseInt(line); switch(choix) { case 1 : resultat = somme(x, y); // Somme break; case 2 : resultat = soustraction(x, y); // Soustraction break; case 3 : resultat = multiplication(x, y); // Multiplication break; case 4 : resultat = division(x, y); // Division break;

System.out.println("Resultat : " + resultat);

// Affichage d"un message d"erreur en cas de probleme catch(Exception e) { System.out.println("Entree Invalide"); }

Gestion de banque en client/serveur par sockets

L"objet des exercices qui suivent est de d

´evelopper une application de gestion bancaire

simple en r ´eseau, utilisant les sockets. Ce dernier m´ecanisme n"offrant que du transfert de flux, donc d"assez bas niveau, il est n ´ecessaire de concevoir un protocole permettant de diff

´erentier les diff´erentes op´erations bancaires tout en acheminant les donn´ees pertinentes.

Ce type de conception ne serait pas n

´ecessaire si l"on prenait des invocations de m´ethodes distantes (RMI), bien que l"on perde

´evidemment en souplesse de conception.

Pour r

´ealiser l"objectif vis´e, on se fondera sur l"exercice de gestion bancaire en local. On repr ´esentera un paquet par une classe d´ecrite ci-dessous.

Solution de l"ex. 2 Paquets

`a´echanger

Une solution possible est la suivante:

// Gestion simpliste de banque utilisant des sockets import java.util.*; import java.io.*; * Classe pour stocker les donnees d"un compte bancaire class Account {

String password; // mot de passe

int balance; // solde du compte Vector transactions = new Vector(); // historique des transactions

Hugues

MOUNIER2

Examen Java FIUPSO 3/DESS 2001/2002

Account(String password) {

this.password = password; this.balance = 0; transactions.addElement("Compte ouvert le " + new Date()); * Classe representant un paquet du protocoloe bancaire public class BankSocketPacket {

String name; // nom du compte

int operation; // operation bancaire

String password; // mot de passe

int amount; // solde /* Operations */ public static final int OPEN = 1; // Ouverture de compte public static final int CLOSE = 2; // Fermeture de compte public static final int DEPOSIT = 3; // Depot sur un compte public static final int WITHDRAW = 4; // Retrait sur un compte public static final int BALANCE = 5; // Solde d"un compte public static final int QUIT = 6; // Sortie du programme /* Erreurs */ public static final int TRANSOK = 0; // Transaction bien passee public static final int EXISTANT = -1; // Overture de compte deja existant public static final int NONEXISTANT = -2; // Operation sur compte inexistant public static final int INVPASSWORD = -3; // Mot de passe invalide public static final int NEGBALANCE = -4; // Solde insuffisant pour retrait BankSocketPacket(String theName, int theOperation,

String thePassword, int theAmount) {

name = theName; operation = theOperation; password = thePassword; amount = theAmount; public String foldPacket() {

String foldedPacket;

StringBuffer tobeFolded = new StringBuffer();

Integer opCode = new Integer(this.operation);

tobeFolded.append(opCode.toString()); if (password != null) { tobeFolded.append("#"); foldedPacket = new String(tobeFolded); return(foldedPacket); public void unfoldPacket(String foldedPacket) {

Hugues

MOUNIER3

Examen Java FIUPSO 3/DESS 2001/2002

String unfoldedTab[] = new String[4];

/* Le deballage est d"abord effectue dans un tableau de String */ int current = foldedPacket.indexOf(":", 0); int next = foldedPacket.indexOf(":", current+1); int last = current; int i = 1; unfoldedTab[0] = foldedPacket.substring(0, current); while (next != -1) { unfoldedTab[i++] = foldedPacket.substring(current+1, next); last = current; current = foldedPacket.indexOf(":", last+1); next = foldedPacket.indexOf(":", current+1); unfoldedTab[i] = foldedPacket.substring(current+1, foldedPacket.length()-1); /* On remplit les champs du paquet deballe */ try { name = new String(unfoldedTab[0]); operation = Integer.parseInt(unfoldedTab[1]); password = new String(unfoldedTab[2]); amount = Integer.parseInt(unfoldedTab[3]); } catch (NumberFormatException e) { System.err.println("Erreur en unfoldPacket()--parseInt() : ");

System.err.println(e);

System.exit(1);

/* Test */ public static void main(String[] args) {

Account cpte = new Account("issos");

BankSocketPacket packet = new BankSocketPacket("Alexandre", cpte, OPEN);

String aAfficher = packet.foldPacket();

System.out.println(aAfficher);

String[] deballe = BankSocketPacket.unfoldPacket(aAfficher); for(int i = 0; i < deballe.length; i++)

System.out.println(deballe[i]);

Solution de l"ex. 3

´Elaboration du serveur

Une solution possible est la suivante:

// Serveur Bancaire simpliste en sockets import java.util.*; import java.io.*; import java.net.*; * Cette classe implante les methodes distantes definies par l"interface * RemoteBank. Son plus gros defaut est que toutes les informations sur les

Hugues

MOUNIER4

Examen Java FIUPSO 3/DESS 2001/2002

* comptes sont perdues lorsque le serveur s"arrete. public class BankServerSocket public final static int DEFAULT_PORT = 6789;

Hashtable accounts = new Hashtable();

static int transCode; * Ouvre un compte avec le nom et le mot de passe specifie * Cette methode est synchronisee de facon qu"une seule thread * ne modifie a la fois la table des comptes. public synchronized void openAccount(String name, String password) { // Verifier s"il exsite deja un compte ayant ce nom if (accounts.get(name) != null) { transCode = BankSocketPacket.EXISTANT; return; // S"il n"existe pas, le creer

Account acct = new Account(password);

// Et l"enregsitrer accounts.put(name, acct); transCode = BankSocketPacket.TRANSOK; * Cette methode utilitaire n"est pas une methode accessible de maniere * distante. Etant donnes un nom et un mot de passe, verifie s"il existe * un compte correspondant. Si oui, renvoie l"objet Account. Sinon, * leve une exception. public Account verify(String name, String password) { synchronized(accounts) {

Account acct = (Account)accounts.get(name);

if (acct == null) { transCode = BankSocketPacket.NONEXISTANT; return null; if (!password.equals(acct.password)) { transCode = BankSocketPacket.INVPASSWORD; return null; transCode = BankSocketPacket.TRANSOK; return acct; * Ferme le compte dont on donne le nom. Methode synchronisee public synchronized FunnyMoney closeAccount(String name, String password) {

Account acct;

acct = verify(name, password); if (acct != null) { accounts.remove(name); synchronized (acct) { int balance = acct.balance;

Hugues

MOUNIER5

Examen Java FIUPSO 3/DESS 2001/2002

acct.balance = 0; return new FunnyMoney(balance); } else return new FunnyMoney(-1); /** Deposer le montant specifie su le compte dont on donne le nom */ public void deposit(String name, String password, FunnyMoney money) {

Account acct = verify(name, password);

if (acct != null) synchronized(acct) { acct.balance += money.amount; acct.transactions.addElement(money.amount + " pieces deposees le " + new Date()); /** Effectue un retarit d"un montant specifie */ public FunnyMoney withdraw(String name, String password, int amount) {

Account acct = verify(name, password);

if (acct != null) synchronized(acct) { if (acct.balance < amount) { transCode = BankSocketPacket.NEGBALANCE; return new FunnyMoney(0); acct.balance -= amount; acct.transactions.addElement("Retrait de " + amount + " le "+new Date()); return new FunnyMoney(amount); else return new FunnyMoney(-1); /** Renvoie le solde du compte dont on donne le nom */ public int getBalance(String name, String password) {

Account acct = verify(name, password);

if (acct != null) synchronized(acct) { return acct.balance; } else return -1; * Renvoie un vecteur de String contenant l"historique pour * le compte dont on donne le nom public Vector getTransactionHistory(String name, String password) {

Account acct = verify(name, password);

synchronized(acct) { return acct.transactions; } void sendPacket(String name, int operation, String password, int amount,

PrintStream out) {

BankSocketPacket toSend = new BankSocketPacket(name, operation, password, amount);

String lineTosend = toSend.foldPacket();

Hugues

MOUNIER6

Examen Java FIUPSO 3/DESS 2001/2002

out.println(lineTosend); * Serveur bancaire par sockets public static void main (String[] args) throws IOException { int port; // no de port du service

String lineRecieved = null;

ServerSocket server;

Socket client;

DataInputStream in;

PrintStream out;

String name;

int operation;

String password;

int amount;

FunnyMoney money;

// Tests d"arguments switch(args.length) { case 0 : port = DEFAULT_PORT; break; case 1 : try { port = Integer.parseInt (args[0]); } catch (NumberFormatException e) { port = DEFAULT_PORT; break; default : throw new IllegalArgumentException ("Syntaxe : java BankServerSocket []"); // Creation de socket serveur System.out.println ("Demarrage sur le port " + port); server = new ServerSocket (port);

System.out.println ("En ecoute ...");

BankServerSocket bank = new BankServerSocket();

// Boucle generale et service while (true) { // Acceptation de connexion client = server.accept(); System.out.println ("Connexion a " + client.getInetAddress() + " acceptee");

System.out.flush();

// Capture des flux de reception et d"envoi in = new DataInputStream(client.getInputStream()); out = new PrintStream(client.getOutputStream()); // TRAITEMENT DU SERVICE while (true) { // lire une ligne lineRecieved = in.readLine(); if ((lineRecieved == null)) break;

Hugues

MOUNIER7

Examen Java FIUPSO 3/DESS 2001/2002

BankSocketPacket toUnfold = new BankSocketPacket(null, 0, null, 0); toUnfold.unfoldPacket(lineRecieved); name = toUnfold.name; operation = toUnfold.operation; password = toUnfold.password; amount = toUnfold.amount; switch(operation) { case BankSocketPacket.OPEN : bank.openAccount(name, password); bank.sendPacket("noname", transCode, "nopass", 0, out); break; case BankSocketPacket.CLOSE : money = bank.closeAccount(name, password); bank.sendPacket(name, transCode, password, money.amount, out); break; case BankSocketPacket.DEPOSIT : money = new FunnyMoney(amount); bank.deposit(name, password, money); bank.sendPacket(name, transCode, password, money.amount, out); break; case BankSocketPacket.WITHDRAW : money = bank.withdraw(name, password, amount); bank.sendPacket(name, transCode, password, money.amount, out); break; case BankSocketPacket.BALANCE : int amt = bank.getBalance(name, password); bank.sendPacket(name, transCode, password, amt, out); break; case BankSocketPacket.QUIT : System.out.println ("Fermeture des socket client & serveur"); client.close (); server.close ();

System.exit(0);

if (lineRecieved == null) { // Sortie du service : le client a termine System.out.println ("Fermeture de socket client"); client.close (); }// while(true) }/* main() */ }// BankServerSocket try { catch (Exception e) {

System.err.println(e);

System.err.println("Utilisation : java BankServerSocket");

System.exit(1); // On sort

Hugues

MOUNIER8

Examen Java FIUPSO 3/DESS 2001/2002

Solution de l"ex. 4

´Elaboration du client

Une solution possible est la suivante:

// Gestion simpliste de banque en sockets : client // Historique a terminer ?? import java.util.*; import java.io.*; import java.net.*; * Classes conteneur : * - FunnyMoney la monnaie utilisee * Cette classe simple represente un montant monetaire. N"est qu"un emballage * d"un entier. class FunnyMoney { public int amount; public FunnyMoney(int amount) { this.amount = amount; } * Client simple interagissant avec un serveur public class BankSocket { // Variables de classe constantes : port et machine par defaut public static final int DEFAULT_PORT = 6789; public static final String DEFAULT_HOST = "localhost"; // Methode utilitaire de saisie public static String getName(BufferedReader in) {

String name = null;

try { System.out.println("Veuillez entrer le nom du compte : "); name = new String(in.readLine().toLowerCase()); } catch (IOException e) {

System.err.println("Erreur en readLine()");

return name; // Methode utilitaire de saisie public static String getPassword(BufferedReader in) {

String password = null;

try { System.out.println("Veuillez entrer le mot de passe : ");

Hugues

MOUNIER9

Examen Java FIUPSO 3/DESS 2001/2002

password = new String(in.readLine().toLowerCase()); } catch (IOException e) {

System.err.println("Erreur en readLine()");

return password; // Methode utilitaire de gestion d"erreur static void treatError(int errorNb) { switch(errorNb) { case BankSocketPacket.EXISTANT :

System.out.println("Le compte existe deja");

break; case BankSocketPacket.NONEXISTANT :

System.out.println("Compte inexistant");

break; case BankSocketPacket.INVPASSWORD :

System.out.println("Mot de passe invalide");

break; case BankSocketPacket.NEGBALANCE :

System.out.println("Solde insuffisant");

break; // Methode utilitaire d"envoi/reception de paquet static BankSocketPacket sendReceive(BankSocketPacket toSend, DataInputStream sin, PrintStream sout, String message) { BankSocketPacket unfolded = new BankSocketPacket(null, 0, null, 0);

String lineTosend = toSend.foldPacket();

sout.println(lineTosend); try {

String lineRecieved = sin.readLine();

if (lineRecieved != null) { unfolded.unfoldPacket(lineRecieved); if (unfolded.operation == BankSocketPacket.TRANSOK)

System.out.println(message);

else treatError(unfolded.operation); } else {

System.out.println("Serveur arrete ; sortie");

System.exit(1);

} catch (IOException e) { System.out.println("Erreur en reception de paquet : " + e.toString());

System.exit(1);

return(unfolded); * Programme client public static void main(String[] args) {

Hugues

MOUNIER10

Examen Java FIUPSO 3/DESS 2001/2002

try {

String host = null; // Machine du serveur

int port; // No de port du serveur (no de service)

Socket s = null; // Reference a la socket client

DataInputStream sin = null; // Flux en provenance du serveur PrintStream sout = null; // Flux a destination du serveurquotesdbs_dbs1.pdfusesText_1