Un compteur de visites

Nous allons ajouter à une page d'entrée un compteur de visites ; l'interface aura l'allure suivante :

fig 1 interface du compteur

          Contraintes :

         Analyse.

Cette partie est simple, le compteur est responsable :

fig 2 Diagramme de classe.

          Ajout d'une classe.

Créer un nouveau projet ASP.net. Choisir ajouter une classe au projet. Nommez la Compteur.

Déclarer les attributs privés :

private string NomFichier;
private int Val;
private int NbChiffres;

public Compteur(string fichier,int nbchiffres)
{
           this.NbChiffres=nbchiffres;
           this.NomFichier=fichier;
           StreamReader fichierIn = new StreamReader(fichier);
           string ligne= fichierIn.ReadLine ();
           fichierIn.Close();
           this.Val= Convert.ToInt32(ligne);
}

Un objet StreamReader permet de lire un flux (ici un fichier).

La méthode ReadLine lit et récupère une ligne.

Ne pas oublier de fermer le flux.

public void Incremente()
{
         this.Val++;
         StreamWriter fichierOut = new StreamWriter(this.Fichier,false);
         fichierOut.WriteLine(this.val.ToString());
         fichierOut.Close();
}

L'objet StreamWriter permet d'écrire un flux (ici un fichier)

public void Affiche(Table tab)
{
       string ch="";
       for (int i=0;i<this.NbChiffres-this.Val.ToString().Length ;i++)
                  ch+="0";
       ch+=this.Val.ToString();
        char[] t= ch.ToCharArray();
        TableRow tr = new TableRow();
        TableCell tc = new TableCell();
         for(int i=0;i<this.NbChiffres;i++)
             {

               System.Web.UI.WebControls.Image im = new                             System.Web.UI.WebControls.Image();
                im.ImageUrl="images/" +t[i].ToString() + ".gif";
                tc.Controls.Add(im);
               }
         tab.Rows.Add(tr);
         tr.Cells.Add(tc);
}

Commentaires :

La méthode prend comme argument une Table (tableau HTML)

La partie :

 string ch="";
       for (int i=0;i<this.NbChiffres-this.Val.ToString().Length ;i++)
                  ch+="0";
       ch+=this.Val.ToString();
        char[] t= ch.ToCharArray();

permet de transformer la valeur du compteur en un tableau de caractères tenant compte de la dimension du compteur, par exemple si le compteur vaut 145 et que l'on désire un affichage sur 7 caractères, le code construit le tableau de caractères 0000145.

La partie :

 TableRow tr = new TableRow();
 TableCell tc = new TableCell();

crée une ligne (balise TR) et un tableau de cellules

La partie :

 for(int i=0;i<this.NbChiffres;i++)
             {

               System.Web.UI.WebControls.Image im = new                             System.Web.UI.WebControls.Image();
                im.ImageUrl="images/" +t[i].ToString() + ".gif";
                tc.Controls.Add(im);
               }

ajoute au tableau de cellules les images. Les fichiers images sont de la forme 0.gif pour le chiffre 0, 1.gif pour le chiffre 1 ... Charger les images

La dernière partie ajoute à l'argument tab la ligne et à la ligne le tableau de cellules.

Dans le formulaire qui doit contenir le compteur, on instancie un compteur dans la méthode Load :

Compteur c=new Compteur(Server.MapPath("compteur.txt"),7);
c.Incremente();
c.Affiche(tabChiffre);

La méthode MapPath retourne le chemin du fichier, ce qui évite de se soucier du chemin réel.

tabChiffre est un objet de type Table (de la boite à outil des WebForms)

Le code proposé fait du compteur un compteur de hits, en effet à chaque retour sur le page il y a incrémentation du compteur et cela même s'il s'agit du même visiteur. Si nous voulons en faire un réel compteur de visiteurs, il faudra modifier très légèrement l'appel :

Compteur c=new Compteur(Server.MapPath("compteur.txt"),7);
if(Session.IsNewSession)
         c.Incremente();
c.Affiche(tabChiffre);

C'est tout et en plus c'est très parlant...