6 Commits

Author SHA1 Message Date
s-sakiyama
c7b7a48681 検索、登録、更新、削除の機能を追加
メインシステムをMain.javaに移行
2026-09-24 15:49:32 +09:00
s-sakiyama
b254050ce8 ファイルからの読み取り、ArrayList、StreamAPIの使用練習 2026-09-17 16:20:52 +09:00
s-sakiyama
1bbc548980 DepartmentDataにコンストラクタの追加 2026-09-17 16:19:13 +09:00
s-sakiyama
ed98c7c338 9段階目(部署名から社員を検索する集計プログラムを作ろう) 2026-09-16 16:48:57 +09:00
s-sakiyama
0ac701ce98 8段階目(キャストでサブクラス限定の機能を使おう) 2026-09-16 16:17:23 +09:00
s-sakiyama
08b99dc55b 7段階目(instanceofで型を確認しよう) 2026-09-16 16:07:10 +09:00
5 changed files with 463 additions and 130 deletions

6
em-oop/departments.csv Normal file
View File

@@ -0,0 +1,6 @@
10,役員
11,人事・総務部
12,経理部
13,システム開発事業部
14,教育事業部
15,営業企画部
1 10 役員
2 11 人事・総務部
3 12 経理部
4 13 システム開発事業部
5 14 教育事業部
6 15 営業企画部

5
em-oop/employees.csv Normal file
View File

@@ -0,0 +1,5 @@
10000,山田龍也,ヤマダタツヤ,yamada@hoge.jp,aaa,10
10001,高橋準,タカハシジュン,jtaka@hoge.jp,bbb,10
10002,麻枝史明,マエダフミアキ,fmak@hoge.jp,ccc,11
10003,丸戸章介,マルトショウスケ,marusyo@hoge.jp,ddd,12
10004,三宅武,ミヤケタケシ,miya@hoge.jp,eee,13
1 10000 山田龍也 ヤマダタツヤ yamada@hoge.jp aaa 10
2 10001 高橋準 タカハシジュン jtaka@hoge.jp bbb 10
3 10002 麻枝史明 マエダフミアキ fmak@hoge.jp ccc 11
4 10003 丸戸章介 マルトショウスケ marusyo@hoge.jp ddd 12
5 10004 三宅武 ミヤケタケシ miya@hoge.jp eee 13

View File

@@ -4,6 +4,15 @@ public class DepartmentData extends BaseData {
private String idDepartment; private String idDepartment;
private String nmDepartment; private String nmDepartment;
public DepartmentData() {
}
public DepartmentData(String idDepartment, String nmDepartment) {
this.idDepartment = idDepartment;
this.nmDepartment = nmDepartment;
}
@Override @Override
public String toString() { public String toString() {
return getIdDepartment() + "\t" + getNmDepartment(); return getIdDepartment() + "\t" + getNmDepartment();

View File

@@ -1,147 +1,258 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner; import java.util.Scanner;
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("会社名:" + EmployeeData.COMPANY_NAME); ArrayList<BaseData> employees = new ArrayList<BaseData>();
BaseData employee = new EmployeeData("10000", "山田龍也", "ヤマダタツヤ",
"yamada@hoge.jp", "aaa", "10");
System.out.println(employee.toCSV());
System.out.println(employee.getPrimaryKeyValue());
System.out.println();
BaseData[] employees = new BaseData[5];
//setterがBaseData.javaにはないためコンストラクタで代入
// for (int i = 0; i < employees.length; i++) {
// employees[i] = new EmployeeData();
// }
//
// employees[0].setIdEmployee("10000");
// employees[0].setNmEmployee("山田龍也");
// employees[0].setKnEmployee("ヤマダタツヤ");
// employees[0].setMailAddress("yamada@hoge.jp");
// employees[0].setPassword("aaa");
// employees[0].setIdDepartment("10");
//
// employees[1].setIdEmployee("10001");
// employees[1].setNmEmployee("高橋準\t");
// employees[1].setKnEmployee("タカハシジュン");
// employees[1].setMailAddress("jtaka@hoge.jp");
// employees[1].setPassword("bbb");
// employees[1].setIdDepartment("10");
//
// employees[2].setIdEmployee("10002");
// employees[2].setNmEmployee("麻枝史明");
// employees[2].setKnEmployee("マエダフミアキ");
// employees[2].setMailAddress("fmak@hoge.jp");
// employees[2].setPassword("ccc");
// employees[2].setIdDepartment("11");
//
// employees[3].setIdEmployee("10003");
// employees[3].setNmEmployee("丸戸章介");
// employees[3].setKnEmployee("マルトショウスケ");
// employees[3].setMailAddress("marusyo@hoge.jp");
// employees[3].setPassword("ddd");
// employees[3].setIdDepartment("12");
//
// employees[4].setIdEmployee("10004");
// employees[4].setNmEmployee("三宅武\t");
// employees[4].setKnEmployee("ミヤケタケシ");
// employees[4].setMailAddress("miya@hoge.jp");
// employees[4].setPassword("eee");
// employees[4].setIdDepartment("13");
employees[0] = new EmployeeData("10000", "山田龍也", "ヤマダタツヤ",
"yamada@hoge.jp", "aaa", "10");
employees[1] = new EmployeeData("10001", "高橋準", "タカハシジュン",
"jtaka@hoge.jp", "bbb", "10");
employees[2] = new EmployeeData("10002", "麻枝史明", "マエダフミアキ",
"fmak@hoge.jp", "ccc", "11");
employees[3] = new EmployeeData("10003", "丸戸章介", "マルトショウスケ",
"marusyo@hoge.jp", "ddd", "12");
employees[4] = new EmployeeData("10004", "三宅武", "ミヤケタケシ",
"miya@hoge.jp", "eee", "13");
for (BaseData e : employees) {
System.out.println(e);
}
System.out.println("現在の社員のデータ件数:" + EmployeeData.getEmpCount() + "件");
System.out.println();
//社員データ+部署データ
BaseData[] allData = new BaseData[11];
for (int i = 0; i < employees.length; i++) {
allData[i] = employees[i];
}
DepartmentData[] dept = new DepartmentData[6];
for (int i = 0; i < dept.length; i++) {
dept[i] = new DepartmentData();
}
dept[0].setIdDepartment("10");
dept[0].setNmDepartment("役員");
allData[5] = dept[0];
dept[1].setIdDepartment("11");
dept[1].setNmDepartment("人事・総務部");
allData[6] = dept[1];
dept[2].setIdDepartment("12");
dept[2].setNmDepartment("経理部");
allData[7] = dept[2];
dept[3].setIdDepartment("13");
dept[3].setNmDepartment("システム開発事業部");
allData[8] = dept[3];
dept[4].setIdDepartment("14");
dept[4].setNmDepartment("教育事業部");
allData[9] = dept[4];
dept[5].setIdDepartment("15");
dept[5].setNmDepartment("営業企画部");
allData[10] = dept[5];
for (BaseData data : allData) {
System.out.println(data);
}
System.out.println();
//nullおよび前後の空白を取り除いた結果が空文字チェック
// BaseData emp = new EmployeeData("10000", "デフォルト", "ヤマダタツヤ", "yamada@hoge.jp", "aaa", "10");
// System.out.println(emp);
// (EmployeeData)emp.setNmEmployee(null);
// System.out.println(emp);
// emp.setNmEmployee("   ");
// System.out.println(emp);
BaseData emptyEmployee = new EmployeeData("", "", "", "", "", "");
System.out.println(emptyEmployee);
System.out.println();
System.out.println("システムを開始します\n");
//検索
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);
while (true) { while (true) {
System.out.println("検索したい社員IDを入力してください(終了する場合は0)"); employees = inportEmployeesCSV();
System.out.println("1:検索 2:登録 3:更新 4:削除 0:終了");
System.out.print(">>>>"); System.out.print(">>>>");
String findId = scanner.nextLine(); String str = scanner.nextLine().strip();
if (findId.equals("0")) { switch (str) {
case "0":
System.out.println("システムを終了します"); System.out.println("システムを終了します");
return; return;
} case "1":
System.out.println("1:全検索 2:条件検索 それ以外:戻る");
boolean matchFlag = false; System.out.print(">>>>");
str = scanner.nextLine().strip();
for (BaseData e : employees) { Display(str, employees);
if (e.getPrimaryKeyValue().equals(findId)) { break;
System.out.println(e); case "2":
matchFlag = true; append();
break; break;
} case "3":
} update(employees);
if (!matchFlag) { break;
System.out.println("該当する社員が見つかりませんでした"); case "4":
delete(employees);
break;
default:
System.out.println("指定の番号を入力してください");
break;
} }
System.out.println(); System.out.println();
} }
} }
//削除
private static void delete(ArrayList<BaseData> allData) {
Scanner scanner = new Scanner(System.in);
ArrayList<String> dataList = new ArrayList<String>();
Path path = Path.of("employees.csv");
System.out.println("IDを入力してください");
System.out.print(">>>>");
String str = scanner.nextLine().strip();
boolean matchFlag = false;
for (BaseData e : allData) {
if (e.getPrimaryKeyValue().equals(str)) {
matchFlag = true;
} else {
dataList.add(e.toCSV());
}
}
if (!matchFlag) {
System.out.println("入力された値で情報がみつかりませんでした");
} else {
System.out.println("指定されたIDの情報を削除します? Y/y\n(Y/y以外の入力であればキャンセル)");
System.out.print(">>>>");
str = scanner.nextLine().strip();
if (str.equalsIgnoreCase("y")) {
try {
Files.write(path, dataList);
System.out.println("削除が完了しました");
} catch (IOException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
} else {
System.out.println("削除をキャンセルしました");
}
}
System.out.println();
}
//更新
private static void update(ArrayList<BaseData> allData) {
//更新するファイルのパス
Path path = Path.of("employees.csv");
//ID以外の更新するデータの項目
String[] appendData = { "社員名", "フリガナ", "メールアドレス", "パスワード", "部署ID" };
boolean zeroCheck = true; //入力されたデータが空白かのチェック用変数
Scanner scanner = new Scanner(System.in);
System.out.println("IDを入力してください");
System.out.print(">>>>");
String str = scanner.nextLine().strip();
boolean matchFlag = false;
ArrayList<String> dataList = new ArrayList<String>();
String content;
for (BaseData e : allData) {
content = e.toCSV();
if (e.getPrimaryKeyValue().equals(str)) {
for (int i = 0; i < appendData.length; i++) {
while (zeroCheck) {
zeroCheck = false;
System.out.println(appendData[i] + "を入力してください");
System.out.print(">>>>");
String scanString = scanner.nextLine().strip();
if (scanString == null || scanString.strip().length() == 0) {
System.out.println(appendData[i] + "は入力必須です");
zeroCheck = true;
}
str += ",";
str += scanString;
System.out.println();
}
zeroCheck = true;
}
matchFlag = true;
content = str;
}
dataList.add(content);
}
if (!matchFlag) {
System.out.println("入力された値で情報がみつかりませんでした");
} else {
try {
Files.write(path, dataList);
System.out.println("更新が完了しました");
} catch (IOException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
}
System.out.println();
}
private static void Display(String str, ArrayList<BaseData> data) {
switch (str) {
case "1":
allDisplay(data);
break;
case "2":
employeeSeach(data);
break;
default:
return;
}
}
private static void allDisplay(ArrayList<BaseData> data) {
data.stream().forEach(d -> {
System.out.println(d); //一覧表示
});
System.out.println();
}
//ID検索
private static void employeeSeach(ArrayList<BaseData> allData) {
Scanner scanner = new Scanner(System.in);
System.out.println("検索したい社員IDを入力してください");
System.out.print(">>>>");
String str = scanner.nextLine().strip();
boolean matchFlag = false;
for (BaseData e : allData) {
if (e.getPrimaryKeyValue().equals(str)) {
System.out.println(e);
matchFlag = true;
break;
}
}
if (!matchFlag) {
System.out.println("入力された値で情報がみつかりませんでした");
}
System.out.println();
}
//書き込み ※社員IDが被っていても追加出来てしまう
private static void append() {
Scanner scanner = new Scanner(System.in);
String scanString;
String str = "";
String[] appendData = { "社員ID", "社員名", "フリガナ", "メールアドレス", "パスワード", "部署ID" };
boolean zeroCheck = true;
for (int i = 0; i < appendData.length; i++) {
while (zeroCheck) {
zeroCheck = false;
System.out.println(appendData[i] + "を入力してください");
System.out.print(">>>>");
scanString = scanner.nextLine().strip();
if (scanString == null || scanString.strip().length() == 0) {
System.out.println(appendData[i] + "は入力必須です");
zeroCheck = true;
}
str += scanString;
System.out.println();
}
if (i < appendData.length - 1)
str += ",";
zeroCheck = true;
}
Path path = Path.of("employees.csv");
try {
Files.writeString(path, str + "\n", StandardOpenOption.APPEND);
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
//社員CSVの読み込み
private static ArrayList<BaseData> inportEmployeesCSV() {
final String employeesCSVPath = "employees.csv";
ArrayList<BaseData> employees = new ArrayList<BaseData>();
Path pathEmp = Path.of(employeesCSVPath);
ArrayList<String> content = new ArrayList<String>();
try {
// content = Files.readString(path);
content = (ArrayList<String>) (Files.readAllLines(pathEmp));
} catch (IOException e) {
// TODO 自動 生成された catch ブロック
e.printStackTrace();
}
content.stream().forEach(data -> {
ArrayList<String> content2 = new ArrayList<String>(Arrays.asList(data.split(",")));
employees.add(
new EmployeeData(content2.get(0), content2.get(1), content2.get(2), content2.get(3),
content2.get(4), content2.get(5)));
});
return employees;
}
} }

202
em-oop/src/Sub.java Normal file
View File

@@ -0,0 +1,202 @@
import java.util.Scanner;
public class Sub {
public static void main(String[] args) {
System.out.println("会社名:" + EmployeeData.COMPANY_NAME);
BaseData employee = new EmployeeData("10000", "山田龍也", "ヤマダタツヤ",
"yamada@hoge.jp", "aaa", "10");
System.out.println(employee.toCSV());
System.out.println(employee.getPrimaryKeyValue());
System.out.println();
BaseData[] employees = new BaseData[5];
//setterがBaseData.javaにはないためコンストラクタで代入
// for (int i = 0; i < employees.length; i++) {
// employees[i] = new EmployeeData();
// }
//
// employees[0].setIdEmployee("10000");
// employees[0].setNmEmployee("山田龍也");
// employees[0].setKnEmployee("ヤマダタツヤ");
// employees[0].setMailAddress("yamada@hoge.jp");
// employees[0].setPassword("aaa");
// employees[0].setIdDepartment("10");
//
// employees[1].setIdEmployee("10001");
// employees[1].setNmEmployee("高橋準\t");
// employees[1].setKnEmployee("タカハシジュン");
// employees[1].setMailAddress("jtaka@hoge.jp");
// employees[1].setPassword("bbb");
// employees[1].setIdDepartment("10");
//
// employees[2].setIdEmployee("10002");
// employees[2].setNmEmployee("麻枝史明");
// employees[2].setKnEmployee("マエダフミアキ");
// employees[2].setMailAddress("fmak@hoge.jp");
// employees[2].setPassword("ccc");
// employees[2].setIdDepartment("11");
//
// employees[3].setIdEmployee("10003");
// employees[3].setNmEmployee("丸戸章介");
// employees[3].setKnEmployee("マルトショウスケ");
// employees[3].setMailAddress("marusyo@hoge.jp");
// employees[3].setPassword("ddd");
// employees[3].setIdDepartment("12");
//
// employees[4].setIdEmployee("10004");
// employees[4].setNmEmployee("三宅武\t");
// employees[4].setKnEmployee("ミヤケタケシ");
// employees[4].setMailAddress("miya@hoge.jp");
// employees[4].setPassword("eee");
// employees[4].setIdDepartment("13");
employees[0] = new EmployeeData("10000", "山田龍也", "ヤマダタツヤ",
"yamada@hoge.jp", "aaa", "10");
employees[1] = new EmployeeData("10001", "高橋準", "タカハシジュン",
"jtaka@hoge.jp", "bbb", "10");
employees[2] = new EmployeeData("10002", "麻枝史明", "マエダフミアキ",
"fmak@hoge.jp", "ccc", "11");
employees[3] = new EmployeeData("10003", "丸戸章介", "マルトショウスケ",
"marusyo@hoge.jp", "ddd", "12");
employees[4] = new EmployeeData("10004", "三宅武", "ミヤケタケシ",
"miya@hoge.jp", "eee", "13");
for (BaseData e : employees) {
System.out.println(e);
}
System.out.println("現在の社員のデータ件数:" + EmployeeData.getEmpCount() + "件");
System.out.println();
//社員データ+部署データ
BaseData[] allData = new BaseData[11];
for (int i = 0; i < employees.length; i++) {
allData[i] = employees[i];
}
DepartmentData[] dept = new DepartmentData[6];
for (int i = 0; i < dept.length; i++) {
dept[i] = new DepartmentData();
}
dept[0].setIdDepartment("10");
dept[0].setNmDepartment("役員");
allData[5] = dept[0];
dept[1].setIdDepartment("11");
dept[1].setNmDepartment("人事・総務部");
allData[6] = dept[1];
dept[2].setIdDepartment("12");
dept[2].setNmDepartment("経理部");
allData[7] = dept[2];
dept[3].setIdDepartment("13");
dept[3].setNmDepartment("システム開発事業部");
allData[8] = dept[3];
dept[4].setIdDepartment("14");
dept[4].setNmDepartment("教育事業部");
allData[9] = dept[4];
dept[5].setIdDepartment("15");
dept[5].setNmDepartment("営業企画部");
allData[10] = dept[5];
int employeeCount = 0;
int deptCount = 0;
for (BaseData data : allData) {
System.out.println(data);
if (data instanceof EmployeeData) {
employeeCount++;
} else if (data instanceof DepartmentData) {
deptCount++;
}
}
System.out.println("社員データ:" + employeeCount + "件\n部署データ:" + deptCount + "件");
System.out.println();
System.out.println("メールアドレス表示");
for (BaseData data : allData) {
if (data instanceof EmployeeData) {
System.out.println(((EmployeeData) data).getMailAddress());
}
}
System.out.println();
//nullおよび前後の空白を取り除いた結果が空文字チェック
BaseData emp = new EmployeeData("10000", "デフォルト", "ヤマダタツヤ", "yamada@hoge.jp", "aaa", "10");
System.out.println(emp);
((EmployeeData) emp).setNmEmployee(null);
System.out.println(emp);
((EmployeeData) emp).setNmEmployee("   ");
System.out.println(emp);
System.out.println();
System.out.println("コンストラクタに全てから文字で");
BaseData emptyEmployee = new EmployeeData("", "", "", "", "", "");
System.out.println(emptyEmployee);
System.out.println();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("検索したい部署名を入力してください(終了する場合は0)");
System.out.print(">>>>");
String searchDeptNm = scanner.nextLine();
String searchDeptId = "";
if (endChack(searchDeptNm))
break;
for (BaseData data : allData) {
if (data instanceof DepartmentData) {
if (((DepartmentData) data).getNmDepartment().equals(searchDeptNm)) {
searchDeptId = ((DepartmentData) data).getIdDepartment();
}
}
}
if (searchDeptId.equals("")) {
System.out.println("該当する部署が見つかりませんでした");
continue;
}
for (BaseData data : allData) {
if (data instanceof EmployeeData) {
if (((EmployeeData) data).getIdDepartment().equals(searchDeptId)) {
System.out.println(
((EmployeeData) data).getNmEmployee() + "\t" + ((EmployeeData) data).getMailAddress());
}
}
}
System.out.println();
}
while (true) {
System.out.println("検索したい社員IDを入力してください(終了する場合は0)");
System.out.print(">>>>");
String findId = scanner.nextLine();
if (endChack(findId))
break;
boolean matchFlag = false;
for (BaseData e : employees) {
if (e.getPrimaryKeyValue().equals(findId)) {
System.out.println(e);
matchFlag = true;
break;
}
}
if (!matchFlag) {
System.out.println("該当する社員が見つかりませんでした");
}
System.out.println();
}
}
static boolean endChack(String input) {
if (input.equals("0")) {
System.out.println("システムを終了します");
return true;
}
return false;
}
}