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

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 3
    Points
    3
    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 averti 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
    Points : 306
    Points
    306
    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 actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    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 averti 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
    Points : 306
    Points
    306
    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 : 41
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    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/

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 3
    Points
    3
    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 averti 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
    Points : 306
    Points
    306
    Par défaut
    Déjà plutôt que de faire des return false n cas de problème (t'as fait du C avant toi non? ) lance une exception, comme ça si y a un problème ton programme va planter et tu sauras précisément à quelle ligne s'est produite l'erreur...

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut ce que je n'arrive pas à faire
    Dans la classe Bdd, je ne sais pas comment faire pour supprimer la base de données (objet clear dans les dernieres lignes de ma classe). J'ai juste ajouté un return null pour que je puisse tester mon programme.
    Et quand je veux modifier le nom, je n'y arrive toujours pas et je ne vois pas où est mon erreur (surement dans la classe bdd objet modify mais ca n'est pas sur... )

  9. #9
    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
    Points : 3 080
    Points
    3 080
    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)

  10. #10
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 3
    Points
    3
    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;
                  }

  11. #11
    Membre averti 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
    Points : 306
    Points
    306
    Par défaut
    Déjà comment tu veux récupérer ce qu'on tape dans la console si tu référencie pas ton Scanner.....................................................................................

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    System.out.println("Tapez qqch");
    Scanner in = new Scanner(System.in);
    String s = in.readLine();
    System.out.println("\nVous avez tapé : " + s);
    Va un coup jeter un oeild ans la FAQ, je suis pas comme ça d'habitude mais là quand même, faut pas exagérer.

  12. #12
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Merci
    Merci à tous pour votre aide

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 30/05/2013, 14h28
  2. [débutant] besoin d'aide pour un programme
    Par acdchornet dans le forum C++
    Réponses: 12
    Dernier message: 26/10/2006, 23h32
  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, 21h33
  4. [Free Pascal] Besoin d'aide pour un programme
    Par ricomix dans le forum Free Pascal
    Réponses: 3
    Dernier message: 04/06/2006, 18h01
  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, 14h26

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