課題1:社員リスト

課題のダウンロード

業務ではテキスト情報の取得・加工がつきものです。
まずはこの課題を通してJavaプログラミングとオブジェクト指向になれましょう。

社員情報ファイル(mosa.csv)を読み込み、下記の通り表示させてください。

+-----+-------------------------+------------------------------+
| ID  | NAME                    | POST                         |
+-----+-------------------------+------------------------------+
|00001|SHIN'ICHIRO SHIMADA      |CEO                           |
|00002|TATSUYA DOHCHI           |KIKIZAKE-SHI                  |
|00003|TOMO YOSHIDA             |DAY CAMPER                    |
|00014|TAKANORI ASANO           |CLIMBER                       |
|00105|SEIGI JUSTICE MATSUMOTO  |AFRICAN JAPANESE SPIRIT       |
+-----+-------------------------+------------------------------+

ファイルからの入力仕様

  • テキストファイルからの読み込み
  • テキストファイルの文字コードはUTF-8、半角英数字のみ
  • カンマによってID,NAME,POSTが分割されている
  • ファイルは起動時の引数から受け取れること

画面への出力仕様

  • 標準出力に標示する
  • 最終形は例にある通り画面に表示されること
  • ヘッダ(ID,NAME,POST)を表示(プログラム内に記述)
  • 取得したIDは5桁で左側をゼロ埋め(ゼロパディング)
  • 取得したNAMEは25桁で右側にスペース埋め
  • 取得したPOSTは30桁で右側にスペース埋め

起動の仕様

  • Javaコマンドで起動し、引数にファイルを渡す(決してプログラムの中に書かない!)
java DisplayMosaInfo mosa1.csv

STEP1(まずは実装)

  • まずは自由に実装してみる
  • mosa1.csv、mosa2.csvの両方に対応する

STEP2(社員情報のカプセル化)

ここからオブジェクト指向の考え方に基づいて、いろいろと機能を分割していきます。
社員のもつid, name, postの属性をEmployeeクラスにまとめてください。

  • ID,NAME,POSTをもつEmployeeクラスを作成し、各項目をカプセル化する

STEP3(データ変換ユーティリティ)

CSVの1行からEmployeeオブジェクトに変換するユーティリティを作成します。

  • CSVUtilsクラスを作成する
  • CSVの1行を引数に取り、その内容からEmployeeクラスを返すユーティリティメソッドを作成する
    • CSVの1行を受け取る
    • 1行のデータを分解してEmployeeのインスタンスを作成する
    • Employeeオブジェクトを返す
  • ユーティリティクラスはそれ自体は状態を持たなくて良い
  • なのでstaticメソッドで提供する

コンストラクタを外部から呼び出せないようにする

単純にメソッドだけをstaticにした場合、コンストラクタ呼び出しnew CSVUtils()は他のクラスからも使える状態になっていると思います。
これを禁止するにはどうしたら良いですか?

STEP4(仕様追加)

社員に性別プロパティを持たせてください。

  • 列挙型でSexを定義
  • MALE, FAMALE, OTHERの3値を定義(それ以外があっても良い)
  • Employeeに性別のフィールドを追加してsetterとgetterを用意する
  • CSVUtilsのメソッドを修正する
  • 旧来の性別を含まないcsvも読み込めるようにする

列挙型

  • 列挙型にMALEやFEMALEの文字列を渡してSex型を取得する
  • MALE, FEMALE以外はOTHERとする
  • 出力したときにMALE,FEMALEではなくM, Fと表示されるようにしてみる
  • OTHERの場合は?と標示する
  • Sex.valueOf(文字列)だと想定外の引数だと例外が出るので独自メソッドを用意する

入力CSV例

実際に社員情報を表示させてみましょう。下記の例では3人めの社員の性別が想定外なので?で表示されるはずです。

1,SHIN'ICHIRO SHIMADA,CEO,MALE
2,TATSUYA DOHCHI,KIKIZAKE-SHI,MALE
3,TOMO YOSHIDA,DAY CAMPER,OTOKO
14,TAKANORI ASANO,CLIMBER,MALE
105,SEIGI JUSTICE MATSUMOTO,AFRICAN JAPANESE SPIRIT,MALE
1701,KAORI SUGAWARA,,FEMALE
1702,YUHKI OHKUBO,,MALE
1703,KEN OKAMOTO,,MALE

表示例

+-----+-------------------------+------------------------------+-----+
| ID  | NAME                    | POST                         | SEX |
+-----+-------------------------+------------------------------+-----+
|00001|SHIN'ICHIRO SHIMADA      |CEO                           |M    |
|00002|TATSUYA DOHCHI           |KIKIZAKE-SHI                  |M    |
|00003|TOMO YOSHIDA             |DAY CAMPER                    |?    |
|00014|TAKANORI ASANO           |CLIMBER                       |M    |
|00105|SEIGI JUSTICE MATSUMOTO  |AFRICAN JAPANESE SPIRIT       |M    |
|01701|KAORI SUGAWARA           |                              |F    |
|01702|YUHKI OHKUBO             |                              |M    |
|01703|KEN OKAMOTO              |                              |M    |
+-----+-------------------------+------------------------------+-----+