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 :

Projet - Application de gestion de clients


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 1
    Points : 0
    Points
    0
    Par défaut Projet - Application de gestion de clients
    Bonjour à tous j'ai un projet qui consiste à créer une application en console de gestion de clients mais lorsque j'exécute le code, le programme se termine sans que toute les procédures ne se réalisent.
    aidez moi svp
    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
    /*voila la version améliorée du menu qui m'a été proposée sur un forum
    sur ce forum on m'a conseille d'utiliser des fonctions pour rendre mon code plus lisible et compréhensible*/
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    /* on utilise la directive define d'après mes recherche elle permet de créer des macros qui permet remplacer des substitut à un bout de code
    je vois que la par exemple quand 1 est associe a cheque */
    #define QUITTER 0
    #define CHEQUE 1
    #define FACTURE 2
    #define CONSO 3
     
    //=====================================================================================================================
    //Les structures
     
    typedef struct cheque cheque;
    struct cheque
    {
        int numcheque;
        int numcompte;
        float montantpaye;
        char nomclient[20];
        int codefacture;
    };
     
     
    typedef struct facture facture;
    struct facture
    {
        int code;
        char *nom;
        int bp;
        char ville[20];
        int tel;
        float montant;
        int index_deb;
        int index_fin;
    };
     
     
    //lews compteurs
    int i, j;
    i = 0;
    j = 0;
     
    //variables gloales
    int p_unitaire = 0;
    float taxe = 0;
     
    //Lesd fonctions
     
    float calcul_montant(int d, int f)
    {
        return (f-d)*p_unitaire*(1 + taxe);
    }
     
    void definir_donnees() //une fonction pour definiur le prix unitaire et la taxe
    {
        do
        {
            printf("Entrer le montant unitaire : "); scanf("%d", &p_unitaire);
            printf("Entrer la valeur de la taxe : "); scanf("%f", &taxe);
            system("cls");
        }while(p_unitaire <= 0 && (taxe <= 0 || taxe > 1));
     
    }
     
    //=====================================================================================================================
     
     /* quelqu'un sur un forum m'a conseille d'utilise pour vider la memoire tampon je pense que c pour eviter les
     problemes si par exemple l'utilisateur se trompe a plusieurs reprise en entrant de chaines ou des chiffes non mentionnes */
    void viderbuffer()
    {
        int c;
        while ((c = getchar()) != '\n' && c != EOF)
            ;
    }
     
    void creer_cheque(cheque t_cheque[]) //prend en pararmetre t_cheque
    {
         printf("\n\nCreation Cheque\n\n");
     
        printf("entrez le numero d cheque:\t");
        scanf("%d",&t_cheque[i].numcheque);
        printf("numero du compte:\t");
        scanf("%d",&t_cheque[i].numcompte);
        printf("nom du client:\t");
        scanf("%s",t_cheque[i].nomclient);
        printf("code facture:\t");
        scanf("%d",&t_cheque[i].codefacture);
        //A la creation le montanmt a payer = 0
        t_cheque[i].montantpaye = 0;
        //on incremente le i
        i++;
    }
     
    void creer_facture(facture t_facture[], cheque t_cheque[])
    {
        printf("\n\nCreation Facture\n\n");
     
        m:printf("entrez le code:\t");
        scanf("%d",&t_facture[j].code);
        //on verifie si cecode exite car doit etre associe au cheque client
        int k = 0; int ok = 0;
        for(k = 0; k <= i; k++)
        {
            if(t_facture[j].code == t_cheque[k].codefacture)
            {
                ok = 1;
                t_facture[j].nom = t_cheque[k].nomclient;
     
            }
        }
        if(ok == 0)
        {
            printf("Ce code ne correspond a aucun cheque enregistre.\n");
            goto m;
        }
        printf("bp:\t");
        scanf("%d",&t_facture[j].bp);
        printf("ville:\t");
        scanf("%s",t_facture[j].ville);
        printf("tel:\t");
        scanf("%d",&t_facture[j].tel);
        n:printf("index debut:\t");
        scanf("%d",&t_facture[j].index_deb);
        printf("index fin:\t");
        scanf("%d",&t_facture[j].index_fin);
        //on verifue si c'est ok
        if(t_facture[j].index_deb > t_facture[j].index_fin)
        {
            printf("Erreur lors de l'enregistrement des index\n");
            goto n;
        }
        j++;
    }
     
    void conso(facture t_facture[], cheque t_cheque[])
    {
        int temp, inc, a;
     
        //Facture et cheque sont lies par le code Facture
        printf("Entrer le Code Facture du cheque correspondant : ");
        scanf("%d", &temp);
        int trouve = 0;
        for(inc = 0; inc <= i; inc++)
        {
            if(t_facture[inc].code == temp)
            {
                trouve = 1;
                a = inc;
            }
        }
        if(trouve == 1)
        {
            t_facture[a].montant = calcul_montant(t_facture[a].index_deb, t_facture[a].index_fin);
            printf("\nClient %s\nVille %s\nBP %d\nPrix Unitaire %d\nTaxe %f\n", t_facture[a].nom,t_facture[a].ville,t_facture[a].bp, p_unitaire, taxe);
            printf("\nLe montant de la facture est %2.f", t_facture[a].montant);
            getch();
        }
        if(trouve == 0)
        {
            printf("Ce code Facture n'existe pas");
            getch();
           //conso(t_facture, t_cheque);
        }
     
     
     
    }
    /*fonction menu pour afficher le menu*/
    int menu()
    {
        int choixMenu, res;
     
        printf("\n+---------------------------MENU-----------------------------+");
        printf("\n| (1) | Creer un cheque |");
        printf("\n| (2) | Creer une nouvelle facture    |");
        printf("\n| (3) | Calculer le montant de la consommation         |");
        printf("\n| (0) | quitter");
        printf("\n+------------------------------------------------------------+\n");
        do
        {
            printf("\nchoisissez le numero correspondant a ce que vous voulez faire : ");
            res = scanf("%d",&choixMenu);/* la je pense qu'on a affecte la valeur a la variable res */
            viderbuffer();/* on vide la memoire tampon*/
        }while(res == 0 || choixMenu<QUITTER || choixMenu>CONSO);/*boucle qui demande de refaire le choix si la valeur ne correspond pas*/
        return choixMenu;
    }
     
    int main()
    {
            //definition de deux tableau
     
        cheque t_cheque[100]; //au besoin augmenter les taille
        facture t_facture[100];
     
       int choix;
       while( (choix =menu() ) != QUITTER)
       {
            switch(choix)
            {
                case CHEQUE:
                    system("cls");
                    creer_cheque(t_cheque);
                    system("cls");
                    break;
     
                case FACTURE:
                    system("cls");
                    definir_donnees();
                    system("cls");
                     creer_facture(t_facture, t_cheque);
                     system("cls");
                    break;
     
                case CONSO:
                    system("cls");
                    conso(t_facture, t_cheque);
                    system("cls");
                    break;
            }
            printf("\n\n");
       }
        return 0;
    }

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 22
    Points
    22
    Par défaut
    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
     
    int menu()
    {
        int choixMenu, res;
     
        printf("\n+---------------------------MENU-----------------------------+");
        printf("\n| (1) | Creer un cheque |");
        printf("\n| (2) | Creer une nouvelle facture    |");
        printf("\n| (3) | Calculer le montant de la consommation         |");
        printf("\n| (0) | quitter");
        printf("\n+------------------------------------------------------------+\n");
        do
        {
            printf("\nchoisissez le numero correspondant a ce que vous voulez faire : ");
            res = scanf("%d",&choixMenu);/* la je pense qu'on a affecte la valeur a la variable res */
            viderbuffer();/* on vide la memoire tampon*/
        }while(res == 0 || choixMenu<QUITTER || choixMenu>CONSO);/*boucle qui demande de refaire le choix si la valeur ne correspond pas*/
    Tu as déjà un problème dans la condition de ta boucle. Si tu mets 0 pour quitter et que tu mets while(res==0 || ...) tu ne quitteras jamais ta boucle.


    Tout simplement.

  3. #3
    Membre averti
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Points : 411
    Points
    411
    Par défaut
    Citation Envoyé par Vun100 Voir le message
    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
     
    int menu()
    {
        int choixMenu, res;
     
        printf("\n+---------------------------MENU-----------------------------+");
        printf("\n| (1) | Creer un cheque |");
        printf("\n| (2) | Creer une nouvelle facture    |");
        printf("\n| (3) | Calculer le montant de la consommation         |");
        printf("\n| (0) | quitter");
        printf("\n+------------------------------------------------------------+\n");
        do
        {
            printf("\nchoisissez le numero correspondant a ce que vous voulez faire : ");
            res = scanf("%d",&choixMenu);/* la je pense qu'on a affecte la valeur a la variable res */
            viderbuffer();/* on vide la memoire tampon*/
        }while(res == 0 || choixMenu<QUITTER || choixMenu>CONSO);/*boucle qui demande de refaire le choix si la valeur ne correspond pas*/
    Tu as déjà un problème dans la condition de ta boucle. Si tu mets 0 pour quitter et que tu mets while(res==0 || ...) tu ne quitteras jamais ta boucle.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while(choixMenu<QUITTER || choixMenu>CONSO);
    Tout simplement.
    non, la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(res == 0 || choixMenu<QUITTER || choixMenu>CONSO);
    est correcte.

    dans ce code res est la valeur de retour de scanf (le commentaire inséré dans le code "la je pense qu'on a affecte la valeur a la variable res" est faux, en revanche)

    http://www.cplusplus.com/reference/cstdio/scanf/

    si res vaut 0, c'est que scanf n'a pu capturer aucune donnée correspondant au spécificateur de format %d (par exemple, tu tapes "toto" à la place de 1)

    et il est parfaitement logique, dans ce cas, que le menu soit réaffiché

    s'il y a un entier décimal capturé par scanf, il sera bien dans choixMenu (et res vaudra 1), et le test est correct par rapport aux bornes acceptables.


    Eks

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 22
    Points
    22
    Par défaut
    Je suis un boulet

    Désolé autant pour moi j'ai vraiment pas fait gaffe et du coups je prenais la variable res pour le caractère tapé.

  5. #5
    Membre averti
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Points : 411
    Points
    411
    Par défaut
    @nerdy:

    Ton code fait 228 lignes.

    Au lieu de poster un code de cette taille sans dire exactement quel est ton problème et en disant simplement "lorsque j'exécute le code, le programme se termine sans que toute les procédures ne se réalisent", tu devrais au moins nous donner un jeu de test :

    - avec la séquence d'exécution de ton programme et des données d'exemple
    - le résultat que tu obtiens et qui ne te conviens pas
    - le résultat que tu voudrais obtenir

    ainsi, tu nous permettra :

    - de reproduire ton problème
    - de l'isoler et de t'aider à trouver son origine

    en passant, si tu fais ce travail, tu verras que tu arriveras à isoler une partie des 228 lignes de ton code qui est strictement nécessaire à l'illustration de ton problème, et en faisant cela, il y a une chance sur deux que tu aies la solution sous les yeux et que tu résolves ton problème tout seul.

    Sur le plan purement syntaxique, une tentative de compilation avec les warnings révèle un usage des variables globales i et j en dehors de toute fonction.

    tu fais ceci en dehors de toute fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //lews compteurs
    int i, j;
    i = 0;
    j = 0;
    outre le fait que déclarer des variables globales (variables déclarées en dehors de toute fonction) est une mauvaise pratique (surtout pour de simples compteurs avec des noms génériques si communs), les instructions d'affectation qui suivent sont illégales.

    Soit tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i = 0;
    int j = 0;
    soit tu déclares

    puis dans main, tu fais une déclaration de tes variables globales comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main()
    {
        i = 0;
        j = 0;
    (...)
    pour faire une initialisation explicite de i et j.

    mais utiliser des noms tels que cptr_chq ou cptr_fact me semble préférable pour faire un compteur de chèques et un compteur de factures.

    mieux, tu pourrais éviter les variables globales et réfléchir à faire un passage de paramètres dans tes fonctions comprenant l'état du compteur. Il faudrait substantiellement changer ton code pour cela.


    Eks

  6. #6
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 7
    Points : 4
    Points
    4
    Par défaut besoin d'aide
    Salut a tous et merci pour votre aide
    pour le code en fait j'ai execute l'ancien code par erreur .
    je dois rendre le projet demin et j ne suit pas sur de le terminer pouvez vous m'aider avec des idees pour les autres procedures qui sont :


    une procédure qui permet de rechercher une facture connaissant son chèque.
    • une procédure qui permet d'insérer un nouveau chèque dans le vecteur de chèque
    uniquement si la facture correspondante n'a pas encore été payée.
    Les chèques sont triés dans l'ordre croissant des codes chèque.
    • une procédure qui écrit dans l'ordre alphabétique des noms des clients.
    • une procédure qui affiche la liste des clients d’une ville donnée
    • une procédure qui affiche la liste des clients d’une ville donnée dont le montant à
    payer est supérieure à un certain montant que l’utilisateur précisera
    • une procédure qui prend les chèques dans l'ordre dont il se présente. Pour chaque
    chèque, parcourir la liste des factures pour rechercher la facture correspondante. Si
    cette facture est trouvée, enlever chèque et facture de leur vecteur respectif.
    NB: Envisager les deux cas suivants (proposez une fonction typique de chaque cas):
    o Les chèques et les factures ne sont pas triés.
    o Les chèques et les factures sont triés.
    • une procédure qui affiche la liste des factures non payées.

Discussions similaires

  1. Développement d'un application Gestion/Relation Clients
    Par CMGrille dans le forum Zend Framework
    Réponses: 2
    Dernier message: 22/04/2008, 18h21
  2. Projet Application groupware/gestion de projets: quelle(s) techno(s) ?
    Par n1n0x dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 18/01/2008, 10h46
  3. Conseil projet gestion de clients
    Par rad_hass dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 27/11/2007, 15h47
  4. Réponses: 2
    Dernier message: 07/11/2007, 15h06

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