« Cobol ANS 74 » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎fichiers : fractionnement
→‎Tables : fractionnement
Ligne 2 :
{{à fractionner}}
{{Cobol ANS 74}}
= Tables =
Acces par Indice, Index, Search
*OCCURS (1 par dimension)
:ne va pas en 01 66 77 88
== Une dimension ==
<pre>
01 TAB.
02 ELEM PIC 99; OCCURS 10.
88 NUL VALUE 0.
 
*INITIALISATION.
01 TAB; VALUE "0102030405".
02 ELEM PIC 99; OCCURS 5.
</pre>
:->TAB (5*2bit)
== Multitables ==
<pre>
01 TAB.
02 FILLER PIC X(9) VALUE "JANVIER".
02 FILLER PIC X(9) VALUE "FEVRIER".
02 FILLER PIC X(9) VALUE "MARS".
02 FILLER PIC X(9) VALUE "AVRIL".
02 FILLER PIC X(9) VALUE "MAI".
02 FILLER PIC X(9) VALUE "JUIN".
02 FILLER PIC X(9) VALUE "JUILLET".
02 FILLER PIC X(9) VALUE "AOUT".
02 FILLER PIC X(9) VALUE "SEPTEMBRE".
02 FILLER PIC X(9) VALUE "OCTOBRE".
02 FILLER PIC X(9) VALUE "NOVEMBRE".
02 FILLER PIC X(9) VALUE "DECEMBRE".
 
01 TAB-MOIS REDEFINES TAB.
02 MOIS PIC X(9) OCCURS 12.
</pre>
:->TAB et TAB-MOIS (9*12bit)
 
== Multidimension ==
<pre>
01 ECOLE.
02 NOM-ECOLE PIC X(20).
02 CLASSE OCCURS 15.
03 NOM-CLASSE PIC X(10).
03 ELEVES OCCURS 20.
04 NOM-ELEVE PIC X(20).
04 ADR-ELEVE PIC X(30).
03 PROF OCCURS 10.
04 NOM-PROF PIC X(20).
04 COURS OCCURS 5.
05 INTITULE PIC X(15).
05 HEURES PIC 99.
</pre>
:-> INTITULE(15, 10, 5) // INTITULE du 5e cours de 10e prof de 15e classe
:-> COURS(15, 10, 5) // INTITULE+HEURES du 5e cours de 10e prof de 15e classe
:-> NOM-PROF(15, 10) // NOM-PROF du 10e prof de 15e classe
:-> PROF(15, 10) // 10e PROF de 15e classe
:-> ADR-ELEVE(15, 11) // ADR-ELEVE de 11e eleves de 15e classe
:-> NOM-CLASSE(3) // NOM-CLASSE de 3e classe
== Recherche dans un tableau ==
=== indices ===
<pre>
PERFORM RCH VARYING I FROM 1
BY 1
UNTIL I > 15
AFTER J FROM 1
BY 1
UNTIL J > 20 OR ADR-ELEVE(I, J) = "DANIEL".
</pre>
{{Boîte déroulante|titre= ? Calculer la ponctuation d'un fichier sequentiel entrant des lignes de 80 caracteres à disposer dans une table ?|contenu =
<pre>
AP
 
(CHK)
-c1->
 
[F] (ANAL) [D]
-c2-->
 
[X] (X) (INC-OCC) [X] (RCH) [D]
-c3->
 
c1: EOF=1 // c2: I:1->80 // c3: J=6 OR CARAC(I)=PONCT(J)
les feuilles X ne sont pas instruites
</pre>
<pre>
*8 | | | | | | | | | | | | | | | |
 
SELECT FTEXTE ASSIGN TO DISK.
FILE SECTION.
FD FTEXTE...
 
01 LIGNE.
02 CARAC PIC X; OCCURS 80.
WORKING STORAGE SECTION.
 
01 VECT-PONCT; VALUE ".,:;!?".
02 OCC PIC 99; OCCURS 6.
01 VECT-OCC.
02 OCC PIC 99; COMP-0; OCCURS 6.
 
77 I PIC 99; COMP-0.
77 J PIC 99; COMP-0.
77 EOF PIC 9.
77 OCC-ED PIC Z9.
 
PROCEDURE DIVISION.
*structure incomplete
*--------------------
...
CHK.
PERFORM ANAL VARYING I FROM 1
BY 1
UNTIL I = 80.
ANAL.
PERFORM D-ANAL.
PERFORM RCH VARYING J FROM 1
BY 1
UNTIL J = 6 OR CARAC(I) = PONCT(J).
...
...
*traitements
*---------------------
INIT-OCC.
MOVE 0 TO OCC(J).
I1-PROG.
OPEN INPUT FTEXTE.
MOVE 0 TO EOF.
READ FTEXTE; AT END MOVE 1 TO EOF.
D-ANAL.
MOVE 1 TO J.
RCH.
ADD 1 TO J.
INC-OCC.
ADD 1 TO OCC(J).
F-TRAITE.
READ FTEXTE; AT END MOVE 1 TO EOF.
I-PROG.
CLOSE FTEXTE.
AFF-RES.
MOVE OCC(J) TO OCC-ED.
DISPLAY "il y a ", OCC-ED, PONCT(J).
 
</pre>
}}
 
=== index ===
*accelere la recherche sur champs:
<pre>
01 TAB.
02 A OCCURS 5; INDEXED BY I1.
03 B OCCURS 7; INDEXED BY I2, I3.
04 C PIC 9; OCCURS 4 INDEXED BY I4
</pre>
:-> Chaque tab reçois un index !
 
:Dans l'exemple suivant si C(4, 2, 3)=7 est le premier 7 trouvé, on aura un arret à ((3*7*4)+(1*2*3)) soit la 90e boucle de I4.
<pre>
PERFORM RCH VARYING I1 FROM 1
BY 1
UNTIL I1 > 5
AFTER I2 FROM 1
BY 1
UNTIL I2 > 7
AFTER I4 FROM 1
BY 1
UNTIL I4 > 9 OR C=(I1, I2, I4) = 7.
</pre>
*index permet le calcul et les const-> C(I1+3, I2-7, (4+3))
*l'adressage n'accepte pas la présence d'indice et index en même temps// <s>C(Index,1,indice)</s>
*SET index TO {index/ch-index/entier} //initialiser
*SET index1, index2 {UP/DOWN} by entier //incrementer
*champ index : sert à sauver valeur d'un index
<pre>
77 CH-INDEX USAGE INDEX.
</pre>
 
{{Boîte déroulante|titre= ? Meme exercice par INDEX ?|contenu =
*même AP
<pre>
*8 | | | | | | | | | | | | | | | |
 
FILE SECTION.
FD FTEXTE...
 
01 LIGNE.
02 CARAC PIC X; OCCURS 80; INDEXED BY IND1.
WORKING STORAGE SECTION.
 
01 VECT-PONCT; VALUE ".,:;!?".
02 OCC PIC 99; OCCURS 6; INDEXED BY IND2.
01 VECT-OCC.
02 OCC PIC 99; COMP-0; OCCURS 6; INDEXED BY IND3.
 
77 I PIC 99; COMP-0.
77 J PIC 99; COMP-0.
77 EOF PIC 9.
77 OCC-ED PIC Z9.
 
PROCEDURE DIVISION
*meme structure
...
*traitements
*---------------------
INIT-OCC.
MOVE 0 TO OCC(IND3).
I1-PROG.
OPEN INPUT FTEXTE.
MOVE 0 TO EOF.
READ FTEXTE; AT END MOVE 1 TO EOF.
D-ANAL.
SET IND2 TO 1.
RCH.
SET IND2 UP BY 1.
INC-OCC.
SET IND3 TO IND2.
ADD 1 TO OCC(IND3).
F-TRAITE.
READ FTEXTE; AT END MOVE 1 TO EOF.
I-PROG.
CLOSE FTEXTE.
AFF-RES.
SET IND3 TO IND2.
MOVE OCC(IND3) TO OCC-ED.
DISPLAY "il y a ", OCC-ED, PONCT(IND2).
 
</pre>
}}
 
=== search ===
:SEARCH nom [VARYING{index/ch-index/ch-entier}]
:[AT END ins]
:[WHEN cond1 {ins/NEXT SENTENCE}]
:[WHEN cond1 {ins/NEXT SENTENCE}]
:...
 
:OCCURS entier TIMES
:{{ASCENDING/DESCENDING} KEY IS nom1 (nom2)...}...
:INDEXED nom1 [,nom2...
 
=== search all ===
*Sur champs triés
:SEARCH ALL nom1
:[AT END ins]
:WHEN {nom-cond/nom2{EQUAL}{expr/const/ident}
:[AND{nom-cond/nom2{EQUAL}{expr/const/ident}]
:{ins/NEXT SENTENCE}
 
=== inspect ===
:INSPECT ident1 TALLYING
:{ident2 FOR {{{ALL/LEADING}CHARACHTER}{ident3/literal1}}
:[{before/after} INITIAL {ident4/literal2}]}...}...
 
=== string ===
:STRING {{ident1/cont1}[ident2/const2]...
:DELIMITED BY {ident1/const1/SIZE}}...
:INTO ident4 [WITH POINTER ident5]
:[ON OVERFLOW ins]
 
=== unstring ===
 
:UNSTRING identificateur-1
:[DELIMITED BY [ALL] {ident1/constante1},[OR[ALL] {ident1/const1}]]
:INTO {ident4([DELIMITER ident5]/[COUNT ident6])}
:[WHITH POINTER ident7]
:[TALLYING ident8]
:[ON OVERFLOW ins]
 
== Exercices de synthese ==
<b>? Faire la gestion d'une bibliotheque ?</b>
:Partant des deux fichiers FLIVRE et FTHEME, faire
:A/ MenuPrincipal
::1/ Ajout new livre (ouvre SousMenu2).
::2/ Ajout nouvel exemplaire
::3/ Modifier un livre
::4/ Recherche de livre par (1/ titre, 2/ autheur, 3/ code, (? 4/ theme))
 
:B/ SousMenu2
::>Sort tous les enreg de FTHEME + num (a introduire en A1)
<pre>
| | | | | | | | | | | | | | | | |
ENVIRONMENT DIVISION.
...
INPUT-OUTPUT SECTION.
FILE-CONTROL.
 
SELECT FLIVRE ASSIGN TO DISK
;ORGANIZATION INDEXED
;ACCESS MODE DYNAMIC
;RECORD KEY IS COD-LIV
;ALTERNATE ...
;STATUS IS SLIV.
 
SELECT FTHEME ASSIGN TO DISK
;ORGANIZATION RELATIVE
;ACCESS MODE ...
;RELATIVE KEY IS ...
;STATUS IS STHEME.
 
DATA DIVISION.
FILE SECTION.
FD FLIVRE LABEL RECORD STANDARD
VALUE OF FILE-ID IS "FLIVRE.DAT".
 
01 ENR-LIV.
02 CODE PIC X(5).
02 TITRE PIC X(30).
02 AUTHEUR PIC X(15).
02 THEME PIC 99.
02 QTY-LIV PIC 99.
02 QT-RESTE PIC 99; COMP-0.
 
FD FTHEME LABEL RECORD STANDARD
VALUE OF FILE-ID IS "FTHEME.DAT".
 
01 ENR-THE.
02 DESC PIC X(20).
02 RAYON PIC X(8).
02 QT-MAX PIC 99.
 
WORKING STORAGE SECTION.
 
...
</pre>
{{Boîte déroulante|titre= :: GESTION DE BIBLIOTHEQUE // PARTIE 1 :: à optimiser|contenu=
<pre>
| | | | | | | | | | | | | | | | |
* GESTION DE BIBLIOTHEQUE // PARTIE 1
*-----------------------------------------------
* Microsoft COBOL Compiler
* Version 2.20 (C)Copyright Microsoft Corp. 1982-87
*-----------------------------------------------
IDENTIFICATION DIVISION.
*------------------------
PROGRAM-ID. BIBLIO.
AUTHOR. NICK.
 
ENVIRONMENT DIVISION.
*---------------------
CONFIGURATION SECTION.
SOURCE-COMPUTER. CPU1.
OBJECT-COMPUTER. CPU1.
SPECIAL-NAMES.
* DECIMAL-POINTS IS COMA.
CURRENCY SIGN IS 'E'.
 
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FLIVRE ASSIGN TO DISK
ORGANIZATION INDEXED;
ACCESS MODE DYNAMIC;
RECORD KEY IS COD OF ENR-LIV;
ALTERNATE RECORD TITRE OF ENR-LIV;
ALTERNATE RECORD AUTHEUR OF ENR-LIV DUPLICATES;
ALTERNATE RECORD THEME OF ENR-TMP DUPLICATES;
STATUS SLIV.
 
SELECT FTHEME ASSIGN TO DISK
ORGANIZATION RELATIVE;
ACCESS MODE DYNAMIC;
RELATIVE CLE-THE;
STATUS STHE.
 
DATA DIVISION.
*--------------
FILE SECTION.
 
FD FLIVRE LABEL RECORD STANDARD;
VALUE OF FILE-ID IS "FLIVRE.DAT".
 
01 ENR-LIV.
02 COD PIC X(5).
02 TITRE PIC X(30).
02 AUTHEUR PIC X(15).
02 THEME PIC 99.
02 QTY-LIV PIC 99.
02 QT-RESTE PIC 99; COMP-0.
 
01 ENR-TMP REDEFINES ENR-LIV.
02 COD PIC X(5).
02 TITRE PIC X(30).
02 AUTHEUR PIC X(15).
02 THEME PIC XX.
02 QTY-LIV PIC XX.
02 QT-RESTE PIC 99.
 
FD FTHEME LABEL RECORD STANDARD;
VALUE OF FILE-ID IS "FTHEME.DAT".
 
01 ENR-THE.
02 DESC PIC X(20).
02 RAYON PIC X(8).
02 QT-MAX PIC 99.
 
WORKING-STORAGE SECTION.
 
77 TXT PIC X(30).
77 TMPX PIC X(5).
77 SLIV PIC XX.
77 STHE PIC XX.
 
77 EOF PIC 9.
77 CPT PIC 999.
77 C PIC 99.
77 CLE-THE PIC 999.
 
77 FLG PIC 9.
88 OK VALUE 1.
88 KO VALUE 0.
 
77 DSC-TMP PIC X(20).
 
PROCEDURE DIVISION.
*-------------------
*MAIN STRUCTURE---------------------------------
 
INIT.
MOVE 0 TO C.
DISPLAY "GESTION DE BIBLIOTHEQUE".
DISPLAY "-----------------------".
PERFORM PROG UNTIL C = 4.
STOP RUN.
 
PROG.
PERFORM DEBUT-PROG.
PERFORM CHK UNTIL SLIV = "00" AND STHE = "00".
PERFORM I1-PROG.
PERFORM CHK2 UNTIL C > 0 AND C NOT > 4.
PERFORM I2-PROG.
IF C = 1 PERFORM GES
ELSE IF C = 2 PERFORM CLN
ELSE IF C = 3 PERFORM PRE
ELSE PERFORM ERR.
PERFORM FIN-PROG.
 
*TRAITEMENTS------------------------------------
 
DEBUT-PROG.
OPEN INPUT FLIVRE.
OPEN INPUT FTHEME.
CLOSE FLIVRE.
CLOSE FTHEME.
CHK.
OPEN OUTPUT FLIVRE.
OPEN OUTPUT FTHEME.
CLOSE FLIVRE, FTHEME.
I1-PROG.
PERFORM MENU1.
ACCEPT C.
CHK2.
ACCEPT C.
I2-PROG.
EXIT.
FIN-PROG.
EXIT.
 
*GESTION DES LIVRES-----------------------------
 
GES.
PERFORM D-GES.
PERFORM GES1 UNTIL C = 5.
D-GES.
MOVE 0 TO C, FLG.
GES1.
PERFORM D-GES1.
IF C = 1 PERFORM ANL
ELSE IF C = 2 PERFORM ANE
ELSE IF C = 3 PERFORM MOD
ELSE IF C = 4 PERFORM RCH.
*/----------
 
D-GES1.
PERFORM MENU2.
ACCEPT C.
MOVE 0 TO FLG.
 
*/ajout nouveau livre---------------------------
*
* (ANL)
* -OK->
*
* [X] (ANL1) [D-]
* -OK-->
*.anl1
* [F-] (CHK5) [I4-] (CHK4) [I3-] (CHK3) [I2-] (CHK1) [I1-] (THE) [D-]
* -c4--> -c3--> -c2--> -c1--> -OK->
*
*c1 : C POSITIVE AND C NOT > CPT / c2 : SLIV ="23" / c3 : SLIV="23" / c4 : C POSITIVE
*-----------------------------------------------
ANL.
PERFORM D-ANL.
PERFORM ANL1 UNTIL OK.
D-ANL.
MOVE 0 TO FLG.
ANL1.
PERFORM D-ANL1.
PERFORM THE UNTIL OK.
PERFORM I1-ANL1.
PERFORM CHK1 UNTIL C POSITIVE AND C NOT > CPT.
PERFORM I2-ANL1.
PERFORM CHK3 UNTIL SLIV = "23".
PERFORM I3-ANL1.
PERFORM CHK4 UNTIL SLIV = "23".
PERFORM I4-ANL1.
PERFORM CHK5 UNTIL C POSITIVE.
PERFORM F-ANL1.
*//----------
 
D-ANL1.
MOVE 0 TO FLG.
I1-ANL1.
DISPLAY "THEME ?".
ACCEPT C.
CHK1.
IF C = 0 PERFORM NTH
ELSE PERFORM THE.
PERFORM F-CHK1.
F-CHK1.
PERFORM THE.
DISPLAY "CHOIX THEME : ".
ACCEPT C.
I2-ANL1.
MOVE C TO THEME OF ENR-TMP.
OPEN I-O FLIVRE.
DISPLAY "CODE ?".
ACCEPT COD OF ENR-LIV.
READ FLIVRE.
CHK3.
ACCEPT COD OF ENR-LIV.
READ FLIVRE.
I3-ANL1.
MOVE COD OF ENR-LIV TO COD OF ENR-TMP.
DISPLAY "TITRE ?".
ACCEPT TITRE OF ENR-TMP.
MOVE TITRE OF ENR-TMP TO TITRE OF ENR-LIV.
READ FLIVRE KEY IS TITRE OF ENR-LIV.
CHK4.
DISPLAY "!", COD OF ENR-LIV, " - ", TITRE OF ENR-LIV, "!".
DISPLAY "NOUVEAU TITRE ?".
ACCEPT TITRE OF ENR-TMP.
MOVE TITRE OF ENR-TMP TO TITRE OF ENR-LIV.
READ FLIVRE KEY IS TITRE OF ENR-LIV.
I4-ANL1.
DISPLAY "AUTHEUR ?".
ACCEPT AUTHEUR OF ENR-TMP.
DISPLAY "QUANTITE ?".
ACCEPT C.
CHK5.
ACCEPT C.
F-ANL1.
MOVE C TO QTY-LIV OF ENR-TMP, QT-RESTE OF ENR-TMP.
MOVE CORR ENR-TMP TO ENR-LIV.
WRITE ENR-LIV.
CLOSE FLIVRE.
MOVE 1 TO FLG.
*-----------------------------------------------
*/ajout nouvel exemplaire-----------------------
*
* (ANE)
*
* [X] (ANE1) [X]
* -OK-->
*
*.ane1 -c3-- -c2-- -c1--
* [X] (X) (AN1) [X] (RCH2)(RCH1) [D-]
*
*.an1
* [F-] (CH9) [D-]
* -c4->
*
*c1 : C=1 / c2 : C=2 / c3 : C>0 AND C<3 / c4 : C POSITIVE
*/-----------
ANE.
PERFORM ANE1 UNTIL OK.
ANE1.
PERFORM D-ANE1.
IF C = 1 PERFORM RCH1
ELSE IF C = 2 PERFORM RCH2
ELSE DISPLAY "SEUL CHOIX : 1 OU 2".
IF C POSITIVE AND C < 3 PERFORM AN1.
AN1.
PERFORM D-AN1.
PERFORM CH9 UNTIL C POSITIVE.
PERFORM F-AN1.
*//----------
D-ANE1.
OPEN I-O FLIVRE.
PERFORM MENU3.
ACCEPT C.
D-AN1.
DISPLAY "NOMBRE D'EXEMPLAIRE(S) A AJOUTER ?".
ACCEPT C.
CH9.
ACCEPT C.
F-AN1.
ADD C TO QTY-LIV OF ENR-LIV, QT-RESTE OF ENR-LIV.
REWRITE ENR-LIV.
CLOSE FLIVRE.
MOVE 1 TO FLG.
*-----------------------------------------------
*/modification des livre-----------------------
*
* (MOD)
* -OK->
*
* .mod -c5- -c4- -c3- -c2- -c1-
* [F-] (M3) (M2) (M1) [X] (CHA) [I-] (RCH2) (RCH1) [D-]
* -c3->
*
* .m1 .m3
* [F-] (M11) [D-] [F-] (M31) [D-]
* -c6-> -c7->
*
*c1 : C=1 / c2 : C=2 / c3 : C POSITIVE AND C NOT > 3
*c3 : C=1 / c4 : C=2 / c5 : C=3 / c6 : SLIV = "23"
*c7 : C POSITIVE AND C NOT > CPT
*-----------------------------------------------
MOD.
PERFORM D-MOD.
IF C=1 PERFORM RCH1
ELSE IF C=2 PERFORM RCH2.
PERFORM I-MOD.
PERFORM CHA UNTIL C POSITIVE AND C NOT > 3.
IF C=1 PERFORM M1
ELSE IF C=2 PERFORM M2
ELSE IF C=3 PERFORM M3.
PERFORM F-MOD.
M1.
PERFORM D-M1.
PERFORM M11 UNTIL SLIV = "23".
PERFORM F-M1.
M3.
PERFORM D-M3.
PERFORM M31 UNTIL C POSITIVE AND C NOT > CPT.
PERFORM F-M3.
*//----------
D-MOD.
PERFORM MENU3.
DISPLAY "CHOIX 1/2 ?".
ACCEPT C.
OPEN I-O FLIVRE.
I-MOD.
DISPLAY "MODIF 1/ TITRE 2/ AUTHEUR 3/ THEME ?".
ACCEPT C.
CHA.
ACCEPT C.
D-M1.
DISPLAY "NEW TITRE ?".
ACCEPT TXT.
MOVE TXT TO TITRE OF ENR-LIV.
READ FLIVRE KEY IS TITRE OF ENR-LIV.
M11.
DISPLAY "TITRE EXISTANT: ", TITRE OF ENR-LIV.
ACCEPT TXT.
MOVE TXT TO TITRE OF ENR-LIV.
READ FLIVRE KEY IS TITRE OF ENR-LIV.
F-M1.
MOVE TMPX TO COD OF ENR-LIV.
READ FLIVRE.
D-M3.
PERFORM THE.
DISPLAY "THEME ?".
ACCEPT C.
M31.
ACCEPT C.
F-M3.
MOVE C TO THEME OF ENR-TMP.
M2.
DISPLAY "NEW AUTHEUR ?".
ACCEPT AUTHEUR OF ENR-TMP.
F-MOD.
MOVE TXT TO TITRE OF ENR-TMP.
DISPLAY "MODIF : ", ENR-TMP.
MOVE ENR-TMP TO ENR-LIV.
REWRITE ENR-LIV.
CLOSE FLIVRE.
STOP "PAUSE".
*-----------------------------------------------
*/recherche de livre
*--------------------------------------------
* (RCH)
* -c1->
*[X] (RCH4) (RCH3) (RCH2) (RCH1) (RCH0) [D-]
*c1: ok
*--------------------------------------------
RCH.
PERFORM D-RCH.
IF C = 0 PERFORM RCH0
ELSE IF C = 1 PERFORM RCH1
ELSE IF C = 2 PERFORM RCH2
ELSE IF C = 3 PERFORM RCH3
ELSE IF C = 4 PERFORM RCH4.
PERFORM F-RCH.
D-RCH.
PERFORM MENU3.
ACCEPT C.
OPEN INPUT FLIVRE.
*//listing---------------------------
* (RCH0)
* [X] (CH0) [D-]
* -c2->
*C2: SLIV = "10"
*----------------------------------
RCH0.
PERFORM D-RCH0.
PERFORM CH0 UNTIL SLIV = "10".
*-------------------
D-RCH0.
MOVE LOW-VALUE TO COD OF ENR-LIV.
START FLIVRE KEY IS NOT < COD OF ENR-LIV.
CH0.
READ FLIVRE NEXT.
MOVE CORR ENR-LIV TO ENR-TMP.
DISPLAY ENR-TMP.
*//par code-------------------------
* (RCH1)
* [F-] (CH1) [D-]
* -c3->
*c3: SLIV = "00"
*----------------------------------
RCH1.
PERFORM D-RCH1.
PERFORM CH1 UNTIL SLIV = "00".
PERFORM F-RCH1.
*-------------------
D-RCH1.
DISPLAY "CODE ?".
ACCEPT COD OF ENR-LIV.
READ FLIVRE.
CH1.
DISPLAY "LIVRE NON TROUVE / CODE ?".
ACCEPT COD OF ENR-LIV.
READ FLIVRE.
F-RCH1.
MOVE COD OF ENR-LIV TO TMPX.
MOVE CORR ENR-LIV TO ENR-TMP.
DISPLAY ENR-TMP.
*//par titre---------------------------
* (RCH2)
* [F-] (CH2) [D-]
* -c4->
*c4: SLIV = "00"
*----------------------------------
RCH2.
PERFORM D-RCH2.
PERFORM CH2 UNTIL SLIV = "00".
PERFORM F-RCH2.
*-------------------
D-RCH2.
DISPLAY "TITRE ?".
ACCEPT TITRE OF ENR-LIV.
READ FLIVRE KEY IS TITRE OF ENR-LIV.
CH2.
DISPLAY "TITRE NON TROUVE : TITRE ?".
ACCEPT TITRE OF ENR-LIV.
READ FLIVRE KEY IS TITRE OF ENR-LIV.
F-RCH2.
MOVE COD OF ENR-LIV TO TMPX.
MOVE CORR ENR-LIV TO ENR-TMP.
DISPLAY ENR-TMP.
*//par autheur-------------------------
* (RCH3)
* [x] (CH4) [X] (CH3) [D-]
* -c6-> -c5->
*c5: SLIV = "00"
*c6: AUTHEUR OF ENR-LIV NOT = TXT OR SLIV = "10"
*----------------------------------
RCH3.
PERFORM D-RCH3.
PERFORM CH3 UNTIL SLIV = "00".
PERFORM CH4 UNTIL AUTHEUR OF ENR-LIV NOT = TXT OR SLIV = "10"
- .
*-------------------
D-RCH3.
DISPLAY "AUTHEUR ?".
ACCEPT TXT.
MOVE TXT TO AUTHEUR OF ENR-LIV.
READ FLIVRE KEY IS AUTHEUR OF ENR-LIV.
CH3.
DISPLAY "AUTHEUR NON TROUVE".
ACCEPT AUTHEUR OF ENR-LIV.
READ FLIVRE KEY IS AUTHEUR OF ENR-LIV.
CH4.
MOVE CORR ENR-LIV TO ENR-TMP.
DISPLAY ENR-TMP.
READ FLIVRE NEXT.
*//par theme-------------------------
* (RCH4)
*
* [X] (CH6) [I-] (CH5) [D-]
* -c8-> -c7->
*
* .ch6 -c01-
* [F-] (X) (CMN) [X]
*
*c01: THEME OF ENR-LIV = C
*c7 : C POSITIVE AND C NOT > CPT
*c8 : SLIV = "10"
*----------------------------------
RCH4.
PERFORM D-RCH4.
PERFORM CH5 UNTIL C POSITIVE AND C NOT > CPT.
PERFORM I-RCH4.
PERFORM CH6 UNTIL SLIV = "10".
CH6.
IF THEME OF ENR-LIV = C PERFORM CMN.
PERFORM F-CH6.
*-------------------
D-RCH4.
PERFORM THE.
DISPLAY "THEME ?".
ACCEPT C.
CH5.
DISPLAY "THEME ?".
ACCEPT C.
I-RCH4.
READ FLIVRE NEXT.
CMN.
MOVE CORR ENR-LIV TO ENR-TMP.
DISPLAY ENR-TMP.
F-CH6.
READ FLIVRE NEXT.
*-------test par enr-tmp.theme-----
* RCH4.
* PERFORM D-RCH4.
* PERFORM CH5 UNTIL C POSITIVE AND C NOT > CPT.
* PERFORM I-RCH4.
* PERFORM CH6 UNTIL SLIV = "00".
* PERFORM CH7 UNTIL SLIV = "23" OR SLIV = "10".
*
* D-RCH4.
* PERFORM THE.
* DISPLAY "THEME ?".
* ACCEPT C.
* CH5.
* DISPLAY "THEME ?".
* ACCEPT C.
* I-RCH4.
* MOVE C TO THEME OF ENR-TMP.
* READ FLIVRE KEY IS THEME OF ENR-TMP.
* CH6.
* PERFORM CH5.
* MOVE C TO THEME OF ENR-TMP.
* READ FLIVRE KEY IS THEME OF ENR-TMP.
* CH7.
* MOVE ENR-LIV TO ENR-TMP.
* DISPLAY ENR-TMP.
* READ FLIVRE NEXT.
*----------------------------------
F-RCH.
CLOSE FLIVRE.
STOP "PAUSE".
MOVE 1 TO FLG.
*-----------------------------------------------
*GESTION DES CLIENTS----------------------------
 
CLN.
EXIT.
 
*-----------------------------------------------
*GESTION DES PRETS------------------------------
 
PRE.
EXIT.
 
*-----------------------------------------------
*AFFICHER THEME---------------------------------
 
THE.
DISPLAY (1, 1) ERASE.
DISPLAY "LISTE DES THEMES // 0 - NOUVEAU THEME".
PERFORM D-THE.
PERFORM ATHE UNTIL EOF=1.
PERFORM F-THE.
*------------
D-THE.
MOVE 0 TO EOF, CLE-THE.
OPEN INPUT FTHEME.
READ FTHEME NEXT AT END MOVE 1 TO EOF.
 
ATHE.
DISPLAY CLE-THE, " - ", DESC.
READ FTHEME NEXT AT END MOVE 1 TO EOF.
 
F-THE.
MOVE CLE-THE TO CPT.
CLOSE FTHEME.
MOVE 1 TO FLG.
*-----------------------------------------------
*ADD new theme ---------------------------------
 
NTH.
PERFORM D-NTH.
PERFORM RCH-THE UNTIL EOF = 1.
PERFORM I-NTH.
PERFORM NFO UNTIL RAYON POSITIVE AND QT-MAX POSITIVE.
PERFORM F-NTH.
RCH-THE.
PERFORM DMY.
IF DSC-TMP = DESC PERFORM THE-KO
ELSE PERFORM DMY.
PERFORM F-RCH-THE.
*----------------
 
D-NTH.
OPEN I-O FTHEME.
DISPLAY "NOUVEAU THEME ?".
ACCEPT DSC-TMP.
MOVE 0 TO EOF.
READ FTHEME NEXT; AT END MOVE 1 TO EOF.
THE-KO.
DISPLAY "TITRE EXISTANT : ", CLE-THE, " - ", DESC.
CLOSE FTHEME.
PERFORM D-NTH.
F-RCH-THE.
READ FTHEME NEXT; AT END MOVE 1 TO EOF.
I-NTH.
MOVE DSC-TMP TO DESC.
DISPLAY "RAYON / QT-MAX ?".
ACCEPT RAYON.
ACCEPT QT-MAX.
NFO.
DISPLAY "RAYON / QT-MAX ?".
ACCEPT RAYON.
ACCEPT QT-MAX.
F-NTH.
ADD 1 TO CLE-THE.
WRITE ENR-THE INVALID KEY DISPLAY "ERROR", STHE.
CLOSE FTHEME.
*-----------------------------------------------
*UTILS------------------------------------------
 
DMY.
EXIT.
 
*\ERREURS-----------------------
 
ERR.
EXIT.
 
*MENUS------------------------------------------
 
MENU1.
DISPLAY (1, 1) ERASE.
DISPLAY "1/ GESTION DES LIVRES".
DISPLAY "2/ GESTION DES CLIENTS".
DISPLAY "3/ GESTION DES EMPRUNTS".
DISPLAY "4/ QUITTER".
 
MENU2.
DISPLAY (1, 1) ERASE.
DISPLAY "1/ AJOUTER NOUVEAU LIVRE".
DISPLAY "2/ AJOUTER NOUVEL EXEMPLAIRE".
DISPLAY "3/ MODIFIER UN LIVRE".
DISPLAY "4/ RECHERCHER".
DISPLAY "5/ QUITTER".
 
MENU3.
DISPLAY (1, 1) ERASE.
DISPLAY "0/ LISTER TOUS LES LIVRES".
DISPLAY "1/ PAR CODE".
DISPLAY "2/ PAR TITRE".
DISPLAY "3/ PAR AUTHEUR".
DISPLAY "4/ PAR THEME".
DISPLAY "5/ QUITTER".
</pre>
}}
 
= liens =
*http://home.nordnet.fr/~mferon/cobol/=liens=