IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

besoin d'aide pour mon programme


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut besoin d'aide pour mon programme
    Bonjour,
    J'ai fait un programme java pour faire un annuaire mais il y a quelques erreurs.
    - J'ai créé une fonction modify dans la classe Bdd pour pouvoir changer le nom de la personne. Cependant, lorsque je change le nom de la personne, le nouveau nom ne s'enregistre pas. Peut etre faut-il supprimer l'autre avant ???
    Est ce que quelqu'un pourrait m'aider ?
    Voici mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import java.io.Serializable;
     
    public class Article implements Serializable
    { private static final long serialVersionUID = -7871316436220619545L;
     
      String nom;
      String prenom;
      int num_rue;
      String adresse;
      int code_postal;
      String ville;
      String adresse_mail;
      int portable;
      int fixe;
      int travail;
      int fax; 
     
      public Article(String n, String p, int u, String a, int c, String v, String m, int po, int f, int t, int f2)
      {nom = n; prenom = p; num_rue = u; adresse = a; code_postal = c; ville = v; adresse_mail = m;portable = po; fixe = f; travail = t; fax = f2;}
     
      public String toString()
      { return nom+"  "+prenom+" "+num_rue+" "+adresse+" "+code_postal+" "+ville+" "+adresse_mail; }}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    import java.io.*;
    import java.util.*;
     
    public class Bdd implements Serializable
    {
      private static final long serialVersionUID = -2840911939125432267L;
      // La bdd est mémorisée dans un dictionnaire
      Map                       map;
     
     
      public Bdd()
      {
        map = new TreeMap(); // ou HashMap (plus rapide mais clé non triées)
      }
      /**
       * Affiche la bdd
       * Représentation textuelle de la bdd
       */
      public String toString()
      {
        Article unArticle;
        Set ts = map.keySet();
        Iterator it = ts.iterator();
        String sBdd = "--------------------------------------------------------------------------------\r\n";
        while (it.hasNext())
        {
          unArticle = (Article) map.get(it.next());
          sBdd += unArticle + "\r\n";
        }
        sBdd +=      "--------------------------------------------------------------------------------";
        return (sBdd);
      }
      /**
       * Ajoute un article dans la bdd
       * @param article : enregistrement à ajouter
       * @return true si l'enregistrement ne figure pas dans la bdd
       */
      public boolean add(Article article)
      {
        if (!map.containsKey(article.nom))
        {
          map.put(article.nom, article);
          return true;
        }
        else System.out.println ("Ce nom est déjà référencié.");
    	return false;
      }
     
      /**
       * Retourne un enregistrement de la bdd
       * @param keys : élément identifiant l'enregistrement
     * @return 
       */ 
      public Article getArticle(String nom)
      {
        Article unArticle = (Article) map.get(nom);
        if (unArticle == null) System.out.print("Pas de fiche référencée pour le  nom :" + nom);
    	return unArticle;
      }
     
      /**
       * Supprime un enregistrement de la bdd
       * @param keys : élément identifiant l'enregistrement
       * @return : true si l'enregistrement figure dans la bdd
       */
      public boolean remove(Article article)
      {
        if (map.containsKey(article))
        {
          map.remove(article);
          return true;
        }
        return false;
      }
     
      /**
       * Modifie un élément de l'enregistrement
       * @param ref : référence de l'enregistrement
       * @param id : numéro du champ dans l'enregistrement
       * @param o : valeur à modifier
       * @return true si l'enregistrement figure dans la bdd
       */
      public Article modify (String nom, int id, Object o)
      {
        if (map.containsKey(nom))
        {
          Article unArticle = (Article) map.get(nom);
          map.remove(nom);
          switch (id)
          {
            case 1 : unArticle.nom = (String)o; break; 
            case 2 : unArticle.fixe= ((Integer)o).intValue(); break;
            default:  System.out.println("Entrez un autre choix.");
            break;               
          }
          map.put(nom,unArticle);
          return unArticle;
        }
    	return null;
      }
     
      /**
       * Enregistre la base de données
       * @param bdd
       * @throws IOException
       */
    public static void write(Bdd bdd) throws IOException
      {
       ObjectOutputStream ofW = new ObjectOutputStream(new FileOutputStream(
       "Data.dat"));
       ofW.writeObject(bdd);
     
       ofW.close();
      }
     
    	/**
             * Supprime la base de données
             */
    public Bdd clear()
    {
    	return null;	
    }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    import java.io.*;
    import java.util.Vector;
     
    public class Test
    {
      public static Bdd read() throws IOException, ClassNotFoundException
      {
        ObjectInputStream ofR = new ObjectInputStream(new FileInputStream(
            "Data.dat"));
        return (Bdd) ofR.readObject();
      }
     
      public static void write(Bdd bdd) throws IOException
      {
        ObjectOutputStream ofW = new ObjectOutputStream(new FileOutputStream(
            "Data.dat"));
        ofW.writeObject(bdd);
      }
     
      public static void main(String[] args)
      {
        String nom;
        String prenom;
        int num_rue;
        String adresse;
        int code_postal;
        String ville;
        String adresse_mail;
        int portable;
        int fixe;
        int travail;
        int fax;
     
    Vector vpers = new Vector();
        Bdd bdd = new Bdd();
        while(true)
        {
          try
          {
            while (true)
            {
                System.out.println("1 : Ajouter article");
                System.out.println("2 : Retirer article");
                System.out.println("3 : Modifier article");
                System.out.println("4 : Afficher la base de donnée");
                System.out.println("5 : Afficher un article");
                System.out.println("6 : Effacer la base de donnée");
     
                switch (KeyBoard.readChar("1, 2, 3, 4, 5, 6, ? "))  
                {
                case '1':
                    nom = KeyBoard.readString("Nom : ");
                    prenom = KeyBoard.readString("Prénom : ");
                    num_rue = KeyBoard.readInt("Numéro de rue : ");
                    adresse = KeyBoard.readString("Adresse : ");
                    code_postal = KeyBoard.readInt("Code postal : ");
                    ville = KeyBoard.readString("Ville : ");
                    adresse_mail = KeyBoard.readString("Adresse mail : ");
                    portable = KeyBoard.readInt("Numéro de téléphone portable : ");
                    fixe = KeyBoard.readInt("Numéro de téléphone domicile : ");
                    travail = KeyBoard.readInt("Numéro de téléphone travail : ");
                    fax = KeyBoard.readInt("Numéro de téléphone fax : ");
                    bdd.add(new Article(nom, prenom, num_rue, adresse, code_postal, ville, adresse_mail, portable, fixe, travail, fax));
                    // Ajoute la nouvelle fiche dans la base de donnée
                    write(bdd);   // Enregistre la nouvelle fiche dans la base de donnée
                    break;
                case '2':
                  nom = KeyBoard.readString("nom de la personne recherchée : ");
                  System.out.println("Etes-vous sur de vouloir supprimer : " + bdd.getArticle(nom)+ "  ? O/N " );
                  boolean del = KeyBoard.readOuiNon();
                  if (del  = true)
                	  {
                	  bdd.remove(bdd.getArticle(nom));  // Supprime l'article
                	  System.out.println("Article retiré");   
                	  write(bdd);   // Enregistre les modifications
                	  }
                  else System.out.print(" Action annulée");
                  break;
                case '3':
                  nom = KeyBoard.readString("nom de la personne recherchée : ");
                  System.out.println(bdd.getArticle(nom));
                  int champ = KeyBoard.readInt("champ à modifier ?(1 pour nom, 2 pour téléphone fixe) ");
                  switch (champ)
                  {
                    case 1 : nom = KeyBoard.readString("nom : ");
                    bdd.modify(nom, 1, nom);
                    write(bdd);		// Enregistre les modifications
                    break;
                    case 2 : fixe = KeyBoard.readInt("fixe : ");
                    bdd.modify(nom, 2, new Integer(fixe));
                    write(bdd);    // Enregistre les modifications
                    break;
                  }
                  break;
                case '4':
                  System.out.println(bdd);
                  break;
                case '5':
                  nom = KeyBoard.readString("nom de la personne à chercher : ");
                  System.out.println(vpers);
                  break;
                case '6': 
                  System.out.println("Souhaitez-vous effacer la base de donnée O/N ?");
                  boolean variable = ! KeyBoard.readOuiNon();
                  if (variable = true )
                  {
                	  bdd.clear();
                  }
                  break;
               default:  System.out.println("Entrez un autre choix.");
                break;               
              }
            }
          }
          catch (IOException e)
          {
            System.out.println("Exceptions :" + e);
          }
        }
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import java.io.*;
    import java.util.Scanner;
     
    public class KeyBoard
    {
      public static String readString(String prompt) throws IOException
      {
    	  System.out.print(prompt);
        BufferedReader ligne_in = new BufferedReader(new InputStreamReader(
            System.in));
        String ligne = ligne_in.readLine();
        return ligne;
      }
      public static int readInt(String prompt) throws IOException
      {
    	  System.out.print(prompt);
    	  int x;
    	  Scanner s = new Scanner(System.in);
    	  return x = s.nextInt();
      }
      public static char readChar(String prompt) throws IOException
      {
        System.out.print(prompt);
        BufferedReader ligne_in = new BufferedReader(new InputStreamReader(
            System.in));
        char ligne = ligne_in.readLine().charAt(0);
        return ligne;
      }
     
    	// on lit au clavier une réponse de type oui/non.
    	public static boolean readOuiNon(String prompt) throws IOException 
    	{
    		System.out.print(prompt);
    		System.out.flush();
    		return readOuiNon();
    	}
     
    	// on lit au clavier une réponse de type oui/non 
    	public static boolean readOuiNon() throws IOException
    	{
    		String ch = " ";
    		ch = readString(ch);
    		return (ch.equals("o") || ch.equals("O"));
    	}
     
    	//quand une erreur se produit lors de la lecture, on affiche un message indiquant le type d'erreur. 
    	private static void erreurEntree(Exception e, String type_erreur)
    	{
    		System.out.println("Erreur de lecture : " + type_erreur);
    		System.out.println(e);
    		e.printStackTrace();
    		System.exit(1);
    	}
    }
    Merci d'avance...

  2. #2
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Bon, alors on va faire simple, d'abord réduit ton code à la partie problématique, c'est pas facile ni plaisant de se plonger dans un code long (non commenté) dont les 3/4 ne nous interesse pas.

    Ensuite utilise la balise d'insertion de code, ça le rend nettement plus lisible. Parce que le code tout désindenté avec plein de couleurs j'ai hésité à cliqué sur le bouton "page précédente" de mon navigateur.

    Et précise ton problème pacre que là, je comprends rien et je suis certain de pas être le seul.

    Voilà sinon t'inquiète je t'aiderai avec plaisir mais là comme ça 'est pas très engageant...

  3. #3
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Déjà jpense qu'il faut ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void write(Bdd bdd) throws IOException
    {
       ObjectOutputStream ofW = new ObjectOutputStream(new FileOutputStream(
       "Data.dat"));
       ofW.writeObject(bdd);
       
       ofw.close();
    }

  4. #4
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Piur la saisie au clavier, il suffit de faire new Scanner(System.in);, ça suffit.

  5. #5
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Citation Envoyé par Razgriz
    Piur la saisie au clavier, il suffit de faire new Scanner(System.in);, ça suffit.
    Oui, mais encore faut-il être en java 1.5 ou supérieur

    Sinon, tu lis une chaîne de caractères normale et tu utilises un Integer.parseInt() derrière, en faisant attention à bien gérer l'exception au cas ou l'utilisateur entrerait n'importe quoi: l'expérience prouve que si il y a une connerie à faire, quelqu'un la fera! => il faut programmer des applications "user proof"

    Plus d'explications dans ces cours et tutoriels Java : http://java.developpez.com/cours/
    Par exemple le cours Java de jmdoudou : http://jmdoudoux.developpez.com/cours/developpons/java/
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Merci pour votre aide mais malgrès tout ce que vous m'avez fait ajouter ca ne marche toujours pas.
    Quand j'affiche la base de données, les numéros de téléphone ne s'affichent pas.
    Et quand je veux modifier le nom d'une personne, il n'y a rien a faire le changement ne s'enregistre pas. Je pense que j'ai une erreur dans la classe Bdd et l'attribut modify. Pourriez-vous y jeter un petit coup d'oeil ?

    P.S. je modifie aussi mon programme dans mon premier message si vous voulez voir les changements.

    Merci

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Razgriz
    Piur la saisie au clavier, il suffit de faire new Scanner(System.in);, ça suffit.
    Ou encore System.getConsole().readLine() (avec java >= se 6)

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut le new Scanner(System.in);
    J'ai ajouté la ligne "new Scanner(System.in);" mais le nom ne se modifie toujours pas.

    Voilà ce que j'ai modifié dans ma classe Test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     case '3':
                  nom = KeyBoard.readString("nom de la personne recherchée : ");
                  System.out.println(bdd.getArticle(nom));
                  int champ = KeyBoard.readInt("champ à modifier ?(1 pour nom, 2 pour téléphone fixe) ");
                  switch (champ)
                  {
                    case 1 : nom = KeyBoard.readString("nom : ");
                    new Scanner(System.in);
                    bdd.modify(nom, 1, nom);
                    write(bdd);		// Enregistre les modifications
                    break;
                    case 2 : fixe = KeyBoard.readInt("fixe : ");
                    new Scanner(System.in);
                    bdd.modify(nom, 2, new Integer(fixe));
                    write(bdd);    // Enregistre les modifications
                    break;
                  }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 30/05/2013, 13h28
  2. [débutant] besoin d'aide pour un programme
    Par acdchornet dans le forum C++
    Réponses: 12
    Dernier message: 26/10/2006, 22h32
  3. besoin d'aide pour mon future site
    Par vulquin dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 11/06/2006, 20h33
  4. [Free Pascal] Besoin d'aide pour un programme
    Par ricomix dans le forum Free Pascal
    Réponses: 3
    Dernier message: 04/06/2006, 17h01
  5. Besoin d'aide pour mon rpg en javascript
    Par CyberTwister dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 07/04/2006, 13h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo