Programmation .Net - Indépendance financière

Les classes en Visual Basic/C# – Exercice et solution

Exercice

Dans cet exercice, vous devez créer deux classes, une pour garder en mémoire les informations d’un client et l’autre pour valider les entrées de ce client. Nous utiliserons la console pour lire les informations du client.

1. Créer une application console;
2. Créer une classe nommée Client qui contiendra l’information du client;
3. Ajouter les propriétés suivantes : Prenom, Nom, Courriel, Adresse, Telephone;
4. Créer un constructeur par défaut et un constructeur par paramètre pour la classe client;
5. Créer une autre classe nommée Validator;
6. Ajouter 3 méthodes dans votre classe Validator avec les signatures suivantes : bool ValiderChampsVide(string Texte), bool ValiderCourriel(string Courriel), bool ValiderTelephone(string Telephone);
7. Avec un peu de recherche, vous pouvez même mettre la classe Validator à static. Nous verrons ce type de classes prochainement!

Dans la classe principale soit program.vb/program.cs, vous devez demander pour l’information client, ensuite valider cette information puis créer un objet client avec l’information entrée et finalement afficher ce client (vous pouvez implémenter la méthode ToString() de la classe Client).

Voici un exemple de sortie du programme dans la console

Veuillez entrer le prénom du client: 
Alexandre
Veuillez entrer le nom du client:
Sauve
Veuillez entrer le courriel: 
test@test.com
Veuillez entrer l'adresse:
56000 test rd.
Veullez entrer le numéro de téléphone: 
888888888

Information client: 
Prénom: Alexandre
Nom: Sauve
Courriel: test@test.com
Adresse: 56000 test rd.
Téléphone: 8888888888

Note: Pour ce qui est de la validation des entrées, vous n’avez pas à vous compliquer la vie, simplement valider s’il y a du texte entré pour le prénom, nom, courriel et adresse et une longueur pour le numéro de téléphone. Si vous voulez un peu plus de challenge, vous pouvez utiliser les expressions régulières pour le courriel et/ou le numéro de téléphone. Bonne chance!

Solution

Commençons pas créer les outils dont nous avons besoin pour executer cet exercice. Il y aura deux classes soit Validator et Client. Rappelez-vous de mettre le nom de ces classes au singulier puisque, de façon logique, vous aller créer un ou plusieurs objets du type d’une seule classe.

Créer un nouveau projet console et ajoutez-y les classes mentionnées plus haut.

Visual Basic

Visual Basic solution explorer

C#

Solution Explorer

Client

Visual Basic

Option Strict On
Option Explicit On

Public Class Client

End Class

C#

namespace Exercise5
{
    public class Client
    {

    }
}

Validator

Visual Basic

Option Strict On
Option Explicit On

Public Module Validator

End Module

C#

namespace Exercise5
{
    public static class Validator
    {

    }
}

Comme vous pouvez certainement le constater, la classe Validator est static (ou un module en Visual Basic). Ceci nous permettra d’y accéder sans avoir à en déclarer une instance. En effet, une classe static (module) n’a qu’une seule instance par programme. Ici, il est possible que nous ayons à utiliser le Validator à plusieurs endroits dans notre programme. Le fait de l’avoir static (module) nous permettra aisément d’accomplir cette tâche. De plus, les deux classes sont public pour pouvoir les accéder de l’extérieur de celles-ci.

Nous avons maintenant les étapes 1, 2 et 5 de complétées, vous pouvez les réviser directement en allant revoir l’énoncé. Il est temps d’ajouter un peu de viande à nos classes!

Classe Client

Visual Basic

Option Strict On
Option Explicit On

Public Class Client
    'Propriétés
    Public Property Prenom As String
    Public Property Nom As String
    Public Property Courriel As String
    Public Property Adresse As String
    Public Property Telephone As String

    'Constructeurs
    Public Sub New(Prenom As String,
                   Nom As String,
                   Courriel As String,
                   Adresse As String,
                   Telephone As String)
        Me.Prenom = Prenom
        Me.Nom = Nom
        Me.Courriel = Courriel
        Me.Adresse = Adresse
        Me.Telephone = Telephone
    End Sub

    Public Sub New()
        Prenom = "Alexandre"
        Nom = "Sauve"
        Courriel = "test@test.com"
        Adresse = "450 testing St."
        Telephone = "8888888888"
    End Sub

    'Override de la méthode ToString()
    Public Overrides Function ToString() As String
        Return "First Name: " & Prenom & vbCrLf &
               "Last Name: " & Nom & vbCrLf &
               "Email: " & Courriel & vbCrLf &
               "Address: " & Adresse & vbCrLf &
               "Phone Number: " & Telephone & vbCrLf
    End Function
End Class

C#

namespace Exercise5
{
    public class Client
    {
        public string Prenom { get; set; }
        public string Nom { get; set; }
        public string Courriel { get; set; }
        public string Adresse { get; set; }
        public string Telephone { get; set; }

        public Client(string Prenom,
                      string Nom,
                      string Courriel,
                      string Adresse,
                      string Telephone)
        {
            this.Prenom     = Prenom;
            this.Nom        = Nom;
            this.Courriel   = Courriel;
            this.Adresse    = Adresse;
            this.Telephone  = Telephone;
        }

        public Client()
        {
            Prenom      = "Alexandre";
            Nom         = "Sauve";
            Courriel    = "Test@hotmail.com";
            Adresse     = "450 Test St.";
            Telephone   = "2833939292";
        }

        public override string ToString()
        {
            return "Prénom: " + Prenom + "\n" + 
                   "Nom : " + Nom + "\n" + 
                   "Courriel : " + Courriel + "\n" + 
                   "Adresse: " + Adresse + "\n" + 
                   "Téléphone: " + Telephone;
        }
    }
}

Les deux constructeurs (par paramètres et par défaut) ainsi que les propriétés et la méthode ToString() sont maintenant dans les classe Client. Quelques questions s’imposent, premièrement, pourquoi utiliser la méthode ToString(), comme mentionné dans un tutoriel précédent, la méthode ToString retourne une chaine de caractère représentant la classe elle-même, ici nous allons l’override pour l’utiliser à notre avantage. Le but est donc de pouvoir facilement afficher le client dans la console après l’entrée des données par l’utilisateur. Deuxièmement, qu’est-ce que le this/Me? Ils sont utiles dans ce cas car le nom de mes variables locales sont exactement les mêmes que ceux de mes propriété. Le compilateur ne peut donc pas différentier les unes des autres. En utilisant le this/Me, nous indiquons au compilateur que nous voulons assigner la valeur de la variable local à la propriété.

Notre classe Client est maintenant prête à l’utilisation dans notre programme!

Classe Validator

La classe Validator nous servira à valider les entrées de l’utilisateur. Il serait assurément plus profitable de séparer la validation du code de gestion des entrées dans le cas où nous aurions un peu plus d’entrées à valider, mais nous en resterons là pour l’exercice dans le but de simuler un programme plus complexe. La validation ne sera pas très élaborée puisque ce n’est pas le but de l’exercice non plus.

Visual Basic

Option Strict On
Option Explicit On

Imports System.Text.RegularExpressions

Public Module Validator
    Public Function FieldIsEmpty(ByVal Value As String) As Boolean
        If String.IsNullOrEmpty(Value) Then
            Return True
        End If
        Return False
    End Function

    Public Function PhoneNumberIsValid(ByVal PhoneNumber As String) As Boolean
        If PhoneNumber.Length = 10 Then
            Return True
        End If
        Return False
    End Function

    Public Function EmailIsValid(ByVal Email As String) As Boolean
        If Regex.IsMatch(Email, "^[^@]+@[^@]+\.[^@]+$") Then
            Return True
        End If
        Return False
    End Function
End Module

C#

using System.Text.RegularExpressions;

namespace Exercise5
{
    public static class Validator
    {
        public static bool FieldIsEmpty(string Value)
        {
            if (String.IsNullOrEmpty(Value))
                return true;
            return false;
        }

        public static bool PhoneNumberIsValid(string PhoneNumber)
        {
            if (PhoneNumber.Length == 10)
                return true;
            return false;
        }

        public static bool EmailIsValid(string Email)
        {
            if (Regex.IsMatch(Email, "^[^@]+@[^@]+\\.[^@]+$"))
                return true;
            return false;
        }
    }
}

La première méthode fait seulement la vérification d’une chaine de caractère, si cette dernière est vide ou nulle, alors la méthode retournera true, sinon elle retournera false. Ceci est dû au nom que donné à cette méthode soit FieldIsEmpty, si vous souhaitez avoir le résultat inverse, vous pouvez renommer la méthode et changer ce qu’elle fait, par exemple : FieldIsNotEmpty. Cette méthode pourrait alors retourner true si le champs n’est pas vide et false s’il l’est. N’oubliez pas de faire les changements requis dans Program.vb/Program.cs.

La seconde méthode fait la vérification de la longueur du numéro de téléphone. Si le numéro est 10, elle retournera true, sinon elle retournera false.

La dernière méthode utilise une expression régulière pour valider le courriel, Regex est une classe appartenant au namespace System.Text.RegularExpressions, vous devrez donc l’importer en utilisant imports en Visual Basic ou using en C#. La classe Regex peut être utilisée sans la déclarer car la méthode IsMatch a une version static (Shared en Visual Basic). Nous verrons les expressions régulières plus en détail dans un autre tutoriel.

Évoila! Nous avons maintenant deux classes prêtes à être utilisées et les étapes 3, 4, 6 et 7 de complétées. Nous allons maintenant attaquer l’entrée utilisateur.

Entrée utilisateur

Visual Basic

Option Strict On
Option Explicit On

Module Program
    Sub Main()
        'Validation et entrée des champs du client
        Dim Prenom As String = String.Empty
        While Validator.FieldIsEmpty(Prenom)
            Console.WriteLine("Veuillez entrer le prénom du client : ")
            Prenom = Console.ReadLine()
        End While

        Dim Nom As String = String.Empty
        While Validator.FieldIsEmpty(Nom)
            Console.WriteLine("Veuillez entrer le nom du client : ")
            Nom = Console.ReadLine()
        End While

        Dim Courriel As String = String.Empty
        While Validator.FieldIsEmpty(Courriel) Or
              Not Validator.EmailIsValid(Courriel)
            Console.WriteLine("Veuillez entrer le courriel du client : ")
            Courriel = Console.ReadLine()
        End While

        Dim Adresse As String = String.Empty
        While Validator.FieldIsEmpty(Adresse)
            Console.WriteLine("Veuillez entrer l'adresse du client : ")
            Adresse = Console.ReadLine()
        End While

        Dim Telephone As String = String.Empty
        While Validator.FieldIsEmpty(Telephone) Or
              Not Validator.PhoneNumberIsValid(Telephone)
            Console.WriteLine("Veuillez entrer le téléphone du client : ")
            Telephone = Console.ReadLine()
        End While

        'Création du client à partir des variables entrées par l'utilisateur
        Dim NewClient As New Client(Prenom,
                                    Nom,
                                    Courriel,
                                    Adresse,
                                    Telephone)

        'Sortie du client dans la console à l'aide de la méthode ToString()
        Console.Write(NewClient.ToString())
        Console.ReadKey()
    End Sub
End Module

C#

using System;

namespace Exercise5
{
    class Program
    {
        static void Main(string[] args)
        {
            //Validation et entrée des informations du client
            string Prenom = String.Empty;
            while(Validator.FieldIsEmpty(Prenom))
            {
                Console.WriteLine("Veuillez entrer le prénom du client : ");
                Prenom = Console.ReadLine();
            }

            string Nom = String.Empty;
            while (Validator.FieldIsEmpty(Nom))
            {
                Console.WriteLine("Veuillez entrer le nom du client : ");
                Nom = Console.ReadLine();
            }

            string Courriel = String.Empty;
            while (Validator.FieldIsEmpty(Courriel) ||
                   !Validator.EmailIsValid(Courriel))
            {
                Console.WriteLine("Veuillez entrer le courriel du client : ");
                Courriel = Console.ReadLine();
            }

            string Adresse = String.Empty;
            while (Validator.FieldIsEmpty(Adresse))
            {
                Console.WriteLine("Veuillez entrer l'adresse du client");
                Adresse = Console.ReadLine();
            }

            string Telephone = String.Empty;
            while (Validator.FieldIsEmpty(Telephone) ||
                  !Validator.PhoneNumberIsValid(Telephone))
            {
                Console.WriteLine("Veuillez entrer le téléphone du client : ");
                Telephone = Console.ReadLine();
            }

            //Nous avons toutes les informations désirées, nous pouvons créer un nouveau client
            Client NewClient = new Client(Prenom,
                                          Nom,
                                          Courriel,
                                          Adresse,
                                          Telephone);

            //Utilisation de la méthode ToString() pour montrer l'objet client dans la console
            Console.WriteLine(NewClient.ToString());
            Console.ReadKey();
        }
    }
}

Chaque phase de validation se ressemble, il s’agit de prendre l’entrée de l’utilisateur et de la valider, si cette dernière est valide, on sort de la boucle, sinon, on redemande l’information. À la fin de chacune des étapes, nous allons créer un objet Client avec son constructeur par paramètre et toutes les informations recueillies.

Cet exercice était un peu plus complexe que ce que nous voyons normalement. Ce que je vous conseil donc est de créer le projet avec le code de cet exercice et d’essayer par vous même. Si il y a certaines parties qui vous échappent, n’hésitez pas à mettre des points d’arrêts (breakpoints) ou encore de chercher sur Internet pour trouver des réponses (les commentaires ça fonctionne aussi)!

Voici le résultat final :

Result Exercise 5

Encore une fois, si vous avez des questions en lien avec cet exercice, n’hésitez pas à écrire un commentaire!

YouTube

Visual Basic

C#

Next article Utiliser les Windows Forms (Partie 1) - C#/Visual Basic
Previous article Les méthodes des classes en Visual Basic/C#

Related posts

0 Comments

No Comments Yet!

You can be first to comment this post!

Leave a Comment

Your data will be safe! Your e-mail address will not be published. Also other data will not be shared with third person. Required fields marked as *