besoin d'aide pour mon programme
Bonjour,
J'ai fait un programme java pour faire un annuaire mais il y a quelques erreurs.:cry:
- 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:
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:
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:
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:
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...:mouarf:
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...:roll: :roll: )
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:
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;
} |