2014年 春期 応用情報技術者試験 問6
旅客船Web予約システムの構築
R 社は,これまで東京湾内で旅客船を運航してきた。旅客船の性能向上に伴い,東京湾と四国地方や九州地方の港を直接結ぶ中長距離航路に参入することになった。これまで乗船券の販売は R 社の窓口と旅行代理店で扱っていたが,これを機に,乗船する顧客自身もインターネットから空席照会や予約ができるシステム(以下,本システムという)を構築する。システム運用開始後は旅行代理店も本システムを利用する。
本システムの機能要件を表1に,E-R図を図1に示す。
なお,本システムでは,E-R図のエンティティ名を表名に,属性名を列名にして,適切なデータ型で表定義した関係データベースによって,データを管理する。
機能名 | 機能概要 |
---|---|
顧客管理 | 乗船券の予約を行う代表者の情報を管理する。 |
Webユーザ管理 | 顧客が本システムにログインする際に使用するユーザIDとパスワードを管理する。ユーザIDはシステム内で一意である。 |
船便管理 | 船便の出発地や到着地,航行距離に応じた運賃などを管理する。 |
座席管理 | 船便ごとの座席とその座席状況を管理する。座席にはファーストクラスやエコノミークラスなどの分類があり,その運賃はクラスに応じて設定された運賃係数を基本運賃に乗じた額になる。 |
空席照会 | 出発地や到着地,出発日を指定して,その条件に合った船便とその座席の空席状況を照会する。 |
予約受付 | 顧客からの乗船券の予約を受け付ける。顧客は,複数人の乗船券を一度に,座席を指定して予約できる。その際,各座席に座る乗船者の氏名を登録する。 |
操作ログ記録 | 顧客の操作を,問合せ照会や行動分析のために記録する。本システムの各機能にあらかじめ番号を割り当てており,操作が行われた機能の番号を記録する。その際,処理を開始してから成功又は失敗するまでに実行されたSQL文とその結果も記録する。 |
主キーの実線が付いている属性名には,外部キーの破線を付けない。
【Webユーザ管理機能の実装】
Webユーザのパスワード漏えいを防ぐために,パスワードそのものは本システムには保存せず,そのハッシュ値を保存して利用する。システムへのログインの際,ユーザが入力したパスワードのハッシュ値と,保存されているハッシュ値が等しければ正しいパスワードが入力されたと判断する。
なお,ハッシュ値の計算には関数HASHを利用する。例えば,文字列'いろは'のハッシュ値を求める場合,HASH('いろは')と記述する。
あるWebユーザがシステムにログイン可能かどうかを判定するために,正しいパスワードが入力された場合は1を,誤りの場合は0を返すSQL文を図2に示す。ここで,":ユーザID"は入力されたユーザIDを,":パスワード"は入力されたパスワードをそれぞれ格納した埋込み変数である。
SELECT COUNT(*) AS 判定結果 FROM Webユーザ WHERE c AND d
【空席照会機能の実装】
空席照会機能において,指定した条件に合った船便とその座席のクラスごとの空席数を照会するSQL文を図3に示す。ここで,":出発日",":出発地",":到着地"は空席照会の条件を格納した埋込み変数である。また,座席表の列"空席状況"の値が'0'のとき,その座席を空きとする。
SELECT A.船便番号, A.船便名, C.座席クラス番号, C.座席クラス名, e AS 空席数 FROM 船便 A INNER JOIN 座席 B ON A.船便番号 = B.船便番号 INNER JOIN f C ON g WHERE A.出発日 = :出発日 AND A.出発地 = :出発地 AND A.到着地 = :到着地 AND B.空席状況 = '0' GROUP BY h
【操作ログ記録機能の不具合】
運用テストフェーズにおいて,予約受付処理が失敗するシナリオで不具合が発見された。予約受付処理が成功した場合は,処理の開始から完了までに実行されたSQL文とその結果が操作ログ表に記録された。予約受付処理が失敗した場合は,処理の開始から失敗までに実行されたSQL文とその結果が記録されるべきだが,操作ログ表には何も記録されなかった。予約受付処理の流れを図4に示す。