Lors de la création d'un programme informatique,
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 difusion d'un programme. Il est vrai qu'en règle générale, un programme écrit en Pascal est surtout
destiné à une utilisation personnelle mais dans le cas d'une distribution plus large (internet, amis...) 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 inferface efficace commence déjà par lui donner 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érale, cela commence par l'affichage d'un menu du type suivant :
- GESTION D'UN TABLEAU -
[A] - Abandon
[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 au clavier : _
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 :
Syntaxe :
Procedure menu(Var reponse : Char) ;
Begin
Repeat
ClrScr;
WriteLn('[A] - Abandon') ;
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 au clavier : ');
ReadLn(reponse) ;
Until UpCase(reponse) In ['A'..'I'] ;
End ;
Ensuite, il faut pouvoir détailler les opération et leurs résultats afin d'offir le maximum d'information à 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'erreur fait également parti des prorogatives du programmeur,
c'est-à-dire que le programme doit être capable de repérer des entrées éronnées, d'expliquer à
l'utilsateur ce qui ne vas pas, pourquoi ça ne vas pas et lui permettre de recommencer sa saisie.
Syntaxe :
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 souhaite de construire des tableau multi-cardes afin d'avoir à l'écran plusieurs informations simultanément comme le montre l'exemple suivant :
Ici, les caractères spéciaux de la table ASCII (pour MS-DOS) ont été remplacés par des tirets ou des I car non affichables sous Windows.
Program exemple28 ;
Uses Crt ;
Var i,j : Integer;
x : Real ;
test : Boolean ;
Procedure menu(i : Integer; test : Boolean) ;
Begin
WriteLn(' ----------------------------------------------------------------') ;
WriteLn(' I SuperCalculator 2.5 I') ;
WriteLn(' ----------------------------------------------------------------') ;
If test Then WriteLn('Faire afficher le menu principal...')
Else
Begin
WriteLn(' ----------------------------------------------------------------') ;
WriteLn(' I Module : CALCUL DE FONCTION I Page : ',i,' I') ;
WriteLn(' ----------------------------------------------------------------') ;
WriteLn(' I Valeur de X I Valeur de Y=f(X) I') ;
WriteLn(' I I I') ;
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(' I',Round(x):12,' I',Round(f(x)):15,' I') ;
test := x>1700;
If ((i Mod 14)=0) Or test Then
Begin
WriteLn(' --------------------------------') ;
WriteLn(' I Appuyez sur <ENTREE> pour continuer... I') ;
Write(' --------------------------------') ;
ReadLn ;
ClrScr ;
Inc(j) ;
menu(j,test) ;
End ;
Until test ;
ReadLn ;
END.