課題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 |
+-----+-------------------------+------------------------------+-----+