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 : gestion d'une agence de voyage


Sujet :

C

  1. #1
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Projet : gestion d'une agence de voyage
    Bonsoir les amis !
    J'ai un projet de programmation à rendre en fin de semaine et la majorité des fonctions ne marchent pas :s S'il vous plait aidez moi si vous avez un peu de temps ! Merci bcps ! le sujet c'est " gestion d'une agence de voyage " voici le code de la première fonction qui ne fonctionne pas :
    ( ajouterprestation )

    Mille mercis pour votre aide !

    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
    #include<stdio.h> 
    #include<conio.h> 
    #include<stdlib.h> 
    #include<string.h> 
    #include<ctype.h> 
    #define TAILLE 30 
     
    #define FICHIER "text.txt" 
    typedef struct date 
    { 
    int mois; 
    int jour; 
    int annee; 
     
    }date; 
     
     
     
     
     
    typedef struct prestation 
    { 
    char * ville; 
    char * designation; 
    date datedebut ; 
    date datefin ; 
    int prix; 
    int nbplaces ; 
    struct prestation * psuivante; 
    }prestation; 
     
     
     
     
    typedef struct ville 
    { 
    char nomVille[25]; 
    prestation * listeprestations; 
     
    }ville; 
     
     
     
     
    date SaisieDatedebut() 
    { 
    prestation pp; 
    printf(" \tDonner la date de debut de la prestation :\n"); 
    do 
    { 
    printf(" \tJour:(jj)\t"); 
    scanf("%d",&pp.datedebut.jour); 
    }while((pp.datedebut.jour<=0)||(pp.datedebut.jour>31)); 
    do 
    { 
    printf(" \tMois:(mm)\t"); 
    scanf("%d",&pp.datedebut.mois); 
    }while((pp.datedebut.mois<=0)||(pp.datedebut.mois>12)); 
    do 
    { 
    printf(" \tAnnee:(aaaa)\t"); 
    scanf("%d",&pp.datedebut.annee); 
    }while((pp.datedebut.annee<=1930)||(pp.datedebut.annee>2010)); 
    return pp.datedebut; 
    } 
     
     
     
     
    date SaisieDatefin() 
    { 
    prestation pp; 
    printf(" \tDonner la date de fin de la prestation : \n"); 
    do 
    { 
    printf(" \tJour:(jj)\t"); 
    scanf("%d",&pp.datefin.jour); 
    }while((pp.datefin.jour<=0)||(pp.datefin.jour>31)); 
    do 
    { 
    printf(" \tMois:(mm)\t"); 
    scanf("%d",&pp.datefin.mois); 
    }while((pp.datefin.mois<=0)||(pp.datefin.mois>12)); 
    do 
    { 
    printf(" \tAnnee:(aaaa)\t"); 
    scanf("%d",&pp.datefin.annee); 
    }while((pp.datefin.annee<=1930)||(pp.datefin.annee>2010)); 
    return pp.datefin; 
    } 
     
     
     
     
     
    ville T[TAILLE]; 
    int n=0; 
     
     
     
     
    int ajouterprestation(char * nomV, char * designation, int prix, int nbplaces) 
    { 
    int n=0; 
    int b ; 
    int i; 
    prestation *Npres=(prestation*) malloc(sizeof(prestation)); 
    if(Npres==NULL) return 0; 
    strcpy(Npres->designation,designation); 
    Npres->ville=nomV; 
    Npres->prix=prix; 
    Npres->nbplaces=nbplaces; 
    Npres->datedebut=SaisieDatedebut(); 
    Npres->datefin=SaisieDatefin(); 
    Npres->psuivante=NULL; 
    for(i=0;i<n;i++){ 
     
    if(!strcmp(T[i].nomVille,nomV)) 
     
    break; 
    if(i<n) //ville existe déjà 
    { 
    prestation *p=T[i].listeprestations; 
    while(p->psuivante!=NULL) 
    { p=p->psuivante;} 
    p->psuivante=Npres; 
    FILE *f; 
    f=fopen(FICHIER,"w"); 
     
    fprintf(f,"%s,%s,%d,%d",Npres->ville, Npres->designation, Npres->prix, Npres->nbplaces); 
    fclose(f); 
     
    return 1; 
    } 
    else //ville n'existe pas 
    { printf("h"); 
    if(n==TAILLE) //il n y a plus d'espace pour inserer une nouvelle ville 
    { 
    free(Npres); 
    return 0; 
    } 
    strcpy(T[i].nomVille,nomV); 
    T[i].listeprestations=Npres; 
    n++; 
    FILE *f; 
    f=fopen(FICHIER,"w"); 
    fprintf(f,"%s,%s,%d,%d",Npres->ville, Npres->designation, Npres->prix, Npres->nbplaces); 
    fclose(f); 
     
     
     
     
    return 1;} 
     
     
    }}

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Quelques remarques :

    1- Il faut absolument écrire le code en respectant l'indentation. Ce n'est pas qu'une question d'avoir une jolie présentation, c'est indispensable pour la lisibilité

    2- date SaisieDatedebut() ne constitue pas un prototype puisque la liste des paramètres n'est pas spécifiée.
    Ecrire en l'absence de paramètres date SaisieDatedebut(void)

    3- Sur les fonctions SaisieDatedebut() et SaisieDatefin(), pourquoi créer une variable locale pp de type prestation alors que seule la date sera retournée ? Autant créer une variable date.

    4- le code des fonctions SaisieDatedebut() et SaisieDatefin() est identique au premier message près.
    Il est plus interessant de n'avoir qu'une seule fonction. Le message peut être affiché avant l'appel de la fonction ou être passé en argument. Exemple :
    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
    date SaisieDate(char * mes)
    {
      date pp;
      if(mes != NULL) printf(mes);
      do
      {
         printf(" \tJour:(jj)\t");
         scanf("%d",&pp.jour);
      }while(pp.jour<=0 ||pp.jour>31);
    ....
      return pp;
    }
     
    Npres->datedebut = SaisieDate(" \tDonner la date de debut de la prestation :\n");
    Npres->datefin   = SaisieDate(" \tDonner la date de fin de la prestation :\n");
    5- Attention aux variables globales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ville T[TAILLE]; 
    int n=0;
    Les variables globales sont source de problèmes et nuisent très fortement à la clarté du code. En plus nommer une variable globale simplement n est chercher les ennuis. D'ailleurs, la fonction ajouterprestation() redéfini une autre variable (locale) n qui masque la variable globale.

    6- Dans la fonction ajouterprestation(), ceci va planter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      strcpy(Npres->designation,designation);
    Il n'y a pas de place (tableau) réservé pour faire cette copie. Le pointeur Npres->designation est non initialisé par l'adresse d'un tableau (qui doit être de taille suffisante pour stocker la chaine designation)

    7- Dans la fonction ajouterprestation(), ceci va certainement poser problème :
    C'est l'adresse de la chaine qui est copiée, pas la chaine. Il faudra donc passer comme argument l'adresse de chaines différentes à chaque appel et qui de plus ne sont pas détruites. Pour illustrer :

    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
    void LireVille(...)
    {
    char nomVille[128];
    // remplissage de nomVille par "Paris"
    ajouterprestation(nomVille, ....) 
    // La prestation créée a ville qui pointe sur "Paris"
    // remplissage de nomVille par "Lyon"
    ajouterprestation(nomVille, ....) 
    // La prestation créée a ville qui pointe sur "Lyon" 
    // mais celle créée avant aussi. Elle ne pointe plus sur "Paris"
    }
    int main(void)
    {
    ....
       LireVille(...)
    // Les prestations créées pointent toutes sur des noms de ville détruits
    ....
    }
    7- Pour terminer et puisque j'ai été obligé de le faire pour lire ton code, le code remis en forme avec les modifications sur l'entrée des dates.

    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
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    /*----------------------------*/
    #define TAILLE 30
    #define FICHIER "text.txt"
    /*----------------------------*/
    typedef struct date
    {
      int mois;
      int jour;
      int annee;
    }date;
     
    typedef struct prestation
    {
      char * ville;
      char * designation;
      date datedebut ;
      date datefin ;
      int prix;
      int nbplaces ;
      struct prestation * psuivante;
    }prestation;
     
    typedef struct ville 
    {
      char nomVille[25];
      prestation * listeprestations;
    }ville; 
    /*----------------------------*/
    date SaisieDate(char * mes)
    {
      date pp;
      if(mes != NULL) printf(mes);
      do
      {
         printf(" \tJour:(jj)\t");
         scanf("%d",&pp.jour);
      }while(pp.jour<=0||pp.jour>31);
      do
      {
         printf(" \tMois:(mm)\t");
         scanf("%d",&pp.mois);
      }while(pp.mois<=0||pp.mois>12);
      do
      {
         printf(" \tAnnee:(aaaa)\t");
         scanf("%d",&pp.annee);
      }while(pp.annee<=1930||pp.annee>2010);
      return pp;
    }
    /*----------------------------*/
    ville T[TAILLE];
    int n=0;
    /*----------------------------*/
    int ajouterprestation(char * nomV, char * designation, int prix, int nbplaces)
    {
    //  int n=0;  ??????????????????????????????????
      int b ;
      int i;
      FILE *f;
      prestation *Npres=(prestation*) malloc(sizeof(prestation));
      if(Npres==NULL) return 0;
      strcpy(Npres->designation,designation);
      Npres->ville=nomV;
      Npres->prix=prix;
      Npres->nbplaces=nbplaces;
      Npres->datedebut=SaisieDate(" \tDonner la date de debut de la prestation :\n");
      Npres->datefin=SaisieDate(" \tDonner la date de fin de la prestation :\n");
      Npres->psuivante=NULL;
      for(i=0;i<n;i++)
      {
         if(!strcmp(T[i].nomVille,nomV)) break;
         if(i<n) //ville existe déjà
         {
             prestation *p=T[i].listeprestations;
             while(p->psuivante!=NULL)
             {
                p=p->psuivante;
             }
             p->psuivante=Npres;
             f=fopen(FICHIER,"w");
             fprintf(f,"%s,%s,%d,%d",Npres->ville, Npres->designation, Npres->prix, Npres->nbplaces);
             fclose(f);
            return 1;
         }
         else //ville n'existe pas
         {
            printf("h");
            if(n==TAILLE) //il n y a plus d'espace pour inserer une nouvelle ville
            {
               free(Npres);
               return 0;
            }
            strcpy(T[i].nomVille,nomV);
            T[i].listeprestations=Npres;
            n++;
            FILE *f;
            f=fopen(FICHIER,"w");
            fprintf(f,"%s,%s,%d,%d",Npres->ville, Npres->designation, Npres->prix, Npres->nbplaces);
            fclose(f);
            return 1;
         }
      }
    }

  3. #3
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Pour votre aide et le temps que vous avez consacré à la lecture du code
    S'il vous plait j'ai pas bien saisi le 7 ème point . quelles sont les modifications que je dois faire pour que les noms des villes ne soient pas détruits ??
    Merci encore !

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    quelles sont les modifications que je dois faire pour que les noms des villes ne soient pas détruits ??
    Il faut faire une recopie :
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int ajouterprestation(char * nomV, char * designation, int prix, int nbplaces)
    {
      .....
      prestation *Npres =  malloc(sizeof(prestation));
      if(Npres==NULL) return 0;
      Npres->designation = malloc(strlen(designation)+1) // allouer la place pour stocker la chaine
      if(Npres->designation == NULL) // si echec d'allocation
      {
         free(Npres); // libérer ce qui a été précédemment alloué
         return 0;     // et sortir
      }
      strcpy(Npres->designation,designation); //sinon copier la chaine
      .....
    Même chose pour les autres chaines à stocker

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 369
    Points
    50 369
    Par défaut
    Ne pas oublier la fonction strdup() qui est bien pratique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Npres->designation = malloc(strlen(designation)+1);
    strcpy(Npres->designation,designation);
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Npres->designation = strdup(designation);

  6. #6
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci beacoup les amis ! Ca marche maintenant !
    Vous etes excellents !!
    Keep it up

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/07/2014, 18h03
  2. Projet de gestion d'une agence de voyage ( suite )
    Par charliemoun dans le forum Débuter
    Réponses: 2
    Dernier message: 30/03/2011, 23h42
  3. gestion d'une agence bancaire
    Par haydaradimach9i dans le forum Schéma
    Réponses: 2
    Dernier message: 12/01/2009, 10h21
  4. Gestion d'une agence de tourisme
    Par crazy_inf dans le forum Gestion de projet
    Réponses: 10
    Dernier message: 18/12/2008, 15h55

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