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

 C++ Discussion :

comparaison de valeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 11
    Par défaut comparaison de valeur
    Bonjour a tous

    Je voudrais ajouter un client avec le code ci dessous et ça marche très bien mais j'aimerais vérifier que le client n'existe pas déjà et la c'est le flou total. Est-ce que vous pourriez m'aider, je passe mon examen la semaine prochaine !

    Merci

    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
    #include struct tclient
         {
                int id;
                int age;
                char nomcli[20+1];
                char prenom[20+1];
             };
     
    void ajoutercl() 
    {
     
    char nomcli[20+1];
          char supr[20+1];
          tclient info;
          int choix;
          int nb;
          FILE * fclient;
     
     
     
     
     // Ouvrir en lecture
     fclient=fopen("fclient.dat","a");
     cout<< " Saisir le nom du client " << endl;
     cin>>info.nomcli,50;
     
     
     cout<< " Saisir le prenom " << endl;
     cin>>info.prenom;
     
     cout<< " Saisir l'identifiant du client " << endl;
     cin>>info.id; 
     
     cout<< " Saisir l'age du client " << endl;
     cin>>info.age;
     
     
     
       // Ecriture des infos ds le fichier
     
       fwrite (&info, sizeof(struct tclient), 1, fclient);
     
       // Fermer flivre
     
       fclose(fclient);
    }

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include struct tclient
         {
                int id;
                int age;
                char nomcli[20+1];
                char prenom[20+1];
             };
    Tu es sûr que ça marche ?

    En C++ tu peux écrire dans un fichier avec ofstream.

    Tu peux aussi redéfinir les opérateur '>>' et '<<' pour facilité les syntaxes de saisie et d'enregistrement d'un client.

    Sinon là tu ne stocke qu'un seul client.
    Il faudrait que tu utilise un std::map avec comme clé un string étant la concaténation du prénom et du nom et comme valeur un pointeur ou une référence sur un client.

    La vérification de l'existence d'un client se fera très facilement grâce à la méthode find.

  3. #3
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Salut,

    je pense qu'il y a déjà une petite erreur de copier coller au début. M'enfin ça n'a pas l'air très important.

    Tu as tout tes clients qui sont dans le fichier, et tu ne les stockes que là. Pour vérifier qu'un client existe, la technique c'est de lire le fichier, et d'extraire chaque structure client_t l'une à la suite de l'autre jusqu'à la fin du fichier. Tu compares chaque structure par rapport à ce que tu cherches.

    Si tu trouves une structure égale, alors c'est bon, sinon tu atteints la fin du fichier avant.

    Néanmoins, il y a une technique plus performante qui ne nécessite pas de lire dans ton fichier tout le temps.

    Tu peux garder un tableau de client_t, par exemple : std::vector<client_t> mes_clients; ou si tu ne connais pas la STL et que tu fais plutôt du C client_t* mes_clients. Tu le gardes en mémoire et tu le passes en paramètre à chacune de tes fonctions qui font les modifications ou recherche directement sur ce tableau (beaucoup plus rapide car déjà en mémoire vive).

    Maintenant tu peux soit, écrire dans le fichier à la fin de chacune des fonctions, ou alors prévoir une options "sauvegarder" qui écrit la structure dans le fichier qu'à ce moment.

    Peut-être que la solution avec le tableau te semble plus compliqué mais en fait ça ne l'est pas spécialement, à part pour gérer l'allocation dynamique de ce tableau (ce qui n'est pas le cas si tu peux utiliser un std::vector).

    Bonne chance

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 11
    Par défaut
    ah je pensais faire ca avec un "==" et un booleen, vous pensez que ca peux marcher?
    mais je vais aussi essayer de suivre vos conseils !

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Tu peux en effet redéfinir l'opérateur d'égalité pour voir si ton client est déjà présent.
    Mais je te conseillerais l'utilisation d'un std::map :
    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
     
    struct
    {
          //...
    }Client;
     
     
    std::map<std::string, Client> listeClient;
     
    //insérer un client
    std::string nom, prenom;
    listeClient[ nom + prenom ]; //créé automatiquement un nouveau client.
    listeClient[nom + prenom].nom = nom; //donne un nom au nouveau client
    ...
     
    //vérifier son existance :
    if(listeClient.find(nom + prenom) == listeClient.end() )
             //client inexistant
    else
             //client existant
     
     
    //supprimer ta liste :
    listeClient.clear();
    Par contre pourquoi utiliser des tableaux de char pour nom prénom au lieu d'utiliser un std::string?

Discussions similaires

  1. Réponses: 10
    Dernier message: 07/12/2006, 20h52
  2. GTK+ comparaison entier valeur du pointeur
    Par Emyleet dans le forum GTK+ avec C & C++
    Réponses: 10
    Dernier message: 21/07/2006, 15h28
  3. comparaison de valeur sur un résultat de requete
    Par griese dans le forum Langage
    Réponses: 5
    Dernier message: 28/06/2006, 15h23
  4. comparaison de valeurs
    Par Flobynaldo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/05/2006, 16h56
  5. Comparaison de valeurs stockees dans un meme champ
    Par Tartenpion dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/02/2006, 21h33

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