Nom : Eyengola
Postnom : Bile
Prenom : Elsie
Module d’enseignement : Projet Programmation C
Niveau : Licence GL1-1/ Licence BI1-1
#include <stdio.h>
#include <string.h>
#include <stdlib.h> // Ajouté pour bonnes pratiques
#define MAX 100
// 1. Définition de la structure Vehicule
typedef struct { char
immatriculation[20]; char
marque[30]; int annee; float
prixParJour; int joursLoues; float
coutMaintenance;
float benefice;
} Vehicule;
// 2. Fonction de saisie d'un véhicule avec contrôle AMÉLIORÉ
Vehicule Saisie_Vehicule() {
Vehicule v;
printf("\n--- Saisie d'un véhicule ---\n");
printf("Immatriculation : "); scanf("%19s",
[Link]); // ← CORRIGÉ : limite buffer
printf("Marque : ");
scanf("%29s", [Link]); // ← CORRIGÉ : limite buffer
printf("Année de mise en service (1900-2026) : "); scanf("%d",
&[Link]); while ([Link] < 1900 || [Link] > 2026) { // ← AJOUTÉ :
contrôle année printf("Année invalide (1900-2026) : "); scanf("%d",
&[Link]);
do { printf("Prix de location par jour
(>0) : "); scanf("%f", &[Link]);
} while ([Link] <= 0);
do { printf("Nombre de jours loués (0-
365) : "); scanf("%d", &[Link]);
} while ([Link] < 0 || [Link] > 365);
do { printf("Coût annuel de maintenance
(>0) : "); scanf("%f", &[Link]);
} while ([Link] <= 0);
[Link] = 0;
return v;
// 3. Procédure de saisie de plusieurs véhicules void
Saisie_Vehicules(Vehicule tab[], int n) {
for (int i = 0; i < n; i++) {
printf("\nVéhicule %d :\n", i + 1);
tab[i] = Saisie_Vehicule();
}
// 4. Fonction calcul du revenu d'un véhicule
float Revenu_Vehicule(Vehicule v)
{ return [Link] * [Link];
// 5. Fonction calcul du bénéfice d'un véhicule float
Benefice_Vehicule(Vehicule v) { return
Revenu_Vehicule(v) - [Link];
// 6. Procédure de calcul des bénéfices void
Calcul_Benefices(Vehicule tab[], int n) {
for (int i = 0; i < n; i++) {
tab[i].benefice = Benefice_Vehicule(tab[i]);
// 7. Fonction bénéfice total float
Benefice_Total(Vehicule tab[], int n)
{ float total = 0; for (int i = 0; i < n; i++)
{ total += tab[i].benefice;
return total;
// Fonction utilitaire pour échanger deux véhicules void
Echanger(Vehicule *a, Vehicule *b) {
Vehicule temp = *a;
*a = *b;
*b = temp;
}
// 8. Analyse de performance void
Analyse_Performance(Vehicule tab[], int n) { //
Tri par bénéfice décroissant (tri à bulles) for
(int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i -
1; j++) { if (tab[j].benefice < tab[j +
1].benefice) {
Echanger(&tab[j], &tab[j + 1]);
printf("\n--- Analyse de Performance ---\n"); printf("Véhicule le
plus rentable : %s (%s) - Bénéfice : %.2f\n",
tab[0].immatriculation, tab[0].marque, tab[0].benefice);
printf("Véhicule le moins rentable : %s (%s) - Bénéfice : %.2f\n",
tab[n - 1].immatriculation, tab[n - 1].marque, tab[n - 1].benefice);
// 9. Procédure d'affichage d'un véhicule void
Affiche_Vehicule(Vehicule v) { printf("\
nImmatriculation : %s", [Link]);
printf("\nMarque : %s", [Link]); printf("\
nAnnée : %d", [Link]); printf("\nPrix/Jour : %.2f",
[Link]); printf("\nJours loués : %d",
[Link]); printf("\nCoût maintenance : %.2f",
[Link]); printf("\nRevenu annuel :
%.2f", Revenu_Vehicule(v)); printf("\nBénéfice
annuel : %.2f\n", [Link]);
}
// Affichage de tous les véhicules void Affiche_Tous(Vehicule tab[], int n) { printf("\
n===== LISTE DES VEHICULES (classés par bénéfice décroissant) =====\n");
for (int i = 0; i < n; i++) { printf("\
n--- Véhicule %d ---", i + 1);
Affiche_Vehicule(tab[i]);
// 10. Programme principal
int main() {
Vehicule parc[MAX];
int n;
printf("=== GESTION PARC VEHICULES ===\n");
printf("Nombre de véhicules (1-%d) : ", MAX); scanf("%d",
&n);
while (n <= 0 || n > MAX)
{ printf("Nombre invalide (1-%d) : ",
MAX); scanf("%d", &n);
// Saisie
Saisie_Vehicules(parc, n);
// Calcul des bénéfices
Calcul_Benefices(parc, n);
// Affichage bénéfice total float total = Benefice_Total(parc,
n); printf("\n*** Bénéfice total de l'entreprise : %.2f ***\n",
total);
// Analyse performance (tri + identification)
Analyse_Performance(parc, n);
// Affichage final après tri
Affiche_Tous(parc, n);
printf("\n=== FIN DU PROGRAMME ===\n");
return 0;