基本情報技術者 2009年 春期 午後 問05
銀行口座の管理に関する次の記述を読んで、設問に答えよ。
ある銀行の個人顧客口座の口座管理手数料、現金自動預払機(以下、ATMという)での預払い及びATM使用手数料に関する口座情報を更新するプログラムである。
口座は、口座番号で識別される。口座には、所定の口座管理手数料が毎月掛かり、その月の月末処理で残高から引き落とされる。この口座管理手数料は、その口座の前月末日時点の残高が10万円以上であれば、当月分は掛からない。
口座に対してのATMからの預入れ及び引出しの操作には、1回当たり所定のATM使用手数料が掛かり、操作時に、その口座の残高から自動的に引き落とされる。このATM使用手数料も、その口座の前月末日時点の残高が10万円以上であれば、当月分は掛からない。
なお、同一口座に対しては、預入れ及び引出しの操作が完了するまで、ほかの操作は行えないものとする。
データベースには、所定の口座管理手数料及び所定のATM使用手数料と、口座ごとの残高及び手数料マークが格納されている。
手数料マークは、前月末日時点の残高が10万円未満であった場合に“真”、そうでない場合に“偽”となる。
プログラムを構成する各モジュール間の関連を図に示す。
〔預払トランザクション構成モジュールの説明〕
このモジュールには、次の各処理が用意されており、口座ごとに、預払い1件を単位として一つのトランザクションを構成する。
処理A:ATMでの預払操作に対応して、データベースを更新する命令を作成し、データベース更新モジュールに送る。
処理B:残高不足となる場合は、利用者にメッセージで伝え、預払処理を行わない。
処理C:データベースを更新する命令1件に対して、所定のATM使用手数料を口座から引き落とす命令を作成し、データベース更新モジュールに送る。
〔データベース更新モジュールの説明〕
到着した順番にトランザクションを処理し、データベース上の対応する口座の情報を更新する。
〔月末処理モジュールの説明〕
このモジュールには、次の各処理が用意されており、月末処理のため、口座ごとに一つのトランザクションを構成し、必要な処理を行う。月末処理は、月末日のATMからの操作受付終了後に行う。
処理D:翌月のために手数料マークを設定する命令を作成し、データベース更新モジュールに送る。
処理E:所定の口座管理手数料を残高から引き落とした新たな残高を計算する。新たな残高を書き戻す命令を作成して、データベース更新モジュールに送る。計算結果の残高が負の値になることもある。設問1:
問題文を見る 次の各モジュールに関する記述中のに入れる正しい答えを、解答群の中から選べ。
預払トランザクション構成モジュールでは、それぞれの実行条件に従って処理A〜C及びデータベースへのアクセスが実行される。
その順番は、次のとおりである。
a → b → c → 処理C
月末処理モジュールの処理Dでの手数料マークの設定に最低限必要なデータは、dである。また、処理Eは実行される場合とされない場合がある。処理Eの実行判定に必要なデータと、処理Eの実行に最低限必要なデータは、eである。
ここで、月末処理モジュールの処理D、処理Eの両方が実行される場合、その順番は、fである。
a〜cに関する解答群
ア:処理A
イ:処理B
ウ:データベースの検索
エ:データベースの項目内容変更
オ:データベースのレコード削除
d, eに関する解答群
ア:所定の口座管理手数料
イ:所定の口座管理手数料、その口座の残高
ウ:所定の口座管理手数料、その口座の残高、その口座の手数料マークの値
エ:その口座の残高
オ:その口座の手数料マークの値
fに関する解答群
ア:処理Dの次に処理E
イ:処理Eの次に処理D
ウ:任意
模範解答
a:ウ、b:イ、c:ア、d:エ、e:ウ、f:イ
解説
解答の導き方
この設問では、ATMでの預払いに必要な処理の順番と、月末処理に必要なデータ・処理順を考えます。
ATMでの預払いの順番
トランザクションとは、関連する処理をひとまとまりとして扱う単位です。この問題では、口座ごとに預払い1件を単位としてトランザクションを構成します。
まず、預払いを行えるか判断するために、データベース(情報を蓄えて管理する仕組み)から口座情報を検索します。引出しの場合は残高を確認する必要があります。また、ATM(Automated Teller Machine:現金自動預払機)の使用手数料が掛かるかどうかは、手数料マークで判断します。そのため、最初に行うのは「データベースの検索」で、aにはウが入ります。
次に、本文には「残高不足となる場合は、預払処理を行わない」とあります。残高を確認した後、預払いを実行してよいか判断する必要があるため、bは処理B(イ)です。
預払いを実行できる場合は、処理Aでデータベースを更新する命令を作成します。したがって、cは処理A(ア)です。さらに、処理Cは「データベースを更新する命令1件に対して」ATM使用手数料を引き落とす命令を作る処理です。預払いの更新命令が作られた後に処理Cを行います。
よって、順番は「データベースの検索 → 処理B → 処理A → 処理C」です。
処理Dに必要なデータ
処理Dは、翌月に使う手数料マークを設定します。マークは、前月末日時点の残高が10万円未満なら“真”、10万円以上なら“偽”です。
つまり、マークを設定するには残高を確認すれば足ります。口座管理手数料の金額や現在の手数料マークは必要ありません。したがって、dは「その口座の残高」であるエです。
処理Eに必要なデータ
処理Eでは、まず手数料マークを確認して、口座管理手数料を引き落とすかどうかを判断します。マークが“真”なら、残高が前月末日時点で10万円未満だったことを示すため、当月分の口座管理手数料が掛かります。
実際に新たな残高を計算するには、現在の残高から所定の口座管理手数料を差し引きます。そのため、必要なデータは次の3つです。
- 実行するかどうかの判断に使う手数料マーク
- 引き落とす金額を決める所定の口座管理手数料
- 差引き計算に使う残高
したがって、eはウです。
処理Dと処理Eの順番
処理Eは、現在の手数料マークを使って当月分の口座管理手数料を引き落とすかどうか判断します。一方、処理Dは、そのマークを翌月用に設定し直します。処理Dを先に行うと、処理Eが当月分の判断に使うマークが上書きされてしまいます。
また、処理Eは残高を変更します。処理Dでは、その残高を基に翌月用のマークを決めます。したがって、処理Eで残高を更新してから処理Dを行う必要があります。順番は処理Eの次に処理Dで、fはイです。
誤りやすいポイント
- 処理Aを先に行うと考えないようにします。残高不足なら預払処理を行わないため、先に検索し、処理Bで実行可否を判断します。
- 処理Dに必要なのは残高だけです。マークを設定する条件は、残高が10万円未満かどうかだからです。
- 処理Eでは、実行するかの判断に手数料マークが必要です。手数料額と残高だけでは、引き落とすべきか判断できません。
- 処理Eの計算結果が負になる場合もあると本文にあります。残高が負になる可能性を理由に、処理Eを省略するわけではありません。
FAQ
Q: ATMでの預払いは、なぜ最初にデータベースを検索するのですか?
A: 引出しが残高不足にならないか、またATM使用手数料が掛かるかを判断するためです。口座情報を確認してから、預払処理に進みます。
A: 引出しが残高不足にならないか、またATM使用手数料が掛かるかを判断するためです。口座情報を確認してから、預払処理に進みます。
Q: 処理Dと処理Eを逆の順番にできないのはなぜですか?
A: 処理Eは当月分の判定に現在の手数料マークを使います。処理Dが先にマークを書き換えると、当月分の判断を正しく行えません。また、処理Dは処理Eによる残高変更の後で、翌月用のマークを設定する必要があります。
A: 処理Eは当月分の判定に現在の手数料マークを使います。処理Dが先にマークを書き換えると、当月分の判断を正しく行えません。また、処理Dは処理Eによる残高変更の後で、翌月用のマークを設定する必要があります。
Q: 手数料マークが“偽”の場合、処理Eでは何をしますか?
A: 前月末日時点の残高が10万円以上だったことを示すため、当月分の口座管理手数料は掛かりません。そのため、処理Eによる引落しは行いません。
A: 前月末日時点の残高が10万円以上だったことを示すため、当月分の口座管理手数料は掛かりません。そのため、処理Eによる引落しは行いません。
関連キーワード: トランザクション、データベース検索、データベース更新、排他制御、データ整合性



