Besoin d'aide pour mon programme java

Signaler
Messages postés
3
Date d'inscription
mercredi 7 février 2007
Statut
Membre
Dernière intervention
24 mai 2007
-
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
-
Bonjour,
J'ai fait un programme java pour faire un annuaire mais il y a quelques erreurs.
Par exemple, je ne peux pas modifier le nom de la personne. Lorsque je supprime la base de données, "null" s'inscrit. Est ce que quelqu'un pourrait m'aider ?
Voici mon programme :

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; } }

import java.io.*;
import java.util.*;

public class Bdd implements Serializable
{
private static final long serialVersionUID = -2840911939125432267L;
Map map;
public Bdd()
{
map = new TreeMap(); // ou HashMap (plus rapide mais clé non triées)
}
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);
}
public boolean add(Article article)
{
if (!map.containsKey(article.nom))
{
map.put(article.nom, article);
return true;
}
return false;
}
public Article getArticle(String keys)
{
Article unArticle = (Article) map.get(keys);if (unArticle null) unArticle new Article(keys, "Pas de fiche référencée à ce nom", 0, keys, 0, keys, keys, 0, 0, 0, 0); return unArticle;
}
public boolean remove(String nom)
{
if (map.containsKey(nom))
{
map.remove(nom);
return true;
}
return false;
}
public boolean 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 : return false;
}
map.put(nom,unArticle);
return true;
}
return false;
}}

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();
boolean variable = true;
while(true)
{
try
{
while (variable = 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));
write(bdd); // Enregistre la nouvelle fiche
break;
case '2':
nom = KeyBoard.readString("nom de la personne recherchée : ");
bdd.remove(nom);
System.out.println(bdd.getArticle(nom));
write(bdd); // Enregistre les modifications
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 ?");
variable = ! KeyBoard.readOuiNon();
break;
default: System.out.println("Entrez un autre choix.");
break;
}
}
}
catch (IOException e)
{
System.out.println("Exceptions :" + e);
}}}}

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);
BufferedReader ligne_in = new BufferedReader(new InputStreamReader(
System.in));
int ligne = 0;
return ligne;
}
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;
}
public static boolean readOuiNon(String prompt) throws IOException
{
System.out.print(prompt);
System.out.flush();
return readOuiNon();
}
public static boolean readOuiNon() throws IOException
{
String ch = null;
ch = readString(ch);
return (ch.equals("o") || ch.equals("O"));
}
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...

<!-- / message -->

5 réponses

Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Bon désolé, je suis pas un expert.
De ce que j'ai vu :
    - dans une classe quand tu définis des attributs à la classe, tu ne mets ni public, ni private. Je pense (je dis bien je pense) qu'il serait préférable de mettre des private et de créer des accesseurs par la suite sur ces attributs.
    - tu auras remarqué que tes KeyBoard.readInt n'attende pas que tu saisisses quelque chose au clavier.
A mon avis, t'as un problème de tampon. Essai en vidant ton tampon parce que, je pense, que lors de la saisie de oui / non, il n'attend pas et donc dans ch (String ch = null) il reste null. Tu vois ce que je veux dire?
<hr size="2" width="100%" />C'est après des heures de codage que j'ai compris pourquoi les mecs de Java ont choisi une tasse de café comme logo!
Messages postés
3
Date d'inscription
mercredi 7 février 2007
Statut
Membre
Dernière intervention
24 mai 2007

Bonjour,
pour vider mon tampon,  faut -il que je rajoute la ligne suivante dans ma classe Bdd simplement ?
Bdd.flush();
Merci d'avance.
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Euh... essaie :)
Non, mais bon après chaque saisie, je pense qu'il faudrait vider le tampon. Donc dans tes fonctions readString, readInt...
Essaie de creuser cette idée là, je ne te garantie pas que c'est une bonne piste, mais bon c'est déjà ca ;)
Bonne chance
++
<hr size="2" width="100%" />C'est après des heures de codage que j'ai compris pourquoi les mecs de Java ont choisi une tasse de café comme logo!
Messages postés
3
Date d'inscription
mercredi 7 février 2007
Statut
Membre
Dernière intervention
24 mai 2007

En faite, je ne pense pas qu'il faut vider le tampon dans chaque fonction readString, readInt, ... car sinon java ne pourrait pas retourner ce qui a été saisi au clavier lorsqu'il lira la base de données.
Donc, je ne pense pas que ce soit la bonne méthode...
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Ben tu mets ce que tu lis dans des variables... je ne sais pas, moi je le voit comme ca.
De plus, vu qu'il n'attend pas du tout que tu saisisses quelques choses pour readOuiNon, ben c'est forcément à cause du tampon.
<hr size="2" width="100%" />C'est après des heures de codage que j'ai compris pourquoi les mecs de Java ont choisi une tasse de café comme logo!