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

Collection et Stream Java Discussion :

Débuter à Java - Gestion d'un tableau d'identification


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier

    Homme Profil pro
    laborantin
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : laborantin
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Billets dans le blog
    1
    Par défaut Débuter à Java - Gestion d'un tableau d'identification
    salut à tous,
    voilà je suis entrain de me former au java en urgence. Je m'explique : je travaille dans un labo et notre système de tri viens de nous être enlever. Je dois donc en urgence créer un programme pour trier et rechercher des tubes numérotés par code barre.
    je dois donc entrer ces numéros (scan par douchette) dans un tableau de 100 cases (A1 à J10) avec un numéro d'identification de tableau, puis enregistrer ces tableaux et pouvoir en scannant un numéro de tube avoir les coordonnées dans tableau donné de mon tube.donc N° du tableau (qui correspond à un portoir de 100 )et place dans ce portoir (ex je scanne tube: "0916234558" et il me donne : "ce tube se trouve sur le portoir : 4411 en position C5)
    Comment dois je procéder le plus simplement, pour vous c'est peut être simple mais la j'ai grave besoin d'aide pour m'orienter. Je continue à potasser les bouquin de java je sais que je peux y arriver.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut
    Bonjour,

    Tes explications ne sont pas très claires mais on va essayer de t'aider.

    Déjà, en ce qui concerne l'acquisition des codes barres, je ne sais pas faire mais cela pourra être intéressant de voir si certains savent.

    Donc, tu scanne un code barre sur un tube, et tu met ce code dans une case d'un tableau qui contient 100 cases ?
    Lorsque tu parles de tableau, veux-tu dire un tableau du style damier de 10 cases par 10 cases comme on en dessinerai sur une feuille ou bien un tableau (array) que l'on rencontre en java ?

    D'après ton énoncé et surtout d'après les coordonnées A1 à J10, je pense que tu parles d'un tableau du style damier.

    Dans ce cas, je te conseille de créer une classe Tableau qui contiendra les attributs suivants :
    -Une liste de tubes ou alors un tableau de 10 tableaux -> tableau[][][][][][][][][][]
    -N° d'identification
    Cette classe Tableau devra aussi contenir les Accesseurs ainsi que les constructeurs.

    Tu devrais aussi peut-être créer une classe Tube qui contiendrait les attributs suivants :
    -les coordonnées de la case, constituées d’abscisses et d'ordonnées.
    -le N° du tube
    -peut-être le contenu du tube ?
    Cette classe Tube devra aussi contenir les Accesseurs ainsi que les constructeurs.

    Tu devras sûrement définir une interface contenant les services(c'est ce que je ferais mais je ne suis pas super expérimenté non plus).
    Il te faut aussi décrire l'interface graphique que tu souhaite créer. Savoir les champs de saisie dont tu as besoin .. etc. Tu faire une maquette et l'insérer dans ton prochain message. Ceux qui le peuvent t'aideront !
    Il te faut définir les services dont tu auras besoin. Par exemple : acquérir code barre, sauvegarder code barre, effacer code barre, modifier code barre, renommer désignation du code barre, définir produits lié au code barre, rechercher code, rechercher produit ... etc

  3. #3
    Membre régulier

    Homme Profil pro
    laborantin
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : laborantin
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Billets dans le blog
    1
    Par défaut suite
    bonjour, tout d'abord je te remercie pour ta réponse .Je vais essayer de mieux m'expliquer : j'ai fait un plan de ce que je veux sur excel ci-joint.
    Il est très important que je puisse scanner les codes barres des tubes à la douchette , que le tableau se remplisse de Gauche à Droite et de Haut en Bas, que la recherche se fasse sur tous les tableaux crées ( le nombre de tableaux sera à peut près de 500) et les coordonnées soit comprise entre A1 et J10 (tableau damier comme tu disais). en fait les tableaux sont des portoirs numérotés de A1 à J10 qui sont eux même identifiés avec un Code à barre.
    merci encore
    Fichiers attachés Fichiers attachés

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Plutôt que de t'embêter avec des classes, comme tu débutes, commence simplement. Le fichier excel présente déjà des ambitions qui dépassent un niveau débutant (en particulier gérer un portoir non complet). Tu pourras toujours améliorer ça par la suite si tu veux (et tout dans ce que j'ai mis par la suite devrait te permettre de le faire, associer à une lecture de la javadoc et de tutoriaux).

    • D'abord la base
      1. Représentation en mémoire
        Gère tes numéros de tube par le type String. Tu n'as à priori aucun calcul à faire avec. Et ça beau être que des chiffres, c'est avant tout un code (des caractères codés en code barre).
        Donc ton portoir sera représenté par un tableau de String, de 10x10
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        String[][] tableau = new String[10][10];
        Le plus simple pour associer un identifiant à chaque tableau est de stocker tous les tableaux dans un objet de type Map, HashMap<String, String[][]> pour être exact. Pour déclarer la variable :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Map<String, String[][]> tableaux = new HashMap<>();
        pour mettre un tableau dedans :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        tableaux.put( id, tableau );
        ou id est une variable de type String contenant l'identifiant, et tableau une variable de type String[][] donc.
        Pour récupérer un tableau dedans, avec son id :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        String[][] tableau = tableaux.get(id);
      2. Passer des coordonnées dans un tableau Java aux coordonéés dans ton système de notation. Une chose à savoir, importante : les index dans un tableau vont de 0 inclus à n exclu (n étant le nombre d'éléments du tableau, sa taille donc). Donc pour un tableau tab de 10 éléments, on peut accèder de tab[0] à tab[9]. Idem pour un tableau à 2 dimensions (notre String[][] tableau=new String[10][10]; : on va de tableau[0][0] à tableau[9][9].
        Voici une méthode qui prend des coordonnées numériques de case de tableaux et en retour renvoit une coordonnée de type "A1", "B2", etc.
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        public static String convertir(int abscisse, int ordonnee) {
        		return (char)('A'+abscisse) + String.valueOf(ordonnee+1);
        	}
        On verra plus tard qu'on a pas besoin de la transformation inverse (un peu plus complexe), mais si ça t'intéresse, voici pour écrire une valeur (un code de tube) dans le tableau :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        public static void ecrire(String[][] tableau, String valeur, String coordonnees) {
        	     char cabscisse = coordonnees.toUpperCase().charAt(0); // premier caractère de la chaîne coordonnees (on le transforme en majuscule pour éviter tout problème à ce sujet)
        	     String sordonnee = coordonnees.substring(1); // le reste de la chaîne après le premier caractère de la chaîne coordonnees
        	     int abscisse = cabscisse - 'A'; // abscisse numérique correspondant à la lettre (A=0, B=1...)
        	     int ordonnee = Integer.parseInt(sordonnee)-1; // abscisse numérique correspondant au chiffre
        	     tableau[abscisse][ordonnee]=valeur; // écriture de la valeur dans le tableau aux coordonnées voulues
        	}
      3. Stocker les données dans un fichier
        Le plus simple pour toi est de faire un fichier texte : une ligne pour l'identifiant, puis 10 lignes de numéros, séparés par des virgules. Cela a l'avantage d'être simple à écrire et lire programmatiquement, et tu peux vérifier rapidement le fichier en le visualisant. Tu peux même te servir d'Excel pour le modifier rapidement au besoin.
        Si tu veux vraiment gérer des tableaux incomplets, il te faudra gérer des valeurs "vides" (parcourir le tableau à la recherche de la première valeur vide pour recommencer la saisie à cet endroit)

        Pour écrire l'ensemble des tableaux, donc contenus dans la variable tableaux de type Map<String, String[][]> :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        public static void stocker(String fichier, Map<String, String[][]> tableaux) throws IOException {
        		try(BufferedWriter writer = Files.newBufferedWriter(Paths.get(fichier))) { // ouvre le fichier
        			for(Map.Entry<String, String[][]> entry : tableaux.entrySet()) { // on parcourt tout ce qui se trouve dans la map
        				writer.write(entry.getKey()); // on écrit l'id de tableau
        				writer.newLine(); // on passe à la ligne
        				for(String[] ligne : entry.getValue()) { // on parcourt les lignes du tableau
        					writer.write(String.join(",", ligne)); // on écrit la ligne entière, les éléments séparés par des virgules (,)
        					writer.newLine(); // on passe à la ligne
        				}
        			}
        		}
        	}
        Pour le relire
        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
        public static Map<String,String[][]> lire(String fichier) throws IOException {
        		Map<String, String[][]> tableaux = new HashMap<>();
        		try(BufferedReader reader = Files.newBufferedReader(Paths.get(fichier))) { // ouvre le fichier
        			int i=0; // va nous permettre de savoir sur quelle ligne on se trouve par rapport au tableau
        			String id=null; // l'id de tableau
        			String[][] tableau = null; // pour construire le tableau
        			for(String ligne = reader.readLine(); ligne!=null; ligne=reader.readLine()) { // on lit ligne par ligne
        				if ( ligne.trim().isEmpty() ) continue; // on ignore les lignes vides (normalement, il n'y en a pas, mais si on ajoute pour faciliter la lecture du fichier, on aura pas de probleme avec
        				switch(i) { // en fonction de i
        				case 0: // valeur 0 : l'id de tableau
        					id=ligne;
        					if ( id.contains(",") ) { // un petit contrôle d'erreur en passant
        						throw new IOException("Fichier incorrect : il manque l'identifiant de tableau");
        					}
        					i++; // on incrémente i;
        					tableau=new String[10][10]; //on crée un nouveau tableau
        					break;
        				default: // dans tous les autres cas
        					tableau[i-1] = ligne.split(","); // on découpe la ligne en utilisant le séparateur ,
        					if ( tableau[i-1].length!=10 ) { // un petit contrôle d'erreur en passant
        						throw new IOException("Ligne ne contenant pas 10 valeurs");
        					}
        					i++; // on passe à ligne suivante
        					break;
        				}
        				if ( i==11 ) { // on a lu tout un tableau
        					if ( tableaux.containsKey(id) ) {
        						throw new IOException("Deux tableaux avec le même identiant : "+id);
        					}
        					tableaux.put(id, tableau); // on le stocke
        					i=0; // on recommence pour le tableau suivant
        				}
        			}
        			if( i!=0 ) {
        				// le dernier tableau était incomplet
        				throw new IOException("Fichier incorrect (incomplet)");
        			}
        		}
        		return tableaux;
        	}
      4. Retrouver l'emplacement d'un tube en fonction de son code
        Pour faire ça, il faudrait parcourir tous les tableaux de la Map<String, String[][]> afin de récupérer l'id et le tableau correspondant, puis parcourir le tableau à la recherche du numéro de tube, puis s'il est trouvé, générer la phrase voulue. Comme à priori un code de tube est unique (2 tubes ne peuvent pas avoir le même code), on peut procéder aussi en générant tout d'abord un index : c'est même un peu plus simple, et ce sera surtout plus rapide pour effectuer la recherche, mais ça prendra plus de mémoire bien sûr.
        L'index associera directement un numéro de tube avec le couple id de portoir, coordonnées de case. On pourrait faire une classe pour représenter le couple, mais on peut se contenter d'utiliser un String, avec une virgule pour séparer les 2 informations, puisqu'aucune des deux ne peut contenir de virgule.
        Pour créer l'index, à partir de tableaux :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        public static Map<String, String> createIndex(Map<String, String[][]> tableaux) {
            Map<String, String> index = new HashMap<>();
            for(Map.Entry<String, String[][]> entry : tableaux.entrySet()) {
              String id = entry.getKey();
              String[][] tableau = entry.getValue();
              for(int i=0; i<tableau.length; i++) {
                for(int j=0; j<tableau[i].length; j++) {
                  index.put(tableau[i][j], String.join(",", id, convertir(i, j))); // on concatène les 2 informations en les séparant par une virgule
                }
              }
            }
            return index;
          }


      Voici un petit programme récap (on génère aléatoire 100 portoirs)
      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
      124
      125
      126
      127
      128
      129
      130
      131
      132
      133
      134
      135
      136
      137
       
      import java.io.BufferedReader;
      import java.io.BufferedWriter;
      import java.io.IOException;
      import java.nio.file.Files;
      import java.nio.file.Path;
      import java.nio.file.Paths;
      import java.util.HashMap;
      import java.util.Map;
      import java.util.Random;
       
      public class Portoirs {
       
       
        public static void ecrire(String[][] tableau, String valeur, String coordonnees) {
             char cabscisse = coordonnees.toUpperCase().charAt(0); // premier caractère de la chaîne coordonnees (on le transforme en majuscule pour éviter tout problème à ce sujet)
             String sordonnee = coordonnees.substring(1); // le reste de la chaîne après le premier caractère de la chaîne coordonnees
             int abscisse = cabscisse - 'A'; // abscisse numérique correspondant à la lettre (A=0, B=1...)
             int ordonnee = Integer.parseInt(sordonnee)-1; // abscisse numérique correspondant au chiffre
             tableau[abscisse][ordonnee]=valeur; // écriture de la valeur dans le tableau aux coordonnées voulues
        }
        public static String convertir(int abscisse, int ordonnee) {
          return (char)('A'+abscisse) + String.valueOf(ordonnee+1);
        }
        public static void main(String[] args) {
          Map<String, String[][]> tableaux = new HashMap<>();
       
          // remplisage aléatoire de 100 tableaux
          Random random = new Random();
          for(int t=0; t<100; t++) {
            String[][] tableau = new String[10][10];
            for(int i=0; i<tableau.length; i++) {
              for( int j=0; j<tableau.length; j++) {
                ecrire(tableau, String.format("%10d",random.nextInt(99999999)).replace(' ', '0'), convertir(i, j));
              }
            }
            tableaux.put(String.valueOf(t+1), tableau);
          }
          try {
            stocker("truc.txt", tableaux);
          } catch (IOException e) {
            e.printStackTrace();
          }
          try {
            tableaux = lire("truc.txt");
          } catch (IOException e) {
            e.printStackTrace();
          }
          Map<String, String> index = createIndex(tableaux); 
          // vérification 
          String[][] tableau = tableaux.get("1");
          String code = tableau[3][3];
          System.out.println(trouver(index, code)); // affiche bien "ce tube se trouve sur le portoir : 1 en position D4"
        }  
       
        public static void stocker(String fichier, Map<String, String[][]> tableaux) throws IOException {
          try(BufferedWriter writer = Files.newBufferedWriter(Paths.get(fichier))) { // ouvre le fichier
            for(Map.Entry<String, String[][]> entry : tableaux.entrySet()) { // on parcourt tout ce qui se trouve dans la map
              writer.write(entry.getKey()); // on écrit l'id de tableau
              writer.newLine(); // on passe à la ligne
              for(String[] ligne : entry.getValue()) { // on parcourt les lignes du tableau
                writer.write(String.join(",", ligne)); // on écrit la ligne entière, les éléments séparés par des virgules (,)
                writer.newLine(); // on passe à la ligne
              }
            }
          }
        }
       
        public static Map<String,String[][]> lire(String fichier) throws IOException {
          Map<String, String[][]> tableaux = new HashMap<>();
          Path path = Paths.get(fichier);
          if ( Files.exists(path) ) {
      	    try(BufferedReader reader = Files.newBufferedReader(path)) { // ouvre le fichier
      	      int i=0; // va nous permettre de savoir sur quelle ligne on se trouve par rapport au tableau
      	      String id=null; // l'id de tableau
      	      String[][] tableau = null; // pour construire le tableau
      	      for(String ligne = reader.readLine(); ligne!=null; ligne=reader.readLine()) { // on lit ligne par ligne
      	        if ( ligne.trim().isEmpty() ) continue; // on ignore les lignes vides (normalement, il n'y en a pas, mais si on ajoute pour faciliter la lecture du fichier, on aura pas de probleme avec
      	        switch(i) { // en fonction de i
      	        case 0: // valeur 0 : l'id de tableau
      	          id=ligne;
      	          if ( id.contains(",") ) { // un petit contrôle d'erreur en passant
      	            throw new IOException("Fichier incorrect : il manque l'identifiant de tableau");
      	          }
      	          i++; // on incrémente i;
      	          tableau=new String[10][10]; //on crée un nouveau tableau
      	          break;
      	        default: // dans tous les autres cas
      	          tableau[i-1] = ligne.split(","); // on découpe la ligne en utilisant le séparateur ,
      	          if ( tableau[i-1].length!=10 ) { // un petit contrôle d'erreur en passant
      	            throw new IOException("Ligne ne contenant pas 10 valeurs");
      	          }
      	          i++; // on passe à ligne suivante
      	          break;
      	        }
      	        if ( i==11 ) { // on a lu tout un tableau
      	          if ( tableaux.containsKey(id) ) {
      	            throw new IOException("Deux tableaux avec le même identiant : "+id);
      	          }
      	          tableaux.put(id, tableau); // on le stocke
      	          i=0; // on recommence pour le tableau suivant
      	        }
      	      }
      	      if( i!=0 ) {
      	        // le dernier tableau était incomplet
      	        throw new IOException("Fichier incorrect (incomplet)");
      	      }
      	    }
          }
          return tableaux;
        }
       
        public static Map<String, String> createIndex(Map<String, String[][]> tableaux) {
          Map<String, String> index = new HashMap<>();
          for(Map.Entry<String, String[][]> entry : tableaux.entrySet()) {
            String id = entry.getKey();
            String[][] tableau = entry.getValue();
            for(int i=0; i<tableau.length; i++) {
              for(int j=0; j<tableau[i].length; j++) {
                index.put(tableau[i][j], String.join(",", id, convertir(i, j))); // on concatène les 2 informations en les séparant par une virgule
              }
            }
          }
          return index;
        }
       
        public static String trouver(Map<String, String> index, String code) {
      	  if ( index.containsKey(code) ) {
      		  String position = index.get(code);
      	      return String.format("ce tube se trouve sur le portoir : %s en position %s", (Object[])position.split(",")); // on créé le message complet qu'on aura plus qu'a afficher (en coupant l'information trouvée par la virgule)
      	  }
      	  else {
      		  return "Non trouvé !";
      	  }
        }
       
      }
    • La structure en programme
      Avant d'attaquer la partie UI, pour commencer, ça me semble plus simple que tu fasses 2 programmes. Un pour générer le fichier. Un qui le charge et permet de retrouver un code. Dans ce cadre, l'interface est hyper simple.
    • L'interface graphique
      1. La saisie
        Normalement, une douchette fonctionne comme un clavier et génère une suite de caractères, ceux décodés depuis le code barre lu, et génère un retour-chariot. Ce qui devrait simplifier grandement l'interface, en mode de base (on peut toujours complexifier une interface (du point de vue technique) pour la rendre plus ergonomique, mais partir sur du simple permet d'avoir un résultat rapide sans complication (problème de layout, de focus, d'enchaînement de formulaire, de modalité, etc... problèmes que tu auras l'occasion d'aborder ensuite si tu veux).

        Le moyen le plus simple que je vois est d'utiliser 2 JOptionPane : l'un servira à saisir un code de tableau (ou à sortir du programme), l'autre à saisir chaque code. Pour les saisir dans l'ordre que tu veux, il te suffira de faire une boucle qui correspond à cet ordre.

        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
        import java.io.IOException;
        import java.util.Map;
         
        import javax.swing.JOptionPane;
         
        public class Saisie {
         
        	public static final String NOM_FICHIER = "portoirs.txt"; // on ne s'embette pas pour le moment avec un nom de fichier paramétrable : il est en dur dans le code
         
        	public static void main(String[] args) {
         
        		try {
        			Map<String, String[][]> tableaux = Portoirs.lire(NOM_FICHIER);
         
        			boolean saisir = true; // permet de controler quand on termine la saisie
        			while( saisir ) { // tant qu'on doit saisir
         
        				String id = JOptionPane.showInputDialog("Saisir un numéro de portoir : ");
         
        				if( id==null || id.trim().isEmpty() ) { // si on saisit rien (ou clique sur Annuler)
        					saisir=false; // on arrête la saisie
        				}
        				else {
        					boolean saisitableau=true;
        					id = id.trim(); // on supprime les espaces superflues devant et derrière
        					if ( tableaux.containsKey(id) ) {
        					    // le portoir à déjà été saisi
        						if ( JOptionPane.showConfirmDialog(null, "Portoir " + id + " déjà saisi.\nRecommencer la saisie ?",
        								"Portoir déjà saisi", JOptionPane.YES_OPTION)==JOptionPane.NO_OPTION) {
        							saisitableau=false; // si on répond non, on reboucle directe (et on ne fait pas la saisie)
        						}
        					}
         
        					if ( saisitableau ) {
        						String[][] tableau = new String[10][10];
        						// saisie ligne par ligne (de gauche à droite, puis de haut en bas)
        						for(int i=0; i<10; i++) {
        							for(int j=0; j<10; j++) {
        								String code = JOptionPane.showInputDialog("Saisir le code du tube du portoir " + id + " situé en " + Portoirs.convertir(i, j));
        								if ( code==null ) {
        									// annulation
        									saisitableau=false;
        								}
        								else if ( code.trim().isEmpty() ) {
        									// erreur... ou saisie partielle...
        									// à faire
        									code = ""; // pour le moment on saisit une chaine vide pour éviter les erreurs plus tard lors de la manipulation du tableau
        								}
        								tableau[i][j]=code.trim();
        							}
        						}
        						if (saisitableau) {
        							tableaux.put(id, tableau);
        						}
        					}
        				}
         
        			}
         
        			Portoirs.stocker(NOM_FICHIER, tableaux);
         
        		} catch (IOException e) {
        			System.err.println("Erreur lors de la lecture du fichier");
        			e.printStackTrace();
        		}
         
        	}
         
        }

        Si tu fais un jar exécutable avec pour classe main cette classe Saisie, il te suffira de double-cliquer dessus pour le lancer.
      2. La restitution
        Un autre programme donc :
        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
        import java.io.IOException;
        import java.util.Map;
         
        import javax.swing.JOptionPane;
         
        public class Lecture {
         
        	public static final String NOM_FICHIER = Saisie.NOM_FICHIER; // on reprend le nom du programme Saisie
         
        	public static void main(String[] args) {
         
        		try {
        			Map<String, String[][]> tableaux = Portoirs.lire(NOM_FICHIER);
        			Map<String, String> index = Portoirs.createIndex(tableaux);
         
        			boolean saisir = true; // permet de controler quand on termine la saisie
        			String message = "Scannez un code :";
        			while( saisir ) { // tant qu'on doit saisir
         
        				String code = JOptionPane.showInputDialog(message);
         
        				if ( code==null ) {
        					saisir=false; // on a cliqué sur Annuler
        				}
        				else if( code.trim().isEmpty() ) { // si on saisit rien
        					saisir=false; // on arrête la saisie
        				}
        				else {
        					message = Portoirs.trouver(index, code) + "\n\nScannez un autre code : "; 
        				}
         
        			}
         
         
        		} catch (IOException e) {
        			System.err.println("Erreur lors de la lecture du fichier");
        			e.printStackTrace();
        		}
         
        	}
         
        }




    C'est basique, peu ergonomique, mais ça fait le job, sans manipuler des concepts très complexes de Java et ça te donne tous les éléments de base qui te permettront d'aller plus loin si tu veux. Pour le reste, juste un petit tour sur les tutoriaux Developpez Swing pour améliorer l'interface utilisateur.

    NB le fichier portoirs.txt sera créé à l'endroit où tu placeras le fichier jar pour le programme de saisie. Il faut donc mettre le jar du programme de lecture dans le même dossier.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre régulier

    Homme Profil pro
    laborantin
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : laborantin
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Billets dans le blog
    1
    Par défaut MERCI

    Salut Joel et un grand merci , Il me reste à appliquer tout çà. De mon coté j'avance dans ma formation, toutes tes explications sont claires . Je m'y colle , et encore MERCI

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

Discussions similaires

  1. Calcul du plu court chemin entre 2 sommets d'un graphe valué
    Par atlasm dans le forum Algorithmes et structures de données
    Réponses: 25
    Dernier message: 07/08/2005, 17h06
  2. [LINUX][INSTALL]Error de fichier trop court
    Par silvermoon dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/08/2004, 16h17
  3. Réponses: 2
    Dernier message: 21/03/2004, 18h57
  4. Réponses: 4
    Dernier message: 16/03/2004, 18h03
  5. [TControl] Récupérer le message court et long du hint ?
    Par Cornell dans le forum Composants VCL
    Réponses: 6
    Dernier message: 19/11/2003, 08h55

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