Advertisement
Guest User

Untitled

a guest
Nov 1st, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h> // inutile je crois dans le code mais on sait jamais
  3.  
  4. // définition de deux structures : l'une (ensb) pour les détails du voyage, l'autre (client) pour les informations privées du client
  5.  
  6. typedef struct{
  7.         char destination[20];
  8.         int jour;
  9.         int mois;
  10.         int annee;
  11.     }ensb;
  12.  
  13. typedef struct{
  14.         int id;
  15.         char nom[20];
  16.         char prenom[20];
  17.         int nbv;
  18.         ensb voy[50]; // détails du voyage
  19.     }client;
  20.  
  21. void main()
  22. {
  23.     int choix,i=0,N=0,j,f,min,posmin=0,k;
  24.     client C[150]; // tableau 'C' qui fait directement référence à la structure 'client' et qui contient ses champs
  25.     ensb B[150]; // de même, sauf que le tableau s'appelle B et prend les champs de la structure 'ensb'
  26.     ensb aux;
  27.  
  28.     do{
  29.  
  30.     do{
  31.         printf("\nGestion de voyage : Menu\n");
  32.         printf("1. Remplir un tableau de N clients\n");
  33.         printf("2. Afficher le tableau des clients\n");
  34.         printf("3. Trier les voyages des clients selon l'ordre decroissant de la date\n");
  35.         printf("4. Afficher le voyageur le plus fidele\n");
  36.         printf("5. Afficher la destination la plus demandee pour un voyageur sachant son identifiant\n");
  37.         printf("6. Afficher le mois de l’annee avec le plus grand nombre de reservations\n");
  38.         printf("0. Quitter\n");
  39.         printf("\n");
  40.         printf("R: ");
  41.         scanf("%d",&choix);
  42.     }while(choix <0||choix>6); //contrôle de saisie
  43.  
  44.     if(choix==1){
  45.         printf("Quel est le nombre N de clients a remplir ? : ");
  46.         scanf("%d",&f);
  47.  
  48.         for(i=0;i<f;i++){
  49.             printf("Quel est l'identifiant du client ?\n");
  50.             fflush(stdin);
  51.             scanf("%d",&C[i].id);
  52.             printf("Quel est le nom du client ?\n");
  53.             fflush(stdin);
  54.             scanf("%s",&C[i].nom);
  55.             printf("Quel est le prenom du client  ?\n");
  56.             fflush(stdin);
  57.             scanf("%s",&C[i].prenom);
  58.             printf("Quel est le nombre de voyages du client ?\n");
  59.             scanf("%d",&C[i].nbv);
  60.  
  61.                 for(j=0;j<C[i].nbv;j++){ //remplissage en fonction du nombre que le client aura donné (nbv)
  62.                     printf("Destination : ");
  63.                     fflush(stdin);
  64.                     gets(C[i].voy[j].destination);
  65.                     printf("Date (forme JJ:MM:AAAA) : ");
  66.                     fflush(stdin);
  67.                     scanf("%d:%d:%d",&C[i].voy[j].jour,&C[i].voy[j].mois,&C[i].voy[j].annee);} // il est important de noter que la forme %d:%d:%d est plus pratique pour l'utilisateur dans notre cas
  68.                         }
  69.                 }
  70.  
  71.     else if(choix==2){
  72.             printf("\nAffichage du tableau des clients\n");
  73.             for(i=0;i<f;i++){ // le 'f' pour rappel est le nombre N de clients à remplir
  74.                 printf("\n");
  75.                 printf("ID : %d | Nom : %s | Prenom : %s | Nombre de voyages : %d\n",C[i].id,C[i].nom,C[i].prenom,C[i].nbv);
  76.                for(j=0;j<C[i].nbv;j++){
  77.                     printf("\n");
  78.                     printf("Destination : %s. Date de la destination : %d:%d:%d\n",C[i].voy[j].destination,C[i].voy[j].jour,C[i].voy[j].mois,C[i].voy[j].annee);}}
  79.                     }
  80.  
  81.     else if(choix==3)
  82.     {
  83.         printf("Classement des destinations par ordre decroissant\n");
  84.         for(i=0;i<f;i++)
  85.         {
  86.             for(j=0;j<C[i].nbv;j++) // on entre dans les boucles des deux structures
  87.                 {
  88.                     posmin=j; //posmin prend la première case du tableau
  89.                     for(k=j+1;k<C[i].nbv;k++) // nouveau compteur k qui prend la première case du tableau + 1 (j+1)
  90.                         {
  91.                             if((C[i].voy[k].annee < C[i].voy[posmin].annee) || (C[i].voy[k].annee == C[i].voy[posmin].annee && C[i].voy[k].mois < C[i].voy[posmin].mois) || (C[i].voy[k].annee == C[i].voy[posmin].annee && C[i].voy[k].mois == C[i].voy[posmin].mois && C[i].voy[k].jour < C[i].voy[posmin].jour))
  92.                             { //toutes les possibilités pour vérifier le min, exemple : si l'année X est inférieur à l'année Y...
  93.                                 posmin=k; //quand une de ces conditions est trouvée, posmin prend la valeur k (la valeur validée par le if)
  94.                             }
  95.                         }
  96.                     aux=C[i].voy[k]; //aux qu'on a déclaré au début avec la structure ensb (ensb aux) prend les champs voy[k]
  97.                     C[i].voy[k] = C[i].voy[posmin]; // voy[k] prend la valeur de posmin
  98.                     C[i].voy[posmin] = aux;  //posmin prend à son tour la valeur de aux
  99.  
  100.                 }
  101.                 // on affiche ensuite
  102.                     printf("\n");
  103.                     printf("\nDate de la destination : %d %d %d\n ",C[i].voy[posmin].jour,C[i].voy[posmin].mois,C[i].voy[posmin].annee);
  104.         }
  105.     }
  106.  
  107.     }while(choix!=0); // on répète le menu tant que le choix n'est pas égal à 0
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement