Répertoire téléphonique en java

lapsusone - 10 nov. 2012 à 02:59
 lapsusone - 14 nov. 2012 à 21:55
Bonsoir, je débute dans le java et mon premier "devoir" est le suivant:
Créer un annuaire téléphonique où l’on rentre de nouveaux noms et autres données puis le consulter via recherche.

J'aurais besoin de votre aide pour intégrer les fonctions d'entrée de nouveau contact et fignoler le reste.
Il faut que j'utilise absolument un tableau bidimensionnelle. Je vous colle mon ébauche. Mon final doit être commenté.

import java.util.*; 														/* Ceci importe toutes les classes du package java.util */

class repertoire {

public static void main (String [] args) {

String[][] repertoire = new String [4][10];

repertoire[0][0] = "AAA";												/* Données du tableau  */
    repertoire[1][0] = "0101010101";
    repertoire[2][0] = "A rue de l'ISN";
    repertoire[3][0] = "Pas la moindre idee";

    repertoire[0][1] = "BBB";
    repertoire[1][1] = "0202020202";
    repertoire[2][1] = "B rue de l'ISN";
    repertoire[3][1] = "Pas la moindre idee";

repertoire[0][2] = "CCC";
    repertoire[1][2] = "0303030303";
    repertoire[2][2] = "C rue de l'ISN";
    repertoire[3][2] = "Pas la moindre idee";

repertoire[0][3] = "DDD";
    repertoire[1][3] = "0404040404";
    repertoire[2][3] = "D rue de l'ISN";
    repertoire[3][3] = "Pas la moindre idee";

repertoire[0][4] = "EEE";
    repertoire[1][4] = "0505050505";
    repertoire[2][4] = "E rue de l'ISN";
    repertoire[3][4] = "Pas la moindre idee";


    Scanner saisie = new Scanner(System.in); 								/* Fonction de recherche (scanner) */
System.out.println("Entrez une lettre");
String chaine = saisie.nextLine().toUpperCase();						/*Tous les caractères entrés sont uniformes, ici en majuscules */

for (int i=0, indice=0; (i < 5); i= i+1) {
if (chaine.equals(repertoire[0][i].substring(0,1))){
System.out.println(repertoire[0][i]);
System.out.println(repertoire[1][i]);
System.out.println(repertoire[2][i]);
System.out.println(repertoire[3][i]);
}
else {																/* Si rien n'est trouvé, on l'affiche */
 /*System.out.println("Aucun contact trouvé");*/
}

}

}

}


En espérant trouver votre aide.

11 réponses

Utilisateur anonyme
10 nov. 2012 à 18:43
Bonsoir

Ici on ne livre pas du code tout cuit, nous sommes bénévoles, nous ne sommes pas là pour faire vos devoirs. Posez-nous des questions précises et nous tâcherons d'y répondre mais il est hors de question que nous fassions votre devoir à votre place. Cordialement.













T.U.E.R (First Person Shooter créé par Julien Gouesse)
Utilisateur anonyme
10 nov. 2012 à 18:46
Je vous conseille de lire ça.

A bon entendeur.












T.U.E.R (First Person Shooter créé par Julien Gouesse)
Nulle part j'ai demander qu'on me fasse mon travail ! Je demande de l'aide, et pour aller plus loin, j'aimerais avoir des idées sur comment intégrer une fonction qui permet d'ajouter des contacts et leurs données. (pour l'instant mon répertoire est pré rempli, comment faire pour que l'utilisateur remplit soi même ce tableau bidimensionnelle ?)

Si vous voudriez bien commenter mon travail ce serait bien aussi (où je peux améliorer etc).

Cordialement.
Utilisateur anonyme
10 nov. 2012 à 19:57
Dans votre premier message, vous ne posiez aucune question.

Vous ne pouvez pas utiliser un tableau pour faire cela, ce n'est pas dynamique, le nombre d'éléments est fixé à la création.

Vous pouvez utiliser plusieurs champs de texte (javax.swing.JTextField) pour la saisie des valeurs. Si vous voulez faire la saisie en mode console, vous pouvez continuer d'utiliser la classe Scanner, nextLine() va retourner la dernière ligne, vous pouvez alors la stocker dans une cellule de votre tableau après avoir vérifié que certaines informations ne sont pas déjà présentes (pour éviter les doublons).















T.U.E.R (First Person Shooter créé par Julien Gouesse)

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mon travail doit être utilisé en console.(Une interface serait plus compliqué à faire ?)
On peut vraiment pas remplir un tableau et ensuite rechercher dedans via une console ?

Sinon faudrait que je fignole la fonction de recherche. à la fin faudrait que l'utilisateur recherche n'importe quelle donnée. Par exemple pour cette fiche:
repertoire[0][1] = "BBB";
    repertoire[1][1] = "0202020202";
    repertoire[2][1] = "B rue de l'ISN";
    repertoire[3][1] = "Pas la moindre idee";
Faudrait que si l'utilisateur rentre le nom, l'adresse, le tel ou la note, la fiche du contact s'affiche.
Faudrait que si plusieurs fiches correspondent, elles soient affichés.
Comment faire cela ?
Merci pour votre aide.
Utilisateur anonyme
10 nov. 2012 à 23:05
La taille d'un tableau est fixe. Si vous ne savez pas d'avance combien vous allez mettre d'enregistrements dans votre répertoire, vous ne pouvez pas utiliser un tableau.

Vous pouvez afficher une invite pour chaque donnée à rentrer (nom, adresse, téléphone, note) puis appeler Scanner.nextLine().
Pourquoi ne pas faire un truc de ce genre-là?
System.out.println("Entrez le nom");
repertoire = saisie.nextLine();
System.out.println("Entrez l'adresse");
repertoire = saisie.nextLine();
System.out.println("Entrez le téléphone");
repertoire = saisie.nextLine();
System.out.println("Entrez la note");
repertoire = saisie.nextLine();


Vous n'êtes pas obligé de supprimer les affiches dont le nom a déjà été entré car il peut y avoir des homonymes.

Je pense que vous allez avoir besoin d'un menu (en mode console) pour passer du mode de saisie au mode de recherche et vice versa.

L'utilisateur peut entrer le nom et vous pouvez faire une recherche en bouclant sur tout le tableau. Si vous acceptez les homonymes, il parait cohérent d'afficher plusieurs fiches si elles correspondent.



















T.U.E.R (First Person Shooter créé par Julien Gouesse)
Merci de l'aide, comment organiser un menu en console ? Faut importer des fonctions?
Aussi dans ma fonction recherche, à else ligne 47, "Aucun contact trouvé" s'affiche pour tous les autres contacts qui ne correspondent pas à la recherche. Difficile à dire faut faire tourner le programme pour bien comprendre... Comment faire apparaitre la condition qu'une seule fois ?

Voila:
C:\Users\lapsu_000>cd c:\users\lapsu_000\desktop

c:\Users\lapsu_000\Desktop>javac repertoire.java

c:\Users\lapsu_000\Desktop>java repertoire
Entrez une lettre
e
Aucun contact trouvÚ
Aucun contact trouvÚ
Aucun contact trouvÚ
Aucun contact trouvÚ
EEE
0505050505
E rue de l'ISN
Pas la moindre idee

c:\Users\lapsu_000\Desktop>
Utilisateur anonyme
11 nov. 2012 à 19:39
Au lieu de marquer directement "Entrez une lettre", vous pourriez afficher un truc du genre "Tapez 1 pour entrer un nouveau contact, tapez 2 pour rechercher un contact" et en fonction de la saisie, vous pourriez afficher afficher les invites pour entrer les données d'une fiche ou bien une invite demandant de saisir le nom du contact.

Pour la fonction de recherche, il suffit de stocker les indices des fiches qui correspondent au nom entré. Après la boucle, vérifiez si cette liste est vide; si tel est le cas, affichez "Aucun contact trouvé", sinon, utilisez les indices présents dans la liste pour récupérer et afficher les fiches concernées.











T.U.E.R (First Person Shooter créé par Julien Gouesse)
comment stocker les indices des fiches qui correspondent au nom entré ?
Utilisateur anonyme
12 nov. 2012 à 00:43
Vous n'avez qu'à créer une liste (ArrayList) et faire liste.add(Integer.valueOf(i)).













T.U.E.R (First Person Shooter créé par Julien Gouesse)
Voilà où j'en suis, c'est pas encore au point. J'ai une erreur "reached end of file while parsing" mais je n'arrive pas à la trouver. Aussi j'ai pas trop compris comment organiser le Array list dans le else pour la recherche. J'aimerais savoir si y'a moyen de faire ce qui est décrit dans la consigne avec ce que je viens d'ajouter, c'est très certainement incomplet.

Merci de votre aide.
import java.util.*; 														/* Ceci importe toutes les classes du package java.util */

class repertoire1 {

public static void main (String [] args) {

String[][] repertoire = new String [4][10];

repertoire[0][0] = "AAA";												/* Données du tableau  */
    repertoire[1][0] = "0101010101";
    repertoire[2][0] = "A rue de l'ISN";
    repertoire[3][0] = "Pas la moindre idee";

    repertoire[0][1] = "BBB";
    repertoire[1][1] = "0202020202";
    repertoire[2][1] = "B rue de l'ISN";
    repertoire[3][1] = "Pas la moindre idee";

repertoire[0][2] = "CCC";
    repertoire[1][2] = "0303030303";
    repertoire[2][2] = "C rue de l'ISN";
    repertoire[3][2] = "Pas la moindre idee";

repertoire[0][3] = "DDD";
    repertoire[1][3] = "0404040404";
    repertoire[2][3] = "D rue de l'ISN";
    repertoire[3][3] = "Pas la moindre idee";

repertoire[0][4] = "EEE";
    repertoire[1][4] = "0505050505";
    repertoire[2][4] = "E rue de l'ISN";
    repertoire[3][4] = "Pas la moindre idee";


    Scanner saisie = new Scanner(System.in); 								/* Fonction de recherche (scanner) */
System.out.println("1 pour nouveau contact, 2 pour recherche");
String select = saisie.nextLine();
String chaine = saisie.nextLine().toUpperCase();						/*Tous les caractères entrés sont uniformes, ici en majuscules */
switch (select) {
case 1: System.out.println("Entrez le nom");
repertoire = saisie.nextLine().toUpperCase();
System.out.println("Entrez l'adresse");
repertoire = saisie.nextLine().toUpperCase();
System.out.println("Entrez le téléphone");
repertoire = saisie.nextLine();
System.out.println("Entrez la note");
repertoire = saisie.nextLine().toUpperCase();
break;
case 2: 	for (int i=0, indice=0; (i < 5); i= i+1) {
if (chaine.equals(repertoire[0][i].substring(0,1))){
liste.add(Integer.valueOf(i));
System.out.println(repertoire[0][i]);
System.out.println(repertoire[1][i]);
System.out.println(repertoire[2][i]);
System.out.println(repertoire[3][i]);
}
else {												/* Si rien n'est trouvé, on l'affiche */
 System.out.println("Aucun contact trouvé");
}

}
break;
default: System.out.println("Mauvaise entrée. Recommencez...");
}



}
Rejoignez-nous