基本情報技術者 2018年 秋期 午後 問05
購買管理システムで行う処理に関する次の記述を読んで、設問1〜3に答えよ。
自動車用アクセサリ類を製造しているK社では、購買部門が部品を発注する際に利用する購買管理システムを構築中である。システム部のC君は、購買ファイル更新可否チェック処理の開発を担当することになった。
購買ファイル更新可否チェック処理においては、部品の購入依頼情報を格納したファイル(以下、依頼ファイルという)中の各レコードについて、購買ファイルを更新できるかどうかをチェックする。更新することができないレコードは、更新対象外依頼ファイルに出力する。更新することができるレコードは、更新用依頼ファイルに出力し、一連の処理として実行する購買ファイル更新処理に引き渡す。ここで、依頼ファイルは、1日に1回、バッチ処理時間帯に製造部門から受け取る。依頼ファイルには、過去に受け取った購入依頼情報のレコードは含まれない。購買ファイル更新可否チェック処理の位置付けを、図1に示す。

依頼ファイル及び購買ファイルのレコードの項目を表1に、その項目の説明を表2に示す。更新用依頼ファイル及び更新対象外依頼ファイルのレコードの項目は、依頼ファイルのレコードの項目と同じである。


(1) 依頼種別には、依頼者が購入依頼情報を新規に作成するときは“登録”が、変更するときは“変更”が、削除するときは“削除”が設定される。
(2) 購買ステータスには、購買部門が発注先に見積りを依頼する前は“購買受付”が、見積りを依頼して発注するまでの間は“見積り中”が、発注して納品されるまでの間は“発注済”が、納品後は“納品済”が設定される。
〔購買ファイル更新可否チェック処理の概要〕
(1) 依頼ファイルのレコードの、依頼IDと依頼種別を除く項目の内容は、正しいものとする。
(2) 依頼IDの昇順に整列された依頼ファイルのレコードを先頭から順に読み込んで、全てのレコードについて次の処理を行う。
① 購買ファイルに同じ依頼IDをもつレコードがない場合
依頼ファイルから読み込んだレコードの依頼種別が“登録”であれば、そのレコードを対象レコード出力処理を使って更新用依頼ファイルに出力する。
② 購買ファイルに同じ依頼IDをもつレコードがある場合
購買ステータスが“購買受付”又は“見積り中”で、依頼ファイルから読み込んだレコードの依頼種別が“変更”又は“削除”であれば、そのレコードを対象レコード出力処理を使って更新用依頼ファイルに出力する。
③ ①と②の処理で更新用依頼ファイルに出力しなかったレコードを、対象外レコード出力処理を使って更新対象外依頼ファイルに出力する。
購買ファイル更新可否チェック処理の流れ図を、図2に示す。
設問1:
問題文を見る 図2中のに入れる適切な答えを、解答群の中から選べ。ここで、a1とa2に入れる答えは、aに関する解答群の中から組合せとして適切なものを選ぶものとする。
aに関する解答群


模範解答
a:ア
解説
解答の導き方
図2では、まず依頼ファイルのレコードの依頼IDを使って購買ファイルを検索します。依頼IDは購入依頼情報を識別する番号なので、同じ依頼IDのレコードがあるかどうかで、処理を分けています。
購買ファイルに同じ依頼IDのレコードがない場合
本文には、同じ依頼IDのレコードがないときは、依頼種別が「登録」であれば更新用依頼ファイルに出力するとあります。図2では、この場合に a1 の判定へ進みます。
したがって、a1 は「依頼種別 = “登録”」かを調べる判定です。判定がYesなら更新用依頼ファイルへ、Noなら更新対象外依頼ファイルへ出力します。
購買ファイルに同じ依頼IDのレコードがある場合
この場合は、まず購買ステータスが「購買受付」又は「見積り中」かを確認します。本文の条件では、このどちらでもなければ更新できないため、更新対象外依頼ファイルへ出力します。
ステータスが条件を満たす場合は、依頼種別が「変更」かを調べます。Yesなら更新用依頼ファイルへ出力します。Noの場合は、依頼種別が「削除」かどうかを a2 で確認します。
本文では、同じ依頼IDのレコードがあり、ステータスも条件を満たす場合、更新できるのは「変更」又は「削除」です。そのため、a2 は「依頼種別 = “削除”」かを調べる判定です。Yesなら更新用依頼ファイルへ、Noなら更新対象外依頼ファイルへ出力します。
この条件に当てはまる選択肢は、a1が「依頼種別 = “登録”」、a2が「依頼種別 = “削除”」となっている ア です。
誤りやすいポイント
- 購買ファイルに同じ依頼IDのレコードがない場合と、ある場合では、更新できる依頼種別が異なります。ない場合は「登録」、ある場合は「変更」又は「削除」です。
- 購買ファイルにレコードがあっても、購買ステータスが「購買受付」又は「見積り中」でなければ更新できません。依頼種別だけを見て判断しないようにしましょう。
- a2 は「変更」以外をそのまま更新可能にする判定ではありません。「変更」以外の中から、更新できる「削除」かどうかを確認します。
FAQ
Q: 購買ファイルに同じ依頼IDがない場合、「変更」や「削除」はなぜ更新できないのですか?
A: 変更や削除は、すでに登録されている購入依頼情報を対象にする処理だからです。対象となるレコードが購買ファイルにない場合は更新できません。
A: 変更や削除は、すでに登録されている購入依頼情報を対象にする処理だからです。対象となるレコードが購買ファイルにない場合は更新できません。
Q: 購買ステータスが「発注済」の場合、依頼種別が「変更」でも更新できますか?
A: できません。本文の条件で更新可能なのは、購買ステータスが「購買受付」又は「見積り中」の場合です。ステータスの判定で条件を満たさなければ、更新対象外になります。
A: できません。本文の条件で更新可能なのは、購買ステータスが「購買受付」又は「見積り中」の場合です。ステータスの判定で条件を満たさなければ、更新対象外になります。
Q: 主キーとは何ですか?
A: 表の中のレコードを一つに特定するための項目です。この問題では依頼IDが主キーなので、依頼IDを使って同じ購入依頼情報かどうかを調べます。
A: 表の中のレコードを一つに特定するための項目です。この問題では依頼IDが主キーなので、依頼IDを使って同じ購入依頼情報かどうかを調べます。
関連キーワード: 主キー、条件分岐、バッチ処理、ファイル処理
設問2:
問題文を見る 購買ファイル更新可否チェック処理のテストケースを設計する。テストケースに漏れがないように購買ファイル更新可否チェック処理で出力するファイルに着目して、決定表を作成した。出力するファイルの決定表を表3に示す。表3中のに入れる適切な答えを、解答群の中から選べ。

b, cに関する解答群


模範解答
b:ア、c:オ
解説
解答の導き方
表3は、条件の組合せごとに、どのファイルへ出力するかを整理した決定表です。依頼種別や購買ステータスの行にある「Y」は、その条件に当てはまることを表します。出力の行にある「X」は、そのファイルへ出力することを表します。
まず、依頼IDが同じレコードが購買ファイルにあるかどうかで、処理を分けます。
- 同じ依頼IDのレコードがない場合は、概要①にあるとおり、依頼種別が「登録」なら更新用依頼ファイルに出力します。それ以外は更新対象外依頼ファイルに出力します。
- 同じ依頼IDのレコードがある場合は、概要②にあるとおり、購買ステータスが「購買受付」又は「見積り中」で、依頼種別が「変更」又は「削除」なら更新用依頼ファイルに出力します。それ以外は更新対象外依頼ファイルに出力します。
この2つの出力先は、概要③により、更新用依頼ファイルに出力しなかったレコードが更新対象外依頼ファイルに出力される関係です。
bについて
表3でbがある列は、同じ依頼IDのレコードがあり、購買ステータスが「見積り中」の場合です。「見積り中」の3つの列は依頼種別が「登録」「変更」「削除」の順なので、bの列は「変更」に当たります。
この場合、「見積り中」は更新できるステータスで、依頼種別も「変更」です。したがって、依頼種別の行は上から「-、Y、-」、更新用依頼ファイルへの出力は「X」、更新対象外依頼ファイルへの出力は「-」です。この並びに当たる選択肢はアです。
cについて
cがある列は、同じ依頼IDのレコードがあり、購買ステータスが「納品済」の場合の「削除」に当たります。依頼種別の行は上から「-、-、Y」です。
ただし、概要②で更新できるステータスとして挙げられているのは「購買受付」又は「見積り中」だけです。「納品済」は対象外なので、更新用依頼ファイルには出力せず、更新対象外依頼ファイルに出力します。よって出力の行は「-、X」となり、この並びに当たる選択肢はオです。
誤りやすいポイント
- 依頼種別が「変更」又は「削除」でも、いつでも更新できるわけではありません。同じ依頼IDのレコードがあり、購買ステータスも「購買受付」又は「見積り中」である必要があります。
- 「納品済」の場合は、依頼種別が「削除」でも更新できません。依頼種別だけで判断しないようにしましょう。
- 同じ依頼IDのレコードがない場合は、購買ステータスを考えません。依頼種別が「登録」かどうかで判断します。
- 更新用依頼ファイルに出力しないレコードは、更新対象外依頼ファイルに出力されます。どちらにも出力しない、という扱いにはなりません。
FAQ
Q: 同じ依頼IDのレコードがない場合、なぜ「変更」や「削除」は更新できないのですか?
A: 「変更」や「削除」は、変更・削除する元の購入依頼情報が必要だからです。同じ依頼IDのレコードがなければ、その対象が見つかりません。
A: 「変更」や「削除」は、変更・削除する元の購入依頼情報が必要だからです。同じ依頼IDのレコードがなければ、その対象が見つかりません。
Q: 購買ステータスが「購買受付」なら、依頼種別が「登録」でも更新できますか?
A: 同じ依頼IDのレコードがある場合は、できません。既存レコードがあるときに更新できる依頼種別は「変更」又は「削除」です。
A: 同じ依頼IDのレコードがある場合は、できません。既存レコードがあるときに更新できる依頼種別は「変更」又は「削除」です。
Q: 更新対象外依頼ファイルへの出力は、どのように決めればよいですか?
A: まず更新用依頼ファイルへ出力する条件を確認します。その条件を満たさないレコードは、更新対象外依頼ファイルへ出力します。
A: まず更新用依頼ファイルへ出力する条件を確認します。その条件を満たさないレコードは、更新対象外依頼ファイルへ出力します。
関連キーワード: 決定表、条件分岐、テストケース設計、ファイル処理
設問3:
問題文を見る 次の記述中のに入れる適切な答えを、解答群の中から選べ。
購買ファイル更新可否チェック処理のテストのためにテスト用レコードを作成した。購買ファイルには表4に示すテスト用レコードを、依頼ファイルには表5に示すテスト用レコードを、事前に格納しておいた。


これらのテスト用レコードを用いて、購買ファイル更新可否チェック処理を実行した場合、図2の破線で囲んだ処理のうち、対象外レコード出力処理では依頼IDがdのレコードが処理され、対象レコード出力処理では依頼IDがeのレコードが処理される。
dに関する解答群
ア:10000003
イ:10000004
ウ:10000005
エ:10000006
オ:10000007
eに関する解答群
ア:10000003と10000005
イ:10000004と10000005
ウ:10000004と10000006
エ:10000005と10000008
模範解答
d:イ、e:ア
解説
解答の導き方
まず、依頼ファイルの各レコードを、購買ファイルに同じ依頼IDがあるかどうかで分けます。依頼IDは「購入依頼情報を識別するため」の一意な番号なので、依頼IDを照合すれば、同じ購入依頼情報についてのレコードかどうかを判断できます。
本文の処理概要では、購買ファイルに同じ依頼IDがない場合は、依頼種別が「登録」なら更新用依頼ファイルへ出力するとあります。同じ依頼IDがある場合は、購買ステータスが「購買受付」又は「見積り中」で、依頼種別が「変更」又は「削除」なら更新用依頼ファイルへ出力します。それ以外は、更新対象外依頼ファイルへ出力します。
表4と表5のレコードを、依頼IDごとに照合すると次のようになります。
設問が尋ねているのは、図2の破線で囲んだ処理で処理されるレコードです。この処理では、同じ依頼IDが購買ファイルにあり、購買ステータスが対象の範囲内の場合を確認します。その中で、依頼種別が「変更」又は「削除」の依頼IDは10000003と10000005です。一方、依頼種別が「登録」の10000004は対象外です。
なお、10000006や10000008も処理全体では対象外になりますが、破線で囲んだ処理とは別の分岐で対象外になります。10000007も、購買ファイルに同じ依頼IDがない場合の分岐で処理されます。
誤りやすいポイント
- 「購買ファイルに同じ依頼IDがある」だけで、更新用依頼ファイルに出力されると判断しないようにします。購買ステータスと依頼種別も確認が必要です。
- 10000004は、購買ステータスが「見積り中」でも、依頼種別が「登録」なので対象にはなりません。同じ依頼IDのレコードがすでに存在するためです。
- 10000006は依頼種別が「削除」ですが、購買ステータスが「発注済」です。更新できるステータスは「購買受付」又は「見積り中」なので、対象になりません。
- 設問は処理全体で対象外となるレコードではなく、破線で囲んだ処理で出力されるレコードを尋ねています。別の分岐で出力されるレコードを混ぜないことが大切です。
FAQ
Q: 依頼IDが購買ファイルにない場合は、どの依頼種別でも更新できますか?
A: いいえ。本文の条件では、同じ依頼IDがない場合に更新用依頼ファイルへ出力するのは、依頼種別が「登録」の場合です。
A: いいえ。本文の条件では、同じ依頼IDがない場合に更新用依頼ファイルへ出力するのは、依頼種別が「登録」の場合です。
Q: 10000004は、購買ステータスが「見積り中」なのに、なぜ更新対象外なのですか?
A: ステータスが対象の範囲内でも、依頼種別が「変更」又は「削除」でなければ更新対象になりません。10000004の依頼種別は「登録」です。
A: ステータスが対象の範囲内でも、依頼種別が「変更」又は「削除」でなければ更新対象になりません。10000004の依頼種別は「登録」です。
Q: 10000006は、依頼種別が「削除」なら更新できませんか?
A: 依頼種別だけでは決まりません。10000006の購買ステータスは「発注済」なので、更新対象となるステータスの条件を満たしません。
A: 依頼種別だけでは決まりません。10000006の購買ステータスは「発注済」なので、更新対象となるステータスの条件を満たしません。
関連キーワード: 主キー、ファイル照合、条件分岐、バッチ処理、テストデータ




