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 :

Mon programme de gestion des stocks ...


Sujet :

C++

  1. #1
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut Mon programme de gestion des stocks ...
    Bonjour,

    Je travaille actuellement sur mon projet de fin d'étude chez Educatel (...)
    et je dois créer un programme de Gestion des stocks pour une petite pharmacie.

    Je commence donc et je me retrouve pour le moment avec un problème que je n'arrive pas à comprendre.

    Voici tout d'abord mon code (sachez qu'il n'est pas complet! Le main, et une autre classe sont écrite à part)

    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
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<vector>
    #include<string>
     
    using namespace std;
     
    /////////////////////////////////
    //*******************************
    //CLASSE FICHE PRODUIT
    //*******************************
    /////////////////////////////////
     
    class Fichep {
     
    //Définition d'une fiche produit 
    typedef struct TypeProduit
    {
    string nom; //nom du produit
    vector<string>fournisseur; // nom du fournisseur
    vector<string>categorie; // catégorie du produit
    float prix; //pour le prix du produit
    int ref; // la référence du produit
    char rang[5]; // référence du lieu de rangement
    string info; // informations produit
    int qteStock; //quantité en stock actuel
    int qteAlerte; // valeur du stock alerte
    }Fiche;
     
    //Définition du type catégorie
    //pour les différentes catégories de produits
    typedef struct TypeCateg
    {
    vector<char>categorie;
    }Cat;
     
    //définition du type fournisseur
    //pour les différents fournisseurs possibles
    typedef struct TypeFourn
    {
    vector<char>fournisseur;
    }Fournisseur;
     
     
    //Un tableau regroupement toute la marchandise
    vector<Fiche>stock;
     
    public:
          Fichep(); //constructeur
           ~Fichep(); //destructeur
     
           void Creer_Fiche(); //permet de créer une nouvelle fiche produit
           void Modifier_Fiche(); //permet la modification d'une fiche produit
           void Supprimer_Fiche(); //permet de supprimer une fiche produit
           int Recherche_ref(); //permet de rechercher un produit par sa référence
    };
     
    //CONSTRUCTEUR DE FICHEP
    //************
     
    Fichep::Fichep () {
    cout<<"Creation d'une fiche produit par défaut.. "<<endl;
    cout<<endl;
     
     
     
     
    }
     
    //DESTRUCTEUR DE FICHEP
    //***********
     
    Fichep::~Fichep(){
     
    return;
    }
     
     
    //Fonction de creation de fiche produit:
    //**************************************
     
    void Fichep::Creer_Fiche() {
     
    cout<<"********************************"<<endl;
    cout<<"***CREATION UNE FICHE PRODUIT***"<<endl;
    cout<<"********************************"<<endl;
    cout<<endl;
    cout<<endl;
     
    cout<<"Nom du produit: ";
    getline(cin,nom);
    cout<<endl;
    cout<<"Fournisseur: ";
    getline(cin,fournisseur);
    cout<<endl;
    cout<<"Categorie produit: ";
    getline(cin,categorie);
    cout<<endl;
    cout<<"Prix unitaire: ";
    cin>>prix;
    cout<<endl;
    cout<<"Reference produit: ";
    cin>>ref;
    cout<<endl;
    cout<<"Reference rangement (par exemple A1E5 pour Armoire 1 Etagere 5): ";
    cin>>rang;
    cout<<endl;
    cout<<"Notes produit: ";
    getline(cin,info);
    cout<<endl;
    cout<<"Quantité en stock actuel: ";
    cin>>qteStock;
    cout<<endl;
    cout<<"Valeur stock d'alerte: ";
    cin>>QteAlerte;
    cout<<endl;
    cout<<endl;
     
     
    }
     
     
    //Fonction de modification de fiche produit:
    //******************************************
     
    void Fichep::Modifier_Fiche(){
     
    int x,i;
     
    cout<<"**********************************"<<endl;
    cout<<"*** MODIFIER UNE FICHE PRODUIT ***"<<endl;
    cout<<"**********************************"<<endl;
    cout<<endl;
    cout<<endl;
     
    i=recherche_ref(); //Il faut tout d'abord demander une recherche du produit
                       //a modifier ...
     
    if(i!=-1) {
     
    cout<<"Nouveau nom du produit: ";
    getline(cin,nom);
    cout<<endl;
    cout<<"Nouveau Fournisseur: ";
    getline(cin,fournisseur);
    cout<<endl;
    cout<<"Nouvelle categorie produit: ";
    getline(cin,categorie);
    cout<<endl;
    cout<<"Nouveau Prix unitaire: ";
    cin>>prix;
    cout<<endl;
    cout<<"Nouvelle Reference produit: ";
    cin>>ref;
    cout<<endl;
    cout<<"Nouvelle Reference rangement: ";
    cin>>rang;
    cout<<endl;
    cout<<"Nouvelles Notes produit: ";
    getline(cin,infp);
    cout<<endl;
    cout<<"Modification Quantité en stock actuel: ";
    cin>>qteStock;
    cout<<endl;
    cout<<"Modification Valeur stock d'alerte: ";
    cin>>QteAlerte;
    cout<<endl;
    cout<<"Fin de la modification."<<endl;
    cout<<endl;
    cout<<endl;
    }
     
    //ecriref(); //Modification a effectuer ici également
    //il faudra ici implanter de quoi modifier les infos dans le fichier
     
    }
     
     
    //Fonction de suppression de fiche produit
    //***************************************
     
    void Fichep::Supprimer_Fiche(){
     
    int i,x;  
     
    cout<<"**********************************"<<endl;
    cout<<"***SUPPRESSION DE FICHE PRODUIT***"<<endl;
    cout<<"**********************************"<<endl;
    cout<<endl;
    cout<<endl;
     
    i=Recherche_ref();
     
    if(i!=-1) {
     
    stock[i].nom='\0';
    stock[i].fournisseur.clear();
    stock[i].categorie.clear();
    stock[i].prix='\0';
    stock[i].ref='\0';
    stock[i].rang='\0';
    stock[i].info='\0';
    stock[i].qteStock='\0';
    stock[i].qteAlerte='\0';
    cout<<"Article supprime!"<<endl;
    cout<<endl;
    cout<<endl;
     
    }
     
    //ecriref(); //réinscription des données dans le fichier..
    //a faire
     
     
     
    }
     
     
    //Fonction de recherche par référence
    //***********************************
     
    int Fichep::Recherche_ref(){
     
    int x,i,j;
     
    cout<<"****************************"<<endl;
    cout<<"***RECHERCHE DE REFERENCE***"<<endl;
    cout<<"****************************"<<endl;
    cout<<endl;
    cout<<endl;
     
    i=0;
    j=-1;
     
    cout<<"Veuillez entrer la r\202f\202rence de l'article \205 modifier svp: ";
    cin>>x;
     
    for(i=0; i<stock.size)&&(j==-1); i++)
    {
    if(stock[i].ref==x){
    j=i;
    }
    if(j==-1){
    cout<<"R\202f\202rence non valide!"<<endl;
    cout<<endl;
    }
    return j;
    }
    }
    Bon en fait voilà, dans la fonction "Creer_fICHE" je me retrouve avec toute mes variables "inconnues" au bataillons:

    92 : `nom' undeclared (first use this function)
    95 `fournisseur' undeclared (first use this function)
    ...
    etc jusqu'à la fin !

    Idem dans la fonction de modification...

    Je me dit donc qu'il y a un problème avec la déclaration de ma structure "Fiche" ...
    Ou dans ma manière de réceptionner les données? (getline?)

    En passant le curseur sur les variables, DEVC++ reconnait pourtant que nom par exemple est de type string, etc...

    Je pensais m'être tromper dans getline et avais donc modifier
    getline(cin,nom);
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getline(cin,Fiche.nom);
    Mais non..

    Quelqu'un peut il me mettre sur la voie ?

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    je me retrouve avec toute mes variables "inconnues" au bataillons:
    C'est normal, elles ne sont déclarées nul part.

    Je me dit donc qu'il y a un problème avec la déclaration de ma structure "Fiche" ...
    En fait ta structure Fiche est un nouveau Type definie avec typedef.

    Je pense qu'il va falloir revoir la conception de l'ensemble.

  3. #3
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Lucien63 Voir le message
    C'est normal, elles ne sont déclarées nul part.

    Ben si, j'ai bien déclaré toutes mes variables, dans la structure, là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    typedef struct TypeProduit
    {
    string nom; //nom du produit
    vector<string>fournisseur; // nom du fournisseur
    vector<string>categorie; // catégorie du produit
    float prix; //pour le prix du produit
    int ref; // la référence du produit
    char rang[5]; // référence du lieu de rangement
    string info; // informations produit
    int qteStock; //quantité en stock actuel
    int qteAlerte; // valeur du stock alerte
    }Fiche;


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

    Informations professionnelles :
    Activité : aucun

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

    Déjà, le typedef sur une structure, ce n'est nécessaire qu'en C, en C++, la déclaration de type est automatique dés que tu déclare un type personnalisé avec struct, class, union ou enum (et bien évidemment avec typedef )

    Ensuite, il faut faire attention au fait que ce n'est pas parce que tu déclare une structure donnée que tu dispose automatiquement d'une variable du type de cette structure.

    Et, quand bien même, tu viendrais à disposer d'une variable du type de cette structure, si tu veux accéder à l'un de ces membres, tu dois préciser... la variable à laquelle tu fais allusion.

    Actuellement, tout ce que tu sais, c'est qu'il existe une structure (un type) nommé TypeProduit ou Fiche (car les deux sont strictement équivalents), et qu'il y a une variable nommé nom dans cette structure.

    C'est déjà pas mal en soi, mais, si tu veux arriver à définir le nom d'un type de produit, il faut que tu dispose d'une variable du type correspondant

    Pour cela, tu dois déclarer une variable sous une forme proche de
    TypeProduit monproduit;
    puis faire référence à cette variable de manière à préciser que c'est bel et bien la variable nom de cette variable que tu veux récupérer, sous la forme de (selon ton exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getline(cin,monproduit.nom);
    Il faudrait, en outre attirer ton attention sur le fait que l'utilisation d'un tableau de caractères de taille fixe n'est clairement pas la solution adaptée à la gestion des noms de produit... surtout si tu limite "arbitrairement" le nombre de caractères utiles à 4 (avec le caractère '\0' de fin de chaine).

    En effet, si 4 caractères suffisent pour présenter AAS (acronyme de Acide Acethyl Salicilique, ce que l'on trouve dans l'aspirine de base), c'est largement insuffisant si tu décide d'écrire "dafalgan" ou, pire "dehydrobenzperidol", qui sont les noms "commerciaux" de certains produits

    Enfin, je voudrais attirer ton attention sur un principe que l'on nomme RAII (Ressource Acquisition Is Initialisation), qui conseille très fortement de faire en sorte que chaque objet que tu peux créer soit directement correctement initialisé (que les membres de chaque objet que tu crée prennent directement une valeur cohérente par rapport avec le reste).

    Or, une fiche de produit ne t'est d'aucune utilité si le nom, le prix, la quantité en stock et la côte d'alerte ne sont pas définis.

    De plus, il peut être dangeureux de laisser un acces en modification à ces informations:
    • Tu risque de faire passer de l'aspirine pour... du valium si permet la modification sans vérification du nom
    • Tu risque de faire payer de l'eau distillée à prix d'or si tu permet la modification sans vérification du prix (ou inversément de provoquer la faillite du magasin en permettant une diminution du prix sans vérification)
    • Tu risque d'avoir un état de stock qui ne correspond pas sur papier avec la réalité si tu permet la modification sans vérification de la quantité en stock (voire d'atteindre la cote d'alerte sans... etre alerté qu'il est temps d'en recommander)
    • Tu risque enfin d'avoir une cote d'alerte à 100 pour quelque chose qui est vendue deux fois par an (les 29 février et les 31 décembres) ou, inversément, d'avoir une cote d'alerte à 3 pour quelque chose qui est vendu à raison de trois par heure si tu permet la modification sans vérification de la cote d'alerte.
    Tu l'aura compris, ce sont là des situations tout à fait inacceptables, qui justifient de ne pas laisser ces informations "accessible (en modification) au premier venu":
    Une fois le nom défini (à la création de l'objet), il ne doit plus être modifié, et seul un acces "en lecture seule" doit être autorisé
    • Le prix ne doit être modifiable que "par le responsable" et accessible uniquement en "lecture seul" aux autres membres du personnel
    • La quantité en stock doit etre accessible en lecture seule d'un part (pour savoir s'il reste bien, à un moment donné, les 5 boites demandées par un client) et ne doit être modifiée que par le fait qu'on signale une vente ou un arrivage en stock
    • Une fois la cote d'alerte définie (à la création de l'objet), elle ne devrait plus être modifiée (et même le fait de laisser un acces en "lecture seule" devrait être murement réfléchi)

    Bref, en un mot, il faut que tu veilles à une bonne encapsulation de tes données, et donc à la création des fonctions qui iront bien en fonction de ces remarques

    Cela passera, entre autre, par le fait de créer un constructeur prenant en paramètre le nom, le prix, la quantité nominale en stock et la cote d'alerte et par le fait de revoir le moment où tu créera ton objet (qui ne pourra avoir lieu que lorsque tu auras toutes les données nécessaires)
    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

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Ben si, j'ai bien déclaré toutes mes variables, dans la structure, là :
    Ça c'est la définition d'un nouveau type à l'aide de typedef.
    Ce n'est pas des déclarations de variables.

  6. #6
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    Bon !
    Eh bien merci pour cette énooooooooorme réponse koala01

    J'avoue que le choix de la pharmacie, c'est franchement pas évident
    Je peux choisir moi même un autre type d'enseigne mais comme je n'avais pas trop d'idées, j'ai gardé cet exemple, et puis, les défis c'est simpatique

    Et a coté de ça, j'ai également un programme de gestion des fournisseurs à faire à côté !! Mouahah ...

    Je vais donc retravailler là dessus au mieux... sans venir poser trop de questions ici





    Je laisse tout de même le sujet "open" pour la suite, au cas ou ....

    Encore merci!


  7. #7
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut Un programme de gestion des stocks
    Me revoilà après quelques modifications !

    Merci énormément pour cette aide (plus haut) qui m'a été très très utile !

    J'ai mit en place un système de mot de passe, pour toute modification dans mes données, mot de passe qui sera préalablement définit, possibilité de le modifier, et donc en possession unique du "chef".

    Passons les autres modifications j'aimerais savoir si une chose est possible,
    j'explique:

    J'ai mit en place un syteme d'écriture et lecture de fichier avec <fstream> ... pour conserver mes données.
    Seulement un petit "problème" de dérange:

    MA PREMIERE SOLUTION: A chaque création d'une nouvelle fiche produit, j'aurais voulu créer un nouveau fichier texte qui contient uniquement les données de ce produit..
    Vous allez me dire surement que ce n'est pas comme ça qu'il faut fonctionner, vu la quantité énooooorme de produits d'une pharmacie, autant de fichiers texte dans un répertoire serait ridicule... Je pense que oui aussi.

    Dans ce cas je devrais donc (2EM SOLUTION) mettre toutes les données dans un seul fichier.




    Dans ces 2 cas un problème différent se pose pour chacun:

    pour la première solution je ne sais pas comment nommer le fichier texte avec le nom du produit. Voyez par exemple je veut créer une fiche produit pour le produit DAFALGAN, j'aimerais donc que le fichier texte se nomme DAFALGAN.txt ... Mais comment changer le nom du fichier en fonction du nom du produit

    (L'intérêt pour moi de cette solution est que si monsieur le Chef veut imprimer par exemple la fiche info du produit DAFALGAN, il puisse allait chercher le fichier texte correspondant dans le répertoire... En meme temps, vous me direz, pourquoi il voudrais l'imprimer .... Et si il veut la consulter, le programme qui me prend la tete actuellement est là pour ça! Mouai...)



    Pour ma deuxième solution qui a l'air plus "intelligente" mon problème est tel:
    je doit modifier, supprimer ou tout simplement consulter les données d'un seul produit, dans ce fichier texte interminable, existe-t-il un moyen de chercher le nom DAFALGAN par exemple dans ce fichier texte immmmmmmmmmmmense puis ensuite afficher uniquement ces données? (bon pour l'affichage des données, pas compliqué je sais qu'il y a tant de lignes par produit: une boucle et hop)


    Voilà si quelqu'un pourrait me dire comment faire

  8. #8
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Euh... si tu veux faire les choses serieusement, il te faut une base de données.

    SQLite peut tres bien faire l'affaire dans ce cas : simple, portable (je crois) et surtout pas de serveur à installer et configurer...

    www.sqlite.org

  9. #9
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    Euh.... oui !
    Seulement je n'ai jamais travailler sur des bases de données et je ne sais pas du tout comment cela fonction je ne pense pas que c'est ce qu'attend de moi mon professeur (puisque je n'ai pas étudié ça) ou alors c'est que c'est un fou ..


  10. #10
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    Ce dont j'ai réellement besoin c'est de savoir comment (si c'est possible [et je l'espère] )
    puis-je trouver dans mon fichier tel mot par exemple, DAFALGAN ou, dans mon cas, telle référence,

    par exemple:
    Je cherche le produit a la référence: 256A6.
    Ouverture du fichier .... recherche de la référence.... PAF! Trouvée!
    Et hop, lecture, OU modification OU suppression de celle ci...
    ou encore mieux, lecture des lignes suivantes pour l'affichage complète de la fiche.

    Existe-t-il une fonction pour ça ?
    Ou suis je condamnée?

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Bon, concernant la mise en place d'un mot de passe, c'est peut être une solution "excessive" quoi que tout à fait valide de protéger certaines informations...

    Personnellement, j'aurais sans doute créé plusieurs personnes susceptibles d'accéder aux données d'un produit, selon un "niveau d'autorisation" adéquat.

    Nous aurions pu envisager une personne "IllustreInconnu" (qui aurait été n'importe quel client de la pharmacie) pour lequel seul le nom du médicament, les informations d'usage et le prix auraient été fournis avec un acces "en lecture seule".

    (on pourrait également envisager, au mieux, de lui laisser demander si le produit est disponible en stock )

    Le deuxième niveau serait celui de l'employé de la pharmacie, qui peut, bien sur, faire tout ce qu' "IllustreInconnu" peut faire, et qui peut, en plus, signaler qu'une vente est intervenue (retrait du stock) et signaler un nouvel arrivage (ajout au stock)

    Le troisième niveau serait celui de "big boss" de la pharmacie, et il aurait la permission d'aller éventuellement modifier le prix de vente ou la "cote d'alerte" en fonction d'informations qu'il récupérerait par ailleurs

    Cette approche met déjà en évidence plusieurs choses:

    L'interface "minimale" nécessaire pour travailler sur ta fiche produit:

    Selon que tu prévois que n'importe qui puisse se mettre à un pupitre pour chercher des informations sur un produit ou non, cela peut aller de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Produit
    {
        public:
            Produit(std::string const&, string const&,/*...,*/ double, int, int);
            std::string const & nom() const;
            double prix() const;
            std::string const & info() const;
            bool deStock() const; /* pour savoir si le produit est de stock */
            /*...*/
    };
    à
    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
    class TypeProduit
    {
        public:
            TypeProduit(std::string const&, string const&,/*...,*/ double, int, int);
            std::string const & nom() const;
            double prix() const;
            std::string const & info() const;
            bool deStock() const;
            std::string const& etagere() const; /* pour savoir où aller le chercher 
                                                */
            void ajouterStock(int);/* lors d'un arrivage */
            int quantiteStock() const; /* pour savoir si on en a encore X */
            void vente(int);/* lors de la vente du produit, pour diminuer le stock
                             */
            /*...*/
    };
    Et cela nous permet de déterminer qu'il nous faut deux à trois classes qui vont manipuler les produits
    1. une classe "quidam" (dont on peut se passer selon le cas)
    2. une classe "pharmacien", qui est un "quidam" qui peut faire des choses supplémentaires (plusieurs manières sont possible pour le permettre )
    3. une classe "bigboss", qui est un "pharmacien" qui peut faire encore d'autres choses supplémentaires (là aussi, plusieurs manières sont envisageables )


    Pour en venir à l'idée de sauvegarder chaque information dans un fichier séparé, tu peux envisager d'utiliser, tout simplement, le nom du médicament pour créer le nom du fichier de sauvegarde.

    Cela donnerait une fonction proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* fonction permettant de sauvegarder le produit dans un fichier 
     * du même nom
     */
    void TypeProduit::save()
    {
        /* créons une chaine de caractères avec l'extension ad-hoc */
        std::string filename=nom+".txt";
        /* et utilisons la pour ouvrir le flux vers le fichier */
        std::ofstream ofs(filename.c_str());
        /* nous pouvons maintenant sauvegarder les informations que l'on veut :D 
         */
    }
    Cependant, ce n'est clairement pas la meilleure solution pour maintenir les différents produits

    La solution la meilleure serait sans doute effectivement de passer par une base de données, mais, à titre d'exercice, cela revient effectivement à utiliser un bazooka pour essayer d'atteindre un moustique

    A titre personnel, j'affectionne la technique de fichier "ISAM" (fais une recherche sur ce forum si tu ne vois pas de quoi je veux parler, j'ai écris quelques proses intéressantes sur le sujet ), mais, là encore, je ne peux m'empêcher de penser que ce sera peut être "lourd" à gérer si ce n'est qu'à titre d'exercice

    Enfin, et, en toute honnêteté, je crois que c'est la solution vers laquelle je me tournerais dans le cadre particulier d'un exercice, il y a la solution de charger les différents produits directement dans une structure adaptée en début d'application et de sauvegarder les information au moment de quitter l'application.

    En effet, il ne faut pas oublier que les informations contenues dans un fichier sont "gravées dans dans le marbre" et que, s'il est effectivement possible d'envisager de les modifier dans une certaine mesure, les restrictions et limitations imposées aux modifications sont telles qu'il est vraiment plus sage de choisir de "briser le moule" avant de tout réécrire

    Dans ton cas, la structure la plus adaptée pour contenir les différents produits serait sans doute la classe map, qui représente un tableau associatif entre une clé et une valeur.

    La clé ne serait qu'une chaine de caractères de type std::string, représentant le nom du produit et la valeur ne serait rien d'autre que... la structure TypeProduit.

    Bien sur, certains feront valoir que les chaines de caractères ne sont pas vraiment adéquates pour le classement en tant que clé, mais, étant donné que la recherche principale que tu effectuera se basera sur le nom d'un produit et que ce nom est représenté sous la forme d'une chaine de caractères, cela reste quand même "la moins mauvaise" solution
    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

  12. #12
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    Personnellement, j'aurais sans doute créé plusieurs personnes susceptibles d'accéder aux données d'un produit, selon un "niveau d'autorisation" adéquat.

    Nous aurions pu envisager une personne "IllustreInconnu" (qui aurait été n'importe quel client de la pharmacie) pour lequel seul le nom du médicament, les informations d'usage et le prix auraient été fournis avec un acces "en lecture seule".
    .....
    Eh bien justement je ne pense pas qu'un illustre inconnu se pointant dans la pharmacie puisse consulter les stocks de sa pharmacie Pas dans ma pharmacie en tout cas
    Si il veut savoir si ce qu'il vient acheter est là, il n'a qu'à demander au pharmacien!
    Donc en réalité qui consulte tout ceci? Madame la pharmacienne et ses employés, qui font bien toutes le même travail. Elles ont toutes besoin de consulter à certains moment une fiche, ensuite pour ce qui est de la modification, je pense que c'est pareil.. A vrai dire ce n'est pas le plus gros problème qui se pose, surtout que ce n'est qu'un exercice

    Bon ensuite alors effectivement:

    Pour en venir à l'idée de sauvegarder chaque information dans un fichier séparé, tu peux envisager d'utiliser, tout simplement, le nom du médicament pour créer le nom du fichier de sauvegarde.

    Cela donnerait une fonction proche de .........

    ...
    Merci c'est bien ce à quoi je pensais, c'est vrai que c'est un peu, comment dire, envahissant ? comme méthode mais j'avoue que les suivantes sont effectivement "balaises" pour un exercice.

    Dans ton cas, la structure la plus adaptée pour contenir les différents produits serait sans doute la classe map..
    Connait pas du tout! Je vais essayer de lire des tutaux si il y a, en espérant que cela ne soit pas trop "compliqué", sinon mon correcteur va se demander ou j'ai chopé ça (déjà qu'il me dit que j'en fait plus que nécessaire )

    Hum pas évident en tout cas, j'en suis pas encore sortie !!

    A titre d'exemple, est-il possible de rechercher une chaine de caractère par exemple "Bonjour" dans un fichier texte?
    Pour ensuite, lire ce qui suit à partir de là, ou encore modifier cette chaine ou encore supprimer UNE ligne voulue dans le fichier pour la modifier?
    Voyez ce que je veux dire

    Car en fait mon réel problème et la manipulation de toutes ces données
    Je dois soit afficher toutes les fiches (facile) soit une par une, selon le choix de monsieur l'utilisateur (là il me faut chercher le nom du produit puis afficher X lignes à la suite correspondant aux infos de ce produit...) soit carrément supprimer toutes les infos d'un produit, ou encore modifier certaines infos!
    Pas trop évident

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Citation Envoyé par mouchT8 Voir le message
    Eh bien justement je ne pense pas qu'un illustre inconnu se pointant dans la pharmacie puisse consulter les stocks de sa pharmacie Pas dans ma pharmacie en tout cas
    Si il veut savoir si ce qu'il vient acheter est là, il n'a qu'à demander au pharmacien!
    Cette solution d'un "illustre inconnu" avais surtout pour objectif de te montrer qu'il était tout à fait possible de multiplier les niveaux d'autorisation

    Mais une telle classe aurait tout à fait sa place si, par exemple, l'application devait être liée à un site internet...

    Le visiteur du site peut souhaiter disposer de certaines informations sur l'utilisation du produit (posologie, effets secondaires, risques en cas d'allètement ou autres), ainsi que
    • savoir le prix (pour "budgétiser" l'achat du médicament)
    • savoir s'il est de stock (pour ne pas devoir faire le déplacement "inutile")

    Mais, effectivement, dans le cadre d'une pharmacie "classique", cette classe est parfaitement inutile
    Donc en réalité qui consulte tout ceci? Madame la pharmacienne et ses employés, qui font bien toutes le même travail. Elles ont toutes besoin de consulter à certains moment une fiche, ensuite pour ce qui est de la modification, je pense que c'est pareil.. A vrai dire ce n'est pas le plus gros problème qui se pose, surtout que ce n'est qu'un exercice
    En fait, ce sur quoi je voulais attirer ton attention lors de ma première intervention, c'est sur le fait que les données en elles-même ne doivent pas être accessibles "partout dans le code" et que les modifications, s'il y en a, doivent être induites par un comportement qui validera le fait que cette modification peut être apportée et que l'objet qui était cohérent avant la modification soit toujours dans un état cohérent après...

    Par exemple, le comportement qui correspond à une vente (et donc à une fonction publique du même nom) doit refuser la vente si tu essaye de vendre dix boites d'un médicament alors qu'il n'y en a plus qu'une en stock ()

    Merci c'est bien ce à quoi je pensais, c'est vrai que c'est un peu, comment dire, envahissant ? comme méthode mais j'avoue que les suivantes sont effectivement "balaises" pour un exercice.
    Le fait est que la gestion de la persistance est un problème récurrent dans presque toutes les applications que tu pourra envisager...

    Même pour un exercice, si tu souhaite récupérer le informations d'une exécution à l'autre de ton application, il faut bien t'assurer qu'elles seront accessibles quelque part

    Et le seul endroit où tu aies une chance de les récupérer, c'est... sur un espace de stockage (qu'il s'agisse d'un serveur "décentralisé", du disque dur ou d'une clé usb )
    Connait pas du tout! Je vais essayer de lire des tutaux si il y a, en espérant que cela ne soit pas trop "compliqué", sinon mon correcteur va se demander ou j'ai chopé ça (déjà qu'il me dit que j'en fait plus que nécessaire )
    C'est complexe, mais pas *trop* compliqué... Du moins, une fois que tu as compris le principe

    L'avantage de la classe map, c'est qu'elle est fournie en standard par le langage, dans l'espace de noms std par simple inclusion du fichier d'en-tête <map>.

    Quelque part, j'estime que la connaissance du C++ passe par la connaissance de ce que le langage peut apporter pour faciliter le travail et nous éviter les problèmes... Les différents conteneurs fournis par le standard en fait réellement partie

    Et, le conteneur le plus adapté à la recherche d'un élément particulier (susceptible d'être modifié) est... la map, qui permet, sur base d'une donnée qui permet d'identifier chaque élément de manière unique (la "clé") l'élément correspondant (la "valeur") et ce, en rendant la recherche la plus rapide possible .

    A titre d'exemple, est-il possible de rechercher une chaine de caractère par exemple "Bonjour" dans un fichier texte?
    Oui, c'est possible...

    Mais, si tu ne sais pas à la base où il se trouve, tu sera condamné(e) à parcourir l'ensemble du fichier depuis le début pour la trouver...

    Et, si tu as 3.000.000 de chaines à parcourir avant de trouver celle qui t'intéresse, ca risque de prendre du temps
    Pour ensuite, lire ce qui suit à partir de là,
    Oui, modulo la réserve que j'ai faite plus haut
    ou encore modifier cette chaine ou encore supprimer UNE ligne voulue dans le fichier pour la modifier?
    Pas sans "casser le moule"...

    Une fois le fichier écrit, si tu veux y apporter des modifications (exception faite d'ajouts en fin de fichier), tu dois copier la partie qui précède la modification dans "un autre" fichier, écrire la modification quand elle apparait (ce qui peut correspondre au fait de décider de ne pas écrire une partie de ce qu'on lit), puis écrire ce qui reste inchangé après, pour, enfin, remplacer le fichier d'origine par le fichier "de copie".

    C'est le prix à payer pour pouvoir récupérer les informations entre deux utilisation de l'application
    Voyez ce que je veux dire
    Oui, c'est la raison pour laquelle je te conseille de récupérer l'ensemble des informations contenues par le fichier au début de l'application, et de les réécrire, si besoin est, lorsque l'application s'arrête...

    D'autant plus que l'acces à des données venant du disque dur est définitivement plus lent que l'acces à des données se trouvant en mémoire
    Car en fait mon réel problème et la manipulation de toutes ces données
    Je dois soit afficher toutes les fiches (facile) soit une par une, selon le choix de monsieur l'utilisateur (là il me faut chercher le nom du produit puis afficher X lignes à la suite correspondant aux infos de ce produit...) soit carrément supprimer toutes les infos d'un produit, ou encore modifier certaines infos!
    Pas trop évident
    C'est exactement le genre de comportements que la classe map dont je parle plus haut facilite énormément...

    Bien sur, il faut comprendre que la classe est une classe qui utilise les template mais, une fois cela compris, la suppression de toutes lesdonnées correspondant à une produit peut simplement être envisagée comme le fait de... supprimer le produit de la liste.

    Cela te donnerait un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* soit nomprod est une chaine de caractères représentant le nom du 
     * produit à supprimer et lamap est l'objet de type 
     * std::map<std::string,TypeProduit> qui contient l'ensemble des produits
     */
    /* déclarons un itérateur sur la map et assignons y le résultat
     * de la fonction de recherche
     */
    std::map<std::string,TypeProduit>::iterator ite= lamap.find(nomprod);
    /* si on a trouvé un produit équivalent, nous le supprimons */
    if(ite!=lamap.end())
        lamap.erase(ite);
    De même, si tu souhaites accéder à une fonction d'un élément trouvé, le code ressemblera à
    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
    /* soit nomprod est une chaine de caractères représentant le nom du 
     * produit à supprimer et lamap est l'objet de type 
     * std::map<std::string,TypeProduit> qui contient l'ensemble des produits
     */
    /* déclarons un itérateur sur la map et assignons y le résultat
     * de la fonction de recherche
     */
    std::map<std::string,TypeProduit>::iterator ite= lamap.find(nomprod);
     
    /* si on a trouvé un produit équivalent, nous pouvons invoquer la fonction
     * en question en passant par la "valeur" de l'itérateur
     */
    if(ite!=lamap.end())
    {
       /* l'itérateur de la map représente une clé, identifiée par first et
        * une valeur, identifiée par second...
        */
        (*it).second.laFonctionQuiMinteresse();
    }
    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

  14. #14
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    Une fois le fichier écrit, si tu veux y apporter des modifications (exception faite d'ajouts en fin de fichier), tu dois copier la partie qui précède la modification dans "un autre" fichier, écrire la modification quand elle apparait (ce qui peut correspondre au fait de décider de ne pas écrire une partie de ce qu'on lit), puis écrire ce qui reste inchangé après, pour, enfin, remplacer le fichier d'origine par le fichier "de copie".

    C'est le prix à payer pour pouvoir récupérer les informations entre deux utilisation de l'application

    Non d'une pipe !!
    Ah oui quand même ...
    Effectivement je viens d'essayer la solution du "je crée un fichier texte par produit": facile! Mais alors maintenant que je vois comment en modifier ou supprimer le contenu .....


    C'est exactement le genre de comportements que la classe map dont je parle plus haut facilite énormément...

    Bien sur, il faut comprendre que la classe est une classe qui utilise les templates....
    Oula!


    Citation:
    A titre d'exemple, est-il possible de rechercher une chaine de caractère par exemple "Bonjour" dans un fichier texte?
    Oui, c'est possible...

    Mais, si tu ne sais pas à la base où il se trouve, tu sera condamné(e) à parcourir l'ensemble du fichier depuis le début pour la trouver...

    Et, si tu as 3.000.000 de chaines à parcourir avant de trouver celle qui t'intéresse, ca risque de prendre du temps

    Bon OK on laisse tomber cette idée merd****




    Bon, alors finalement j'ai face à moi 2 solutions?

    1) Comprendre et mettre en place la solution "map"

    ou alors

    2) Continuer dans mon idée de "un fichier par produit" et donc en résumé :
    copier la partie qui précède la modification dans "un autre" fichier, écrire la modification quand elle apparait (ce qui peut correspondre au fait de décider de ne pas écrire une partie de ce qu'on lit), puis écrire ce qui reste inchangé après, pour, enfin, remplacer le fichier d'origine par le fichier "de copie"
    ce qui n'a pas l'air évident, vu que je ne sais pas comment m'y prendre!
    Ou alors je supprime carrément le fichier si je doit le modifier et le réécrit une fois les données modifiées enregistrées

    Hummmm....

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Mais, si tu prend l'option de créer un fichier par produit, il te "suffit", en gros, lorsque tu apporte des modifications aux information de ce produit de... réécrire la totalité du fichier en question

    Mais l'idée de base reste toujours de récupérer les informations du fichier dans la structure "adéquate", de faire les modifications sur "ce qui est en mémoire" et d'écrire le fichier
    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

  16. #16
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    D'accord

    Et comment "supprimer" un fichier texte?
    Quelle fonction s'occupe de ça?
    Modifier ok maintenant j'ai compris, afficher également, mais supprimer le fichier?
    Je connais quoi faire pour lire ou écrire dans un fichier mais pas pour supprimer ce fichier et je ne trouve pas d'infos là dessus sur le net

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Pour cela, malheureusement, il n'y a, à ma connaissance, pas de procédure unifiée (comprend: qui puisse s'appliquer de manière portable), du moins, sans passer par boost::filesystem...

    Si ton correcteur est déjà enclin à criser seulement parce que tu utilise les possibilités offertes par le langage, tu risque de le voir littéralement exploser si tu te mets à utiliser boost (que tu pourrais d'ailleurs aussi envisager d'utiliser pour gérer la persistance avec boost::serialize )

    Bref, tout cela pour dire que, pour répondre à cette question, il faut que nous sachions quel est ton système d'exploitation

    Et puis, je n'ai peut être pas assez insisté sur ce fait, mais, l'idéal reste quand même de ne manipuler qu'un seul fichier contenant l'ensemble des produits, et que tu te contente "d'écraser" chaque fois qu'il a été modifié

    Une autre solution *pourrait*, si tu tiens à utiliser un fichier par produit, de créer un fichier supplémentaire qui se contenterait de contenir la liste des produits "actifs" (pour lesquels il faut être en mesure de disposer des différentes informations).

    Il pourrait se présenter sous la forme simple d'une liste de noms de médicaments proche de
    Code x : 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
    Aspirine
    ...
    bio fer
    ...
    dafalgan 500
    dafalgan 1000
    ...
    D-cure
    ...
    dehidrobenzperidol
    ...
    haldol
    ...
    narcan
    ...
    NaCl 0.5% 10ml
    ...
    Comme le nom du fichier est composé du nom du produit, tu pourrais charger ce fichier dans un tableau de chaines de caractères (ou mieux dans un set de chaines de caractères, car il te permet de les récupérer triées).

    Si tu veux rajouter ou supprimer un produit, il te suffit de rajouter ou de supprimer le nom à cette liste (et de réécrire le fichier), et, ma foi, un fichier de test brut ne prenant pas tellement de place que cela, tu peux même envisager (dans un premier temps en tout cas) de laisser les fichiers "inutilisés" là où ils sont
    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

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Points : 193
    Points
    193
    Par défaut
    Bonjour.

    Pourquoi ne pas utiliser un seul et unique fichier ini ?
    Avec en section, le nom du médoc (ou la référence, peu importe), et les informations (quantité, ... ) stockées dans des clés.

    La recherche de section est rapide, le fichier structuré, la modification aisée ... c'est tout bon pour ce genre de projet non ?
    Je dit une bêtise là ?

    Cordialement,
    PKO
    Quand c'est trop, c'est pas bon !

  19. #19
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par koala01 Voir le message

    Bref, tout cela pour dire que, pour répondre à cette question, il faut que nous sachions quel est ton système d'exploitation
    Windows XP pro sp2 !


    Et puis, je n'ai peut être pas assez insisté sur ce fait, mais, l'idéal reste quand même de ne manipuler qu'un seul fichier contenant l'ensemble des produits, et que tu te contente "d'écraser" chaque fois qu'il a été modifié
    Oui mais dans ce cas, il me faudra réécrire TOUTES les fiches contenu dans ce fichier à chaque modification, c'est trop casse tête
    Ou encore réussir à trouver les 6 lignes correspondants à DAFALGAN par exemple dans ce fichier gigantesque et ensuite les modifier ou supprimer et là j'avoue...

    Une autre solution *pourrait*, si
    ....
    J'aime bien cette solution
    Je pense que c'est la meilleure des choses à faire peut etre vu mon niveau en tout cas ? A méditer encore un peu...

    Pourquoi ne pas utiliser un fichier ini ?
    Avec en section, le nom du médoc (ou la référence, peu importe), et les informations (quantité, ... ) stockées dans des clés.

    Je dit une bêtise là ?
    Je ne sais pas si c'est une bêtise, je ne connais pas

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Citation Envoyé par Altess Voir le message
    Bonjour.

    Pourquoi ne pas utiliser un seul et unique fichier ini ?
    Avec en section, le nom du médoc (ou la référence, peu importe), et les informations (quantité, ... ) stockées dans des clés.

    La recherche de section est rapide, le fichier structuré, la modification aisée ... c'est tout bon pour ce genre de projet non ?
    Je dit une bêtise là ?

    Cordialement,
    PKO
    Tu ne dis pas une bêtise à proprement parler, car, un fichier ini est l'une des possibilités de format de fichier, mais, autrement, tu semble ne pas avoir compris que le débat a plutôt trait à l'utilisation d'un fichier unique contre l'utilisation de fichiers multiples

    Finalement, un fichier ini n'est jamais qu'un fichier texte qui suit certaines conventions... Et le problème n'est pas forcément là
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2013] Programme Gestion des stocks
    Par marlene65 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/12/2014, 11h12
  2. [DB2] calcul, gestion des stocks
    Par moineaux44 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/06/2006, 13h06
  3. Gestion des Stocks
    Par laklak dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/06/2006, 14h52
  4. [MS-DOS] Application de gestion des stocks
    Par ¤dinky¤ dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 30/01/2006, 14h25
  5. gestion des stocks
    Par gekondo dans le forum Access
    Réponses: 1
    Dernier message: 30/09/2005, 11h41

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