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

Java Discussion :

Algorithme de génération de matricule


Sujet :

Java

  1. #1
    Membre confirmé Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Points : 466
    Points
    466
    Par défaut Algorithme de génération de matricule
    Bonjour
    Je veux generer un matricule dans une application suivant un Format predefini.
    Le problème est que ce format est choisi en fonction de plusieurs paramètres choisi par l'utilisateur.je prendrais un exemple il choisira 1,2 ou 3 paramètres.
    Voici les paramètres:Code,Cycle,Filiere,Annee,Numero Auto,Sexe,Niveau.

    le format pourra etre le suivant:Code-Cycle-Filiere ou Filiere-Annee-Numero ou Code-Cycle

    vous comprendrez que j'ai environ Combinaision(3,7)+ Combinaision(2,7)+Combinaision(1,7)=nombre de possibilites.

    je ne peux faire des if et if

    j'aimerai une méthodologie à suivre pour pouvoir écrire ce code.

    Cordialement
    Ce qui ne me tue pas me rend plus fort.

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Bonjour,
    Je te propose une piste :
    Supposons que nous ayons par un moyen quelconque une liste représentant l'ordre des différents paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    enum Parametre {
    		Code, Cycle, Filiere, Annee, Numero, Auto, Sexe, Niveau
    	};
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<Parametre> list = new ArrayList<Parametre>();
    list.add(Parametre.Code);
    list.add(Parametre.Cycle);
    list.add(Parametre.Filiere);
    On peut réaliser un traitement itératif sur le liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = 0; i < paramatreListe.size(); i++) {
    	Parametre parametre = paramatreListe.get(i);
    	// TODO Ajouter le paramètre au matricule
    }
    Et sur chaque itération réalisé un traitement avec un switch pour gérer chaque cas proprement :
    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
    switch (paramatre) {
    		case Code:
    			return etudiant.getCode();
    		case Annee:
    			return etudiant.getAnnee();
    		case Auto:
    			return etudiant.getAuto();
    		case Cycle:
    			return etudiant.getCycle();
    		case Filiere:
    			return etudiant.getFiliere();
    		case Niveau:
    			return etudiant.getNiveau();
    		case Numero:
    			return etudiant.getNumero();
    		case Sexe:
    			return etudiant.getSexe();
    		default:
    			return "";
    		}
    On peut aussi passer par un tableau pour le stockage des paramètres. Ou remplacer l’énumération par quelque chose de plus complexe.

    Je te joins le code des deux classes correspondante à cette implémentation.
    Cordialement,
    Patrick Kolodziejczyk.

    Code complet :
    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
    import java.util.ArrayList;
    import java.util.List;
     
    public class MatriculeGenerator {
    	private String separateur = "-";
    	enum Parametre {
    		Code, Cycle, Filiere, Annee, Numero, Auto, Sexe, Niveau
    	};
     
    	public String ajoutCode(Etudiant object){
    		return object.getCode();
    	}
    	public String ajouteParametreAuMatricle(Parametre paramatre, Etudiant etudiant) {
    		switch (paramatre) {
    		case Code:
    			return etudiant.getCode();
    		case Annee:
    			return etudiant.getAnnee();
    		case Auto:
    			return etudiant.getAuto();
    		case Cycle:
    			return etudiant.getCycle();
    		case Filiere:
    			return etudiant.getFiliere();
    		case Niveau:
    			return etudiant.getNiveau();
    		case Numero:
    			return etudiant.getNumero();
    		case Sexe:
    			return etudiant.getSexe();
    		default:
    			return "";
    		}
     
    	}
    	public String genereMatricule(List<Parametre> paramatreListe, Etudiant object){
    		StringBuilder sb = new StringBuilder();
    		for (int i = 0; i < paramatreListe.size(); i++) {
    			Parametre parametre = paramatreListe.get(i);
    			sb.append(this.ajouteParametreAuMatricle(parametre, object));
    			if(i+1 <paramatreListe.size()){
    			sb.append(separateur);
    			}
    		}
    		return sb.toString();
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		Etudiant  etudiant =new Etudiant();
    		etudiant.setCode("4572");
    		etudiant.setCycle("C1");
    		etudiant.setFiliere("Math");
    		List<Parametre> list = new ArrayList<Parametre>();
    		list.add(Parametre.Code);
    		list.add(Parametre.Cycle);
    		list.add(Parametre.Filiere);
    		MatriculeGenerator generateur = new MatriculeGenerator();
    		String matricule = generateur.genereMatricule(list, etudiant);
    		System.out.println(matricule);
    	}
     
    }
    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
    public class Etudiant {
    	private String Code, Cycle, Filiere, Annee, Numero, Auto, Sexe, Niveau;
     
    	public String getCode() {
    		return Code;
    	}
     
    	public void setCode(String code) {
    		Code = code;
    	}
     
    	public String getCycle() {
    		return Cycle;
    	}
     
    	public void setCycle(String cycle) {
    		Cycle = cycle;
    	}
     
    	public String getFiliere() {
    		return Filiere;
    	}
     
    	public void setFiliere(String filiere) {
    		Filiere = filiere;
    	}
     
    	public String getAnnee() {
    		return Annee;
    	}
     
    	public void setAnnee(String annee) {
    		Annee = annee;
    	}
     
    	public String getNumero() {
    		return Numero;
    	}
     
    	public void setNumero(String numero) {
    		Numero = numero;
    	}
     
    	public String getAuto() {
    		return Auto;
    	}
     
    	public void setAuto(String auto) {
    		Auto = auto;
    	}
     
    	public String getSexe() {
    		return Sexe;
    	}
     
    	public void setSexe(String sexe) {
    		Sexe = sexe;
    	}
     
    	public String getNiveau() {
    		return Niveau;
    	}
     
    	public void setNiveau(String niveau) {
    		Niveau = niveau;
    	}
    }
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre confirmé Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Points : 466
    Points
    466
    Par défaut
    bonjour
    je crois que je vais suivre votre piste.même si ces différentes informations ne proviennent pas d'Etudiant.
    Je pense pouvoir gongler pour y arriver.
    Etant donné que j'ai déjà trouver le moyen de choisir les formats que je stocke justement dans un champ de type String avec le séparateur "-".

    serait ce judicieux d'utiliser l'enumération?

    Merci de votre piste.
    Ce qui ne me tue pas me rend plus fort.

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Si cela ne provient pas de l'entité étudiant vous pouvez avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return this.getPartMatriculeAnnee();
    L’énumération est la pour vous facilité la vie. Si vous avez l'impression de pouvoir faire plus simple autrement. Tester cette autre moyen, c'est le seul moyen d'aprendre.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    autre piste:
    créer une concaténation de format "%s" -> on obtient "%s-%s-%s" par exemple avec 3 choix et un tiret au milieu
    créer un tableau de tes objets choisis
    formatter la chaine résultant de la concaténation avec le tableau (méthode format)
    ça te va?
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  6. #6
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    J'ai une autre solution qui se retrouve être une variante de celle proposée par professeur shadoko.

    Son idée est de fournir une chaîne qui peut varier entre "%s", "%s-%s" et "%s-%s-%s" selon le nombre de paramètres choisis et de fournir un tableau à adapter en fonction des paramètres choisis.

    Je suggère d'utiliser toujours le même tableau de paramètres et de ne changer que la chaîne à formater.

    Exemple (ramené à trois choix de paramètres):

    1. Tu décides que les paramètres sont dans cet ordre là : Année, Filière, Sexe.
    Pour une personne donnée, tu fourniras toujours les même paramètres.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { "2011", "Informatique", "M"}
    Pour construire ce tableau, tu te concentres sur la personne et non sur le format du matricule.

    2. Tu construis ton pattern de matricule en fonction de ton besoin.

    Si on veut Filière-Année, on utilise le pattern suivant:
    Rappel: %X$s signifie le Xe paramètre de type string.

    C'est certes moins lisible, mais tu ne construis le pattern qu'une seule fois, lorsque tu détermines comment construire ton matricule.

  7. #7
    Membre confirmé Avatar de bruneltouopi
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 308
    Points : 466
    Points
    466
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    formatter la chaine résultant de la concaténation avec le tableau (méthode format)
    ça te va?
    je ne saisis pas bien.Mais je construis déjà le format du matricule avec une méthode.et j'ai donc la chaine que je veux.par exempe Annee-Filiere-Sexe
    Donc si je fait un de cette chaine j'aurai un tableau de String.Et là on est tous d'accord que en Java 6 le switch ne fonctionne pas avec les String.du coup je ne sais pas comment gongler avec les énumérations qui paraissent une belle solution dans mon cas.

    Pour construire ce tableau, tu te concentres sur la personne et non sur le format du matricule.
    je ne saisis pas bien ton concept de pattern mais je peux dire que la construction du matricule bien que connaissant l'element qui le constitué n'est pas concentré sur la personne mais sur d'autres classes et Kolodz l'a assez bien esquisé.

    Cordialement
    Ce qui ne me tue pas me rend plus fort.

Discussions similaires

  1. Algorithme de génération des emplois du temps
    Par emmye dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 19/04/2010, 00h32
  2. Algorithme de génération de clé
    Par norwy dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 24/05/2008, 10h23
  3. Algorithme de génération de mdp (alphanum et num)
    Par _SamSoft_ dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 11/09/2007, 19h42
  4. Algorithme de génération de textures.
    Par Disciple195 dans le forum SDL
    Réponses: 2
    Dernier message: 18/06/2007, 20h16

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