COBOL入門 Mission4

処 理 内 容 PROGRAM-ID 難易度 言語
表検索 (応用) TBL050 1 COBOL
1:処理図
2:処理概要

駅名ファイルから駅名を
 売上ファイルから売上金額を得て
            下記の様式で画面に表示する
 駅コード  駅  名   金額
  XXXX  XXXXXX \\\\,\\9
  XXXX  XXXXXX \\\\,\\9
  XXXX  XXXXXX \\\\,\\9
  XXXX  XXXXXX \\\\,\\9
 
 

 まず駅名ファイル(TB03B.DAT)を読んで
 駅コード 金額は ファイル(TB03A.DAT)を
  内容をテーブルに展開する
 次に売上ファイルを読みながら駅名を検索して
  駅コード 駅名 金額を画面に表示する

3:ファイル名称
I-O
外部ファイル名 編成 KP/KL RL/BF access
(1)売上ファイル in C:\dat\TB03A.dat seq  /  10/1
(2)駅名ファイル in C:\dat\TB03B.dat seq  /  16/1
4:外部フォーマット定義(画面・書式等)
       TB03A.DAT フォーマット  駅コード  金額
                        X(04)   9(06)
       TB03B.DAT フォーマット  駅コード  駅名
                        X(04)   X(12)
5:その他 テーブルの内容が時々変更されるような場合
 その都度プログラムを修正するのはとても大変なので
 業務ではこのようにします これだとデータを変更するだけですから・・・

********** (ファイルをテーブルに展開してから使用する) **********

 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                TBL050.

 ENVIRONMENT                DIVISION.
 INPUT-OUTPUT               SECTION.
 FILE-CONTROL.
     SELECT  F1  ASSIGN  TO  "C:\DAT\TB03B.DAT"  STATUS  FST
                            ACCESS  MODE  IS  SEQUENTIAL.
     SELECT  F2  ASSIGN  TO  "C:\DAT\TB03A.DAT"  STATUS  FST
                            ACCESS  MODE  IS  SEQUENTIAL.

 DATA                       DIVISION.
 FILE                       SECTION.
***** ( EKI - NAME - FILE ) *****
 FD  F1.
 01  F1R.
     03  F1CD               PIC X(04).
     03  F1NM               PIC X(12).
***** ( KINGAKU - FILE ) *****
 FD  F2.
 01  F2R.
     03  F2CD               PIC X(04).
     03  F2KIN              PIC 9(06).
*
 WORKING-STORAGE            SECTION.
 01  F1FST                  PIC X(02).
 01  F2FST                  PIC X(02).
 01  I                      PIC 9(02) VALUE ZERO.
***** ( 駅名 テーブル領域 ) *****
 01  TB1                    VALUE SPACE.
     03  T1R  OCCURS  25.
         05  T1CD           PIC X(04).
         05  T1NM           PIC X(12).
***** ( 表示用領域 ) ******
 01  D1R.
     03  D1CD               PIC X(04)B(02).
     03  D1NM               PIC X(12)B(02).
     03  D1KIN              PIC \\\\,\\9.
*
 PROCEDURE                  DIVISION.
*    ***** ( テーブルのセット ) *****
     DISPLAY  "!!! TBL050 STARTED !!!"
     OPEN  INPUT  F1
     INITIALIZE   TB1
     PERFORM  UNTIL  F1FST  NOT  =  "00"
        READ  F1
             END       CONTINUE
             NOT  END  ADD  1  TO  I  MOVE  F1R  TO  T1R(I)
        END-READ
     END-PERFORM
     CLOSE  F1
     DISPLAY  "!!!  TABLE-SET-END  !!!"

*    ***** ( 駅名の検索・表示処理 ) *****
     OPEN  INPUT  F2
     PERFORM  UNTIL  F2FST  NOT  =  "00"
         READ  F2
              END       CONTINUE
              NOT  END  
*                  ***** ( テーブル検索 ) *****
                   PERFORM VARYING I FROM 1 BY 1 UNTIL I > 25
                                            OR F2CD = T1CD(I)
                       CONTINUE
                   END-PERFORM
                   ***** ( 駅名の表示 ) *****
                   IF  I  >  25
                       THEN  DISPLAY F2CD "  < CODE - ERR>  "
                       ELSE  MOVE    F2CD     TO  D1CD
                             MOVE    T1NM(I)  TO  D1NM
                             MOVE    F2KIN    TO  D1KIN  DISPLAY  D1R
                   END-IF
         END-READ
     END-PERFORM
     DISPLAY  "!!! TBL050 - ENDED !!!"
     CLOSE F2  STOP RUN.

<< Back    Index    Next >>   < Top >