基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成30年 春期 基本情報技術者 午後 問10
問10   COBOL

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

 

〔プログラムの説明〕

 Web 上でショッピングサイトを運営している P 社では,注文を受けて入金確認の処理を 待っている商品の注文情報を注文ファイルに格納し,前日に入金された情報を 入金ファイルに格納する。 P 社では毎朝 10 時に入金確認の処理を実行し, 注文ファイルの情報と入金ファイルの情報を突き合わせて結果リストを印字する。 このとき,入金が確認できなかった商品の注文情報は,出荷待ちファイルに格納する。 前処理として,注文ファイルには,前日にプログラムを実行した際に 出力された出荷待ちファイルの情報と,前日に受けた商品の注文情報を格納しておく。

 このショッピングサイトでは,代金の支払方法として,銀行振込,コンビニ払い, クレジットカード払い(以下,カード払いという), 商品着払い(以下,着払いという)のいずれかを,注文時に選択できる。 注文時に選択した支払方法と入金方法が異なることはない。 銀行振込及びコンビニ払いによる入金の情報が入金ファイルに格納され, 入金が確認できた注文を出荷対象とする。支払方法にカード払い又は着払いが選択された場合は, 注文を受けた翌日に出荷する。

 

(1) 注文ファイルは,図1に示すレコード様式の順ファイルである。

 

図1 注文ファイルのレコード様式

 

@ 注文番号には,注文ごとに一意に割り振られた番号が設定されている。 注文番号として,99999999 が割り振られることはない。

A 注文日時には,西暦の年,月,日と,24 時間表記の時,分,秒が, それぞれ 4 桁,2 桁,2 桁,2 桁,2 桁,2 桁で設定されている。

B 請求金額には,正の整数が設定されている。

C 支払種別には,注文時に選択された支払方法が,銀行振込,コンビニ払い, カード払い,着払いのそれぞれに対応する値,1,2,3,4 で設定されている。

D レコードは,注文番号の昇順に整列されている。

 

(2) 入金ファイルは,図2に示すレコード様式の順ファイルである。

 

図2 入金ファイルのレコード様式

 

@ 注文番号には,入金が確認できた注文の注文番号が設定されている。

A 入金日時には,西暦の年,月,日と,24 時間表記の時,分,秒が, それぞれ 4 桁,2 桁,2 桁,2 桁,2 桁,2 桁で設定されている。

B 入金金額には,正の整数が設定されている。

C 入金種別には,入金方法が,銀行振込,コンビニ払いのそれぞれに対応する値,1,2 で設定されている。

D レコードは,注文番号の昇順に整列されている。同じ注文番号のレコードが複数格納されることはない。

(3) 出荷待ちファイルは,図3に示すレコード様式の順ファイルである。 支払方法に銀行振込又はコンビニ払いが選択された注文のうち, 入金を確認できなかった商品の注文情報が格納される。

 

図3 出荷待ちファイルのレコード様式

 

@ 各項目の内容は,注文ファイルのレコード様式と同じである。 (4) 結果リストの印字様式を図4に示す。見出しは印刷済みとする。

 

図4 結果リストの印字様式

 

@ 結果リストには,出荷する注文と,エラーと判定した注文の情報を印字する。 結果欄に印字するコードと意味を表1に示す。

 

表1 結果欄に印字するコードと意味

 

A 差額欄には,入金金額から請求金額を減算した金額を印字する。 結果欄のコードが 10 の場合は,請求金額欄と差額欄には,0 を印字する。支払方法が カード払い,着払いのいずれかであった場合は,入金金額欄と差額欄には,0 を印字する。

B 判定がエラーの場合は,出荷待ちファイルに情報は出力せず,個別に対処する。

 

〔プログラム1〕

(行番号)

 1  DATA DIVISION.
 2  FILE SECTION.
 3  FD ORD-FILE.
 4  Ø1 ORD-REC       PIC X(3Ø).
 5  FD RCP-FILE
 6  Ø1 RCP-REC       PIC X(3Ø).
 7  FD WAT-FILE.
 8  Ø1 WAT-REC       PIC X(3Ø).
 9  FD PRT-FILE.
1Ø  Ø1 PRT-REC.
l1     Ø2 PRT-NO        PIC 9(8).
12     Ø2               PIC X(4).
13     Ø2 PRT-RSLT      PIC X(2).
14     Ø2               PIC X(6).
15     Ø2 PRT-ORD       PIC Z,ZZZ,ZZ9.
16     Ø2               PIC X(4).
17     Ø2 PRT-RCP       PIC Z,ZZZ,ZZ9.
18     Ø2               PIC X(4).
19     Ø2 PRT-DIFF      PIC --,---,--9.
2Ø  WORKING-STORAGE SECTION.
21  Ø1 ORD-DATA.
22     Ø2 ORD-NO        PIC 9(8).
23        88 ORD-EOF      VALUE 99999999.
24     Ø2 ORD-DT.
25        Ø3 ORD-DATE     PIC 9(8).
26        Ø3 ORD-TIME     PIC 9(6).
27     Ø2 ORD-AMNT     PIC 9(7).
28     Ø2 ORD-CODE     PIC 9(1).
29  Ø1 RCP-DATA.
3Ø     Ø2 RCP-NO       PIC 9(8).
31        88 RCP-EOF      VALUE 99999999.
32     Ø2 RCP-DT.
33        Ø3 RCP-DATE     PIC 9(8).
34        Ø3 RCP-TIME     PIC 9(6).
35     Ø2 RCP-AMNT     PIC 9(7).
36     Ø2 RCP-CODE     PIC 9(1).
37  PROCEDURE DIVISION.
38  MAIN-PROC.
39      OPEN INPUT  ORD-FILE RCP-FILE
4Ø           OUTPUT WAT-FILE PRT-FILE.
41      INITIALIZE ORD-DATA RCP-DATA.
42      PERFORM ORD-PROC.
43      PERFORM RCP-PROC.
44      MOVE SPACE TO PRT-REC.
45      PERFORM UNTIL 
46         INITIALIZE PRT-REC
47         MOVE ORD-NO TO PRT-NO
48         EVALUATE TRUE
49            WHEN ORD-NO < RCP-NO
5Ø               IF  THEN
51                  MOVE "ØØ" TO PRT-RSLT
52               ELSE
53                  WRITE WAT-REC FROM ORD-DATA
54               END-IF
55               MOVE ORD-AMNT TO PRT-ORD
56               PERFORM ORD-PROC
57            WHEN ORD-NO = RCP-NO
58               IF  THEN
59                  MOVE "ØØ" TO PRT-RSLT
6Ø               ELSE
61                  MOVE "2Ø" TO PRT-RSLT
62                  COMPUTE PRT-DIFF = RCP-AMNT - ORD-AMNT
63               END-IF
64               MOVE ORD-AMNT TO PRT-ORD
65               MOVE RCP-AMNT TO PRT-RCP
66               PERFORM ORD-PROC
67               PERFORM RCP-PROC
68            WHEN ORD-NO > RCP-NO
69               MOVE "1Ø" TO PRT-RSLT
7Ø               MOVE RCP-AMNT TO PRT-RCP
71               MOVE RCP-NO TO PRT-NO
72               PERFORM RCP-PROC
73         END-EVALUATE
74         IF PRT-RSLT NOT = SPACE THEN
75            
76         END-IF
77      END-PERFORM.
78      CLOSE ORD-FILE RCP-FILE WAT-FILE PRT-FILE.
79      STOP RUN.
8Ø  ORD-PROC.
81      IF NOT ORD-EOF THEN
82         READ ORD-FILE INTO ORD-DATA AT END SET ORD-EOF TO TRUE
83         END-READ
84      END-IF.
85  RCP-PROC.
86      IF NOT RCP-EOF THEN
87         READ RCP-FILE INTO RCP-DATA AT END SET RCP-EOF TO TRUE
88         END-READ
89      END-IF.

 

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

 

a に関する解答群

ア ORD-EOF            イ ORD-EOF AND RCP-EOF

ウ ORD-EOF OR RCP-EOF       エ RCP-EOF

 

b,c に関する解答群

ア ORD-AMNT = RCP-AMNT       イ ORD-AMNT = ZERO

ウ ORD-AMNT NOT = RCP-AMNT     エ ORD-CODE = 1 OR 2

オ ORD-CODE = 3 OR 4        カ ORD-CODE = RCP-CODE

 

d に関する解答群 ア ADD 1 TO PRT-NO             イ MOVE SPACE TO PRT-REC

ウ SET ORD-EOF RCP-EOF TO TRUE       エ WRITE PRT-REC

 

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

基本情報技術者試験


設問2  支払方法に銀行振込又はコンビニ払いが選択された注文のうち,注文日の翌日を1日目として, 7 日を過ぎて入金が確認できなかった注文の注文番号を表示するようにプログラムを変更する。 表2中の に入れる正しい答えを,解答群の中から選べ。 ここで,組込み関数 INTEGER-OF-DATE は,引数に指定された YYYYMMDD 形式の日付を 西暦 1601 年1月1日からの通算の日数に変換して返す。

 

表2 プログラムの変更内容

 

e に関する解答群 ア 行番号 51 と 52 の間       イ 行番号 53 と 54 の間

ウ 行番号 65 と 66 の間       エ 行番号 71 と 72 の間

 

f に関する解答群 ア W-CNT < 7       イ W-CNT = 7

ウ W-CNT > 7       エ W-CNT NOT = 7

 

解答 e ←クリックすると正解が表示されます

解答 f ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]