東京理科大学 infoserv[更新日]2001.12.03


問11

 次の COBOL プログラムの説明及びプログラムを読んで,設問 1,2 に答えよ。

〔プログラムの説明〕

商品の名称,価格などを登録した商品マスタファイル( M ファイルと呼ぶ)がある。 M ファイルの更新情報が登録してあるトランザクションファイル( T ファイルと呼ぶ)を用いて M ファイルの追加,変更及び削除を行うプログラムである。

(1) M ファイル及び T ファイルのレコード様式は,次のとおりである。

商品コード

13 けた

分類コード

6 けた

価格

6 けた

名称

40 けた

(2) M ファイルは,商品コードをキーとする索引ファイルである。

(3) M ファイルへの更新処理は,T ファイルの商品コード,分類コード,価格及び名称の内容によって,次の処理を行うとともに,結果を印字する。 ただし,T ファイルの商品コードは,空白ではない。

 M ファイルへの追加

T ファイルの商品コードが M ファイルに未登録で,T ファイルの商品コード,分類コード,価格及び名称がすべて記述されているときは,そのレコードを M ファイルに追加する。

 M ファイルの変更

T ファイルの商品コードが M ファイルに登録済みで,T ファイルの分類コード,価格及び名称の少なくとも一つが記述されているとき,その項目の内容で M ファイルの対応する項目を置き換える。

 M ファイルからの削除

T ファイルの商品コードが M ファイルに登録済みで,T ファイルの分類コード,価格及び名称がすべて空白のときは,M ファイルからその商品コードのレコードを削除する。

 T ファイルのエラー

T ファイルの商品コードが M ファイルに未登録で,T ファイルの分類コード,価格及び名称に一つでも空白の項目がある場合は,T ファイルのレコードエラーとして印字する。

(4) 処理結果の印字例は,次のとおりである。

Action GoodsCodeClassPriceName
INS XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX
UPD OLD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX
  NEW XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX
DEL XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX
ERR XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX

 印字例中の項目 Action の意味は,次のとおりである。 INS :M ファイルへの追加 UPD:M ファイルの変更であり,OLD が変更前,NEW が変更後の内容 DEL:M ファイルからの削除 ERR:T ファイルのレコードエラー

 それ以外の項目には,Action が ERR であるときは T ファイルの内容を,ERR 以外のときは M ファイルの内容を印字する。

 見出しの印字は,最初に 1 度だけ行う。

〔プログラム〕


DATA DIVISION.
FILE SECTION.
FD  MASTER-FILE.
01  MASTER-REC.
    02  GOODS-MAS          PIC  X(13).
    02  DATA-MAS.
        03  CLASS-MAS      PIC  X(06).
        03  PRICE-MAS      PIC  X(06).
        03  NAME-MAS       PIC  X(40).
FD  TRANS-FILE.
01  TRANS-REC.
    02  GOODS-TRA          PIC  X(13).
    02  DATA-TRA.
        03  CLASS-TRA      PIC  X(06).
        03  PRICE-TRA      PIC  X(06).
        03  NAME-TRA       PIC  X(40).
FD  PRINT-FILE.
01  PRINT-REC              PIC  X(77).
WORKING-STORAGE SECTION.
01  TRANS-EOF              PIC  9(01) VALUE 0.
01  PRINT1                 PIC  X(41) VALUE
    "Action   GoodsCode     Class  Price  Name".
01  PRINT2 VALUE SPACE.
    03  ACTION-PRI         PIC  X(07).
    03                     PIC  X(02).
    03  GOODS-PRI          PIC  X(13).
    03                     PIC  X.
    03  CLASS-PRI          PIC  X(06).
    03                     PIC  X.
    03  PRICE-PRI          PIC  X(06).
    03                     PIC  X.
    03  NAME-PRI           PIC  X(40).
PROCEDURE DIVISION.
TRANS-READ-RTN.
    OPEN I-O MASTER-FILE INPUT TRANS-FILE OUTPUT PRINT-FILE.
    WRITE PRINT-REC FROM PRINT1 AFTER PAGE.
    PERFORM UNTIL TRANS-EOF = 1
       READ TRANS-FILE
          AT END
             MOVE 1 TO TRANS-EOF
          NOT AT END
             PERFORM UPDATE-RTN
       END-READ
    END-PERFORM.
    CLOSE MASTER-FILE TRANS-FILE PRINT-FILE.
    STOP RUN.
UPDATE-RTN.
    MOVE  TO .
    READ MASTER-FILE
       INVALID KEY
          IF  THEN
             PERFORM MOVE-TRA-RTN
             MOVE "INS" TO ACTION-PRI
             WRITE PRINT-REC FROM PRINT2 AFTER 1
             WRITE MASTER-REC FROM TRANS-REC
          ELSE
             PERFORM MOVE-TRA-RTN
             MOVE "ERR" TO ACTION-PRI
             WRITE PRINT-REC FROM PRINT2 AFTER 1
          END-IF
       NOT INVALID KEY
          IF  = SPACE THEN
             PERFORM MOVE-MAS-RTN
             DELETE MASTER-FILE
                INVALID KEY
                   DISPLAY "DELETE ERROR"
                NOT INVALID KEY
                   MOVE "DEL" TO ACTION-PRI
                   WRITE PRINT-REC FROM PRINT2 AFTER 1
             END-DELETE
          ELSE
             
             MOVE "UPD OLD" TO ACTION-PRI
             IF CLASS-TRA NOT = SPACE THEN
                MOVE CLASS-TRA TO CLASS-MAS
             END-IF
             IF PRICE-TRA NOT = SPACE THEN
                MOVE PRICE-TRA TO PRICE-MAS
             END-IF
             IF NAME-TRA NOT = SPACE THEN
                MOVE NAME-TRA TO NAME-MAS
             END-IF
             WRITE PRINT-REC FROM PRINT2 AFTER 1
             PERFORM MOVE-MAS-RTN
             REWRITE MASTER-REC
                INVALID KEY
                   DISPLAY "REWRITE ERROR"
                NOT INVALID KEY
                    MOVE "    NEW" TO ACTION-PRI
                   WRITE PRINT-REC FROM PRINT2 AFTER 1
             END-REWRITE
          END-IF
    END-READ.
MOVE-TRA-RTN.
    MOVE GOODS-TRA TO GOODS-PRI.
    MOVE CLASS-TRA TO CLASS-PRI.
    MOVE PRICE-TRA TO PRICE-PRI.
    MOVE NAME-TRA  TO NAME-PRI.
MOVE-MAS-RTN.
    MOVE GOODS-MAS TO GOODS-PRI.
    MOVE CLASS-MAS TO CLASS-PRI.
    MOVE PRICE-MAS TO PRICE-PRI.
    MOVE NAME-MAS  TO NAME-PRI.

設問1  プログラム中の に入れる正しい答えを,解答群の中から選べ。

a,b,d に関する解答群

ア CLASS-MAS    イ CLASS-TRA    ウ DATA-MAS

エ DATA-TRA    オ GOODS-MAS    カ GOODS-TRA

キ NAME-MAS    ク NAME-TRA    ケ PRICE-MAS

コ PRICE-TRA

c に関する解答群

ア CLASS-MAS = SPACE AND    PRICE-MAS = SPACE AND NAME-MAS = SPACE

イ CLASS-MAS NOT = SPACE AND    PRICE-MAS NOT = SPACE AND NAME-MAS NOT = SPACE

ウ CLASS-TRA = SPACE AND    PRICE-TRA = SPACE AND NAME-TRA = SPACE

エ CLASS-TRA NOT = SPACE AND    PRICE-TRA NOT = SPACE AND NAME-TRA NOT = SPACE

オ DATA-MAS = SPACE

カ DATA-MAS NOT = SPACE

キ DATA-TRA = SPACE

ク DATA-TRA NOT = SPACE

e に関する解答群

ア MOVE MASTER-REC TO PRINT-REC

イ MOVE MASTER-REC TO TRANS-REC

ウ MOVE TRANS-REC TO MASTER-REC

エ MOVE TRANS-REC TO PRINT-REC

オ PERFORM MOVE-MAS-RTN

カ PERFORM MOVE-TRA-RTN

設問2  M ファイル及び T ファイルに次のレコードがあるとき, 正しい印字結果を,解答群の中から選べ。

M ファイル  49-0001-00011A0101A000300NAME-1  49-0021-00901A0301B001000NAME-2  49-0031-00002B0102C000050NAME-3

T ファイル  49-0001-00011  49-0001-00012 000500NAME-4  49-0021-00901 001200  49-0022-00003A0102C000100NAME-5

解答群


東京理科大学 infoserv 戻る 次頁:問12