外部インタフェース/API    

関数phonebookの説明

phonebookが行う主な作業は、以下の通りです。

1. データ辞書とファイル名の決定

最初のステートメントは、電話帳ファイル名'myphonebook'を変数pbnameに割り当てます。phonebookプログラムがPC上で実行中の場合は、 java.lang.System staticメソッドgetPropertyを呼び出して、データ辞書用に利用するディレクトリを探します。これは、ユーザのカレント作業ディレクトリに設定されます。そうでない場合は、ユーザがあらかじめ任意に定義可能なシステム変数HOME を使って、ディレクトリを決定するためにMATLAB関数getenvを使います。その後、pbnameをデータ辞書とファイル名'myphonebook'で構成されるパス名に割り当てます。

2. 必要ならばファイル出力ストリームを作成

電話帳ファイルが存在しない場合は、phonebookは、ユーザに新規ファイルを作成するかどうかを聞きます。ユーザがyと答えると、phonebookFileOutputStreamオブジェクトを作成することにより新規の電話帳を作成します。try-catchブロックのtryクローズにおいて、FileOutputStreamコンストラクタに渡される引数pbnameは、コンストラクタが作成し、オープンするファイル名です。つぎのステートメントは、FileOutputStreamブジェクトFOSについてcloseを呼び出すことによってファイルをクローズします。出力ストリームコンストラクタが失敗すると、catchステートメントは、メッセージを表示してプログラムを終了します。

3. ハッシュテーブルの作成

例題は、データ辞書用のハッシュテーブルとしてjava.util.Propertiesオブジェクトを作成します。.

4. ファイルの入力ストリームの作成

tryブロックにおいて、例題はオブジェクトをFISに割り当てて、電話帳ファイル名を使ってFileInputStreamコンストラクタを呼び出します。呼び出しが失敗した場合は、catchステートメントは、errorメッセージを表示してプログラムを終了します。

5. 電話帳のキーと値をロードし、ファイルの入力ストリームをクローズ

例題は、FileInputStreamオブジェクトFISついてloadを呼び出し、電話帳のキーと(存在すれば)その値をハッシュテーブルにロードします。その後ファイルの入力ストリームをクローズします。

6. アクションメニューを表示し、ユーザ選択を取得

whileループ内で、dispステートメントは、電話帳についてユーザが実行可能なアクションのメニューを表示します。その後、inputステートメントは、ユーザ選択の入力を要求します。

7. 関数を呼び出し電話帳のアクションを実行

whileループ内で、switchステートメントは、ユーザの選択に対応するcaseを与えます。最初の5つのcaseは、関数を呼び出して電話帳のアクションを実行します。

Case 1は、エントリのキーである名前の入力を指示します。isemptyを呼び出してユーザが名前を入力したかどうかを決定します。名前が入力されていない場合は、dispを呼び出してエラーメッセージを表示します。名前が入力された場合は、その名前をpb_lookupに渡しますpb_lookupは、エントリをルックアップし、見つかった場合は、エントリの内容を表示します。

Case 2は、pb_addを呼び出して、新規エントリの入力をユーザに指示し、それを電話帳に追加します。

Case 3は、inputを使って削除するエントリ名の入力を指示します。名前が入力されない場合は、dispを呼び出してエラーメッセージを表示します。名前が入力された場合は、その名前をpb_removeに渡します。

Case 4は、inputを使って変更するエントリ名の入力を指示します。名前が入力されない場合は、dispを呼び出してエラーメッセージを表示します。名前が入力された場合は、その名前をpb_changeに渡します。

Case 5は、pb_listallを呼び出して、全てのエントリを表示します。

8. 出力ストリームを作成し、電話帳を保存して終了

ユーザがcase6を選択してプログラムを終了する場合は、tryステートメントはFileOuputStreamオブジェクトに対するコンストラクタを呼び出し、電話帳名を渡します。コンストラクタが失敗した場合は、catchステートメントはエラーメッセージを表示します。

オブジェクトが作成された場合は、つぎのステートメントはFileOutputStreamオブジェクト FOSとヘッダ記述文字列を渡して、Propertiesオブジェクトpb_htableについてsaveを呼び出すことにより、電話帳データを保存します。その後、FileOutputStreamオブジェクトについてcloseを呼び出してリターンします。


 例題 - Phone Bookの作成と利用 関数pb_lookupの説明