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

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 « Cours » avec des attributs pour le nom du cours, l’instructeur et le nombre des étoiles. Créer une classe fille « CoursEnLigne » qui ajoute des attributs pour la plate-forme et la durée. Implémentez des méthodes pour afficher les détails du cours et vérifier si le cours est éligible pour un certificat en fonction de sa durée.

Diagrame de classe:

Solution:

using System;

// Définir la classe Cours
class Cours
{
    // Attributs pour le nom du cours, l'instructeur et le nombre 
    // d'étoiles
    private string nomCours;
    private string instructeur;
    private int etoiles;

    // Constructeur pour initialiser l'objet Cours
    public Cours(string nomCours, string instructeur, int etoiles)
    {
        this.nomCours = nomCours;
        this.instructeur = instructeur;
        this.etoiles = etoiles;
    }

    // Méthode pour afficher les détails du cours
    public virtual void Afficher()
    {
        Console.WriteLine("Nom du cours: " + nomCours);
        Console.WriteLine("Instructeur: " + instructeur);
        Console.WriteLine("Étoiles: " + etoiles);
    }

    // Méthode pour récupérer le nom du cours
    public string GetNomCours()
    {
        return nomCours;
    }

    // Méthode pour récupérer l'instructeur
    public string GetInstructeur()
    {
        return instructeur;
    }

    // Méthode pour récupérer le nombre d'étoiles
    public int GetEtoiles()
    {
        return etoiles;
    }
}

// Définir la classe fille CoursEnLigne qui hérite de la classe Cours
class CoursEnLigne : Cours
{
    // Attributs supplémentaires: la plateforme et la durée
    private string platforme;
    private int d; // durée en heures

    // Constructeur pour initialiser l'objet CoursEnLigne
    public CoursEnLigne(string nomCours, string instructeur, int etoiles, string platforme, int d)
        : base(nomCours, instructeur, etoiles) //Appeler 
        // le constructeur de la classe mère
    {
        this.platforme = platforme;
        this.d = d;
    }

    // Méthode pour afficher les détails du cours, y compris la 
    // plateforme et la durée
    public override void Afficher()
    {
        // Appeler la méthode de la classe mère pour afficher les 
        // détails communs
        base.Afficher();
        Console.WriteLine("Plateforme: " + platforme);
        Console.WriteLine("Durée: " + d + " heures");
    }

    // Méthode pour vérifier si le cours est éligible pour un 
    // certificat en fonction de sa durée
    public bool EstEligiblePourCertificat()
    {
        // Supposons qu'un cours soit éligible pour un certificat si 
        // sa durée est d'au moins 12 heures.
        return d >= 12;
    }

    // Méthode pour récupérer la plateforme
    public string GetPlatforme()
    {
        return platforme;
    }
}

// Définir la classe de Main
class MainClass
{
    public static void Main(string[] args)
    {
        // Créer un objet Cours
        Cours c1 = new Cours("Biologie", "Dr. Alex Leon", 3);
        c1.Afficher();
        Console.WriteLine();

        // Créer un objet CoursEnLigne
        CoursEnLigne c2 = new CoursEnLigne("Science", "Prof. Ali Farok", 5, "Coursera", 24);
        c2.Afficher();
        Console.WriteLine("Éligible pour un certificat: " + c2.EstEligiblePourCertificat());
    }
}

Sortie:

Nom du cours: Biologie
Instructeur: Dr. Alex Leon
Etoiles: 3

Nom du cours: Science
Instructeur: Prof. Ali Farok
Etoiles: 5
Platforme: Coursera
Durée: 24 heures
Eligible pour un certificat: true
 

Exercice 2:

Écrivez un programme C# pour créer une classe appelée « ProduitElectronique » avec des attributs pour l’ID, le nom et le prix du produit. Implémentez des méthodes pour appliquer une remise et calculer le prix final. Créez une classe fille « Refrigerateur » qui ajoute un attribut de période de garantie et une méthode pour étendre la garantie.

Diagrame de classe:

Solution:

using System;

// Définir la classe ProduitElectronique
class ProduitElectronique
{
    // Attributs pour l'ID, le nom et le prix du produit
    private string produitID;
    private string nom;
    private double prix;

    // Constructeur pour initialiser l'objet ProduitElectronique
    public ProduitElectronique(string produitID, string nom, double prix)
    {
        this.produitID = produitID;
        this.nom = nom;
        this.prix = prix;
    }

    // Méthode pour appliquer une réduction au prix du produit
    public virtual void AppliquerRemise(double pourcentageRemise)
    {
        // Calculer le montant de la remise
        double montantRemise = prix * pourcentageRemise / 100;
        // Soustraire le montant de la remise du prix initial
        prix -= montantRemise;
    }

    // Méthode de calcul du prix final après remise
    public double GetPrixFinal()
    {
        // Retourner le prix actuel qui peut avoir été réduit
        return prix;
    }

    // Méthode pour récupérer l'ID du produit
    public string GetProduitID()
    {
        return produitID;
    }

    // Méthode pour récupérer le nom du produit
    public string GetNom()
    {
        return nom;
    }

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

// Définir la classe fille Refrigerateur qui hérite de ProduitElectronique
class Refrigerateur : ProduitElectronique
{
    // Attribut supplémentaire pour la période de garantie
    private int periodeGarantie; // en mois

    // Constructeur pour initialiser l'objet Refrigerateur
    public Refrigerateur(string produitID, string nom, double prix, int periodeGarantie)
        : base(produitID, nom, prix) //Appeler 
        // le constructeur de la classe mère
    {
        this.periodeGarantie = periodeGarantie;
    }

    // Méthode pour prolonger la période de garantie
    public void ProlongerGarantie(int additionalMonths)
    {
        // Ajouter les mois supplémentaires à la période de garantie 
        // actuelle
        periodeGarantie += additionalMonths;
    }

    // Méthode pour récupérer la période de garantie
    public int GetPeriodeGarantie()
    {
        return periodeGarantie;
    }

    // Surcharger la méthode d'affichage pour inclure la période de 
    // garantie
    public override void AppliquerRemise(double pourcentageRemise)
    {
        // Appeler la méthode de la classe mère pour appliquer la 
        // remise
        base.AppliquerRemise(pourcentageRemise);
        // Afficher un message indiquant que la réduction a été 
        // appliquée
        Console.WriteLine("Remise appliquée au réfrigérateur: " + GetNom());
    }
}

// Définir la classe Main
class MainClass
{
    public static void Main(string[] args)
    {
        // Créer un objet ProduitElectronique
        ProduitElectronique p = new ProduitElectronique("P123", "Lave-vaisselle", 500.00);
        // Appliquer une réduction et afficher le prix final
        p.AppliquerRemise(15);
        Console.WriteLine("ID du produit: " + p.GetProduitID());
        Console.WriteLine("Nom: " + p.GetNom());
        Console.WriteLine("Prix après réduction: " + p.GetPrixFinal() + " €");
        Console.WriteLine();

        // Créer un objet Refrigerateur
        Refrigerateur r = new Refrigerateur("P789", "Réfrigérateur Samsung", 900.00, 12);
        // Appliquer une réduction et afficher le prix final
        r.AppliquerRemise(15);
        Console.WriteLine("ID du produit: " + r.GetProduitID());
        Console.WriteLine("Nom: " + r.GetNom());
        Console.WriteLine("Prix après réduction: " + r.GetPrixFinal() + " €");
        // Afficher la période de garantie
        Console.WriteLine("Période de garantie: " + r.GetPeriodeGarantie() + " mois");

        // Prolonger la période de garantie et afficher la nouvelle 
        // période de garantie
        r.ProlongerGarantie(12);
        Console.WriteLine("Période de garantie après prolongation: " + r.GetPeriodeGarantie() + " mois");
    }
}

Sortie:

ID du produit: P123
Nom: Lave-vaisselle
Prix après réduction: 425.0 €

Remise appliquée au refrigérateur: Réfrigérateur Samsung
ID du produit: P789
Nom: Réfrigérateur Samsung
Prix après réduction: 765.0 €
Période de garantie: 12 mois
Période de garantie après prolongation: 24 mois
 

Exercice 3:

Écrire un programme C# pour créer une classe appelée « Batiment » avec des attributs pour l’adresse, le nombre d’étages et la surface totale. Créez des sous-classes « BatimentResidentiel » et « BatimentCommercial » qui ajoutent des attributs spécifiques tels que le nombre d’appartements pour les bâtiments résidentiels et l’espace de bureau pour les bâtiments commerciaux. Implémentez une méthode pour calculer le loyer total pour chaque sous-classe.

Diagrame de classe:

Solution:

using System;

// Définir la classe Batiment
class Batiment
{
    // Attributs de la classe Batiment
    public string adresse;
    public int nombreDetages;
    public double surfaceTotale;

    // Constructeur pour la classe Batiment
    public Batiment(string adresse, int nombreDetages, double surfaceTotale)
    {
        this.adresse = adresse;
        this.nombreDetages = nombreDetages;
        this.surfaceTotale = surfaceTotale;
    }

    // Méthode pour afficher des informations sur le bâtiment
    public virtual void Afficher()
    {
        Console.WriteLine("Adresse: " + adresse);
        Console.WriteLine("Nombre d'étages: " + nombreDetages);
        Console.WriteLine("Surface totale: " + surfaceTotale + " mètres");
    }
}

// Définir la classe BatimentResidentiel qui hérite de Batiment
class BatimentResidentiel : Batiment
{
    // Attributs supplémentaires pour BatimentResidentiel
    public int nombreDappartements;
    public double loyerParAppartement;

    // Constructeur de la classe BatimentResidentiel
    public BatimentResidentiel(string adresse, int nombreDetages, double surfaceTotale, int nombreDappartements, double loyerParAppartement)
        : base(adresse, nombreDetages, surfaceTotale) //Appeler 
        // le constructeur de la classe mère
    {
        this.nombreDappartements = nombreDappartements;
        this.loyerParAppartement = loyerParAppartement;
    }

    // Méthode pour calculer le loyer total d'un bâtiment résidentiel
    public double CalculerLoyerTotal()
    {
        return nombreDappartements * loyerParAppartement;
    }

    // Surcharger la méthode Afficher pour inclure des détails 
    // supplémentaires
    public override void Afficher()
    {
        // Appeler la méthode Afficher de la classe mère
        base.Afficher(); 
        Console.WriteLine("Nombre d'appartements: " + nombreDappartements);
        Console.WriteLine("Loyer par appartement: " + loyerParAppartement + " €");
        Console.WriteLine("Total des loyers: " + CalculerLoyerTotal() + " €");
    }
}

// Définir la classe BatimentCommercial qui hérite de Batiment
class BatimentCommercial : Batiment
{
    // Attributs supplémentaires pour BatimentCommercial
    public double espaceBureau; // en mètres carrés
    public double loyerParMetreCarre;

    // Constructeur de la classe BatimentCommercial
    public BatimentCommercial(string adresse, int nombreDetages, double surfaceTotale, double espaceBureau, double loyerParMetreCarre)
        : base(adresse, nombreDetages, surfaceTotale) //Appeler 
        // le constructeur de la classe mère
    {
        this.espaceBureau = espaceBureau;
        this.loyerParMetreCarre = loyerParMetreCarre;
    }

    // Méthode pour calculer le loyer total d'un bâtiment commercial
    public double CalculerLoyerTotal()
    {
        return espaceBureau * loyerParMetreCarre;
    }

    // Surcharger la méthode Afficher pour inclure des détails 
    // supplémentaires
    public override void Afficher()
    {
        // Appeler la méthode Afficher de la classe mère
        base.Afficher(); 
        Console.WriteLine("Espace de bureau: " + espaceBureau + " mètres");
        Console.WriteLine("Loyer par mètre carré: " + loyerParMetreCarre + " €");
        Console.WriteLine("Total des loyers: " + CalculerLoyerTotal() + " €");
    }
}

// Définir la classe Main
class MainClass
{
    public static void Main(string[] args)
    {
        // Créer une instance de BatimentResidentiel
        BatimentResidentiel r = new BatimentResidentiel("Rue 30, Quartier Saindenis", 15, 23000.0, 30, 1500.0);

        // Créer une instance de BatimentCommercial
        BatimentCommercial c = new BatimentCommercial("Rue 11, Quartier Laurence", 20, 5000.0, 4000.0, 25.0);

        // Afficher des informations sur le bâtiment résidentiel
        Console.WriteLine("Info sur le bâtiment résidentiel:");
        r.Afficher();

        // Afficher des informations sur le bâtiment commercial
        Console.WriteLine("\nInfo sur le bâtiment commercial:");
        c.Afficher();
    }
}

Sortie:

Info sur le bâtiment résidentiel:
Adresse: Rue 30, Quartier Saindenis
Nombre d'étages: 15
Surface totale: 23000.0 mètres
Nombre d'appartements: 30
Loyer par appartement: 1500.0 €
Total des loyers: 45000.0 €

Info sur le bâtiment commercial:
Adresse: Rue 11, Quartier Laurence
Nombre d'étages: 20
Surface totale: 5000.0 mètres
Espace de bureau: 4000.0 mètres
Loyer par mètre carré: 25.0 €
Total des loyers: 100000.0 €
 

Exercice 4:

Écrire un programme C# pour créer une classe appelée « Evenement » avec des attributs pour le nom de l’événement, la date et le lieu. Créer des sous-classes « Seminaire » et « PerformancesMusicales » qui ajoutent des attributs spécifiques tels que le nombre de conférenciers pour les séminaires et la liste des artistes pour les concerts. Implémenter des méthodes pour afficher les détails de l’événement et vérifier s’il y a des conflits dans le planning de l’événement.

Diagrame de classe:

Solution:

using System;
using System.Collections.Generic;

// Définir la classe Evenement
class Evenement
{
    // Déclarer les attributs: nomEvenement, date et lieu.
    public string nomEvenement;
    public DateTime date;
    public string lieu;

    // Constructeur: Initialiser les attributs nomEvenement, date et 
    // lieu
    public Evenement(string nomEvenement, DateTime date, string lieu)
    {
        this.nomEvenement = nomEvenement;
        this.date = date;
        this.lieu = lieu;
    }

    // Méthode pour afficher le nom, la date et le lieu de 
    // l'événement
    public virtual void Afficher()
    {
        Console.WriteLine("Nom de l'événement: " + nomEvenement);
        Console.WriteLine("Date: " + date);
        Console.WriteLine("Lieu: " + lieu);
    }

    // Vérifier si l'événement en cours entre en conflit avec un 
    // autre événement en comparant leurs dates et lieux
    public bool CheckConflit(Evenement e)
    {
        return this.date == e.date && this.lieu == e.lieu;
    }
}

// Définir la classe Seminaire qui hérite d'Evenement
class Seminaire : Evenement
{
    // Déclarer l'attribut supplémentaire pour le nombre de 
    // conférenciers
    public int nombreDeConf;

    // Constructeur de la classe Seminaire
    public Seminaire(string nomEvenement, DateTime date, string lieu, int nombreDeConf)
        : base(nomEvenement, date, lieu) //Appel 
        // du constructeur de la classe mère
    {
        this.nombreDeConf = nombreDeConf;
    }

    // Surcharger la méthode Afficher pour inclure le nombre de 
    // conférenciers
    public override void Afficher()
    {
        // Appel de la méthode Afficher de la classe mère
        base.Afficher(); 
        Console.WriteLine("Nombre de conférenciers: " + nombreDeConf);
    }
}

// Définir la classe PerformancesMusicales qui hérite d'Evenement
class PerformancesMusicales : Evenement
{
    // Déclarer l'attribut supplémentaire pour la liste des artistes
    public List<string> artistes;

    // Constructeur de la classe PerformancesMusicales
    public PerformancesMusicales(string nomEvenement, DateTime date, string lieu, List<string> artistes)
        : base(nomEvenement, date, lieu) //Appel 
        // du constructeur de la classe mère
    {
        this.artistes = artistes;
    }

    // Surcharger la méthode Afficher pour inclure la liste des 
    // artistes
    public override void Afficher()
    {
        // Appel de la méthode Afficher de la classe mère
        base.Afficher(); 
        Console.WriteLine("Artistes: " + string.Join(", ", artistes));
    }
}

// Définir la classe Main
class MainClass
{
    public static void Main(string[] args)
    {
        // Créer des dates pour les événements
        DateTime date = DateTime.Now;

        // Créer une instance de Seminaire
        Seminaire seminar = new Seminaire("La journée d'étude", date, "Centre de congrès", 4);

        // Créer une instance de PerformancesMusicales
        List<string> artistes = new List<string> { "Groupe A", "Groupe B" };
        PerformancesMusicales performance = new PerformancesMusicales("Teintes harmonieuses", date, "Centre de congrès", artistes);

        // Afficher les détails du séminaire
        Console.WriteLine("Les détails du séminaire:");
        seminar.Afficher();

        // Afficher les détails de la performance musicale
        Console.WriteLine("\nLes détails de la performance musicale:");
        performance.Afficher();

        // Vérifier s'il y a des conflits d'horaire
        if (seminar.CheckConflit(performance))
        {
            Console.WriteLine("\nConflit détecté : Les deux événements sont programmés à la même heure et au même endroit.");
        }
        else
        {
            Console.WriteLine("\nPas de conflit : Les événements sont programmés à des moments ou dans des lieux différents.");
        }
    }
}

Sortie:

Les détails du séminaire:
Nom de l'événement: La journée d'étude
Date: Sun Sep 29 18:17:37 GMT 2024
Lieu: Centre de congrès
Nombre de conférenciers: 4

Les détails de la performance musicale:
Nom de l'événement: Teintes harmonieuses
Date: Sun Sep 29 18:17:37 GMT 2024
Lieu: Centre de congrès
Artistes: Groupe A, Groupe B

Conflit détecté : Les deux événements sont programmés à la même heure et au même endroit.
 

Exercice 5:

Écrivez un programme C# pour créer une classe appelée « CommandeClient » avec des attributs pour l’ID de la commande, le client et la date de la commande. Créez une sous-classe « CommandeEnLigne » qui ajoute des attributs pour l’adresse de livraison et le numéro de suivi. Implémentez des méthodes pour calculer le délai de livraison en fonction de l’adresse et mettre à jour le statut de la livraison.

Diagrame de classe:

Solution:

// Importer les classes nécessaires à la gestion des dates
using System;
using System.Globalization;

// Définir la classe CommandeClient
class CommandeClient
{
    // Attributs pour l'ID de la commande, le client et la date de la 
    // commande
    private string IdCommande;
    private string client;
    private DateTime DateCommande;

    // Constructeur pour initialiser l'objet CommandeClient
    public CommandeClient(string IdCommande, string client, DateTime DateCommande)
    {
        this.IdCommande = IdCommande;
        this.client = client;
        this.DateCommande = DateCommande;
    }

    // Méthode pour récupérer l'ID de la commande
    public string GetIdCommande()
    {
        return IdCommande;
    }

    // Méthode pour récupérer le client
    public string GetClient()
    {
        return client;
    }

    // Méthode pour récupérer la date de la commande
    public DateTime GetDateCommande()
    {
        return DateCommande;
    }

    // Méthode pour afficher les détails de la commande
    public virtual void Afficher()
    {
        Console.WriteLine("ID de la commande: " + IdCommande);
        Console.WriteLine("Client: " + client);
        Console.WriteLine("Date de la commande: " + DateCommande.ToString("d", CultureInfo.CurrentCulture));
    }
}

// Définir la sous-classe CommandeEnLigne qui hérite de CommandeClient
class CommandeEnLigne : CommandeClient
{
    // Attributs spécifiques pour l'adresse de livraison et le numéro
    // de suivi
    private string adresseLivraison;
    private string numSuivi;

    // Constructeur pour initialiser l'objet CommandeEnLigne
    public CommandeEnLigne(string IdCommande, string client, DateTime DateCommande, string adresseLivraison, string numSuivi)
        : base(IdCommande, client, DateCommande)
    {
        this.adresseLivraison = adresseLivraison;
        this.numSuivi = numSuivi;
    }

    // Méthode pour récupérer l'adresse de livraison
    public string GetAdresseLivraison()
    {
        return adresseLivraison;
    }

    // Méthode pour récupérer le numéro de suivi
    public string GetNumSuivi()
    {
        return numSuivi;
    }

    // Méthode pour calculer le délai de livraison en fonction de 
    // l'adresse
    public int CalculerDelaiLivraison()
    {
        // En supposant que le délai de livraison est basé sur la 
        // longueur de la chaîne d'adresse
        return adresseLivraison.Length % 10 + 1;
    }

    // Méthode de mise à jour de l'état de suivi
    public void ActualiserEtatSuivi(string newEtat)
    {
        // Afficher l'état de suivi mis à jour
        Console.WriteLine("Numéro de suivi: " + numSuivi + " - État: " + newEtat);
    }

    // Surcharger la méthode Afficher pour inclure des détails 
    // supplémentaires
    public override void Afficher()
    {
        // Appeler la méthode de la classe mère pour afficher les 
        // détails communs
        base.Afficher();
        // Afficher des détails supplémentaires pour la commande en 
        // ligne
        Console.WriteLine("Adresse de livraison: " + adresseLivraison);
        Console.WriteLine("Numéro de suivi: " + numSuivi);
    }
}

// Définir la classe Main
class MainClass
{
    public static void Main(string[] args)
    {
        // Créer un objet CommandeClient
        CommandeClient c1 = new CommandeClient("C123", "Alex Leo", DateTime.Now);
        // Afficher les détails de la commande
        c1.Afficher();
        Console.WriteLine();

        // Créer un objet CommandeEnLigne
        CommandeEnLigne c2 = new CommandeEnLigne("C789", "Ali Boura", DateTime.Now, "Rue 30, Quartier Saindenis", "Ref129");
        // Afficher les détails de la commande en ligne
        c2.Afficher();
        // Calculer et afficher le délai de livraison
        int t = c2.CalculerDelaiLivraison();
        Console.WriteLine("Délai de livraison estimé: " + t + " jours");
        // Mettre à jour et afficher l'état de la commande
        c2.ActualiserEtatSuivi("En cours de route");
    }
}

Sortie:

ID de la commande: C123
Client: Alex Leo
Date de la commande: 2024-09-29

ID de la commande: c789
Client: Ali Boura
Date de la commande: 2024-09-29
Adresse de livraison: Rue 30, Quartier Saindenis
Numéro de suivi: Ref129
Délai de livraison estimé: 7 jours
Numéro de suivi: Ref129 - Etat: En cours de route
 

É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 *