Exercices corrigés C# – Programmation Orientée Objet | Partie 4

Avec des exercices corrigés en C#, vous pratiquerez divers concepts du langage C#. Vous commencerez par des exercices C#de base à des exercices plus avancés. La solution est fournie pour chaque exercice. Vous devez essayer de résoudre chaque problème par vous-même avant de vérifier la solution. Si vous avez des questions concernant chaque problème, nous vous encourageons à les poster sur notre forum.
 
 

Exercice 1:

Écrire un programme C# pour créer une classe appelée « Voyage » avec des méthodes permettant de rechercher des vols et des hôtels, ainsi que de réserver et d’annuler des réservations.

Diagrame de classe:

Solution:

// Importer les namespaces nécessaires
using System;
using System.Collections.Generic;

// Définir la classe Voyage
class Voyage
{
    // Déclarer une liste pour stocker les vols
    private List<Vol> vols;
    // Déclarer une liste pour stocker les hôtels
    private List<Hotel> hotels;

    // Constructeur pour initialiser les listes
    public Voyage()
    {
        // Initialiser la liste des vols
        this.vols = new List<Vol>();
        // Initialiser la liste des hôtels
        this.hotels = new List<Hotel>();
    }

    // Méthode pour rechercher des vols
    public void RechercherVols(string orig, string dest, string date, int nbrVoyageur)
    {
        // Afficher les détails de la recherche de vols
        Console.WriteLine("Recherche de vols de " + orig + " à " + dest + " le " + date + " pour " + nbrVoyageur + " voyageurs.");
    }

    // Méthode pour rechercher des hôtels
    public void RechercherHotels(string lieu, string dateArriv, string dateDepart, int nbrPers)
    {
        // Afficher les détails de la recherche d'hôtels
        Console.WriteLine("Recherche d'hôtels dans " + lieu + " de " + dateArriv + " à " + dateDepart + " pour " + nbrPers + " personnes.");
    }

    // Méthode pour réserver un vol
    public void ReserverVol(int numVol, string nomPassager, string orig, string dest, string date, int nbrVoyageur, double prix)
    {
        // Créer un objet vol avec les détails fournis
        Vol vol = new Vol(numVol, nomPassager, orig, dest, date, nbrVoyageur, prix);
        // Générer un numéro de confirmation
        int numConf = GenerateConfirmationNumber();
        // Définir le numéro de confirmation du vol
        vol.SetNumConf(numConf);
        // Ajouter le vol à la liste des vols
        this.vols.Add(vol);
        // Afficher le numéro de confirmation du vol réservé
        Console.WriteLine("Vol réservé ! Numéro de confirmation: " + numConf);
    }

    // Méthode pour réserver un hôtel
    public void ReserverHotel(int hotelId, string nomPersonne, string lieu, string dateArriv, string dateDepart, int nbrPersonne, double prix)
    {
        // Créer un objet hotel avec les détails fournis
        Hotel hotel = new Hotel(hotelId, nomPersonne, lieu, dateArriv, dateDepart, nbrPersonne, prix);
        // Générer un numéro de confirmation
        int numConf = GenerateConfirmationNumber();
        // Définir le numéro de confirmation de l'hôtel
        hotel.SetNumConf(numConf);
        // Ajouter l'hôtel à la liste des hôtels
        this.hotels.Add(hotel);
        // Afficher le numéro de confirmation de l'hôtel réservé
        Console.WriteLine("Hôtel réservé ! Numéro de confirmation: " + numConf);
    }

    // Méthode pour annuler une réservation
    public void AnnulerReservation(int numConf)
    {
        // Parcourir la liste des vols pour trouver la réservation
        foreach (Vol vol in this.GetVols())
        {
            // Si le numéro de confirmation correspond, supprimer la 
            // réservation de vol
            if (vol.GetNumConf() == numConf)
            {
                this.vols.Remove(vol);
                // Afficher le message d'annulation du vol
                Console.WriteLine("Annulation de la réservation de vol avec le numéro de confirmation " + numConf);
                return;
            }
        }
        // Parcourir la liste des hôtels pour trouver la réservation
        foreach (Hotel hotel in this.GetHotels())
        {
            // Si le numéro de confirmation correspond, supprimer la 
            // réservation d'hôtel
            if (hotel.GetNumConf() == numConf)
            {
                this.hotels.Remove(hotel);
                // Afficher le message d'annulation d'hôtel
                Console.WriteLine("Annulation de la réservation d'hôtel avec le numéro de confirmation " + numConf);
                return;
            }
        }
        // Afficher un message si aucune réservation n'a été trouvée 
        // avec le numéro de confirmation fourni
        Console.WriteLine("Aucune réservation n'a été trouvée avec le numéro de confirmation " + numConf + ".");
    }

    // Méthode pour générer un numéro de confirmation aléatoire à 6 
    // chiffres
    private int GenerateConfirmationNumber()
    {
        // Créer un objet aléatoire
        Random rand = new Random();
        // Générer et renvoyer un nombre aléatoire à 6 chiffres
        return rand.Next(900000) + 100000;
    }

    // Méthode pour récupérer la liste des vols
    public List<Vol> GetVols()
    {
        // Retourner la liste des vols
        return vols;
    }

    // Méthode pour récupérer la liste des hôtels
    public List<Hotel> GetHotels()
    {
        // Retourner la liste des hôtels
        return hotels;
    }
}

// Définir la classe Vol
class Vol
{
    // Déclarer une variable entière pour stocker le numéro de vol
    private int numVol;
    // Déclarer une variable pour stocker le nom du passager
    private string nomPassager;
    // Déclarer une variable pour stocker l'origine du vol
    private string origin;
    // Déclarer une variable pour stocker la destination du vol
    private string destination;
    // Déclarer une variable pour stocker la date du vol
    private string date;
    // Déclarer une variable pour stocker le nombre de passagers
    private int nbrPassagers;
    // Déclarer une variable double pour stocker le prix du vol
    private double prix;
    // Déclarer une variable pour stocker le numéro de confirmation
    private int numConf;

    // Constructeur pour initialiser l'objet Vol avec les détails 
    // fournis
    public Vol(int numVol, string nomPassager, string origin, string destination, string date, int nbrPassagers, double prix)
    {
        // Initialiser le numéro de vol
        this.numVol = numVol;
        // Initialiser le nom du passager
        this.nomPassager = nomPassager;
        // Initialiser l'origine du vol
        this.origin = origin;
        // Initialiser la destination du vol
        this.destination = destination;
        // Initialiser la date du vol
        this.date = date;
        // Initialiser le nombre de passagers
        this.nbrPassagers = nbrPassagers;
        // Initialiser le prix du vol
        this.prix = prix;
    }

    // Méthode pour récupérer le numéro de vol
    public int GetNumVol()
    {
        return numVol;
    }

    // Méthode pour récupérer le nom du passager
    public string GetNomPassager()
    {
        return nomPassager;
    }

    // Méthode pour récupérer l'origine du vol
    public string GetOrigin()
    {
        return origin;
    }

    // Méthode pour récupérer la destination du vol
    public string GetDestination()
    {
        return destination;
    }

    // Méthode pour récupérer la date du vol
    public string GetDate()
    {
        return date;
    }

    // Méthode pour récupérer le nombre de passagers
    public int GetNbrPassagers()
    {
        return nbrPassagers;
    }

    // Méthode pour récupérer le prix du vol
    public double GetPrix()
    {
        return prix;
    }

    // Méthode pour récupérer le numéro de confirmation
    public int GetNumConf()
    {
        return numConf;
    }

    // Méthode pour définir le numéro de confirmation
    public void SetNumConf(int numConf)
    {
        this.numConf = numConf;
    }
}

// Définir la classe Hotel
class Hotel
{
    // Déclarer une variable pour stocker l'identifiant de l'hôtel
    private int hotelId;
    // Déclarer une variable pour stocker le nom de l'invité
    private string nomPersonne;
    // Déclarer une variable pour stocker la localisation de l'hôtel
    private string lieu;
    // Déclarer une variable pour stocker la date d'enregistrement
    private string dateArriv;
    // Déclarer une variable pour stocker la date de sortie
    private string dateDepart;
    // Déclarer une variable pour stocker le nombre d'invités
    private int nbrPersonne;
    // Déclarer une variable double pour stocker le prix du séjour
    private double prix;
    // Déclarer une variable pour stocker le numéro de confirmation
    private int numConf;

    // Constructeur pour initialiser l'objet Hôtel avec les détails 
    // fournis
    public Hotel(int hotelId, string nomPersonne, string lieu, string dateArriv, string dateDepart, int nbrPersonne, double prix)
    {
        // Initialiser l'identifiant de l'hôtel
        this.hotelId = hotelId;
        // Initialiser le nom de l'invité
        this.nomPersonne = nomPersonne;
        // Initialiser la localisation de l'hôtel
        this.lieu = lieu;
        // Initialiser la date d'enregistrement
        this.dateArriv = dateArriv;
        // Initialiser la date de sortie
        this.dateDepart = dateDepart;
        // Initialiser le nombre d'invités
        this.nbrPersonne = nbrPersonne;
        // Initialiser le prix du séjour
        this.prix = prix;
    }

    // Méthode pour récupérer l'identifiant de l'hôtel
    public int GetHotelId()
    {
        return hotelId;
    }

    // Méthode pour récupérer le nom de l'invité
    public string GetNomPersonne()
    {
        return nomPersonne;
    }

    // Méthode pour récupérer la localisation de l'hôtel
    public string GetLieu()
    {
        return lieu;
    }

    // Méthode pour récupérer la date d'enregistrement
    public string GetDateArriv()
    {
        return dateArriv;
    }

    // Méthode pour récupérer la date de sortie
    public string GetDateDepart()
    {
        return dateDepart;
    }

    // Méthode pour récupérer le prix du séjour
    public double GetPrix()
    {
        return prix;
    }

    // Méthode pour récupérer le nombre d'invités
    public int GetNbrPersonne()
    {
        return nbrPersonne;
    }

    // Méthode pour récupérer le numéro de confirmation
    public int GetNumConf()
    {
        return numConf;
    }

    // Méthode pour définir le numéro de confirmation
    public void SetNumConf(int numConf)
    {
        this.numConf = numConf;
    }
}

// Définir la classe Main
public class MainClass
{
    // Définir la méthode Main qui est le point d'entrée du programme
    public static void Main(string[] args)
    {
        // Créer un nouvel objet Voyage
        Voyage app = new Voyage();

        // Recherche de vols de Paris à Casablanca le 2024-02-01 pour 
        // 1 passager
        app.RechercherVols("Paris", "Casablanca", "2024-02-01", 1);

        // Recherche des hôtels à Casablanca du 2024-09-01 au 
        // 2024-10-05 pour 2 personnes
        app.RechercherHotels("Casablanca", "2024-09-01", "2024-10-05", 2);

        // Réservez un vol avec le numéro de vol 96342588 pour Alex 
        // Babtise de Paris à Casablanca le 2024-08-01 pour 1 
        // passager avec un prix de 600.00€
        app.ReserverVol(96342588, "Alex Babtise", "Paris", "Casablanca", "2024-08-01", 1, 600.00);

        // Réservez un vol avec le numéro de vol 10843563 pour Emily 
        // Lyona de Paris à Casablanca le 2024-08-01 pour 1 passager 
        // avec un prix de 755.00€
        app.ReserverVol(10843563, "Emily Lyona", "Paris", "Casablanca", "2024-08-01", 1, 755.00);

        // Réservez un hôtel avec ID 98765432 pour Martin Nadine à 
        // Casablanca du 2024-09-01 au 2024-09-05 pour 1 personne 
        // avec un prix de 150.00€
        app.ReserverHotel(98765432, "Martin Nadine", "Casablanca", "2024-09-01", "2024-09-05", 1, 150.00);

        // Annuler la réservation avec le numéro de confirmation 90945840
        app.AnnulerReservation(90945840);
    }
}

Sortie:

Recherche de vols de Paris à Casablanca le 2024-02-01 pour 1 voyageurs.
Recherche d'hôtels dans Casablanca de 2024-09-01 à 2024-10-05 pour 2 personnes.
Vol réservé ! Numéro de confirmation: 100881
Vol réservé ! Numéro de confirmation: 455285
Hôtel réservé ! Numéro de confirmation: 799037
Aucune réservation n'a été trouvée avec le numéro de confirmation 90945840.
 

Exercice 2:

Écrivez un programme C# pour créer une classe appelée « Restaurant » avec des attributs pour les plats du menu, les prix et les notes, et des méthodes pour ajouter et supprimer des plats, et pour calculer la note moyenne.

Diagrame de classe:

Solution:

// Importer le namespace System
using System; 
// Importer le namespace pour utiliser les listes génériques
using System.Collections.Generic; 

// Définir la classe Restaurant
class Restaurant
{
    // Déclarez des listes génériques pour stocker les plats du menu,
    // les prix, les notes et le nombre de plats.
	
    // Liste pour stocker les plats
    private List<string> menu; 
    // Liste pour stocker les prix
    private List<double> prix; 
    // Liste pour stocker les notes
    private List<int> notes; 
    // Liste pour stocker le nombre de plats
    private List<int> nbrDePlats; 

    // Constructeur pour initialiser les listes
    public Restaurant()
    {
        // Initialiser la liste menu
        this.menu = new List<string>();
        // Initialiser la liste de prix
        this.prix = new List<double>();
        // Initialiser la liste de notes
        this.notes = new List<int>();
        // Initialiser la liste de nbrDePlats
        this.nbrDePlats = new List<int>();
    }

    // Méthode pour ajouter un plat au menu
    public void AddPlat(string elem, double prix_p)
    {
        // Ajouter le plat au menu
        this.menu.Add(elem);
        // Ajouter le prix à la liste de prix
        this.prix.Add(prix_p);
        // Initialiser la note du plat à 0
        this.notes.Add(0);
        // Initialiser le compteur du plat à 0
        this.nbrDePlats.Add(0);
    }

    // Méthode pour supprimer un plat du menu
    public void RemovePlat(string plat)
    {
        // Obtenir l'index du plat dans la liste menu
        int index = this.menu.IndexOf(plat);
        // Si le plat existe dans le menu
        if (index >= 0)
        {
            // Supprimer le plat du menu
            this.menu.RemoveAt(index);
            // Retirer le prix correspondant de la liste de prix
            this.prix.RemoveAt(index);
            // Retirer la note correspondante de la liste de notes
            this.notes.RemoveAt(index);
            // Supprimer le nombre de plats correspondant de la liste 
            // nbrDePlats
            this.nbrDePlats.RemoveAt(index);
        }
    }

    // Méthode pour ajouter une note à un plat
    public void AddNote(string plat, int note)
    {
        // Obtenir l'index du plat dans le menu
        int index = this.menu.IndexOf(plat);
        // Si le plat existe dans le menu
        if (index >= 0)
        {
            // Obtenir la note actuelle du plat
            int note_act = this.notes[index];
            // Obtenir le nombre actuel du plat
            int totalePlats = this.nbrDePlats[index];
            // Mettre à jour la note du plat
            this.notes[index] = note_act + note;
            // Mettre à jour le nombre de plats
            this.nbrDePlats[index] = totalePlats + 1;
        }
    }

    // Méthode pour obtenir la note moyenne d'un plat
    public double GetMoyenneNote(string plat)
    {
        // Obtenir l'index du plat dans le menu
        int index = this.menu.IndexOf(plat);
        // Si le plat existe dans le menu
        if (index >= 0)
        {
            // Obtenir la note totale du plat
            int totaleNote = this.notes[index];
            // Obtenir le nombre actuel du plat
            int totalePlats = this.nbrDePlats[index];
            // Calculer et renvoyer la note moyenne du plat
            return totalePlats > 0 ? (double)totaleNote / totalePlats : 0.0;
        }
        else
        {
            // Retourner 0.0 si le plat n'existe pas dans le menu
            return 0.0;
        }
    }

    // Méthode pour afficher le menu
    public void AfficherMenu()
    {
        // Parcourir la liste de menus
        for (int i = 0; i < menu.Count; i++)
        {
            // Afficher le plat et son prix
            Console.WriteLine(menu[i] + ": €" + prix[i]);
        }
    }

    // Méthode de calcul de la note moyenne de tous les plats
    public double CalculerNoteMoyenne()
    {
        // Initialiser la note totale à 0
        double noteTotale = 0;
        // Initialiser le nombre de notes à 0
        int nbrNote = 0;
        // Parcourir la liste de notes
        for (int i = 0; i < notes.Count; i++)
        {
            // Ajouter la note à noteTotale
            noteTotale += notes[i];
            // Incrémenter nbrNote
            nbrNote++;
        }
        // Calculer et renvoyer la note moyenne
        return nbrNote > 0 ? noteTotale / nbrNote : 0.0;
    }
}

// Définir la classe Main
public class MainClass
{
    // Définir la méthode main qui est le point d'entrée du programme
    public static void Main(string[] args)
    {
        // Créer un nouvel objet Restaurant
        Restaurant restaurant = new Restaurant();
        // Ajouter au menu un plat Bœuf à la ficelle au prix de 15€
        restaurant.AddPlat("Bœuf à la ficelle", 15.00);
        // Ajouter au menu un plat de pizzas au prix de 8,99€
        restaurant.AddPlat("Pizza", 8.99);
        // Ajouter un plat de salade au prix de 5€ au menu
        restaurant.AddPlat("Salade", 5.00);

        Console.WriteLine("Menu: Plats et prix");
        // Afficher les plats du menu et leur prix
        restaurant.AfficherMenu();

        // Ajouter une note de 4 au plat Bœuf à la ficelle
        restaurant.AddNote("Bœuf à la ficelle", 4);
        // Ajouter une note de 5 au plat Bœuf à la ficelle
        restaurant.AddNote("Bœuf à la ficelle", 5);
        // Ajouter une note de 3 au plat Pizza
        restaurant.AddNote("Pizza", 3);
        // Ajouter une note de 4 au plat Pizza
        restaurant.AddNote("Pizza", 4);
        // Ajouter une note de 2 au plat de salade
        restaurant.AddNote("Salade", 2);

        // Obtenir la note moyenne pour le plat Pizza
        double noteMoyenne = restaurant.GetMoyenneNote("Pizza");
        // Afficher la note moyenne pour le plat Pizza
        Console.WriteLine("Note moyenne pour Pizza: " + noteMoyenne);
        // Obtenir la note moyenne pour le plat Salade
        noteMoyenne = restaurant.GetMoyenneNote("Salade");
        // Afficher la note moyenne pour le plat Salade
        Console.WriteLine("Note moyenne pour Salade: " + noteMoyenne);
        // Afficher la note moyenne totale pour tous les plats
        Console.WriteLine("Note moyenne: " + restaurant.CalculerNoteMoyenne());

        Console.WriteLine("\nSupprimer 'Pizza' du menu.");
        // Supprimer le plat pizza du menu
        restaurant.RemovePlat("Pizza");
        Console.WriteLine("\nMenu actualisé:");
        // Afficher les plats du menu mis à jour et leur prix
        restaurant.AfficherMenu();
    }
}

Sortie:

Menu: Plats et prix
Bœuf à la ficelle: 15.00€
Pizza: 8,99€
Salade: 5.0€
Note moyenne pour Pizza: 3.5
Note moyenne pour Salad: 2
Note moyenne: 3.56987155
Supprimer 'Pizza' du menu.

Menu actualisé:
Bœuf à la ficelle: 15.00€
Salade: 5.0€
 

Exercice 3:

Écrivez un programme C# pour créer une classe appelée « CompteBancaire » avec des attributs pour le numéro de compte, le nom du titulaire du compte et le solde. Incluez des méthodes pour déposer et retirer de l’argent, ainsi que pour vérifier le solde. Créez une classe fils appelée « CompteEpargne » qui ajoute un attribut de taux d’intérêt et une méthode pour appliquer l’intérêt.

Diagrame de classe:

Solution:

using System; // Importer le namespace System

// Définir la classe CompteBancaire
class CompteBancaire
{
    // Attribut pour le numéro de compte
    private string numCompte;
    // Attribut pour le nom du titulaire du compte
    private string titulaireCompte;
    // Attribut pour le solde du compte
    private double solde;

    // Constructeur pour initialiser l'objet CompteBancaire
    public CompteBancaire(string numCompte, string titulaireCompte, double initialBalance)
    {
        this.numCompte = numCompte;
        this.titulaireCompte = titulaireCompte;
        this.solde = initialBalance;
    }

    // Méthode pour déposer de l'argent sur le compte
    public void Depositer(double montant)
    {
        if (montant > 0)
        {
            solde += montant;
            Console.WriteLine("Déposés: " + montant + ". Nouveau solde: " + solde);
        }
        else
        {
            Console.WriteLine("Le montant déposé doit être positif.");
        }
    }

    // Méthode pour retirer de l'argent du compte
    public void Retirer(double montant)
    {
        if (montant > 0 && montant <= solde)
        {
            solde -= montant;
            Console.WriteLine("Retrait: " + montant + ". Nouveau solde: " + solde);
        }
        else
        {
            Console.WriteLine("Solde insuffisant ou montant invalide.");
        }
    }

    // Méthode pour vérifier le solde du compte
    public double CheckSolde()
    {
        return solde;
    }

    // Méthode pour récupérer le numéro de compte
    public string GetNumCompte()
    {
        return numCompte;
    }

    // Méthode pour récupérer le nom du titulaire du compte
    public string GetTitulaireCompte()
    {
        return titulaireCompte;
    }
}

// Définir la classe CompteEpargne qui hérite de CompteBancaire
class CompteEpargne : CompteBancaire
{
    // Attribut pour le taux d'intérêt
    private double tauxInter;

    // Constructeur pour initialiser l'objet CompteEpargne
    public CompteEpargne(string numCompte, string titulaireCompte, double soleInitial, double tauxInter) 
        : base(numCompte, titulaireCompte, soleInitial) //Appeler 
        // le constructeur de la classe mère.
    {
        this.tauxInter = tauxInter;
    }

    // Méthode pour appliquer l'intérêt au solde
    public void AppliquerInter()
    {
        // Calculer l'intérêt
        double inter = CheckSolde() * tauxInter / 100;

        Depositer(inter); // Ajouter de l'intérêt au solde
        Console.WriteLine("Intérêts appliqués: " + inter + ". Nouveau solde: " + CheckSolde());
    }

    // Méthode Getter pour le taux d'intérêt
    public double GetTauxInter()
    {
        return tauxInter;
    }

    // Méthode Setter pour le taux d'intérêt
    public void SetTauxInter(double tauxInter)
    {
        if (tauxInter > 0)
        {
            this.tauxInter = tauxInter;
        }
        else
        {
            Console.WriteLine("Le taux d'intérêt doit être positif.");
        }
    }
}

// Définir la classe Main
public class MainClass
{
    // Définir la méthode main qui est le point d'entrée du programme
    public static void Main(string[] args)
    {
        // Créer un objet CompteBancaire
        CompteBancaire cpt = new CompteBancaire("902456001", "Alex Babtise", 1500.0);
        // Vérifier le solde
        Console.WriteLine("Solde actuel: " + cpt.CheckSolde());

        cpt.Depositer(4000.0); // Déposer de l'argent
        cpt.Retirer(3000.0); // Retirer de l'argent
        // Vérifier le solde
        Console.WriteLine("Solde actuel: " + cpt.CheckSolde());

        // Créer un objet CompteEpargne
        CompteEpargne epargne = new CompteEpargne("555236123", "Emily Leona", 3000.0, 5.0);
        // Appliquer l'intérêt
        epargne.AppliquerInter();

        // Vérifier le solde
        Console.WriteLine("Compte d'épargne solde: " + epargne.CheckSolde());
    }
}

Sortie:

Solde actuel: 1500.0
Déposés: 4000.0. Nouveau solde: 5500.0
Retrait: 3000.0. Nouveau solde: 2500.0
Solde actuel: 2500.0
Déposés: 150.0. Nouveau solde: 3150.0
Intérêts appliqués: 150.0. Nouveau solde: 3150.0
Compte d'épargne solde: 3150.0
 

Exercice 4:

Écrire un programme C# pour créer une classe appelée « Vehicule » avec des attributs pour la marque, le modèle et l’année. Créez des classes fils « Voiture » et « Camion » qui ajoutent des attributs spécifiques tels que la taille du coffre pour les voitures et la capacité de charge pour les camions. Implémentez une méthode pour afficher les détails du véhicule dans chaque classe fille.

Diagrame de classe:

Solution:

using System; // Importer le namespace System

// Définir la classe Vehicule
class Vehicule
{
    // Attribut pour la marque du véhicule
    private string marque;
    // Attribut pour le modèle du véhicule
    private string model;
    // Attribut pour l'année du véhicule
    private int an;

    // Constructeur pour initialiser l'objet Vehicule
    public Vehicule(string marque, string model, int an)
    {
        this.marque = marque;
        this.model = model;
        this.an = an;
    }

    // Méthode pour afficher les détails du véhicule
    // Méthode virtuelle pour permettre la surcharge
    public virtual void AfficherDetails() 
    {
        Console.WriteLine("Les détails du véhicule:");
        Console.WriteLine("Marque: " + marque);
        Console.WriteLine("Modèle: " + model);
        Console.WriteLine("Année: " + an);
    }

    // Méthode Getter pour marque du véhicule
    public string GetMarque()
    {
        return marque;
    }

    // Méthode Getter pour le modèle du véhicule
    public string GetModel()
    {
        return model;
    }

    // Méthode Getter pour l'année du véhicule
    public int GetAn()
    {
        return an;
    }
}

// Définir la classe Voiture qui hérite de Vehicule
class Voiture : Vehicule
{
    // Attribut pour la taille du coffre de la voiture
    private double tailleCoffre;

    // Constructeur pour initialiser l'objet Voiture
    public Voiture(string marque, string model, int an, double tailleCoffre) 
        : base(marque, model, an) //Appeler 
        // le constructeur de la classe mère.
    {
        this.tailleCoffre = tailleCoffre;
    }

    // Surcharger la méthode afficherDetails pour inclure la taille 
    // du coffre
    public override void AfficherDetails()
    {
        // Appeler la méthode de la classe mère
        base.AfficherDetails();
        Console.WriteLine("Taille du coffre: " + tailleCoffre + " mètres cubes");
    }

    // Méthode pour récupérer la taille du coffre
    public double GetTailleCoffre()
    {
        return tailleCoffre;
    }

    // Méthode pour définir la taille du coffre
    public void SetTailleCoffre(double tailleCoffre)
    {
        if (tailleCoffre > 0)
        {
            this.tailleCoffre = tailleCoffre;
        }
        else
        {
            Console.WriteLine("La taille du coffre doit être positive.");
        }
    }
}

// Définir la classe Camion qui hérite de Vehicule
class Camion : Vehicule
{
    // Attribut pour la capacité de charge du camion
    private double capacitCharge;

    // Constructeur pour initialiser l'objet Camion
    public Camion(string marque, string model, int an, double capacitCharge) 
        : base(marque, model, an) //Appeler 
        // le constructeur de la classe mère.
    {
        this.capacitCharge = capacitCharge;
    }

    // Surcharger la méthode afficherDetails pour inclure la capacité 
    // de charge
    public override void AfficherDetails()
    {
        // Appeler la méthode de la classe mère
        base.AfficherDetails();
        Console.WriteLine("Capacité de charge: " + capacitCharge + " tons");
    }

    // Méthode pour récupérer la capacité de charge
    public double GetCapacitCharge()
    {
        return capacitCharge;
    }

    // Méthode pour définir la capacité de charge
    public void SetCapacitCharge(double capacitCharge)
    {
        if (capacitCharge > 0)
        {
            this.capacitCharge = capacitCharge;
        }
        else
        {
            Console.WriteLine("La capacité de charge doit être positive.");
        }
    }
}

// Définir la classe Main
public class MainClass
{
    // Définir la méthode Main qui est le point d'entrée du programme
    public static void Main(string[] args)
    {
        // Créer un objet Voiture
        Voiture v = new Voiture("BMW", "Série 6", 2014, 16.15);
        // Afficher les détails de la voiture
        v.AfficherDetails(); 

        // Créer un objet Camion
        Camion c = new Camion("Mercedes", "Arocs", 2024, 4.5);
        // Afficher les détails du camion
        c.AfficherDetails(); 
    }
}

Sortie:

Les détails du véhicule:
Marque: BMW
Modèle: Série 6
Année: 2014
Taille du coffre: 16.15 mètres cubes
Les détails du véhicule:
Marque: Mercedes
Modèle: Arocs
Année: 2024
Capacité de charge: 4.5 tons
 

Exercice 5:

Écrire un programme C# pour créer une classe appelée « Client » avec des attributs pour le nom, l’email et l’historique des achats. Implémentez des méthodes pour ajouter des achats à l’historique et calculer la dépense totale. Créez une classe fille « ClientFidele » qui ajoute un attribut de taux de remise et une méthode pour appliquer la remise.

Diagrame de classe:

Solution:

// Importer le namespace System
using System; 
// Importer le namespace pour utiliser les listes génériques
using System.Collections.Generic; 

// Définir la classe Client
class Client
{
    // Attributs pour le nom, l'email et l'historique des achats du 
    // client
    private string nom;
    private string email;
    private List<double> historiqueAchats;

    // Constructeur pour initialiser le nom et l'email du client
    public Client(string nom, string email)
    {
        this.nom = nom;
        this.email = email;
        // Initialiser l'historique des achats comme une liste vide
        this.historiqueAchats = new List<double>();
    }

    // Méthode pour ajouter un achat à l'historique des achats
    public virtual void AddAchat(double montant)
    {
        historiqueAchats.Add(montant);
    }

    // Méthode de calcul des dépenses totales
    public double CalculerTotalDepenses()
    {
        double total = 0;
        // Parcourir en boucle chaque achat et faire la somme des 
        // montants
        foreach (double purchase in historiqueAchats)
        {
            total += purchase;
        }
        return total;
    }

    // Getters pour l'attribut nom
    public string GetNom()
    {
        return nom;
    }

    // Getters pour l'attribut email
    public string GetEmail()
    {
        return email;
    }

    // Méthode pour récupérer l'historique des achats
    public List<double> GetHistoriqueAchats()
    {
        return historiqueAchats;
    }
}

// Définir la classe ClientFidele qui hérite de Client
class ClientFidele : Client
{
    // Attribut pour le taux de remise
    private double tauxRemise;

    // Constructeur pour initialiser ClientFidele avec le nom, 
    // l'email et le taux de réduction.
    public ClientFidele(string nom, string email, double tauxRemise) 
        : base(nom, email) //Appeler 
        // le constructeur de la classe mère.
    {
        this.tauxRemise = tauxRemise;
    }

    // Méthode pour appliquer la réduction à un montant donné
    public double AppliquerRemise(double montant)
    {
        return montant - (montant * tauxRemise / 100);
    }

    // Surcharger la méthode AddAchat pour appliquer la réduction 
    // avant d'ajouter l'achat
    public override void AddAchat(double montant)
    {
        double r = AppliquerRemise(montant);
        // Appeler la méthode de la classe mère pour ajouter le 
        // montant réduit
        base.AddAchat(r);
    }

    // Méthode pour récupérer le taux de remise
    public double GetTauxRemise()
    {
        return tauxRemise;
    }

    // Méthode pour définir le taux de remise
    public void SetTauxRemise(double tauxRemise)
    {
        this.tauxRemise = tauxRemise;
    }
}

// Définir la classe Main
public class MainClass
{
    // Définir la méthode Main qui est le point d'entrée du programme
    public static void Main(string[] args)
    {
        // Créer un client régulier
        Client c = new Client("Alex Rio", "[email protected]");
        c.AddAchat(200);
        c.AddAchat(300);
        Console.WriteLine("Dépenses totales pour " + c.GetNom() + ": " + c.CalculerTotalDepenses());

        // Créer un client fidèle avec un taux de réduction de 5%
        ClientFidele f = new ClientFidele("Emily Bazi", "[email protected]", 5);

        f.AddAchat(200);
        f.AddAchat(300);
        Console.WriteLine("Dépenses totales pour " + f.GetNom() + " après réduction: " + f.CalculerTotalDepenses());
    }
}

Sortie:

Dépenses totales pour Alex Rio: 500.0
Dépenses totales pourr Emily Bazi après réduction: 475.0
 

Éditeur de code C#: Testez votre code en ligne!

qcm-csharp

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *