Java: Correction Roger Bricoloto

 

Classe Util

Cette classe rassemble les fonctions qui permettent de saisir des données au clavier.
 
import java.io.*;
 
public class Util {
 
    public static String lireChaine(String prompt) {
      BufferedReader entree = new BufferedReader(new InputStreamReader(System.in));
     String s = null;
     System.out.print(prompt);
     try {
        s = entree.readLine();
     } catch (IOException e) {
        System.out.println("Erreur d'entre/sortie clavier");
     }
     return s;
    }
 
    public static String lireChaine() {
     return lireChaine("? > ");
    }
 
    public static int lireEntier(String prompt, String erreur) {
     int i=0;
     boolean iOk=false;
     while (!iOk) {
        try {
          i = Integer.parseInt(lireChaine(prompt));
          iOk=true;
        } catch (NumberFormatException e) {
          System.out.println(erreur);
        }
     }
     return i;
    }
 
    public static int lireEntier(String prompt) {
     return lireEntier(prompt, "Saisie incorrecte");
    }
 
    public static int lireEntier() {
     return lireEntier("entier ? > ");
    }
 
    public static boolean lireOuiNon(String prompt, String erreur) {
      String s = lireChaine(prompt);
      while (!s.equalsIgnoreCase("o")&&!s.equalsIgnoreCase("n")) {
        System.out.println(erreur);
        s = lireChaine(prompt);
      }
      return s.equalsIgnoreCase("o");
    }
 
    public static boolean lireOuiNon(String prompt) {
       return lireOuiNon(prompt, "Rpondez \"o\" ou \"n\"");
    }
 
    public static boolean lireOuiNon() {
       return lireOuiNon("o/n ? >");
    }
}
 
 

Classe Reparation

public class Reparation {
    private String date;
    private String motif;
 
    public Reparation(String date, String motif) {
       this.date = date;
       this.motif = motif;
    }
 
    public Reparation() {
      this(Util.lireChaine("Date de la rparation  : "),
      Util.lireChaine("Motif de la rparation : "));
    }
 
    public String toString() {
      return "[REPARATION] date : "+ date + " ; motif : "+ motif;
    }
 
}
 

Classe Voiture

 
public class Voiture extends Reparation {
 
    private String ct;
 
    public Voiture(String date, String motif, String ct) {
      super(date, motif);
      this.ct = ct;
    }
 
    public Voiture() {
      super();
      this.ct = Util.lireChaine("Date du dernier CT     : ");
    }
 
    public String toString() {
      return super.toString()+" ; dernier CT : "+ct;
    }
 
}
 

Classe Moto

public class Moto extends Reparation {
 
    private boolean sd;
 
    public Moto(String date, String motif, boolean sd) {
      super(date, motif);
      this.sd = sd;
    }
 
    public Moto() {
      super();
      this.sd = Util.lireOuiNon("Side car ? [o/n]       : ");
    }
 
    public String toString() {
      return super.toString()+" ; moto "+   (sd ? "avec" : "sans")+" side-car";
    }
}

Classe Garage

import java.util.*;
 
public class Garage {
 
    public String nom;
    public String adresse;
    private ArrayList reparations;
 
    public Garage(String nom, String adresse) {
      this.nom = nom;
      this.adresse = adresse;
      reparations = new ArrayList();
    }
 
    public Garage () {
      this(Util.lireChaine("Nom du garage     : "),
      Util.lireChaine("Adresse du garage : "));
    }
 
    public void ajouterRep() {
      Reparation r;
      if (Util.lireOuiNon("S'agit-il d'une moto ? "))
         r = new Moto();
      else
        r = new Voiture();
      reparations.add(r);
    }
    
    public boolean supprimerRep(int i) {
      if (i<0 || i>=reparations.size()) return false;
      reparations.remove(i);
      return true;
    }
 
    public String toString() {
       StringBuffer res = new StringBuffer("[[GARAGE]] nom : " +nom+" ; adresse : "+adresse);
       for (int i=0; i<reparations.size(); i++)
         res.append("\n    ("+i+") "+reparations.get(i));
       return res.toString();
    }
}
 

Classe Societe

Cette classe permet de gérer un ensemble de garages.
 
import java.util.*;
 
public class Societe {
 
    private String nom;
    private String adresse;
    private ArrayList garages;
 
    public Societe(String nom, String adresse) {
      this.nom = nom;
      this.adresse = adresse;
      garages = new ArrayList();
    }
 
    public Societe () {
      this(Util.lireChaine("Nom de la socit       : "),
      Util.lireChaine("Adresse du sige social : "));
    }
 
    private int chercherNumGar(String nom) {
      for (int i=0; i<garages.size(); i++)
        if (((Garage)garages.get(i)).nom.equals(nom)) return i;
      return -1;
    }
 
    public boolean ajouterGar() {
      Garage g = new Garage();
      if (chercherNumGar(g.nom)!=-1) return false;
      garages.add(g);
      return true;
    }
    
    public boolean supprimerGar(String nom) {
      int g = chercherNumGar(nom);
      if (g==-1) return false;
      garages.remove(g);
      return true;
    }
 
    public Garage chercherGar(String nom) {
      int g = chercherNumGar(nom);
      if (g==-1) return null;
      return (Garage)garages.get(g);
    }
 
    public boolean ajouterRep(String nom) {
      Garage g = chercherGar(nom);
      if (g==null) return false;
      g.ajouterRep();
      return true;
    }
 
    public boolean supprimerRep(String nom, int i) {
      Garage g = chercherGar(nom);
      if (g==null) return false;
      return g.supprimerRep(i);
    }
 
    public String toString() {
      StringBuffer res = new StringBuffer("[[[SOCIETE]]] nom : " +nom+" adresse : " +adresse);
      for (int i=0; i<garages.size(); i++)
        res.append("\n  ("+i+") "+garages.get(i));
      return res.toString();
    }
}
 

Classe AppliRoger

Cette classe représente la société de Roger. Elle permet de manipuler un objet de la classe Societe et met en oeuvre un dialogue avec l'utilisateur par l'intermédiaire d'un menu interactif.
 
public class AppliRoger {
 
    public static String menu =
"==================================================\n"+
"1) Lister les garages\n"+
"2) Ajouter un garage\n"+
"3) Supprimer un garage\n"+
"4) Chercher un garage\n"+
"5) Ajouter une rparation\n"+
"6) Supprimer une rparation\n"+
"7) Quitter\n";
    
    public static void main(String[] args) {
      Societe roger = new Societe();
      int choix=0;
      while (choix!=7) {
        System.out.println(menu);
        choix = Util.lireEntier("=> ");
        while (choix<1||choix>7) {
          System.out.println("Saisie incorrecte");
          choix = Util.lireEntier("=> ");
        }
        System.out.println ("==================================================");
        switch (choix) {
          case 1 :System.out.println(roger); break;
          case 2 : 
            if (roger.ajouterGar()) System.out.println("Ok.");
            else System.out.println("Nom dj existant");
            break;
          case 3 :
            if (roger.supprimerGar(Util.lireChaine ("Nom du garage  supprimer : ")))
              System.out.println("Ok.");
            else System.out.println("Nom incorrect.");
            break;
          case 4 :
            Garage g = roger.chercherGar(Util.lireChaine ("Nom du garage recherché: "));
              if (g==null) System.out.println("Aucun garage ne porte ce nom.");
              else System.out.println("Rsultat de la recherche :\n"+g);
            break;
          case 5 :
            if (roger.ajouterRep(Util.lireChaine ("Nom du garage concern : ")))
              System.out.println("Ok.");
            else System.out.println("Nom incorrect.");
            break;
          case 6 :
            if (roger.supprimerRep(
              Util.lireChaine("Nom du garage concerné : "),
              Util.lireEntier("Numéro de la réparation  supprimé : ")))
              System.out.println("Ok.");
            else System.out.println("Nom ou numro incorrect.");
            break;
          }
       }
    }
}