「Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート」に触発されて

ryoasai さんの「Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート」に触発されたので、
Java の勉強がてら、同様なプログラムを作成してみる。

Step 3

人材検索処理を実装する。
コードの重複など、一切気にせず、「ひどい」コードを書いてみる。

Main.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class Main {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

            while(true) {
                System.out.println("_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/");
                System.out.println("            人材管理システム");
                System.out.println("                メニュー");
                System.out.println("  [1].人材検索(S)");
                System.out.println("  [2].人材管理(JI:追加 JU:更新 JD:削除)");
                System.out.println("  [3].稼働状況管理(KI:追加 KD:削除)");
                System.out.println("  [4].終了(E)");
                System.out.println("_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/");
                System.out.println("どの機能を実行しますか?");
                System.out.print(" [S, JI, JU, JD, KI, KD, E]>");

                String s = reader.readLine();
                if (s == null) break;
                if (s.equals("E")) break;

                if (s.equals("S"))
                    jinzaiKensaku(reader); // 人材検索処理
                else if (s.equals("JI"))
                    System.out.println("人材追加処理...\n");
                else if (s.equals("JU"))
                    System.out.println("人材更新処理...\n");
                else if (s.equals("JD"))
                    System.out.println("人材削除処理...\n");
                else if (s.equals("KI"))
                    System.out.println("稼働状況追加処理...\n");
                else if (s.equals("KD"))
                    System.out.println("稼働状況削除処理...\n");
                else 
                    System.out.println("");
            }

            reader.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
    // 人材検索処理
    private static void jinzaiKensaku(BufferedReader reader) {
        try {
            while(true) {
                System.out.println("\n検索方法を指定してください。");
                System.out.println("N->氏名から検索");
                System.out.println("T->業種から検索");
                System.out.println("E->人材検索終了(メニューに戻る)");
                System.out.print(" [N, T, E]>");

                String s = reader.readLine();
                if (s == null) break;
                if (s.equals("E")) break;

                if (s.equals("N"))
                    jinzaiKensakuSimei(reader);  // 氏名で検索
                else if (s.equals("T"))
                    jinzaiKensakuGyoshu(reader); // 業種で検索
            }
            System.out.println("");

        } catch (Exception e) {
            System.out.println(e);
        }
    }
    // 人材検索処理 (氏名)
    private static void jinzaiKensakuSimei(BufferedReader reader) {
        try {
            // 業種一覧を作成
            java.util.Map<String, String> gyoshuMap = new java.util.LinkedHashMap<String, String>();

            java.io.FileReader fr = new java.io.FileReader("gyoshu.txt");
            java.io.BufferedReader br = new java.io.BufferedReader(fr);

            String gyoshuStr;
            while ((gyoshuStr = br.readLine()) != null) {
                String[] gyoshuAry = gyoshuStr.split( "\t");
                gyoshuMap.put(gyoshuAry[0], gyoshuAry[1]);
            }
            br.close();

            // 人材検索
            while(true) {
                System.out.print("\n氏名に含まれる文字列を指定してください。\n>");

                String searchStr = reader.readLine();
                if (searchStr == null) break;

                fr = new java.io.FileReader("jinzai.txt");
                br = new java.io.BufferedReader(fr);

                String jinzaiStr;
                while ((jinzaiStr = br.readLine()) != null) {
                    if (!jinzaiStr.endsWith("\t")) continue; // 削除レコード

                    String[] jinzaiAry = jinzaiStr.split( "\t");
                    if (jinzaiAry[1].indexOf(searchStr) >= 0 ) {
                        System.out.print(jinzaiAry[0]); // 人材ID
                        System.out.print("\t");
                        System.out.print(jinzaiAry[1]); // 人材名
                        System.out.print("\t");
                        System.out.println(gyoshuMap.get(jinzaiAry[9]));    // 業種ID
                    }
                }
                br.close();
            }
            System.out.println("");

        } catch (Exception e) {
            System.out.println(e);
        }
    }
    // 人材検索処理 (業種)
    private static void jinzaiKensakuGyoshu(BufferedReader reader) {
        try {
            // 業種一覧を作成
            java.util.Map<String, String> gyoshuMap = new java.util.LinkedHashMap<String, String>();

            java.io.FileReader fr = new java.io.FileReader("gyoshu.txt");
            java.io.BufferedReader br = new java.io.BufferedReader(fr);

            String gyoshuStr;
            while ((gyoshuStr = br.readLine()) != null) {
                String[] gyoshuAry = gyoshuStr.split( "\t");
                gyoshuMap.put(gyoshuAry[0], gyoshuAry[1]);
            }
            br.close();

            // 人材検索
            while(true) {
                System.out.println("\n業種を選択してください。");

                // 業種一覧を表示
                System.out.print(" [");
                java.util.Set gyoshuKeySet = gyoshuMap.keySet();
                java.util.Iterator i = gyoshuKeySet.iterator();
                while (i.hasNext()) {
                    System.out.print(i.next());
                    System.out.print(", ");
                }
                System.out.print("\b\b]>");

                String searchStr = reader.readLine();
                if (searchStr == null) break;

                fr = new java.io.FileReader("jinzai.txt");
                br = new java.io.BufferedReader(fr);

                String jinzaiStr;
                while ((jinzaiStr = br.readLine()) != null) {
                    if (!jinzaiStr.endsWith("\t")) continue; // 削除レコード

                    String[] jinzaiAry = jinzaiStr.split( "\t");
                    if (jinzaiAry[9].equals(searchStr)) {
                        System.out.print(jinzaiAry[0]); // 人材ID
                        System.out.print("\t");
                        System.out.print(jinzaiAry[1]); // 人材名
                        System.out.print("\t");
                        System.out.println(gyoshuMap.get(jinzaiAry[9]));    // 業種ID
                    }
                }
                br.close();
            }
            System.out.println("");

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
実行結果
S:\>java Main
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
            人材管理システム
                メニュー
  [1].人材検索(S)
  [2].人材管理(JI:追加 JU:更新 JD:削除)
  [3].稼働状況管理(KI:追加 KD:削除)
  [4].終了(E)
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
どの機能を実行しますか?
 [S, JI, JU, JD, KI, KD, E]>S

検索方法を指定してください。
N->氏名から検索
T->業種から検索
E->人材検索終了(メニューに戻る)
 [N, T, E]>N

氏名に含まれる文字列を指定してください。
>山
7       山田 太郎      経理
16      山崎 昇        プログラマ
17      山口 美香      経理
24      山田 太郎      経理

氏名に含まれる文字列を指定してください。
>^Z


検索方法を指定してください。
N->氏名から検索
T->業種から検索
E->人材検索終了(メニューに戻る)
 [N, T, E]>T

業種を選択してください。
 [1, 2, 3, 4, 5]>1
7       山田 太郎      経理
12      越後 太一      経理
17      山口 美香      経理
24      山田 太郎      経理

業種を選択してください。
 [1, 2, 3, 4, 5]>4
9       千葉 健太郎    プログラマ
11      京沢 雄二      プログラマ
13      長谷川 健太    プログラマ
14      田口 里奈      プログラマ
15      福本 詩織      プログラマ
16      山崎 昇        プログラマ

業種を選択してください。
 [1, 2, 3, 4, 5]>^Z


検索方法を指定してください。
N->氏名から検索
T->業種から検索
E->人材検索終了(メニューに戻る)
 [N, T, E]>E

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
            人材管理システム
                メニュー
  [1].人材検索(S)
  [2].人材管理(JI:追加 JU:更新 JD:削除)
  [3].稼働状況管理(KI:追加 KD:削除)
  [4].終了(E)
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
どの機能を実行しますか?
 [S, JI, JU, JD, KI, KD, E]>E