COBOL入門 Mission5
処 理 内 容 |
PROGRAM-ID |
難易度 |
言語 |
集計印刷プログラム |
PRN010 |
1 |
COBOL |
|
1:処理図
|
2:処理概要
社員マスタを読んで一覧表を印刷する
印刷する項目
社員コード 部コード 課コード 氏名
生年月日 性別 採用年月
支給額 = 基本給 + 職務 + 超謹 + 扶養
控除額 = 控除額
支給額 = 支給額 ・ 控除額 (以上横計)
各金額計 (縦計)
印刷条件
3行目 大見出しと頁数を印刷
6行目 小見出しを印刷
8〜46行目 明細を印刷 (20件)
(明細は1行とびに印刷する)
最終データの次に1行あけて各金額計を印刷
|
|
3:ファイル名称 |
I-O
|
外部ファイル名 |
編成 |
KP/KL |
RL/BF |
access |
(1)社員マスタ |
in |
C:\dat\mas30.dat |
seq |
/ |
71/1 |
順 |
(2)printer |
out |
|
seq |
/ |
/ |
順 |
|
4:その他
★頁を送る(改頁命令)
move space to 出力領域
write 出力領域 after page (「page」は予約語です)
| |
********** ( 集計印刷・横計・縦計 ) **********
IDENTIFICATION DIVISION.
PROGRAM-ID. PRN010.
*
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT F1 ASSIGN TO "C:\DAT\MAS30.DAT" STATUS FST
ACCESS MODE IS SEQUENTIAL.
SELECT F2 ASSIGN TO PRINTER.
*
DATA DIVISION.
FILE SECTION.
FD F1.
01 F1R.
03 PIC X(01).
03 F1SCD PIC X(04).
03 F1BCD PIC X(01).
03 F1KCD PIC X(02).
03 F1NAM PIC X(15).
03 F1UMA PIC X(07).
03 F1SEI PIC X(01).
03 F1SAI PIC X(05).
03 F1-KIN PIC 9(07) OCCURS 5.
FD F2.
01 F2R PIC X(90).
*
WORKING-STORAGE SECTION.
01 FST PIC X(02).
01 COUNT-AREA VALUE ZERO.
03 LCNT PIC 9(02).
03 PCNT PIC 9(02).
03 I PIC 9(01).
* ***** 明細編集領域 *****
01 W1R.
03 W1SCD PIC B(03)X(04).
03 W1BCD PIC B(01)X(01).
03 W1KCD PIC B(01)X(02).
03 W1NAM PIC B(01)X(15).
03 W1UMA PIC B(01)X(07).
03 W1SEI PIC B(01)X(01).
03 W1SAI PIC B(01)X(05).
03 W1KIN PIC \\\\,\\\,\\9 OCCURS 3.
* ***** 金額累計領域 *****
01 K1R VALUE ZERO.
03 WKSIK PIC 9(08).
03 WKSIH PIC 9(08).
03 RKGAK PIC 9(08) OCCURS 3.
* ***** 見出1領域 *****
01 MIDA1.
03 PIC X(35) VALUE " *** シャイン".
03 PIC X(35) VALUE "マスターイチランヒョウ *** ".
03 PIC X(08) VALUE " PAGE - ".
03 P-PAGE PIC 99.
* ***** 見出2領域 *****
01 MIDA2.
03 PIC X(37) VALUE " コード ブ カ シメイ ネンツキ ".
03 PIC X(37) VALUE "ヒ サイヨウ シキュウガク コウジョガク".
03 PIC X(13) VALUE " シハライガク".
PROCEDURE DIVISION.
********** ( CONTROL - MODULE ) ********
OPEN INPUT F1 OUTPUT F2
PERFORM MI-RTN THRU MI-EX
PERFORM UNTIL FST NOT = "00"
READ F1
END CONTINUE
NOT END ADD 1 TO LCNT
IF LCNT > 20
THEN PERFORM KP-RTN THRU KP-EX
PERFORM MI-RTN THRU MI-EX
MOVE 1 TO LCNT
ELSE CONTINUE
END-IF
PERFORM ME-RTN THRU ME-EX
END-READ
END-PERFORM
PERFORM GK-RTN THRU GK-EX
PERFORM KP-RTN THRU KP-EX
CLOSE F1 F2
STOP RUN.
********** ( PROCESS - MODULE ) ********************
***** 明細処理 *****
ME-RTN.
* ***** 支払額(横計)の計算 *****
COMPUTE WKSIK = F1KIN(1) + F1KIN(2) + F1KIN(3) + F1KIN(4)
COMPUTE WKSIH = WKSIK - F1KIN(5)
***** 明細の編集・印刷 *****
MOVE F1SCD TO W1SCD MOVE F1BCD TO W1BCD
MOVE F1KCD TO W1KCD MOVE F1NAM TO W1NAM
MOVE F1UMA TO W1UMA MOVE F1SEI TO W1SEI
MOVE F1SAI TO W1SAI
MOVE WKSIK TO W1KIN(1)
MOVE F1KIN(5) TO W1KIN(2)
MOVE WKSIH TO W1KIN(3)
WRITE F2R FROM W1R AFTER 2
* ***** 累計金額(縦計)の加算 *****
ADD WKSIK TO RKGAK(1) ADD F1KIN(5) TO RKGAK(2)
ADD WKSIH TO RKGAK(3)
ME-EX. EXIT.
***** 改頁処理 *****
KP-RTN. MOVE SPACE TO F2R WRITE F2R AFTER PAGE
KP-EX.
***** 見出処理 *****
MI-RTN.
ADD 1 TO PCNT MOVE PCNT TO P-PAGE
WRITE F2R FROM MIDA1 AFTER 2
WRITE F2R FROM MIDA2 AFTER 3
MI-EX. EXIT.
***** ( 合計処理 ) *****
GK-RTN.
MOVE SPACE TO W1R
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
MOVE WRGK(I) TO W1KIN(I)
END-PERFORM
WRITE F2R FROM W1R AFTER 2
GK-EX. EXIT.