L’objectif :
Première temps dit que l’utilisateur appui sur F4 (écran saisie (nom, prénom, sexe)), ensuite il aura deux possibilité soit de quitter l’application on appuyant sur F6 ou de continue dans ces condition appuie sur F8 pour comparerez la valeur saisie par l’utilisateur et celle qu’il existe dans le fichier si la valeur saisie existe dans le fichier, alors je sort de boucle si non c’est dire qu’il n’existe pas dans ces condition je la rajoute dans le fichier.
Fichier (Ficmf.txt) la valeur saisie par l’utilisateur à l’écran
(Je sais pas d’où ça peut venir et portant je positionne correctement mon curseur mais je pense c’est mon algo TRT-F4.)
* gestion fin fichier FICMF.
01 WFF-FICMF-NOK PIC 9.
88 WFF-FICMF-OK VALUE 1.
01 FF-FICMF-NOK PIC 9.
88 FF-FICMF-OK VALUE 1.
01 F6-NOK PIC 9.
88 F6-OK VALUE 1.
01 SAISIE-CORRECTE-NOK PIC 9.
88 SAISIE-CORRECTE-OK VALUE 1.
01 FINTRT-NOK PIC 9.
88 FINTRT-OK VALUE 1.
01 W-FF-KO PIC 9.
88 W-FF-OK VALUE 1.
* zone code retour statut
77 WSTAT-FICMF PIC X(2).
*************************************************************
COPY "w01tab1.wss".
COPY "nomfic.wss".
************************************************************
PROCEDURE DIVISION USING ZON-LINK.
DECLARATIVES.
COPY "ftabfic.dec".
DECFICMF SECTION.
USE AFTER STANDARD ERROR PROCEDURE ON FICMF.
DECFICMF-10.
IF WSTAT = "00" OR
WSTAT = "02" OR
WSTAT = "05" OR
WSTAT = "10" OR
WSTAT = "22" OR
WSTAT = "23" OR
WSTAT = "35"
GO TO F-DECFICMF-10.
*
MOVE "ficmf.isa" TO WFICH.
MOVE NOMFIC11 TO WFICHERR.
MOVE 1 TO WTYPERR.
CALL "geserr.cob" USING WSERR.
IF WSTAT = "99"
MOVE 2 TO WTYPERR
GO TO F-DECFICMF-10.
*
STOP RUN.
*
F-DECFICMF-10.
EXIT.
END DECLARATIVES.
**********************************************************
DEBUT SECTION.
DEBPROG.
*en cas d'erreur d'execution de programme.
MOVE "exercice" TO WPROG.
MOVE ZON-LINK TO WZONLINK.
COPY "inifor.prg".
COPY "chgtab.prg".
INITPROG.
*ouverture de fichier
* OPEN INPUT FICMF
PERFORM AFFDEB.
MOVE 0 TO W-I
FINTRT-NOK.
*trait1.
PERFORM UNTIL FINTRT-OK
DISPLAY SPACES LINE 24 POS 1 SIZE 80
DISPLAY "F1=masculin" LINE 24 POSITION 05 REVERSE
DISPLAY "F2=feminin" LINE 24 POSITION 18 REVERSE
DISPLAY "F3=nbmf" LINE 24 POSITION 30 REVERSE
DISPLAY "F4=compt-rondu" LINE 24 POSITION 45 REVERSE
DISPLAY "F6=quiter" LINE 24 POSITION 60 REVERSE
MOVE 0 TO W-I
MOVE SPACE TO WCAR
MOVE SPACE TO WESC
MOVE SPACE TO WOK
ACCEPT WOK LINE 24 POSITION 79
PROMPT ECHO UPDATE
ON EXCEPTION WESC
MOVE WESC TO WCAR
END-ACCEPT
EVALUATE RCAR
WHEN CARTTT (02)
OPEN INPUT FICMF
DISPLAY "LE NOMBRE TOTAL MASCULIN"
LINE 4 POSITION 2 REVERSE
MOVE 'M' TO SEXCHOISI
PERFORM TRT-F1 THRU F-TRT-F1
* MOVE 0 TO FINTRT-NOK
MOVE 0 TO WFF-FICMF-NOK
CLOSE FICMF
WHEN CARTTT (03)
OPEN INPUT FICMF
DISPLAY "LE NOMBRE TOTAL FEMININ"
LINE 4 POSITION 2 REVERSE
MOVE 'F' TO SEXCHOISI
PERFORM TRT-F1 THRU F-TRT-F1
MOVE 0 TO WFF-FICMF-NOK
CLOSE FICMF
WHEN CARTTT (04)
OPEN INPUT FICMF
DISPLAY "LE NOMBRE TOTAL DES PERSONNES:"
LINE 4 POSITION 4 REVERSE
PERFORM TRT-F3 THRU F-TRT-F3
MOVE 0 TO FF-FICMF-NOK
CLOSE FICMF
WHEN CARTTT (05)
OPEN INPUT FICMF
PERFORM TRT-F4 THRU F-TRT-F4
CLOSE FICMF
WHEN CARTTT (07)
SET FINTRT-OK TO TRUE
END-EVALUATE
END-PERFORM.
EXIT PROGRAM.
************************************************************
*traitement toutche fonction F1(afficher la liste masc et femin)
*************************************************************
TRT-F1.
PERFORM UNTIL WFF-FICMF-OK
READ FICMF NEXT AT END
SET WFF-FICMF-OK TO TRUE
END-READ
IF T-SEX = SEXCHOISI
DISPLAY ENREG-FICMF
ADD 1 TO TOTALE
END-IF
END-PERFORM
MOVE 1 TO WFF-FICMF-NOK.
F-TRT-F1.
EXIT.
***************************************************
*****************traitement de fonction F3*********
**************afficher nbm ou nbf******************
TRT-F3.
MOVE 0 TO N-NBM
MOVE 0 TO N-NBF
PERFORM UNTIL FF-FICMF-OK OR FINTRT-OK
READ FICMF NEXT AT END
SET FF-FICMF-OK TO TRUE
END-READ
IF T-SEX = 'M'
ADD 1 TO N-NBM
ELSE
ADD 1 TO N-NBF
END-IF
END-PERFORM.
DISPLAY " masculin:"
N-NBM LINE 6 POS 9
DISPLAY " feminin:"
N-NBF LINE 8 POS 9.
MOVE 1 TO FF-FICMF-NOK.
F-TRT-F3.
EXIT.
****************************************************
*****saisir le nom,prenom et le sexe ensuite comparer
*****les enreg-lu et enreg-saisie
****************************************************
TRT-F4.
DISPLAY NOM LINE 6 POS 2
DISPLAY PRENOM LINE 6 POS 2
DISPLAY SEX LINE 6 POS 2
DISPLAY "F8 = validation" LINE 6 POS 2
DISPLAY "F = quitter" LINE 6 POS 2
*********initialisation des variable************
* MOVE 0 TO SAISIE-CORRECTE-OK
*****************************************
PERFORM UNTIL SAISIE-CORRECTE-OK
ACCEPT NOM-SAISIE LINE 6 POS 2
ACCEPT PRENOM-SAISIE LINE 7 POS 2
ACCEPT SEX-SAISIE LINE 8 POS 2
MOVE SPACE TO WCAR
ACCEPT WOK LINE 24 POSITION 79
PROMPT ECHO UPDATE
ON EXCEPTION WESC
MOVE WESC TO WCAR
END-ACCEPT
EVALUATE RCAR
WHEN CARTTT(08)
IF SEX ='M' OR SEX = 'F'
OPEN INPUT FICMF
PERFORM POS-ZONE THRU F-POS-ZONE
MOVE 0 TO W-FF
PERFORM UNTIL W-FF-OK
READ FICMF NEXT AT END
SET W-FF-OK TO TRUE
END-READ
IF T-SEX = SEX-SAISIE AND
T-NOM = NOM-SAISIE AND
T-PRENOM = PRENOM-SAISIE
END-IF
Erreur ligne 311  SET W-FF-OK TO TRUE
CLOSE FICMF
END-PERFORM
OPEN OUTPUT FICMF
MOVE NOM-SAISIE TO T-NOM
MOVE PRENOM-SAISIE TO T-PRENOM
MOVE SEX-SAISIE TO T-SEX
WRITE ENREG-FICMF
END-WRITE
CLOSE FICMF
SET SAISIE-CORRECTE-OK TO TRUE
ELSE
SET SAISIE-CORRECTE-OK TO TRUE
END-IF
WHEN CARTTT(07)
SET SAISIE-CORRECTE-OK TO TRUE
END-EVALUATE
END-PERFORM.
F-TRT-F4.
EXIT.
***************************************************
***************positionement de zone*******************
***************************************************
POS-ZONE.
* OPEN INPUT FICMF
MOVE LOW-VALUE TO T-CLE
START FICMF KEY IS NOT LESS THAN T-CLE
INVALID
DISPLAY "INVALIDE" LINE 2 POS 2
END-START.
F-POS-ZONE.
EXIT.
Ton erreur est une WARNING. Donc cela ne doit pas géner ton traitement.
Cependant, j'ai noté plusieurs points qui me paraissent suspects !!!
WHEN CARTTT(08)
IF SEX ='M' OR SEX = 'F'
OPEN INPUT FICMF
PERFORM POS-ZONE THRU F-POS-ZONE <= Début et Fin PERFORM OK
MOVE 0 TO W-FF
PERFORM UNTIL W-FF-OK <= Début PERFORM
READ FICMF NEXT AT END
SET W-FF-OK TO TRUE
END-READ <= fin PERFORM OK
IF T-SEX = SEX-SAISIE AND <= A quoi sert ton IF, car il n'y a
T-NOM = NOM-SAISIE AND aucun traitement, juste un
T-PRENOM = PRENOM-SAISIE END-IF ?
END-IF
Erreur ligne 311  SET W-FF-OK TO TRUE
CLOSE FICMF
END-PERFORM <= fin PERFORM ?????
OPEN OUTPUT FICMF Ou est l'appel du PERFORM ?
MOVE NOM-SAISIE TO T-NOM
MOVE PRENOM-SAISIE TO T-PRENOM
MOVE SEX-SAISIE TO T-SEX
WRITE ENREG-FICMF
END-WRITE
CLOSE FICMF
SET SAISIE-CORRECTE-OK TO TRUE
ELSE
SET SAISIE-CORRECTE-OK TO TRUE
END-IF <= Ou est le IF ???
WHEN CARTTT(07)
SET SAISIE-CORRECTE-OK TO TRUE
END-EVALUATE
END-PERFORM.
F-TRT-F4.
Quand tu aura résolu tes problèmes, n'oublie pas de nous le faire savoir !!!
HULK77
__________________________
Ma fabrique de chemises tourne à plein régime !!!