Ajouter exo2/main.c
This commit is contained in:
parent
402f3b2178
commit
93bcbab368
283
exo2/main.c
Normal file
283
exo2/main.c
Normal file
@ -0,0 +1,283 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user