Exercice06_MediathequeRetourTélécharger Exercice d'application des ArrayList.Construction d'un programme de gestion d'un médiathèque en deux étapes permettant d'emprunter un média. EnonceExercice06.pdf Etape1 Emprunteur.java import java.util.*; public class Emprunteur { /** Numéro de carte d'adhérant. */ private int numero; /** Nom de l'emprunteur */ private String nom; /** Prenom de l'emprunteur */ private String prenom; /** Date de naissance. Format: JJ/MM/AAAA */ private String dateNaissance; /** Liste des médias empruntés. Chaque élément est l'ident du media. */ private ArrayList<String> mediaEmpruntes; //======================================================================= // Constructeur public Emprunteur(String nom, String prenom, String dateNaissance) { this.numero=0; // Le numero sera initialisé par la médiathèque a l'ajout this.nom=nom; this.prenom=prenom; this.dateNaissance=dateNaissance; this.mediaEmpruntes = new ArrayList<String>(); // Liste vide } //======================================================================= public int getNumero(){return numero;} public void setNumero(int n){numero=n;} //======================================================================= // Emprunteur sous la forme de chaine public String toString() { String emprunts=""; for(String m:mediaEmpruntes) emprunts= emprunts + m; return this.numero + "\n" + this.prenom + "\n" + this.nom + "\n" + this.dateNaissance + "\n" + emprunts; } } MainEtape1.java import java.util.*; /* Cette classe est le programme principal qui permet de tester la classe Mediatheque qui permet de gére des médias. */ public class MainEtape1 { static public void main(String... args) { // Création de la médiathèque Mediatheque mediatheque = new Mediatheque(); //Ajout de plusieurs médias mediatheque.ajouterMedia("LIVRE", "ROMAN", "Les cavernes d'acier"); mediatheque.ajouterMedia("LIVRE", "ROMAN", "Face au feux du soleil"); mediatheque.ajouterMedia("LIVRE", "ROMAN", "Harry Potter : La pierre philosophale"); mediatheque.ajouterMedia("DVD", "Aventure", "Inception"); mediatheque.ajouterMedia("DVD", "Aventure", "Harry Potter : L'apprenti sorcier"); // Création de 3 emprunteurs et ajout dans la médiatèque Emprunteur e1 = new Emprunteur("LAFONT","Paul","31/10/1979"); Emprunteur e2 = new Emprunteur("ABBE","Zoe","01/12/1985"); Emprunteur e3 = new Emprunteur("ROUFAT","Martin","02/03/1965"); mediatheque.ajouterInscrit(e1); mediatheque.ajouterInscrit(e2); mediatheque.ajouterInscrit(e3); // Afficage à l'écran de la médiathèque mediatheque.afficher(); } } Media.java public class Media { /** Identification du media. Cet identificateur est unique pour chaque média. */ private String ident; /** Catégorie d'appartenance du média (ex: LIVRE, DVD, ...). Cette catégorie permet de faciliter le choix de média. */ private String categorie; /** SousCatégorie d'appartenance du média. Cette information peutêtre vide. (ex: pour les LIVRE : ROMAN, BIBLIO, SCIENCE. Pour les DVD : FILM, SERIE, REPORTAGE, ...) Cette catégorie permet de faciliter le choix de média. */ private String sousCategorie; /** Tout média a une description courte permettant de savoir ce que c'est. Cette description est une chaîne courte. */ private String description; /** si différent de null, le numero d'inscrption de l'emprunteur */ private int emprunteur; /** La date d'emprunt */ private String dateEmprunt; //======================================================================= // Constructeur d'un media public Media(String ident, String categorie, String sousCategorie, String description) { this.ident = ident; this.categorie = categorie; this.sousCategorie = sousCategorie; this.description = description; this.emprunteur = 0; this.dateEmprunt = null; } //======================================================================= // Le media sous forme de chaine public String toString() { return this.ident + "\n" + this.categorie + "\n" + this.sousCategorie + "\n" + this.description + "\n" + this.emprunteur; } } Mediatheque.java import java.util.*; public class Mediatheque { /** La liste des medias. */ private ArrayList<Media> medias; /** La liste des inscrits à la médiathèque */ private ArrayList<Emprunteur> inscrits; /** Compteur courant des medias */ private int compteurMedia; //======================================================================= // Constructeur de la médiathèqe // public Mediatheque() { this.medias = new ArrayList<Media>(); this.inscrits = new ArrayList<Emprunteur>(); this.compteurMedia=1; } //======================================================================= // Méthode qui ajoute un nouveau média à la médiathèque // public void ajouterMedia(String categorie, String sousCategorie, String description) { // On consruit l'identificateur Calendar date = Calendar.getInstance(); int annee = date.get(Calendar.YEAR); int mois = date.get(Calendar.MONTH); String ident = String.format("%d-%d-%d",annee,mois,compteurMedia); // On incrémente le compteur pour la prochaine création compteurMedia++; // Création du média Media m = new Media(ident, categorie, sousCategorie, description); // Ajout du média dans la collection des médias de la médiathèque medias.add(m); } //======================================================================= // Méthode qui ajoute un emprunteur à la médiathèque // Le numéro d'inscription est plus 1 sur le dernier numéro. // public void ajouterInscrit(Emprunteur e) { e.setNumero(getNumeroInscrit()); inscrits.add(e); } //======================================================================= // Affiche dans la console le contenu de la médiathèque : // - la liste des médias // - la liste des inscrits // public void afficher() { Terminal.ecrireStringln("Les medias de la mediatheque :"); for(Media m:medias) { Terminal.ecrireStringln(m.toString()); Terminal.ecrireStringln("-------------------------"); } Terminal.ecrireStringln("Les inscrits de la mediatheque :"); for(Emprunteur e:inscrits) { Terminal.ecrireStringln(e.toString()); Terminal.ecrireStringln("-------------------------"); } } //======================================================================= //======================================================================= //======================================================================= // Cette méthode retourne le numéro d'inscription le plus haut + 1 // Ce numéro est utilisé pour inscrire un nouvel emprunteur. // private int getNumeroInscrit() { if (inscrits.size()==0) return 1; int max=inscrits.get(0).getNumero(); for(Emprunteur e:inscrits) if(e.getNumero()>max) max=e.getNumero(); return max+1; } } Terminal.java import java.io.*; import java.util.*; /** La classe terminal permet de réaliser ses premiers programmes Java en permettant d'afficher dans la console d'exécution des données de type différents, et en permettant de saisir au clavier des données de type différents.<BR> Elle permet aussi de lire et écrire un fichier texte Cette classe contient que des méthodes statiques. */ public class Terminal{ // Le buffer standard de lecture = le clavier private static BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); /** Cette méthode lit un fichier texte et retourne un le contenu du fichier sous la forme d'un StringBuffer. @param nomFichier le nom du fichier qui doit être dans le répertoire courant. @return StringBuffer le contenu du fichier. @exception TerminalException (de type RuntimeException) si erreur d'écriture<BR> Rappel : Une exception de type RuntimeException n'a pas l'obligation d'être capturée. */ public static StringBuffer lireFichier(String nomFichier) { try{ File fichier = new File(nomFichier); FileInputStream fis = new FileInputStream(new File(nomFichier)); byte[] buffer = new byte[(int)fichier.length()]; fis.read(buffer); fis.close(); return(new StringBuffer(new String(buffer))); } catch(Exception ex) { exceptionHandler(ex); } return null; } /** Cette méthode permet de créer un fichier texte à partir du contenu d'un StringBuffer. @param nomFichier Le nom du fichier qui est créé dans le répertoire courant @param strbuf Le StringBuffer contenant le texte à écrire. @exception TerminalException (de type RuntimeException) si erreur d'écriture */ public static void ecrireFichier(String nomFichier, StringBuffer strbuf) { try{ File fichier = new File(nomFichier); FileOutputStream fos = new FileOutputStream(new File(nomFichier)); byte[] buffer = strbuf.toString().getBytes(); fos.write(buffer); fos.close(); } catch(Exception ex) { exceptionHandler(ex); } } /** Cette méthode lit une chaîne de caractère @return String la chaîne saisie dans la console d'exécution @exception TerminalException (de type RuntimeException) si erreur de lecture */ public static String lireString() // Lire un String { String tmp=""; char C='\0'; try { tmp = in.readLine(); } catch (IOException e) { exceptionHandler(e); } return tmp; } /** Cette méthode lit un entier @return int L'entier saisi dans la console d'exécution @exception TerminalException (de type RuntimeException) si la saisie n'est pas un entier ou erreur de lecture */ public static int lireInt() // Lire un entier { int x=0; try { x=Integer.parseInt(lireString()); } catch (NumberFormatException e) { exceptionHandler(e); } return x ; } /** Cette méthode lit un boolean (false ou true) @return boolean Le boolean saisi dans la console d'exécution @exception TerminalException (de type RuntimeException) si erreur de lecture. <BR> Tout autre valeur que TRUE, FALSE, true ou false, retourne la valeur false */ public static boolean lireBoolean() // Lire un entier { boolean b = true; try { b = Boolean.valueOf(lireString()).booleanValue(); } catch (NumberFormatException e) { exceptionHandler(e); } return b; } /** Cette méthode lit un double @return double Le double saisi dans la console d'exécution @exception TerminalException (de type RuntimeException) si la valeur saisie n'est pas un double ou ereur de lecture. */ public static double lireDouble() // Lire un double { double x=0.0; try { x=Double.valueOf(lireString()).doubleValue(); } catch (NumberFormatException e) { exceptionHandler(e); } return x ; } /** Cette méthode lit un caractère. @exception TerminalException (de type RuntimeException) si erreur de lecture.<BR> Si on saisit plus d'1 caractère alors le caractère retourné est le premier. */ public static char lireChar() // Lire un caractere { String tmp=lireString(); if (tmp.length()==0) return '\n'; else { return tmp.charAt(0); } } /** Cette méthode ecrit une chaine et ne revient pas à la ligne. */ public static void ecrireString(String s){ // Afficher un String System.out.print(s); } /** Cette méthode écrit une chaine et revient à la ligne. */ public static void ecrireStringln(String s) // Afficher un String { ecrireString(s); sautDeLigne(); } /** Cette méthode ecrit un entier et ne revient pas à la ligne. */ public static void ecrireInt(int i) // Afficher un entier { ecrireString(""+i); } /** Cette méthode écrit un entier et revient à la ligne. */ public static void ecrireIntln(int i) // Afficher un entier { ecrireString(""+i); sautDeLigne(); } /** Cette méthode écrit un booléan et ne revient pas à la ligne. */ public static void ecrireBoolean(boolean b){ ecrireString(""+b); } /** Cette méthode écrit un booléan et revient à la line. */ public static void ecrireBooleanln(boolean b){ ecrireString(""+b); sautDeLigne(); } /** Cette méthode écrit un double et ne revient pas à la ligne. */ public static void ecrireDouble(double d) // Afficher un double { ecrireString(""+d); } /** Cette méthode écrit un double et revient à la ligne. */ public static void ecrireDoubleln(double d) // Afficher un double { ecrireDouble(d); sautDeLigne(); } /** Cette méthode écrit un caractère et ne revient pas à la ligne. */ public static void ecrireChar(char c) // Afficher un caractere { ecrireString(""+c); } /** Cette méthode écrit un caractère et revient à la ligne. */ public static void ecrireCharln(char c) // Afficher un caractere { ecrireChar(c); sautDeLigne(); } /** Cette méthode revient à la ligne. */ public static void sautDeLigne(){ try{ System.out.println(); }catch(Exception ex){ exceptionHandler(ex); } } /** Cette méthode retourne l'exception TerminalException */ protected static void exceptionHandler(Exception ex){ TerminalException err = new TerminalException(ex); throw err; } /** Cette méthode écrit l'exception */ public static void ecrireException(Throwable ex){ ecrireString(ex.toString()); ex.printStackTrace(System.err); } } /** Classe de définition de l'exception TerminalException qui peut être retournée dans l'usage des méthodes de la classe Terminal. */ class TerminalException extends RuntimeException{ Exception ex; TerminalException(Exception e){ ex = e; } } compil.bat mkdir bin del /f /s /q bin\*.class javac -d bin *.java pause run.bat cd bin java MainEtape1 pause Etape2 Emprunteur.java import java.util.*; public class Emprunteur { /** Numéro de carte d'adhérant. */ private int numero; /** Nom de l'emprunteur */ private String nom; /** Prenom de l'emprunteur */ private String prenom; /** Date de naissance. Format: JJ/MM/AAAA */ private String dateNaissance; /** Liste des médias empruntés. Chaque élément est l'ident du media. */ private ArrayList<String> mediaEmpruntes; //======================================================================= // Constructeur d'un emprunteur public Emprunteur(String nom, String prenom, String dateNaissance) { this.numero=0; // Le numero est initialisé par la médiathèque this.nom=nom; this.prenom=prenom; this.dateNaissance=dateNaissance; this.mediaEmpruntes = new ArrayList<String>(); } //======================================================================= // Constructeur utilisé pour recherche un emprunteur en fonction // de son numéro d'inscription // public Emprunteur(int numero) { this.numero=numero; } //======================================================================= public int getNumero(){return numero;} public void setNumero(int n){numero=n;} public String getNom(){return nom;} public String getPrenom(){return prenom;} //======================================================================= public void addEmprunt(String identMedia) { mediaEmpruntes.add(identMedia); } //======================================================================= // Emprunteur sous forme de chaine // public String toString() { String emprunts="Les medias empruntes: "; for(String m:mediaEmpruntes) emprunts= emprunts + m; return this.numero + "\n" + this.prenom + "\n" + this.nom + "\n" + this.dateNaissance + "\n" + emprunts; } //======================================================================= // Méthode utilisé par indexOf pour rechercher un emprunteur. // Cette méthide teste si deux emprunteurs sont identiques. // Deux emprunteurs sont identiques s'ils ont le même numéro // public boolean equals(Object o) { Emprunteur e = (Emprunteur)o; return (e.numero==this.numero); } } MainEtape2.java import java.util.*; public class MainEtape2 { static public void main(String... args) { // Création de la médiathèque Mediatheque mediatheque = new Mediatheque(); // Création de plusieurs médias // mediatheque.ajouterMedia("LIVRE", "ROMAN", "Les cavernes d'acier"); mediatheque.ajouterMedia("LIVRE", "ROMAN", "Face au feux du soleil"); mediatheque.ajouterMedia("LIVRE", "ROMAN", "Harry Potter : La pierre philosophale"); mediatheque.ajouterMedia("DVD", "", "Les intouchables"); mediatheque.ajouterMedia("DVD", "", "Inception"); // Création et ajout de 3 emprunteurs // Emprunteur e1 = new Emprunteur("LAFONT","Paul","31/10/1979"); Emprunteur e2 = new Emprunteur("ABBE","Zoe","01/12/1985"); Emprunteur e3 = new Emprunteur("ROUFAT","Martin","02/03/1965"); mediatheque.ajouterInscrit(e1); mediatheque.ajouterInscrit(e2); mediatheque.ajouterInscrit(e3); // On affiche la médiathèque // mediatheque.afficher(); // On appelle la méthode qui permet d'emprunter un média par un emprunteur // Les saisies se font dans la console d'exécution // mediatheque.emprunterModeConsole(); // On affiche la médiathèque pour vérifier // mediatheque.afficher(); } } Media.java public class Media { /** Identification du media. Cet identificateur est unique pour chaque média. La nomenclature est : AAAA-MM-NNNNN où AAAA est l'année, MM est le mois et NNNNN est un numéro qui est incrémenté à chaque création du média Exemple : 2012-01-00012 */ private String ident; /** Catégorie d'appartenance du média (ex: LIVRE, DVD, ...). Cette catégorie permet de faciliter le choix de média. */ private String categorie; /** SousCatégorie d'appartenance du média. Cette information peutêtre vide. (ex: pour les LIVRE : ROMAN, BIBLIO, SCIENCE. Pour les DVD : FILM, SERIE, REPORTAGE, ...) Cette catégorie permet de faciliter le choix de média. */ private String sousCategorie; /** Tout média a une description courte permettant de savoir ce que c'est. Cette description est une chaîne courte. */ private String description; /** si différent de 0, le numero d'inscription de l'emprunteur */ private int emprunteur; /** La date d'emprunt */ private String dateEmprunt; //======================================================================= // Constructeur d'un media public Media(String ident, String categorie, String sousCategorie, String description) { this.ident = ident; this.categorie = categorie; this.sousCategorie = sousCategorie; this.description = description; this.emprunteur = 0; this.dateEmprunt = null; } //======================================================================= // Constructeur d'un média (Ce constructeur est utilisé pour rechercher // un média en fonciton de son identificateur // public Media(String ident) { this.ident = ident; } //======================================================================= public String getCategorie(){return categorie;} public String getSousCategorie(){return sousCategorie;} public String getDescription(){return description;} public void setEmprunteur(int numero){this.emprunteur=numero;} public void setDateEmprunt(String date){this.dateEmprunt=date;} //======================================================================= // Media sous forme de chaine // public String toString() { return this.ident + "\n" + this.categorie + "\n" + this.sousCategorie + "\n" + this.description + "\n" + this.emprunteur + "\n" + this.dateEmprunt; } //======================================================================= // Méthode utilisé par indexOf qui teste si deux médias sont identiques // Deux médias sont identiques s'ils ont même identificateur // public boolean equals(Object o) { Media m = (Media)o; return m.ident.equals(this.ident); } } Mediatheque.java import java.util.*; public class Mediatheque { /** La liste des medias. */ private ArrayList<Media> medias; /** La liste des inscrits à la médiathèque */ private ArrayList<Emprunteur> inscrits; /** Compteur courant des medias */ private int compteurMedia; //======================================================================= // Constructeur de la médiatèque public Mediatheque() { this.medias = new ArrayList<Media>(); this.inscrits = new ArrayList<Emprunteur>(); compteurMedia=1; } //======================================================================= // Méthode qui ajoute un nouveau média à la médiathèque // public void ajouterMedia(String categorie, String sousCategorie, String description) { // On consruit l'identificateur Calendar date = Calendar.getInstance(); int annee = date.get(Calendar.YEAR); int mois = date.get(Calendar.MONTH); String ident = String.format("%d-%d-%d",annee,mois,compteurMedia); // On incrémente le compteur pour la prochaine création compteurMedia++; // Création du média Media m = new Media(ident, categorie, sousCategorie, description); // Ajout du média dans la collection des médias de la médiathèque medias.add(m); } //======================================================================= // Méthode qui ajoute un emprunteur à la médiathèque // Le numéro d'inscription est plus 1 sur le dernier numéro. // public void ajouterInscrit(Emprunteur e) { e.setNumero(getNumeroInscrit()); inscrits.add(e); } //======================================================================= // Méthode qui permet d'emprunter un media dans la console // public void emprunterModeConsole() { // On affiche les emprunteurs en fonction d'un critère de recherche sur // le nom ou le prénom // Terminal.ecrireStringln("Choix de l'emprunteur"); Terminal.ecrireString("Saisir un mot qui est recherché dans le nom ou le prénom (\"exit\" pour arrêter) : "); String mot = Terminal.lireString(); while (! (mot.equals("exit"))) { for(Emprunteur e:this.inscrits) { if ( (e.getNom().toLowerCase().indexOf(mot.toLowerCase())!=-1) || (e.getPrenom().toLowerCase().indexOf(mot.toLowerCase())!=-1) ) { Terminal.ecrireStringln(e.toString()); } } Terminal.ecrireStringln("------------------------------"); Terminal.ecrireString("Nouvelle recherche: "); mot = Terminal.lireString(); } // Demande de saisie du numéro de l'emprunteur // Terminal.ecrireString("Numero de l'emprunteur: "); int numeroEmprunteur = Terminal.lireInt(); //On affiche les medias en fonction d'un critere de recherche sur // categorie, sous-catégorie ou description // Terminal.ecrireStringln("Choix du media"); Terminal.ecrireString("Saisir un mot qui est recherché dans la categorie, la sous-categorie ou la description (\"exit\" pour arrêter) : "); mot = Terminal.lireString(); while (! (mot.equals("exit"))) { for(Media e:this.medias) { if ( (e.getCategorie().toLowerCase().indexOf(mot.toLowerCase())!=-1) || (e.getSousCategorie().toLowerCase().indexOf(mot.toLowerCase())!=-1) || (e.getDescription().toLowerCase().indexOf(mot.toLowerCase())!=-1) ) { Terminal.ecrireStringln(e.toString()); } } Terminal.ecrireStringln("------------------------------"); Terminal.ecrireString("Nouvelle recherche: "); mot = Terminal.lireString(); } // Demance de saisie de l'identificateur du media // Terminal.ecrireString("Identificateur du media : "); String identMedia = Terminal.lireString(); // Appel du traitement d'emprunt d'un media par un emprunteur emprunter(identMedia,numeroEmprunteur); } //======================================================================= // Méthode d'emprunt : // identMedia : identificateur du média devant être emprunté // numeroEmprunteur : numéro d'inscription de l'emprunteur public void emprunter(String identMedia,int numeroEmprunteur) { // On recherche le média et l'emprunteur // Media mediaEmprunte = null; Emprunteur emprunteur = null; Media r = new Media(identMedia); int index = medias.indexOf(r); if (index==-1) { Terminal.ecrireStringln("********** Ce media " + identMedia + " n'existe pas"); return; } else { mediaEmprunte = medias.get(index); } Emprunteur e = new Emprunteur(numeroEmprunteur); index = inscrits.indexOf(e); if (index==-1) { Terminal.ecrireStringln("********** Cet emprunteur " + numeroEmprunteur + " n'existe pas"); return; } else { emprunteur = inscrits.get(index); } // Le média est emprunté par l'emprunteur // On renseigne le numéro de l'emprunteur mediaEmprunte.setEmprunteur(numeroEmprunteur); // On renseigne la date d'emprunt Calendar cal = Calendar.getInstance(); mediaEmprunte.setDateEmprunt(cal.get(Calendar.DAY_OF_MONTH)+"/"+cal.get(Calendar.MONTH)+"/"+cal.get(Calendar.YEAR)); // L'emprunteur a un média de plus emprunté // emprunteur.addEmprunt(identMedia); } //======================================================================= // Affiche dans la console le contenu de la médiathèque : // - la liste des médias // - la liste des inscrits // public void afficher() { Terminal.ecrireStringln("Les medias de la mediatheque :"); for(Media m:medias) { Terminal.ecrireStringln(m.toString()); Terminal.ecrireStringln("-------------------------"); } Terminal.ecrireStringln("Les inscrits de la mediatheque :"); for(Emprunteur e:inscrits) { Terminal.ecrireStringln(e.toString()); Terminal.ecrireStringln("-------------------------"); } } //======================================================================= //======================================================================= //======================================================================= // Cette méthode retourne le numéro d'inscription le plus haut + 1 // Ce numéro est utilisé pour inscrire un nouvel emprunteur. // private int getNumeroInscrit() { if (inscrits.size()==0) return 1; int max=inscrits.get(0).getNumero(); for(Emprunteur e:inscrits) if(e.getNumero()>max) max=e.getNumero(); return max+1; } } Terminal.java import java.io.*; import java.util.*; /** La classe terminal permet de réaliser ses premiers programmes Java en permettant d'afficher dans la console d'exécution des données de type différents, et en permettant de saisir au clavier des données de type différents.<BR> Elle permet aussi de lire et écrire un fichier texte Cette classe contient que des méthodes statiques. */ public class Terminal{ // Le buffer standard de lecture = le clavier private static BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); /** Cette méthode lit un fichier texte et retourne un le contenu du fichier sous la forme d'un StringBuffer. @param nomFichier le nom du fichier qui doit être dans le répertoire courant. @return StringBuffer le contenu du fichier. @exception TerminalException (de type RuntimeException) si erreur d'écriture<BR> Rappel : Une exception de type RuntimeException n'a pas l'obligation d'être capturée. */ public static StringBuffer lireFichier(String nomFichier) { try{ File fichier = new File(nomFichier); FileInputStream fis = new FileInputStream(new File(nomFichier)); byte[] buffer = new byte[(int)fichier.length()]; fis.read(buffer); fis.close(); return(new StringBuffer(new String(buffer))); } catch(Exception ex) { exceptionHandler(ex); } return null; } /** Cette méthode permet de créer un fichier texte à partir du contenu d'un StringBuffer. @param nomFichier Le nom du fichier qui est créé dans le répertoire courant @param strbuf Le StringBuffer contenant le texte à écrire. @exception TerminalException (de type RuntimeException) si erreur d'écriture */ public static void ecrireFichier(String nomFichier, StringBuffer strbuf) { try{ File fichier = new File(nomFichier); FileOutputStream fos = new FileOutputStream(new File(nomFichier)); byte[] buffer = strbuf.toString().getBytes(); fos.write(buffer); fos.close(); } catch(Exception ex) { exceptionHandler(ex); } } /** Cette méthode lit une chaîne de caractère @return String la chaîne saisie dans la console d'exécution @exception TerminalException (de type RuntimeException) si erreur de lecture */ public static String lireString() // Lire un String { String tmp=""; char C='\0'; try { tmp = in.readLine(); } catch (IOException e) { exceptionHandler(e); } return tmp; } /** Cette méthode lit un entier @return int L'entier saisi dans la console d'exécution @exception TerminalException (de type RuntimeException) si la saisie n'est pas un entier ou erreur de lecture */ public static int lireInt() // Lire un entier { int x=0; try { x=Integer.parseInt(lireString()); } catch (NumberFormatException e) { exceptionHandler(e); } return x ; } /** Cette méthode lit un boolean (false ou true) @return boolean Le boolean saisi dans la console d'exécution @exception TerminalException (de type RuntimeException) si erreur de lecture. <BR> Tout autre valeur que TRUE, FALSE, true ou false, retourne la valeur false */ public static boolean lireBoolean() // Lire un entier { boolean b = true; try { b = Boolean.valueOf(lireString()).booleanValue(); } catch (NumberFormatException e) { exceptionHandler(e); } return b; } /** Cette méthode lit un double @return double Le double saisi dans la console d'exécution @exception TerminalException (de type RuntimeException) si la valeur saisie n'est pas un double ou ereur de lecture. */ public static double lireDouble() // Lire un double { double x=0.0; try { x=Double.valueOf(lireString()).doubleValue(); } catch (NumberFormatException e) { exceptionHandler(e); } return x ; } /** Cette méthode lit un caractère. @exception TerminalException (de type RuntimeException) si erreur de lecture.<BR> Si on saisit plus d'1 caractère alors le caractère retourné est le premier. */ public static char lireChar() // Lire un caractere { String tmp=lireString(); if (tmp.length()==0) return '\n'; else { return tmp.charAt(0); } } /** Cette méthode ecrit une chaine et ne revient pas à la ligne. */ public static void ecrireString(String s){ // Afficher un String System.out.print(s); } /** Cette méthode écrit une chaine et revient à la ligne. */ public static void ecrireStringln(String s) // Afficher un String { ecrireString(s); sautDeLigne(); } /** Cette méthode ecrit un entier et ne revient pas à la ligne. */ public static void ecrireInt(int i) // Afficher un entier { ecrireString(""+i); } /** Cette méthode écrit un entier et revient à la ligne. */ public static void ecrireIntln(int i) // Afficher un entier { ecrireString(""+i); sautDeLigne(); } /** Cette méthode écrit un booléan et ne revient pas à la ligne. */ public static void ecrireBoolean(boolean b){ ecrireString(""+b); } /** Cette méthode écrit un booléan et revient à la line. */ public static void ecrireBooleanln(boolean b){ ecrireString(""+b); sautDeLigne(); } /** Cette méthode écrit un double et ne revient pas à la ligne. */ public static void ecrireDouble(double d) // Afficher un double { ecrireString(""+d); } /** Cette méthode écrit un double et revient à la ligne. */ public static void ecrireDoubleln(double d) // Afficher un double { ecrireDouble(d); sautDeLigne(); } /** Cette méthode écrit un caractère et ne revient pas à la ligne. */ public static void ecrireChar(char c) // Afficher un caractere { ecrireString(""+c); } /** Cette méthode écrit un caractère et revient à la ligne. */ public static void ecrireCharln(char c) // Afficher un caractere { ecrireChar(c); sautDeLigne(); } /** Cette méthode revient à la ligne. */ public static void sautDeLigne(){ try{ System.out.println(); }catch(Exception ex){ exceptionHandler(ex); } } /** Cette méthode retourne l'exception TerminalException */ protected static void exceptionHandler(Exception ex){ TerminalException err = new TerminalException(ex); throw err; } /** Cette méthode écrit l'exception */ public static void ecrireException(Throwable ex){ ecrireString(ex.toString()); ex.printStackTrace(System.err); } } /** Classe de définition de l'exception TerminalException qui peut être retournée dans l'usage des méthodes de la classe Terminal. */ class TerminalException extends RuntimeException{ Exception ex; TerminalException(Exception e){ ex = e; } } compil.bat mkdir bin del /f /s /q bin\*.class javac -d bin *.java pause run.bat cd bin java MainEtape2 pause