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 :

Gestion de données avec C++?


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut Gestion de données avec C++?
    Bonjour,

    Je dois réaliser un programme qui doit lire un code barre et vérifier si il a déjà été typer ou pas, en gros:

    - Lire le code barre avec une douchette, ça renvoie un numéro.
    - Vérifier si ce numéro existe et si il a déjà été typer ou pas
    - Renvoie Ok ou Erreur si existe pas ou déjà typer

    Je dois stocker ces numéros à une place, venant du monde de PHP et Mysql cela aurais été facile pour moi, mais la je dois faire en C++ afin d'obtenir un simple .exe que le client lance snas devoir installer Wamp, etc

    Je suis de tout façon obliger d'utiliser une base de données? Je pensais prendre Sqlite, mais le client devra quand même l'installer?

    Sinon dans un simple fichier texte, mais comment faire recherches dedans? Et surtout comment vérifier si il a déjà été typer ou non?

    Bref que mon conseillez-vous de faire?

    Merci d'avance

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Nie,

    Il est clair que le mieux est d'utiliser une base de données. Comme elle va être simple, Sqlite suffira sans problème.

    Ça tombe bien, Sqlite n'a pas besoin d'être installé, et on l'utilise sans problème avec à peu près n'importe quel langage (perso : Java, C++ avec Qt).

    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 616
    Points : 30 635
    Points
    30 635
    Par défaut
    Salut,

    A vrai dire, n'importe quel système de sérialisation peut parfaitement faire l'affaire

    Tu pourrais, tout aussi bien, te contenter d'un "simple" fichier xml ou autre, ce pourrait encore être bon

    Le principal problème auquel tu sera confronté pour choisir effectivement la méthode de stockage sera de choisir la solution la plus adaptée en fonction de tes besoins connexes (portabilité, sécurité, volume des données à stocker, possibilité d'accès à distance ou non, ...)

    De plus, le fait de savoir si le numéro a déjà été introduit ne présentera, à terme, sans doute qu'une des étapes, car on peut dores et déjà prévoir le fait qu'il faudra:
    • pouvoir rajouter un identifiant s'il n'existe pas (selon certaines règles, très certainement)
    • pouvoir récupérer des informations sur base d'un numéro existant
    • pouvoir compter le nombre de fois qu'un code barre est scanné (histoire de "mettre à jour un inventaire" )
    • un tas de choses auxquelles je ne pense pas forcément maintenant
    Il serait sans doute dommage de partir sur quelque chose de "décidément trop simple" (comme un bête fichier) si c'est pour se rendre compte que l'on a en réalité besoin de la puissance d'une base de données par la suite, mais, a contrario, il serait tout aussi dommage de sortir l'artillerie lourde d'une BDD pour se rendre compte qu'un simple fichier texte aurait en l'occurrence pu suffire
    [EDIT]Dans une premier temps, et à titre de POC (pour déjà t'habituer à la récupération du numéro du code barre), tu pourrais t'orienter vers boost::serialize et choisir l'un des format qu'il propose (texte, binaire ou xml) au choix
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 208
    Points
    208
    Par défaut
    Bonjour,
    Tout dépend du but de ce programme.

    S'il s'agit d'un simple exercice, tu peux même te contenter de placer test codes barre + le flag dans un fichier CSV (séparateur point virgule par ex) et y accéder avec le driver ODBC TEXTE.

    Ceci aurait l'avantage, si le besoin se faisait sentir, de pouvoir remplacer assez facilement le fichier par une vraie base, en changeant simplement la source de données et en utilisant une driver ODBC adapté à la nouvelle base.

    cordialement

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Si tu n'as aps un nombre de données déraisonnables, tu peux effectivement utiliser un simple fichier texte, le lire entièrement en mémoire au lancement du programme, et le réécrire soit quand tu quitte, soit à chaque modification, soit quand l'utilisateur le demande.

    Pour effectuer des recherches en mémoire, je te conseille de stocker ces données dans un set ou une map (selon qu'il y a ou pas des informations associées au numéro).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Merci pour vos réponses rapide.

    C'est une petite application qui va gérer des billets d'entrée pour une soirée, chaque billet à un code barre unique.

    Je pense que le choix de Sqlite est mieux qu'un simple fichier, en effet une fois la soirée terminer, il faudra faire des stats: combien de billet ont été typer? A quelle heure les personnes sont venues, etc...

    Sqlite n'a pas besoin d'être installé? C'est à dire? Il est par défaut sur les PC?

    Merci

  7. #7
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Je n'ai pas vu les messages entre temps, il n'y aura pas beaucoup de données, disons 1000 numéros, voir au max 2500

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Moi, franchement, je ne m’embêterais pas avec une BdD pour si peu. Je ferais de simples fichiers en format texte (valeurs sépérées par une tabulation, par exemple), sauvés avec à chaque fois un nom différent pour éviter tout problème en cas de fausse manip, et sauvés à chaque entrée (ça fera un millier de fichier, oui, et ?).

    Pour l'analyse après, tu ouvriras ton fichier avec n'importe quel tableau sans soucis.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 616
    Points : 30 635
    Points
    30 635
    Par défaut
    Citation Envoyé par nesswaw Voir le message
    Je pense que le choix de Sqlite est mieux qu'un simple fichier, en effet une fois la soirée terminer, il faudra faire des stats: combien de billet ont été typer? A quelle heure les personnes sont venues, etc...

    Sqlite n'a pas besoin d'être installé? C'est à dire? Il est par défaut sur les PC?

    Merci
    Non, ca veut dire que c'est une BDD "embedded": du moment que tu dispose de la blibliothèque ad hoc sur ta machine de développement, tu programme directement ce que tu veux faire et il n'y pas besoin d'installer quoi que ce soit sur l'ordinateur sur lequel l'application devra tourner

    Ceci dit, effectivement, pour un "si faible volume de données", je ne m'embêterais pas avec sqlite: un simple fichier texte sera amplement suffisant
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Mais après comment manipuler ce fichier? C'est des fonctions comme en C je pense? Le plus simple est de faire un fichier style CSV? Avec un numéro par ligne:

    12345678;00-00-0000 00:00
    12459614;00-00-0000 00:00

    Et une fois un numéro typer, il faudrait que la ligne ressemble à ça:

    12459614;21-01-2013 19:47 => La date me permettra de checker si le numéro est déjà été typer ou pas

  11. #11
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Je partirai sur 2 fichiers:
    le 1er contient la liste des numéros valide
    le 2ere contient la liste des numéros typés + la date / heure

    Comme ça tu construit un set qui contient les numéros valides et un autre set (ou map) qui contient les numéros typés a partir du dernier fichier enregistrés (pas besoin de vérifier si la date / heure est nulle pour l'ajouter).
    Et pour tester si le numéro est valide et n'a pas été typés, c'est 2 recherches dans des set / map.

  12. #12
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Ok, merci pour vos réponses, je vais faire quelques tests avec QT

  13. #13
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Avec odbc ou sqlite, c'est presque le début de l'usine à gaz ama.
    Avec un fichier "plat" custom lu et sauvegardé en une fois, c'est pas très élégant, et pas vraiment sûr (sauf en changeant le nom du fichier à chaque sauvegarde comme le suggère JolyLoic).

    En fait il faudrait un système de sérialisation avec indexation intégrée.
    Ou alors des containers non volatiles, c-à-d des set/map/hash sur disque et non en mémoire, et récupérables bien sûr d'une éxecution à l'autre.

    Mais je ne sais pas si ça existe en C++, et comme les données ne sont pas énormes, bah va au plus basic.
    Attention quand même à la robustesse, il s'agit de ne pas perdre les données de la soirée pour cause d'incident mineur (comme trébucher sur la prise de courant ).

Discussions similaires

  1. [XL-2013] Gestion de données avec macro
    Par sssamsss dans le forum Excel
    Réponses: 8
    Dernier message: 03/04/2015, 11h49
  2. [PHP 5.3] Tuto gestion de données avec fichiers plats ?
    Par Toulousaing dans le forum Langage
    Réponses: 1
    Dernier message: 20/02/2013, 13h56
  3. Gestion de données avec grand nombre d'accès
    Par olivier21c dans le forum C++
    Réponses: 6
    Dernier message: 14/04/2010, 13h37
  4. Gestion des données avec MS sql server 2005
    Par rezgui_fawzi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/01/2008, 15h55
  5. Réponses: 5
    Dernier message: 06/05/2007, 14h33

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