IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Cours de Turbo Pascal 7


précédentsommairesuivant

Chapitre 22 - Une bonne interface DOS

Lors de la création d'un programme, l'élaboration de l'interface utilisateur est très critique, demande du code et de la patience. Outre les procédures systématiques de gestion des erreurs et de contrôle des entrées, la présentation des données aussi bien en mode MS-DOS qu'en mode graphique conditionne bien souvent la qualité de la diffusion d'un programme. Il est capital de présenter à l'utilisateur les données de façon ordonnée, aérée et claire. Car quand, dans un programme, des informations apparaissent à l'écran et qu'on ne sait pas d'où elles viennent, ni comment intervenir sur son déroulement, l'utilisateur est frustré et l'abandonne.
Il est donc nécessaire, ne serait-ce que pour être à l'aise devant son écran, de construire une interface simple et claire.

Doter son programme d'une interface efficace commence déjà par lui donner un nom ou, du moins, un descriptif de l'objectif ou du travail qu'il doit produire ainsi que des diverses opérations qu'il est capable de réaliser. En général, cela commence par l'affichage d'un menu du type suivant :

 
Sélectionnez
- GESTION D'UN TABLEAU -
[A] - Quitter
[B] - Création du tableau
[C] - Affichage du tableau
[D] - Modification d'un élément du tableau
[E] - Ajout d'un élément à la fin du tableau
[F] - Suppression d'un élément du tableau
[G] - Insertion d'un élément dans le tableau
[H] - Recherche du plus petit élément dans le tableau
[I] - Recherche du plus grand élément dans le tableau
Entrez votre choix : _

Il faut être capable de gérer correctement l'entrée de l'utilisateur pour être sûr qu'il entre un paramètre correct :

 
Sélectionnez
Procedure Menu (var Reponse : Char);
Begin
  repeat
    ClrScr;
    WriteLn('[A] - Quitter');
    WriteLn('[B] - Création du tableau');
    WriteLn('[C] - Affichage du tableau');
    WriteLn('[D] - Modification d''un élément du tableau');
    WriteLn('[E] - Ajout d''un élément à la fin du tableau');
    WriteLn('[F] - Suppression d''un élément du tableau');
    WriteLn('[G] - Insertion d''un élément dans le tableau');
    WriteLn('[H] - Recherche du plus petit élément dans le tableau');
    WriteLn('[I] - Recherche du plus grand élément dans le tableau');
    WriteLn;
    Write('Entrez votre choix : ');
    Reponse := ReadKey;
  until UpCase(Reponse) in ['A'..'I'];
End;

Ensuite, il faut pouvoir détailler les opérations et leurs résultats afin d'offrir le maximum d'informations à l'utilisateur :

 
Sélectionnez
[H] - RECHERCHE DU PLUS PETIT ELEMENT DU TABLEAU
Résultat de la recherche :
            - rang : 27
            - valeur : -213
            
Recherche terminée, tapez sur <ENTREE> pour retourner au menu.

La recherche d'erreurs fait également partie des devoirs du programmeur, c'est-à-dire que le programme doit être capable de repérer des entrées erronées, d'expliquer à l'utilisateur ce qui ne va pas, pourquoi ça ne va pas et lui permettre de recommencer sa saisie :

 
Sélectionnez
Procedure Modifier (var Tab1 : Tableau; n : Integer);
Var Rang, Valeur : Integer;
    Test : Boolean;
Begin
  ClrScr;
  WriteLn('[D] - MODIFICATION D'UN ELEMENT DU TABLEAU');
  if n >= 1 then
    begin
      repeat
        Write('Entrez le rang [1,',n,'] de l''élément à modifier : ');
        ReadLn(Rang);
        Test := (Rang > 0) and (rang <= n);
      until Test;
      Write('Entrez la nouvelle valeur de l''élément : ');
      ReadLn(Valeur);
      Tab1[Rang] := Valeur;
      WriteLn('Modification terminée, tapez sur ENTREE pour retourner au menu.');
    end
  else 
    WriteLn('Aucun élément dans le tableau.');
  ReadLn ;
End;

Très souvent, le tableau est la forme la plus appropriée pour présenter des données à l'écran texte. Il est donc souhaitable de construire des tableaux multicadres afin d'avoir à l'écran plusieurs informations simultanément comme le montre l'exemple suivant :

 
Sélectionnez
*===================================================================*
|                        SuperCalculator 2.5                        |
*===================================================================*
+--------------------------------------------------+----------------+
¦  Module : CALCUL DE FONCTION                     ¦   Page :   3   ¦
+------------------------+-------------------------+----------------+
¦      Valeur de X       ¦     Valeur de Y=f(X)    ¦
¦                        ¦                         ¦
¦          1450          ¦         2103818         ¦
¦          1500          ¦         2251364         ¦
¦          1550          ¦         2403909         ¦
¦          1600          ¦         2561455         ¦
¦          1650          ¦         2724000         ¦
¦          1700          ¦         2891545         ¦
¦          1750          ¦         3064091         ¦
+------------------------+-------------------------+
¦      Appuyez sur <ENTREE> pour continuer...      ¦
+--------------------------------------------------+

(4)

 
Sélectionnez
Program Exemple28;

Uses 
  Crt;

Var 
  i, j : Integer;
  x : Real;
  Test : Boolean;

Procedure Menu (Page : Integer; Test : Boolean) ;
Begin
  WriteLn('*===================================================================*');
  WriteLn('|                        SuperCalculator 2.5                        |');
  WriteLn('*===================================================================*');
  if Test then 
    WriteLn('Faire afficher le menu principal...')
  else
    begin
      WriteLn('+--------------------------------------------------+----------------+');
      WriteLn('¦  Module : CALCUL DE FONCTION                     ¦   Page :   ',Page,'   ¦');
      WriteLn('+------------------------+-------------------------+----------------+');
      WriteLn('¦      Valeur de X       ¦     Valeur de Y=f(X)    ¦');
      WriteLn('¦                        ¦                         ¦');
    end ;
End;

Function f (x : Real) : Real;
Begin
  f := Sqr(x);
End;

BEGIN
  ClrScr;
  i := 0;
  j := 1;
  Test := False;
  Menu(j,Test) ;
  x := 0;
  repeat
    Inc(i);
    x := x + 50;
    WriteLn('¦      ',Round(x):12,'       ¦     ',Round(f(x)):16,'    ¦');
    Test := x > 1700;
    if ((i Mod 14) = 0) or test then
      begin
        WriteLn('+------------------------+-------------------------+');
        WriteLn('¦      Appuyez sur <ENTREE> pour continuer...      ¦');
        WriteLn('+--------------------------------------------------+');
        ReadLn;
        ClrScr;
        Inc(j);
        Menu(j,Test);
      end;
  until Test;
  ReadLn;
END.

précédentsommairesuivant
Ici, les caractères spéciaux de la table ASCII (pour MS-DOS) ont été remplacés par des -, des + et des, ¦ car non affichables sous Windows.

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2001-2013 Hugo Etievant. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.