元のソースコード
******************************************************************
* Author:
* Date:
* Purpose:
* Tectonics: cobc
******************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. TESTCOBOL7.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMPFW ASSIGN TO 'EMPFILEW'
ORGANIZATION INDEXED
ACCESS MODE IS RANDOM
RECORD KEY IS EMPKEY.
DATA DIVISION.
FILE SECTION.
FD EMPFW.
01 EMPF-REC.
03 EMPKEY PIC X(3).
03 EMPNO REDEFINES EMPKEY
PIC 9(3).
03 EMPNAME PIC X(10).
03 EMPBDATE PIC X(8).
WORKING-STORAGE SECTION.
01 CHECKDATE.
03 DATECENT PIC 9(2).
03 DATEINPUT PIC X(6).
03 CHECKDATEW REDEFINES DATEINPUT.
05 DATEYY PIC 9(2).
05 DATEMM PIC 9(2).
05 DATEDD PIC 9(2).
01 CDATE.
03 CYY PIC 9(2).
03 CMM PIC 9(2).
03 CDD PIC 9(2).
01 FLAG PIC 9.
01 TABLEWORK.
03 DDTBL PIC X(24)
VALUE "312931303130313130313031".
03 DDT REDEFINES DDTBL
PIC 9(2) OCCURS 12.
PROCEDURE DIVISION.
MAIN SECTION.
MAIN-PROCEDURE.
DISPLAY "社員ファイル作成".
PERFORM INIT-RTN.
PERFORM MAIN-RTN UNTIL EMPNO = 999.
PERFORM END-RTN.
STOP RUN.
MAIN-END.
EXIT.
INIT-RTN SECTION.
INIT-S.
OPEN OUTPUT EMPFW.
ACCEPT CDATE FROM DATE.
INIT-E.
EXIT.
MAIN-RTN SECTION.
MAIN-S.
DISPLAY "社員番号を入れてください".
ACCEPT EMPNO.
IF EMPNO = 999
GO TO MAIN-E.
DISPLAY "社員名をいれてください".
ACCEPT EMPNAME.
MOVE 1 TO FLAG
PERFORM UNTIL FLAG = 0
DISPLAY "生年月日を6桁でいれてください。"
ACCEPT DATEINPUT
PERFORM CHECK-DATE-RTN
END-PERFORM.
MOVE CHECKDATE TO EMPBDATE.
WRITE EMPF-REC.
MAIN-E.
EXIT.
END-RTN SECTION.
END-S.
CLOSE EMPFW.
END-E.
EXIT.
CHECK-DATE-RTN SECTION.
CHECK1-S.
MOVE 0 TO FLAG.
IF DATEYY NOT NUMERIC
THEN MOVE 1 TO FLAG
ELSE
IF DATEYY > CYY
THEN MOVE 19 TO DATECENT
ELSE MOVE 20 TO DATECENT.
IF DATEMM NOT NUMERIC
THEN MOVE 1 TO FLAG
ELSE IF DATEMM < 0 OR DATEMM > 12
THEN MOVE 1 TO FLAG.
IF DATEDD NOT NUMERIC
THEN MOVE 1 TO FLAG
ELSE IF DATEDD > DDT(DATEMM)
THEN MOVE 1 TO FLAG.
IF FLAG = 1
THEN DISPLAY "生年月日が正しくない".
CHECK1-E.
EXIT.
END PROGRAM TESTCOBOL7.
classDiagram
%%{init: {'theme':'base','themeVariables':{
'primaryColor':'#ececff',
'primaryTextColor':'black',
'primaryBorderColor':'#000000',
'lineColor':'black',
'textColor':'black',
'fontSize':'15px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
%%データ設定
class 1["セクションNO:1
MAIN"] {
+PERFORM INIT-RTN
+PERFORM MAIN-RTN
+PERFORM END-RTN
}
class 2["セクションNO:2
INIT-RTN"]
class 3["セクションNO:3
MAIN-RTN"] {
+PERFORM CHECK-DATE-RTN
}
class 4["セクションNO:4
END-RTN"]
class 5["セクションNO:5
CHECK-DATE-RTN"]
%%ルート設定
1 -->2:perform
1 -->3:perform
1 -->4:perform
3 -->5:perform
フローチャート図で表現したもの
%%{init: {'theme':'base','themeVariables':{
'primaryColor':'white',
'primaryTextColor':'#000000',
'primaryBorderColor':'#000000',
'lineColor':'#808080',
'textColor':'#6A7FABCC',
'fontSize''15px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
graph TD;
classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFC0CB,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#ADFF2F,stroke:#333,stroke-width:2px;
linkStyle default stroke:#808080,stroke-width:2px;
%%データ項目
21(["46行目
セクション開始"])
22[/"48行目
「社員ファイル作成」を表示する"/]:::clrPattern5
23[["49行目
INIT-RTNセクションを1回だけ実行する"]]:::clrPattern3
24[/"50行目
従業員番号 = 999が満たされるまでMAIN-RTNセクシ
ョンを繰り返す
"\]:::clrPattern2
25[["50行目
MAIN-RTNセクションを1回だけ実行する"]]:::clrPattern3
26[\"50行目
繰返文終了"/]:::clrPattern2
27[["51行目
END-RTNセクションを1回だけ実行する"]]:::clrPattern3
28["52行目
実行を終了する"]
29(["54行目
セクション終了"])
%%ルート設定
21-->22
22-->23
23-->24
24-->25
25-->26
26-->|繰返文を継続する|24
26-->|繰返文を終了する|27
27-->28
28-->29
%%{init: {'theme':'base','themeVariables':{
'primaryColor':'white',
'primaryTextColor':'#000000',
'primaryBorderColor':'#000000',
'lineColor':'#808080',
'textColor':'#6A7FABCC',
'fontSize''15px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
graph TD;
classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFC0CB,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#ADFF2F,stroke:#333,stroke-width:2px;
linkStyle default stroke:#808080,stroke-width:2px;
%%データ項目
30(["55行目
セクション開始"])
31[/"57行目
OUTPUTモードで従業員ファイル書き込みを開く"/]:::clrPattern4
32[/"58行目
現在の日付を入力する"/]:::clrPattern4
33(["61行目
セクション終了"])
%%ルート設定
30-->31
31-->32
32-->33
%%{init: {'theme':'base','themeVariables':{
'primaryColor':'white',
'primaryTextColor':'#000000',
'primaryBorderColor':'#000000',
'lineColor':'#808080',
'textColor':'#6A7FABCC',
'fontSize''15px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
graph TD;
classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFC0CB,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#ADFF2F,stroke:#333,stroke-width:2px;
linkStyle default stroke:#808080,stroke-width:2px;
%%データ項目
34(["62行目
セクション開始"])
35[/"64行目
「社員番号を入れてください」を表示する"/]:::clrPattern5
36[/"65行目
従業員番号を入力する"/]:::clrPattern4
37{"66行目
条件文"}:::clrPattern1
39(["67行目
条件を満たす場合"])
40[/"67行目
MAIN-Eラベルへ制御を移す(GOTO)"/]:::clrPattern5
41(["67行目
条件文を終了する"])
42[/"68行目
「社員名をいれてください」を表示する"/]:::clrPattern5
43[/"69行目
従業員名を入力する"/]:::clrPattern4
44["70行目
フラグに1を代入する"]
45[/"71行目
フラグ = 0が満たされるまで繰り返す"\]:::clrPattern2
46[/"72行目
「生年月日を6桁でいれてください。」を表示する"/]:::clrPattern5
47[/"74行目
入力日付を入力する"/]:::clrPattern4
48[["75行目
CHECK-DATE-RTNセクションを1回だけ実行する"]]:::clrPattern3
49[\"76行目
繰返文を終了する"/]:::clrPattern2
50["77行目
従業員の生年月日にチェック日付を代入する"]
51[/"78行目
従業員レコードに書き込む"/]:::clrPattern5
52[/"79行目
GOTO先段落|MAIN-E"/]:::clrPattern4
53(["80行目
セクション終了"])
%%ルート設定
34-->35
35-->36
36-->37
37-->|条件文 真 |39
37-->|条件文 偽 |41
39-->40
40-->52
41-->42
42-->43
43-->44
44-->45
45-->46
46-->47
47-->48
48-->49
49-->|繰返文を継続する|45
49-->|繰返文を終了する|50
50-->51
51-->52
52-->53
style j1 color:red,fill-opacity:0, stroke-opacity:0
style j2 color:red,fill-opacity:0, stroke-opacity:0
subgraph j1["従業員番号 = 999を評価する"]
subgraph j2[ ]
37
end
end
%%{init: {'theme':'base','themeVariables':{
'primaryColor':'white',
'primaryTextColor':'#000000',
'primaryBorderColor':'#000000',
'lineColor':'#808080',
'textColor':'#6A7FABCC',
'fontSize''15px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
graph TD;
classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFC0CB,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#ADFF2F,stroke:#333,stroke-width:2px;
linkStyle default stroke:#808080,stroke-width:2px;
%%データ項目
54(["81行目
セクション開始"])
55[/"83行目
従業員ファイル書き込みを閉じる"/]:::clrPattern5
56(["85行目
セクション終了"])
%%ルート設定
54-->55
55-->56
%%{init: {'theme':'base','themeVariables':{
'primaryColor':'white',
'primaryTextColor':'#000000',
'primaryBorderColor':'#000000',
'lineColor':'#808080',
'textColor':'#6A7FABCC',
'fontSize''15px'}}}%%
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
graph TD;
classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px;
classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px;
classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px;
classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px;
classDef clrPattern4 fill:#FFC0CB,stroke:#333,stroke-width:2px;
classDef clrPattern5 fill:#ADFF2F,stroke:#333,stroke-width:2px;
linkStyle default stroke:#808080,stroke-width:2px;
%%データ項目
57(["86行目
セクション開始"])
58["88行目
フラグに0を代入する"]
59{"89行目
条件文"}:::clrPattern1
61(["90行目
条件を満たす場合"])
62["90行目
フラグに1を代入する"]
63(["91行目
そうでない場合"])
64{"92行目
条件文"}:::clrPattern1
66(["93行目
条件を満たす場合"])
67["93行目
西暦世紀に19を代入する"]
68(["94行目
そうでない場合"])
69["94行目
西暦世紀に20を代入する"]
70(["94行目
条件文を終了する"])
71(["94行目
条件文を終了する"])
72{"95行目
条件文"}:::clrPattern1
74(["96行目
条件を満たす場合"])
75["96行目
フラグに1を代入する"]
76(["97行目
そうでない場合"])
77{"97行目
条件文"}:::clrPattern1
79(["98行目
条件を満たす場合"])
80["98行目
フラグに1を代入する"]
81(["98行目
条件文を終了する"])
82(["98行目
条件文を終了する"])
83{"99行目
条件文"}:::clrPattern1
85(["100行目
条件を満たす場合"])
86["100行目
フラグに1を代入する"]
87(["101行目
そうでない場合"])
88{"101行目
条件文"}:::clrPattern1
90(["102行目
条件を満たす場合"])
91["102行目
フラグに1を代入する"]
92(["102行目
条件文を終了する"])
93(["102行目
条件文を終了する"])
94{"103行目
条件文"}:::clrPattern1
96(["104行目
条件を満たす場合"])
97[/"104行目
「生年月日が正しくない」を表示する"/]:::clrPattern5
98(["104行目
条件文を終了する"])
99(["106行目
セクション終了"])
%%ルート設定
57-->58
58-->59
59-->|条件文 真 |61
59-->|条件文 偽 |63
61-->62
62-->71
63-->64
64-->|条件文 真 |66
64-->|条件文 偽 |68
66-->67
67-->70
68-->69
69-->70
70-->71
71-->72
72-->|条件文 真 |74
72-->|条件文 偽 |76
74-->75
75-->82
76-->77
77-->|条件文 真 |79
77-->|条件文 偽 |81
79-->80
80-->81
81-->82
82-->83
83-->|条件文 真 |85
83-->|条件文 偽 |87
85-->86
86-->93
87-->88
88-->|条件文 真 |90
88-->|条件文 偽 |92
90-->91
91-->92
92-->93
93-->94
94-->|条件文 真 |96
94-->|条件文 偽 |98
96-->97
97-->98
98-->99
style j1 color:red,fill-opacity:0, stroke-opacity:0
style j2 color:red,fill-opacity:0, stroke-opacity:0
subgraph j1["年(2桁) が数値ではない場合を評価する"]
subgraph j2[ ]
59
end
end
style j3 color:red,fill-opacity:0, stroke-opacity:0
style j4 color:red,fill-opacity:0, stroke-opacity:0
subgraph j3["年(2桁) > 現在の年(2桁)を評価する"]
subgraph j4[ ]
64
end
end
style j5 color:red,fill-opacity:0, stroke-opacity:0
style j6 color:red,fill-opacity:0, stroke-opacity:0
subgraph j5["月(2桁) が数値ではない場合を評価する"]
subgraph j6[ ]
72
end
end
style j7 color:red,fill-opacity:0, stroke-opacity:0
style j8 color:red,fill-opacity:0, stroke-opacity:0
subgraph j7["月(2桁) < 0 OR 月(2桁) > 12を評価する"]
subgraph j8[ ]
77
end
end
style j9 color:red,fill-opacity:0, stroke-opacity:0
style j10 color:red,fill-opacity:0, stroke-opacity:0
subgraph j9["日 が数値ではない場合を評価する"]
subgraph j10[ ]
83
end
end
style j11 color:red,fill-opacity:0, stroke-opacity:0
style j12 color:red,fill-opacity:0, stroke-opacity:0
subgraph j11["日 > 月ごとの日数テーブル(月(2桁))を評価する"]
subgraph j12[ ]
88
end
end
style j13 color:red,fill-opacity:0, stroke-opacity:0
style j14 color:red,fill-opacity:0, stroke-opacity:0
subgraph j13["フラグ = 1を評価する"]
subgraph j14[ ]
94
end
end