植物 植物
直前対策講座:販売日報作成

AOBA's Information Processing Education



1998/08/15

注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してください)。

注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。


「平成6年秋期 第2種 午後 問5」

問5 販売日報作成の流れ図に関する次の説明を読んで、設問に答えよ。

 一日分の販売データファイル(様式1)を、マスタファイル(M1,M2)と照合し、マスタファイルから必要な項目を付加して、販売日報(様式2)を作成する処理がある(処理の流れ図は図を参照)。
図 様式1
様式2

[前提条件]

  1.  各ファイルは順編成ファイルである。
  2.  販売データファイルは得意先コードをキーとして整列されており、1レコードには商品販売に関する情報がn(n≧1)件記録されている。
  3.  販売日報は、商品別に販売金額の多い得意先順に表示する。販売金額が同じときは得意先コード順で表示する。
  4.  一つの得意先に対しては、同一商品のデータは一つしかないものとする。

[処理ステップの説明]

  1.  ステップ1では、販売データファイルをM1ファイルと照合し、必要な項目を付加するとともに、販売データファイルの1レコードをnレコードに分割したF1ファイルを作成する。
  2.  ステップ2では、F1ファイルを整列し、F2ファイルを作成する。
  3.  ステップ3では、F2ファイルをM2ファイルと照合し、必要な項目を付加し、F3ファイルを作成する。
  4.  ステップ4では、商品別に販売金額の多い得意先順に表示した販売日報を作成する。販売日報の単価欄は、”販売金額/販売数量”を表示する。

設問 次の説明文の(  )に入れる正しい答えを、解答群の中から選べ。

  1.  M1ファイルに最小限必要な項目は( a ),M2ファイルに最小限必要な項目は( b )である。
  2.  ステップ2の整列キーは( c )である。
  3.  一つの得意先に同一商品のデータが複数あることを前提としたときには、ステップ1の次に( d )を整列キーとした整列処理と、販売数量・販売金額を合計する処理を追加する必要がある。

a,bに関する解答群
 ア 商品コード,商品名称
 イ 商品コード,商品名称,販売金額
 ウ 商品コード,商品名称,販売単価
 エ 得意先コード,得意先名称
 オ 得意先コード,得意先名称,販売金額

c,dに関する解答群
 ア 商品コード
 イ 商品コード,販売金額(降順)
 ウ 商品コード,販売金額(降順),得意先コード
 エ 商品コード,販売金額(昇順)
 オ 得意先コード
 カ 得意先コード,商品コード


解説

 パソコンでガンガンプログラムを組んでいる人でも、内部設計に関する問題(というよりも、事務処理系流れ図の問題)は難しいでしょう。内部設計の問題は、処理で使用されるファイルの編成が順編成であるケースが多く、これがすべての設問のキーとなるポイントですから。パソコンのファイルには「編成」の概念がありませんからね(すべてテキストレコード)。もしくは、データベースのアクセスに慣れ過ぎてしまっているのでしょうか。

aとbについて
 まずは、最終的に出力する販売日報の中の情報要素をすべて挙げます。

  1. 商品名称
  2. 販売日(販売データに項目あり)
  3. 順位(プログラムの中でふる)
  4. 得意先名称
  5. 数量(販売データに項目あり)
  6. 単価(プログラムの中で計算可能...[処理ステップの説明]の4項参照)
  7. 金額(販売データに項目あり)
 この中で商品名称と得意先名称は、元の販売データにもありませんし、プログラムの中で計算して得られる項目でもありません。だからこの2つの項目は、M1またはM2ファイルのいずれかに存在するはずです。
 つまり、ステップ1とステップ3で、商品名称と得意先名称のいずれかを、流れ図の処理の中に取り込んでいます。
 この手の問題が得意な人以外は、これらの項目はどっちのファイルにあってもよさそうな気がしますが、実はどっちでもよくありません。
 ここでは、[前提条件]の1項「各ファイルは順編成ファイルである」という一文と、2項「販売データファイルは得意先コードをキーとして整列されており、....」という一文が重要なポイントとなります。

 (一般に)順編成ファイルは、ある任意の1レコードを読み込む機会は(1ステップで)1回しかありません。データベースのアクセスのように、同じキーを指定して、同じレコードを何度も読むことはできないのです。
 販売データファイルは得意先コードをキーとして整列されています。だから、ステップ1で得意先名称を取得するは簡単ですが(一般的なマッチング処理を行えばよい)、商品名称を取得するのは大変です。なぜなら、1件の販売データの中には商品コードがバラバラに存在しており、仮に商品名称を取得するとすれば、M1ファイルを何度も繰り返し読み込む必要があるからです。

 ということで、ステップ1は得意先名称を処理の中に取り込んでいる、と考えるのが妥当です。得意先名称を取得するには得意先コードも必要ですので、M1ファイルに最低限必要な項目は、得意先コードと得意先名称となります。

 するとステップ3で商品名称を処理の中に取り込んでいるはずですので、同じように考えて、M2ファイルに最低限必要な項目は、商品コードと商品名称です。

cについて
 これは簡単ですね。
 [前提条件]2項に「販売日報は、商品別に販売金額の多い得意先順に表示する。販売金額が同じときは得意先コード順で表示する」とありますので、この順序で整列キーを設定すればOKです。
 したがって整列キーは、商品コード,販売金額(降順),得意先コードです。

dについて
 設問の前提条件のとき、ステップ1の後に追加すべき処理は、整列処理と集計処理です(設問(3)を読む)。集計処理では、得意先コードと商品コードがともに同じレコードの販売数量と販売金額を合計して、それをF1ファイルに出力します。
 つまりこの集計処理における集計キーは、得意先コードと商品コードです。このキーで集計を行うためには、それ以前の整列処理で、同じく得意先コードと商品コード順で整列されている必要があります(集計キーと整列キーは同じかまたは、整列キーの方が後に続くキーが多くなければならない)。
 したがって、整列処理における整列キーは、得意先コードと商品コードです。

 今週は以上です。
 ではまた来週。


解答

a−エ   b−ア   c−ウ   d−カ