問11
次の COBOL プログラムの説明及びプログラムを読んで,設問 1,2 に答えよ。
〔プログラムの説明〕
商品の名称,価格などを登録した商品マスタファイル( M ファイルと呼ぶ)がある。 M ファイルの更新情報が登録してあるトランザクションファイル( T ファイルと呼ぶ)を用いて M ファイルの追加,変更及び削除を行うプログラムである。
(1) M ファイル及び T ファイルのレコード様式は,次のとおりである。
商品コード
13 けた
分類コード
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 の意味は,次のとおりである。 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.
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
ア 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
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
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
解答群