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