Et maintenant la même chose avec ICREER.
Programme ICREER
Programme IVOIR
Programme IMODIFIER
Programme ISUPPRIMER
Programme ILISTER
Que font
ces programmes indéxés ?
Programme ICREER (avec des doublons)
IDENTIFICATION DIVISION.
PROGRAMM-ID.ICREER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FGRILLE
ASSIGN TO WORKSTATION-GPERSONNE
ORGANIZATION
TRANSACTION
CONTROL-AREA
FTOUCHES.
SELECT FPERSONNEL
ASSIGN TO DATABASE-PERSONNEL
ORGANIZATION
INDEXED
RECORD
KEY NOM OF ENRPERS WITH
DUPLICATES
ACCESS
MODE DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE.
COPY
DDS-ALL-FORMATS OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
COPY
DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
PROCEDURE DIVISION.
DEBUT.
OPEN I-O FGRILLE
OUTPUT FPERSONNEL.
TQ.
INITIALIZE
PERSONNE1.
WRITE EGRILLE
FORMAT "PERSONNE1".
READ FGRILLE.
IF F3 GO TO FIN.
MOVE CORR
PERSONNE1 TO ENRPERS.
WRITE EPERSONNEL
INVALID KEY DISPLAY "ERREUR".
GO TO TQ.
FIN.
CLOSE FGRILLE
FPERSONNEL.
STOP RUN.
Nous allons traiter tous les programmes avec des indexes
identiques (doublons).
Retour au programme ICREER.
Programme
IVOIR
IDENTIFICATION DIVISION.
PROGRAMM-ID.IVOIR.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FGRILLE
ASSIGN TO WORKSTATION-GPERSONNE
ORGANIZATION
TRANSACTION
CONTROL-AREA
FTOUCHES.
SELECT FPERSONNEL
ASSIGN TO DATABASE-PERSONNEL
ORGANIZATION
INDEXED
RECORD
KEY NOM OF ENRPERS WITH DUPLICATES
ACCESS
MODE DYNAMIC.
SELECT FIMPR
ASSIGN TO PRINTER-QSYSORT
ORGANIZATION
SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
COPY
DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE2 REDEFINES EGRILLE1.
COPY
DDS-PERSONNE2 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
COPY
DDS-ALL-FORMATS OF PERSONNEL.
FD FIMPR LABEL RECORD OMITTED.
01 LIGNE PIC X(132).
WORKING STORAGE SECTION.
01 L1.
02 FILLER PIC
X(56) VALUE SPACES.
02 FILLER PIC
X(20) VALUE " VERY GOOD SANCHEZ. ".
02 FILLER PIC
X(56) VALUE SPACES.
01 L2.
02 FILLER PIC
X(5) VALUE "NOM: ".
02 NOM PIC X(32).
02 FILLER PIC
X(95) VALUE SPACES.
01 L3.
02 FILLER PIC
X(8) VALUE "PRENOM: ".
02 PRENOM PIC
X(32).
02 FILLER PIC
X(92) VALUE SPACES.
01 L4.
02 FILLER PIC
X(9) VALUE "ADRESSE: ".
02 ADRESSE PIC
X(96).
02 FILLER PIC
X(27) VALUE SPACES.
01 L5.
02 FILLER PIC
X(4) VALUE "CP: ".
02 CP PIC X(5).
02 FILLER PIC
X(5) VALUE SPACES.
02 FILLER PIC
X(7) VALUE "VILLE: ".
02 VILLE PIC
X(27).
02 FILLER PIC
X(84) VALUE SPACES.
01 L6.
02 FILLER PIC
X(5) VALUE "TEL: ".
02 TEL PIC X(20).
02 FILLER PIC
X(107) VALUE SPACES.
01 L7.
02 FILLER PIC
X(14) VALUE "SALAIRE BRUT: ".
02 SALAIRE PIC
9(7)V,99.
02 FILLER PIC
X(103) VALUE SPACES.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
88 F5 VALUE "05".
PROCEDURE DIVISION.
DEBUT.
OPEN I-O FGRILLE
INPUT FPERSONNEL OUTPUT FIMPR.
DEB.
INITIALIZE
PERSONNE2.
WRITE EGRILLE2
FORMAT "PERSONNE2".
READ FGRILLE.
IF F3 GO TO FIN.
MOVE NEMPLOYE OF
EGRILLE2 TO NOM OF EPERSONNEL.
READ FPERSONNEL
INVALID KEY GO TO NONTROUVE.
PERFORM AFFICHE.
GO TO
ALTERNATIVES.
TQ.
READ
FPERSONNEL NEXT AT END GO TO NONTROUVE.
IF
NEMPLOYE OF EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.
FTQ.
PERFORM AFFICHE.
GO TO
ALTERNATIVES.
FIN.
CLOSE FGRILLE
FPERSONNEL FIMPR.
GOBACK.
NONTROUVE.
MOVE "CET
EMPLOYE N EXISTE PAS" TO MESS.
FNONTROUVE.
GO TO DEB.
AFFICHE.
MOVE CORR ENRPERS
TO PERSONNE1.
WRITE EGRILLE1
FORMAT "PERSONNE1".
READ FGRILLE.
FAFFICHE.
EXIT.
ALTERNATIVES.
IF F3 GO TO FIN.
IF F4 GO TO TQ.
IF F5 GO TO
IMPRIME.
FALTERNATIVES.
GO TO DEB.
IMPRIME.
MOVE L1 TO LIGNE.
WRITE LIGNE.
MOVE CORR
PERSONNE1 TO L2.
WRITE LIGNE FROM L2
AFTER 3.
MOVE CORR
PERSONNE1 TO L3.
WRITE LIGNE FROM
L3 AFTER 1.
MOVE CORR
PERSONNE1 TO L4.
WRITE LIGNE FROM
L4 AFTER 1.
MOVE CORR
PERSONNE1 TO L5.
WRITE LIGNE FROM
L5 AFTER 1.
MOVE CORR
PERSONNE1 TO L6.
WRITE LIGNE FROM
L6 AFTER 1.
MOVE CORR
PERSONNE1 TO L7.
WRITE LIGNE FROM
L7 AFTER 1.
FIMPRIME.
PERFORM AFFICHE.
GO TO
ALTERNATIVES.
Un GO TO nous envoie à une étiquette comme en assembleur, un
PERFORM appelle une fonction à la fin de laquelle il faut mettre
un EXIT pour reprendre le programme principale là où il s'est
arrêter.
Retour au programme IVOIR.
La particularité de l'indéxé avec des doublons c'est que l'on
cherche le premier indexe de façon normal et les autres de
façon séquentiel. De ce fait, on a un NEXT AT END qui permet,
si le fichier est terminé, d'effectuer une action.
Retour au programme IVOIR.
Ce IF permet quand à lui de repérer si l'indexe correspond
toujours dans notre recherche séquentiel. En effet, si nous
avons 3 DUPONT dans le fichier, la recherche indéxée nous
amène sur le premier. La recherche séquentielle nous amène sur
le second et le troisième. Une fois que l'on a passé ces trois
là, on se retrouve sur un autre nom qui ne correspond plus à
l'indexe (par exemple TRUCMUCHE). De ce fait, le IF exclu cette
possibilitée et nous évite le parcour du fichier entier quoique
de toute façon, en appuyant sur F3, on quitte le programme.
Retour au programme IVOIR.
Comme je l'ai déjà expliqué, les grilles, les impressions et
les fichiers fonctionnent de la même façon. Par conséquent, on
envoi vers l'imprimante la ligne à imprimer par la commande
WRITE. Celui-ci prendra les informations contenues dans L2 grace
à la commande FROM. Le AFTER précise que l'on passe 3 lignes
avant d'imprimer. On peut aussi utiliser BEFORE.
Retour au programme IVOIR.
Programme IMODIFIER
IDENTIFICATION DIVISION.
PROGRAMM-ID.IMODIFIER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FGRILLE
ASSIGN TO WORKSTATION-GPERSONNE
ORGANIZATION
TRANSACTION
CONTROL-AREA
FTOUCHES.
SELECT FPERSONNEL
ASSIGN TO DATABASE-PERSONNEL
ORGANIZATION
INDEXED
RECORD
KEY NOM OF ENRPERS WITH DUPLICATES
ACCESS
MODE DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
COPY
DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE2 REDEFINES EGRILLE1.
COPY
DDS-PERSONNE2 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
COPY
DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
PROCEDURE DIVISION.
DEBUT.
OPEN I-O FGRILLE
I-O FPERSONNEL.
DEB.
INITIALIZE
PERSONNE2.
WRITE EGRILLE2
FORMAT "PERSONNE2".
READ FGRILLE.
IF F3 GO TO FIN.
MOVE NEMPLOYE OF
EGRILLE2 TO NOM OF EPERSONNEL.
READ FPERSONNEL
INVALID KEY GO TO NONTROUVE.
PERFORM AFFICHE.
GO TO
ALTERNATIVES.
TQ.
READ FPERSONNEL
NEXT AT END GO TO NONTROUVE.
IF NEMPLOYE OF
EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.
FTQ.
PERFORM AFFICHE.
GO TO
ALTERNATIVES.
FIN.
CLOSE FGRILLE
FPERSONNEL .
GOBACK.
NONTROUVE.
MOVE "CET
EMPLOYE N EXISTE PAS" TO MESS.
FNONTROUVE.
GO TO DEB.
AFFICHE.
MOVE CORR ENRPERS
TO PERSONNE1.
WRITE EGRILLE1
FORMAT "PERSONNE1".
READ FGRILLE.
FAFFICHE.
EXIT.
ALTERNATIVES.
IF F3 GO TO FIN.
IF F4 GO TO TQ.
FALTERNATIVES.
MOVE CORR
PERSONNE1 TO ENRPERS.
REWRITE EPERSONNEL FORMAT
"PERSONNEL".
GO TO DEB.
Cela réécrit les modifications sur l'emplacement dans l'ancien
enregistrement. Cette manipulation est plus communément
appellée Mise A Jour ou plus simplement modification.
Retour au programme IMODIFIER
Programme ISUPPRIMER
IDENTIFICATION DIVISION.
PROGRAMM-ID.ISUPPRIMER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FGRILLE
ASSIGN TO WORKSTATION-GPERSONNE
ORGANIZATION
TRANSACTION
CONTROL-AREA
FTOUCHES.
SELECT FPERSONNEL
ASSIGN TO DATABASE-PERSONNEL
ORGANIZATION
INDEXED
RECORD
KEY NOM OF ENRPERS WITH DUPLICATES
ACCESS
MODE DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
COPY
DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE2 REDEFINES EGRILLE1.
COPY
DDS-PERSONNE2 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
COPY
DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
88 F6 VALUE "06".
PROCEDURE DIVISION.
DEBUT.
OPEN I-O FGRILLE
I-O FPERSONNEL.
DEB.
INITIALIZE
PERSONNE2.
WRITE EGRILLE2
FORMAT "PERSONNE2".
READ FGRILLE.
IF F3 GO TO FIN.
MOVE NEMPLOYE OF
EGRILLE2 TO NOM OF EPERSONNEL.
READ FPERSONNEL
INVALID KEY GO TO NONTROUVE.
PERFORM AFFICHE.
GO TO
ALTERNATIVES.
TQ.
READ FPERSONNEL
NEXT AT END GO TO NONTROUVE.
IF NEMPLOYE OF
EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.
FTQ.
PERFORM AFFICHE.
GO TO
ALTERNATIVES.
FIN.
CLOSE FGRILLE
FPERSONNEL .
GOBACK.
NONTROUVE.
MOVE "CET
EMPLOYE N EXISTE PAS" TO MESS.
FNONTROUVE.
GO TO DEB.
AFFICHE.
MOVE CORR ENRPERS
TO PERSONNE1.
WRITE EGRILLE1
FORMAT "PERSONNE1".
READ FGRILLE.
FAFFICHE.
EXIT.
ALTERNATIVES.
IF F3 GO TO FIN.
IF F4 GO TO TQ.
IF F6 GO TO
SUPPRIME.
FALTERNATIVES.
GO TO DEB.
SUPPRIME.
DELETE FPERSONNEL RECORD INVALID KEY GO TO
NONTROUVE.
MOVE
"EMPLOYE LOURDE, TAPER LE CLAVIER" TO MESS.
WRITE EGRILLE2
FORMAT "PERSONNE2".
READ FGRILLE.
FSUPPRIME.
CLOSE FGRILLE
FPERSONNEL.
GO TO DEBUT.
L'anglais est une langue bien faite tout de même. En regardant
le nom du programme est la première commande de cette ligne, on
en déduit en un clin d'oeil qu'il sagit de l'effacement d'un
enregistrement avec vérification de la clé (index).
Retour au programme ISUPPRIMER
Programme ILISTER
IDENTIFICATION DIVISION.
PROGRAMM-ID.ILISTER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FPERSONNEL
ASSIGN TO DATABASE-PERSONNEL
ORGANIZATION
INDEXED
RECORD
KEY NOM OF ENRPERS WITH DUPLICATES
ACCESS MODE SEQUENTIAL.
SELECT FIMPR
ASSIGN TO PRINTER-QSYSORT
ORGANIZATION
SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
COPY
DDS-ALL-FORMATS OF PERSONNEL.
FD FIMPR LABEL RECORD OMITTED.
01 LIGNE PIC X(132).
WORKING STORAGE SECTION.
01 L1.
02 FILLER PIC
X(56) VALUE SPACES.
02 FILLER PIC
X(20) VALUE " VERY GOOD SANCHEZ. ".
02 FILLER PIC
X(56) VALUE SPACES.
01 L2.
02 FILLER PIC
X(5) VALUE "NOM: ".
02 NOM PIC X(32).
02 FILLER PIC
X(95) VALUE SPACES.
01 L3.
02 FILLER PIC
X(8) VALUE "PRENOM: ".
02 PRENOM PIC
X(32).
02 FILLER PIC
X(92) VALUE SPACES.
01 L4.
02 FILLER PIC
X(9) VALUE "ADRESSE: ".
02 ADRESSE PIC
X(96).
02 FILLER PIC
X(27) VALUE SPACES.
01 L5.
02 FILLER PIC
X(4) VALUE "CP: ".
02 CP PIC X(5).
02 FILLER PIC
X(5) VALUE SPACES.
02 FILLER PIC
X(7) VALUE "VILLE: ".
02 VILLE PIC
X(27).
02 FILLER PIC
X(84) VALUE SPACES.
01 L6.
02 FILLER PIC
X(5) VALUE "TEL: ".
02 TEL PIC X(20).
02 FILLER PIC
X(107) VALUE SPACES.
01 L7.
02 FILLER PIC
X(14) VALUE "SALAIRE BRUT: ".
02 SALAIRE PIC
9(7)V,99.
02 FILLER PIC
X(103) VALUE SPACES.
PROCEDURE DIVISION.
DEBUT.
OPEN INPUT
FPERSONNEL OUTPUT FIMPR.
MOVE L1 TO LIGNE.
WRITE LIGNE.
TQ.
READ FPERSONNEL
AT END GO TO FIN.
MOVE CORR
PERSONNE1 TO L2.
WRITE LIGNE FROM
L2 AFTER 3.
MOVE CORR
PERSONNE1 TO L3.
WRITE LIGNE FROM
L3 AFTER 1.
MOVE CORR
PERSONNE1 TO L4.
WRITE LIGNE FROM
L4 AFTER 1.
MOVE CORR
PERSONNE1 TO L5.
WRITE LIGNE FROM
L5 AFTER 1.
MOVE CORR
PERSONNE1 TO L6.
WRITE LIGNE FROM
L6 AFTER 1.
MOVE CORR
PERSONNE1 TO L7.
WRITE LIGNE FROM
L7 AFTER 1.
FTQ.
GO TO TQ.
FIN.
CLOSE FPERSONNEL
FIMPR.
GOBACK.
Le fichier est indéxé mais pour imprimer tous les
enregistrements du premier au dernier, le mieux est de l'ouvrir
en sequentiel.
Retour au programme ILISTER
Que font ces
programmes indéxés ?
Le programme ICREER est le même que celui vu dans le
chapître VI à part qu'il permet d'avoir des index indentiques
(doublons). De plus, comme je l'ai déjà expliqué, en indéxé,
les programmes de création et d'ajout sont les mêmes.
Le programme IVOIR permet de visualiser un employé. On saisie
sont nom dans une grille et le programme affiche l'employé
correspondant. On peut aussi l'imprimer.
Le programme IMODIFIER sert à modifier les données d'un
employé comme son adresse ou son numéro de téléphone. Il
utilise la commande REWRITE. Tout ce que contient ce programme et
les suivants a été vu dans les chapitres précédents. Et vu
que vous n'êtes pas tous idiots, comme tout informaticien qui se
respecte, le code est évident...
Le programme ISUPPRIMER efface un enregistrement et le programme
ILISTER imprime tous les enregistrements. Ce programme à la
particularité d'être déclaré en ACCESS MODE SEQUENTIAL afin
de préciser que exeptionnellement on y accède en séquentiel.
Enfin, comme dans les programmes précédents:
Tout cela doit ce trouver sur les grilles d'écran.
La grille d'écran PERSONNE1 contient toutes les infos du fichier
PERSONNEL. Chaque zone de données a le même nom et la même
taille que dans le fichier PERSONNEL sans oublier que ces zones
sont définies en +B. La grille PERSONNE2 possède une zone
NEMPLOYE définie en +I et une zone MESS définie en +O. La
grille PERSONNE3 est le menu avec une zone CHOIX définie en +I
et la grille PERSONNE4 une zone MESSA définie en +O.
Vous avez remarqué que nous n'avons pas fait de programme IMENU.
C'est tout simplement que ce programme est le même que SMENU
avec un programme en plus et les noms de programmes différents;
donc étant donné que maintenant vous êtes grands, vous
arriverez sûrement à le créer vous même sinon, laissez tomber
l'informatique, c'est pas pour vous!!!