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 <stdlib.h> // inutile je crois dans le code mais on sait jamais
// définition de deux structures : l'une (ensb) pour les détails du voyage, l'autre (client) pour les informations privées du client
typedef struct{
char destination[20];
int jour;
int mois;
int annee;
}ensb;
typedef struct{
int id;
char nom[20];
char prenom[20];
int nbv;
ensb voy[50]; // détails du voyage
}client;
void main()
{
int choix,i=0,N=0,j,f,min,posmin=0,k;
client C[150]; // tableau 'C' qui fait directement référence à la structure 'client' et qui contient ses champs
ensb B[150]; // de même, sauf que le tableau s'appelle B et prend les champs de la structure 'ensb'
ensb aux;
do{
do{
printf("\nGestion de voyage : Menu\n");
printf("1. Remplir un tableau de N clients\n");
printf("2. Afficher le tableau des clients\n");
printf("3. Trier les voyages des clients selon l'ordre decroissant de la date\n");
printf("4. Afficher le voyageur le plus fidele\n");
printf("5. Afficher la destination la plus demandee pour un voyageur sachant son identifiant\n");
printf("6. Afficher le mois de lannee avec le plus grand nombre de reservations\n");
printf("0. Quitter\n");
printf("\n");
printf("R: ");
scanf("%d",&choix);
}while(choix <0||choix>6); //contrôle de saisie
if(choix==1){
printf("Quel est le nombre N de clients a remplir ? : ");
scanf("%d",&f);
for(i=0;i<f;i++){
printf("Quel est l'identifiant du client ?\n");
fflush(stdin);
scanf("%d",&C[i].id);
printf("Quel est le nom du client ?\n");
fflush(stdin);
scanf("%s",&C[i].nom);
printf("Quel est le prenom du client ?\n");
fflush(stdin);
scanf("%s",&C[i].prenom);
printf("Quel est le nombre de voyages du client ?\n");
scanf("%d",&C[i].nbv);
for(j=0;j<C[i].nbv;j++){ //remplissage en fonction du nombre que le client aura donné (nbv)
printf("Destination : ");
fflush(stdin);
gets(C[i].voy[j].destination);
printf("Date (forme JJ:MM:AAAA) : ");
fflush(stdin);
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
}
}
else if(choix==2){
printf("\nAffichage du tableau des clients\n");
for(i=0;i<f;i++){ // le 'f' pour rappel est le nombre N de clients à remplir
printf("\n");
printf("ID : %d | Nom : %s | Prenom : %s | Nombre de voyages : %d\n",C[i].id,C[i].nom,C[i].prenom,C[i].nbv);
for(j=0;j<C[i].nbv;j++){
printf("\n");
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);}}
}
else if(choix==3)
{
printf("Classement des destinations par ordre decroissant\n");
for(i=0;i<f;i++)
{
for(j=0;j<C[i].nbv;j++) // on entre dans les boucles des deux structures
{
posmin=j; //posmin prend la première case du tableau
for(k=j+1;k<C[i].nbv;k++) // nouveau compteur k qui prend la première case du tableau + 1 (j+1)
{
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))
{ //toutes les possibilités pour vérifier le min, exemple : si l'année X est inférieur à l'année Y...
posmin=k; //quand une de ces conditions est trouvée, posmin prend la valeur k (la valeur validée par le if)
}
}
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]
C[i].voy[k] = C[i].voy[posmin]; // voy[k] prend la valeur de posmin
C[i].voy[posmin] = aux; //posmin prend à son tour la valeur de aux
}
// on affiche ensuite
printf("\n");
printf("\nDate de la destination : %d %d %d\n ",C[i].voy[posmin].jour,C[i].voy[posmin].mois,C[i].voy[posmin].annee);
}
}
}while(choix!=0); // on répète le menu tant que le choix n'est pas égal à 0
} |
Partager