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.
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.
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
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
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
-la touche F3 arrète le programme
-la touche F4 passe à l'enregistrement suivant
-la touche F5 imprime
-la touche F6 supprime.
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!!!