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 :
- 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 :
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 :
[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 :
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 :
*===================================================================*
| 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... ¦
+--------------------------------------------------+
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
.