[PDF] Examen de Java Correction 1 févr. 2002 Les





Previous PDF Next 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 



QCM de Java corrigé

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 ( 



Exercices de Programmation Orientée Objet en Java

Un sujet d'examen est une liste de questions (de QCM ou autre) avec un barême. corrections et indiquez quel sera l'affichage lors de l'exécution une ...



Examen 2009-2010 - Durée : 2h

CORRECTION. CORRECTION. UHP Nanc TestVisibility.java. 1 package fr.esial; ... Dans le cas o`u il y aurait plusieurs Ingredient avec la même.



Examen de Java Correction

1 févr. 2002 Les sources java répondant `a chaque exercice et seulement les sources seront ... Ouvre un compte avec le nom et le mot de passe specifie.



Correction Examen POO janvier 2003

Correction Examen POO janvier 2003. Exercice 1 : import java.util.*; public class CompteCheque implements Compte { private float autorisationDecouvert;.



Examen 2012-2013 - Durée : 1h30

Examen 2012-2013 - Durée : 1h30. CORRECTION. CORRECTION. > Question 4. (1 pt). Considérer l'extrait de code Java suivant : 1. String example = "Hi girls!";.



175 exercices corrigés - Couvre Java 8 (Noire) (French Edition)

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



CORRECTION 1 PARTIE : COURS (sans document) 1. QCM (35

Vous avez droit à 4 points négatifs sans pénalité. Page 2. Examen 1ère session 2015-2016 page 2. NFA 031 - Programmation JAVA.



Examen RMI (GMI FC)

Les exercices de cet examen portent tous sur le syst`eme RMI de Java. L'interaction avec les autres candidats n'est pas autorisée ! Exercice 1 :.

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
[PDF] examen javascript corrigé

[PDF] examen juge arbitre athletisme

[PDF] examen logique combinatoire

[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

[PDF] examen ministère 4e année primaire 2015

[PDF] examen nederlands email schrijven