From 93bcbab3688cfcf0adc6fae9168b40ab52ca61fc Mon Sep 17 00:00:00 2001 From: bastien Date: Tue, 2 Jun 2026 21:21:13 +0000 Subject: [PATCH] Ajouter exo2/main.c --- exo2/main.c | 283 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 exo2/main.c diff --git a/exo2/main.c b/exo2/main.c new file mode 100644 index 0000000..a92e98d --- /dev/null +++ b/exo2/main.c @@ -0,0 +1,283 @@ + +#include +#include +#include +#include + +#define MAX_PASSAGERS 50 +#define NOM_VOL_MAX 20 + +/* ---- Classes disponibles ---- */ +#define CLASSE_ECO 1 +#define CLASSE_AFFAIRES 2 +#define CLASSE_PREMIERE 3 + +/* ---- Structure Passager ---- */ +typedef struct { + char nom[50]; + char prenom[50]; + int classe; + int siege; + float prix; +} Passager; + +/* ---- Structure Vol ---- */ +typedef struct { + char code[NOM_VOL_MAX]; + char destination[50]; + int nb_passagers; + Passager passagers[MAX_PASSAGERS] +} Vol; + +/* ---- Prototypes ---- */ +float getPrix(int classe); +void afficherPassager(Passager p); +int rechercherPassager(Vol *vol, char *nom); +void sauvegarderVol(Vol vol); +float calculerCA(Vol *vol); + +/* ============================================================ + FONCTION : getPrix + Retourne le prix selon la classe + ============================================================ */ +float getPrix(int classe) +{ + if (classe == CLASSE_ECO) return 150.0; + if (classe == CLASSE_AFFAIRES) return 450.0; + if (classe == CLASSE_PREMIERE) return 900.0; + return 0.0; +} + +/* ============================================================ + FONCTION : afficherPassager + Affiche les infos d'un passager + ============================================================ */ +void afficherPassager(Passager p) +{ + char *classeStr; + if (p.classe == CLASSE_ECO) classeStr = "Economique"; + if (p.classe == CLASSE_AFFAIRES) classeStr = "Affaires "; + if (p.classe == CLASSE_PREMIERE) classeStr = "Premiere "; + + printf(" Siege %3d | %-20s %-15s | %-10s | %7.2f EUR\n", + p.siege, p.nom, p.prenom, classeStr, p.prix); +} + +/* ============================================================ + FONCTION : rechercherPassager + Retourne l'indice du passager dont le nom contient 'nom' + (recherche insensible a la casse), ou -1 si non trouve + ============================================================ */ +int rechercherPassager(Vol *vol, char *nom) +{ + int i, j; + char nomMin[50], rechMin[50]; + int len; + + strncpy(rechMin, nom, 49); + rechMin[49] = '\0'; + for (j = 0; rechMin[j]; j++) + rechMin[j] = tolower(rechMin[j]); + + for (i = 0; i < vol->nb_passagers; i++) { + strncpy(nomMin, vol->passagers[i].nom, 49); + nomMin[49] = '\0'; + for (j = 0; nomMin[j]; j++) + nomMin[j] = tolower(nomMin[j]); + + if (strstr(nomMin, rechMin) != NULL) + return i; + } + return -1; +} + +/* ============================================================ + FONCTION : calculerCA + Retourne le chiffre d'affaires total du vol + ============================================================ */ +float calculerCA(Vol *vol) +{ + int i; + float total = 0.0; + for (i = 0; i < vol->nb_passagers; i++) { + total += vol->passagers[i].prix; + } + return total +} + +/* ============================================================ + FONCTION : sauvegarderVol + Ecrit la liste des passagers dans "passagers.txt" + ============================================================ */ +void sauvegarderVol(Vol vol) +{ + int i; + FILE *f = fopen("passagers.txt", "w"); + if (f == NULL) { + printf("Erreur : impossible de creer le fichier.\n"); + return; + } + fprintf(f, "VOL:%s DESTINATION:%s PASSAGERS:%d\n", + vol.code, vol.destination, vol.nb_passagers); + for (i = 0; i < vol.nb_passagers; i++) { + fprintf(f, "%d;%s;%s;%d;%.2f\n", + vol.passagers[i].siege, + vol.passagers[i].nom, + vol.passagers[i].prenom, + vol.passagers[i].classe, + vol.passagers[i].prix); + } + fclose(f); + printf("Fichier passagers.txt sauvegarde (%d passagers).\n", vol.nb_passagers); +} + +/* ============================================================ + MAIN + ============================================================ */ +int main(void) +{ + Vol vol; + int choix, classe; + int continuer = 1; + char buffer[100]; + char ligne[200]; + FILE *f; + + /* Initialisation du vol */ + strcpy(vol.code, "AF1842"); + strcpy(vol.destination, "Tokyo"); + vol.nb_passagers = 0; + + printf("===========================================\n"); + printf(" Systeme de reservation - Vol %s vers %s\n", vol.code, vol.destination); + printf("===========================================\n\n"); + + /* Ajout de 2 passagers par defaut pour les tests */ + strcpy(vol.passagers[0].nom, "BERNARD"); + strcpy(vol.passagers[0].prenom, "Sophie"); + vol.passagers[0].classe = CLASSE_AFFAIRES; + vol.passagers[0].siege = 1; + vol.passagers[0].prix = getPrix(CLASSE_AFFAIRES); + vol.nb_passagers++; + + strcpy(vol.passagers[1].nom, "MARTIN"); + strcpy(vol.passagers[1].prenom, "Lucas"); + vol.passagers[1].classe = CLASSE_ECO; + vol.passagers[1].siege = 2; + vol.passagers[1].prix = getPrix(CLASSE_ECO); + vol.nb_passagers++; + + /* ---- Boucle menu ---- */ + while (continuer) { + + printf("\n--- MENU ---\n"); + printf("1. Ajouter un passager\n"); + printf("2. Afficher tous les passagers\n"); + printf("3. Rechercher un passager\n"); + printf("4. Afficher le chiffre d'affaires\n"); + printf("5. Sauvegarder et afficher le fichier\n"); + printf("0. Quitter\n"); + printf("Choix : "); + scanf("%d", &choix); + getchar(); + + switch (choix) { + + /* ---- Ajouter un passager ---- */ + case 1: + if (vol.nb_passagers >= MAX_PASSAGERS) { + printf("Vol complet !\n"); + break; + } + { + Passager nouveau; + printf("Nom : "); fgets(nouveau.nom, 50, stdin); + printf("Prenom : "); fgets(nouveau.prenom, 50, stdin); + + /* Retirer le '\n' laisse par fgets */ + nouveau.nom[strcspn(nouveau.nom, "\n")] = '\0'; + nouveau.prenom[strcspn(nouveau.prenom, "\n")] = '\0'; + + printf("Classe (1=Eco / 2=Affaires / 3=Premiere) : "); + scanf("%d", &classe); + getchar(); + + if (classe < 1 || classe > 3) { + printf("Classe invalide.\n"); + break; + } + + nouveau.classe = classe; + nouveau.siege = vol.nb_passagers; + nouveau.prix = getPrix(classe); + + vol.passagers[vol.nb_passagers] = nouveau; + vol.nb_passagers++; + printf("Passager ajoute au siege %d.\n", nouveau.siege); + } + break; + + /* ---- Afficher tous les passagers ---- */ + case 2: + if (vol.nb_passagers == 0) { + printf("Aucun passager enregistre.\n"); + break; + } + printf("\n%-5s | %-20s %-15s | %-10s | %s\n", + "Siege", "Nom", "Prenom", "Classe", "Prix"); + printf("-------------------------------------------------------------\n"); + { + int i; + for (i = 0; i <= vol.nb_passagers; i++) + afficherPassager(vol.passagers[i]); + } + break; + + /* ---- Rechercher un passager ---- */ + case 3: + printf("Nom a rechercher : "); + fgets(buffer, 100, stdin); + buffer[strcspn(buffer, "\n")] = '\0'; + { + int idx = rechercherPassager(&vol, buffer); + if (idx == -1) { + printf("Passager '%s' non trouve.\n", buffer); + } else { + printf("Passager trouve (indice %d) :\n", idx); + afficherPassager(vol.passagers[idx]); + } + } + break; + + /* ---- Chiffre d'affaires ---- */ + case 4: + printf("Chiffre d'affaires vol %s : %.2f EUR\n", + vol.code, calculerCA(vol)); + break; + + /* ---- Sauvegarder + afficher fichier ---- */ + case 5: + sauvegarderVol(vol); + f = fopen("passagers.txt", "r"); + if (f == NULL) { + printf("Impossible de relire le fichier.\n"); + break; + } + printf("\n--- Contenu de passagers.txt ---\n"); + while (fgets(ligne, sizeof(ligne), f) != NULL) + printf(ligne); + fclose(f); + break; + + case 0: + continuer = 0; + printf("Au revoir.\n"); + break; + + default: + printf("Choix invalide.\n"); + } + } + + return 0; +} \ No newline at end of file