From 830578ffe36687b5dfc19ea7bb562d0739abb323 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=88=B4=E6=9C=A8=E3=80=80=E7=9A=93=E4=BB=8B?= <26-k-suzuki-avnz@it-college.co.jp> Date: Fri, 30 Oct 2026 15:38:14 +0900 Subject: [PATCH] =?UTF-8?q?=EF=BC=91=EF=BC=90=E6=AE=B5=E9=9A=8E=E7=9B=AE?= =?UTF-8?q?=E3=81=BE=E3=81=A7=E5=AE=8C=E4=BA=86=E6=B8=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rhizome/example/dao/DepartmentDAO.java | 98 ++++-- src/com/rhizome/example/dao/EmployeeDAO.java | 289 +++++++++++++++--- src/com/rhizome/example/main/MainNew.java | 191 ++++++------ 3 files changed, 430 insertions(+), 148 deletions(-) diff --git a/src/com/rhizome/example/dao/DepartmentDAO.java b/src/com/rhizome/example/dao/DepartmentDAO.java index f1643c4..a82db9f 100644 --- a/src/com/rhizome/example/dao/DepartmentDAO.java +++ b/src/com/rhizome/example/dao/DepartmentDAO.java @@ -15,7 +15,18 @@ public class DepartmentDAO { private static final String TBL_NAME = "department"; private static final String ID_DEPARTMENT = "id_department"; private static final String NM_DEPARTMENT = "nm_department"; - + + /** アクセサ */ + public static String getTblName() { + return TBL_NAME; + } + public static String getIdColumnName() { + return ID_DEPARTMENT; + } + public static String getNmColumnName() { + return NM_DEPARTMENT; + } + /** DBコネクション */ public Connection con; /** DBステートメント */ @@ -91,7 +102,44 @@ public class DepartmentDAO { nRecords++; } if (nRecords==0) { - System.out.println("入力された値で情報がみつかりませんでした"); + System.out.println("入力された部署IDで情報がみつかりませんでした"); + } + } finally { + DbUtil.closeStatement(this.stmt); + } + return rtnList; + } + + /** + * 部署テーブルから指定された部署名に一致するデータを全件取得する + * + * @return 検索結果 + * @throws SQLException + * @throws ClassNotFoundException + */ + public List selectByNm(String NmDepartment) throws SQLException, ClassNotFoundException { + List rtnList = new ArrayList<>(); + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT "); + sql.append(" " + "*"); + sql.append(" FROM "); + sql.append(" " + TBL_NAME); + sql.append(" WHERE "); + sql.append(" " + NM_DEPARTMENT + " LIKE " + " CONCAT('%',?,'%') "); + try { + this.stmt = con.prepareStatement(sql.toString()); + stmt.setString(1,NmDepartment); + rs = stmt.executeQuery(); + int nRecords = 0; + while (rs.next()) { + DepartmentDTO Department = new DepartmentDTO(); + Department.setIdDepartment(rs.getInt(ID_DEPARTMENT)); + Department.setNmDepartment(rs.getString(NM_DEPARTMENT)); + rtnList.add(Department); + nRecords++; + } + if (nRecords==0) { + System.out.println("入力された部署名で情報がみつかりませんでした"); } } finally { DbUtil.closeStatement(this.stmt); @@ -107,10 +155,10 @@ public class DepartmentDAO { * @throws ClassNotFoundException */ public String getNmDepartment(int idDepartment) throws SQLException, ClassNotFoundException { - String name = Integer.toString(idDepartment); // 部署名が見つからない場合は部署IDを返却する Connection con = DbUtil.getConnection(); DepartmentDAO depDao = new DepartmentDAO(con); - if(depDao.selectById(idDepartment).size()!=0) { + String name = ""; + if(depDao.selectById(idDepartment).size()==1) { DepartmentDTO department = depDao.selectById(idDepartment).get(0); name = department.getNmDepartment(); }; @@ -157,16 +205,22 @@ public class DepartmentDAO { StringBuilder sql = new StringBuilder(); sql.append(" INSERT INTO "); sql.append(" " + TBL_NAME); - sql.append(" ("+NM_DEPARTMENT+") "); + sql.append(" (" + NM_DEPARTMENT + ") "); sql.append(" VALUES "); sql.append(" ( ? ) "); - try { - this.stmt = con.prepareStatement(sql.toString()); - stmt.setString(1,name); - stmt.executeUpdate(); - System.out.println("登録が完了しました"); - } finally { - DbUtil.closeStatement(this.stmt); + System.out.println("指定された情報を登録しますか? Y/y"); + System.out.println("(Y/y以外の入力であればキャンセル)"); + Scanner sc = new Scanner(System.in); + String flag = sc.nextLine(); + if (flag.equals("Y")||flag.equals("y")) { + try { + this.stmt = con.prepareStatement(sql.toString()); + stmt.setString(1,name); + stmt.executeUpdate(); + System.out.println("登録が完了しました"); + } finally { + DbUtil.closeStatement(this.stmt); + } } } @@ -177,14 +231,18 @@ public class DepartmentDAO { * @throws ClassNotFoundException */ public void depUpdate(int idDepartment, String name) throws SQLException, ClassNotFoundException { - if (selectById(idDepartment).size()!=0) { - StringBuilder sql = new StringBuilder(); - sql.append(" UPDATE "); - sql.append(" " + TBL_NAME); - sql.append(" SET "); - sql.append(" "+NM_DEPARTMENT+" = ?"+" "); - sql.append(" WHERE "); - sql.append(" " + ID_DEPARTMENT + " = " + "?"); + StringBuilder sql = new StringBuilder(); + sql.append(" UPDATE "); + sql.append(" " + TBL_NAME); + sql.append(" SET "); + sql.append(" " + NM_DEPARTMENT + " = " + "?" + " "); + sql.append(" WHERE "); + sql.append(" " + ID_DEPARTMENT + " = " + "?"); + System.out.println("指定されたIDの情報を更新しますか? Y/y"); + System.out.println("(Y/y以外の入力であればキャンセル)"); + Scanner sc = new Scanner(System.in); + String flag = sc.nextLine(); + if (flag.equals("Y")||flag.equals("y")) { try { this.stmt = con.prepareStatement(sql.toString()); stmt.setString(1,name); diff --git a/src/com/rhizome/example/dao/EmployeeDAO.java b/src/com/rhizome/example/dao/EmployeeDAO.java index 93b44b5..dbb5dec 100644 --- a/src/com/rhizome/example/dao/EmployeeDAO.java +++ b/src/com/rhizome/example/dao/EmployeeDAO.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Scanner; +import com.rhizome.example.dto.DepartmentDTO; import com.rhizome.example.dto.EmployeeDTO; import com.rhizome.example.util.DbUtil; @@ -109,7 +110,120 @@ public class EmployeeDAO { nRecords++; } if (nRecords==0) { - System.out.println("入力された値で情報がみつかりませんでした"); + System.out.println("入力された社員IDで情報がみつかりませんでした"); + } + } finally { + DbUtil.closeStatement(this.stmt); + } + return rtnList; + } + + /** + * 社員テーブルから条件に一致するデータを全件取得する(AND検索) + * + * @return 検索結果 + * @throws SQLException + * @throws ClassNotFoundException + */ + /**/ + // 部署ID入力 + public List empSelect(int idEmployee, String name, String kn, String mailaddress, String password, int idDepartment) throws SQLException, ClassNotFoundException { + List rtnList = new ArrayList<>(); + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT "); + sql.append(" " + "*"); + sql.append(" FROM "); + sql.append(" " + TBL_NAME); + sql.append(" WHERE "); + if (idEmployee!=0) sql.append(" " + ID_EMPLOYEE + " = " + "?" + "AND"); + if (name.trim().length()!=0) sql.append(" " + NM_EMPLOYEE + " LIKE " + " CONCAT('%',?,'%')" + "AND"); + if (kn.trim().length()!=0) sql.append(" " + KN_EMPLOYEE + " LIKE " + " CONCAT('%',?,'%')" + "AND"); + if (mailaddress.trim().length()!=0) sql.append(" " + MAIL_ADDRESS + " LIKE " + " CONCAT('%',?,'%')" + "AND"); + if (password.trim().length()!=0) sql.append(" " + PASSWORD + " LIKE " + " CONCAT('%',?,'%')" + "AND"); + if (idDepartment!=0) sql.append(" " + ID_DEPARTMENT + " = " + "?" + "AND"); + sql.delete(sql.length()-3, sql.length()); // 末尾"AND"を削除する + try { + int nConditions = 0; + this.stmt = con.prepareStatement(sql.toString()); + if (idEmployee!=0) stmt.setInt(++nConditions, idEmployee); + if (name.trim().length()!=0) stmt.setString(++nConditions, name); + if (kn.trim().length()!=0) stmt.setString(++nConditions, kn); + if (mailaddress.trim().length()!=0) stmt.setString(++nConditions, mailaddress); + if (password.trim().length()!=0) stmt.setString(++nConditions, password); + if (idDepartment!=0) stmt.setInt(++nConditions, idDepartment); + if (nConditions==0) { + System.out.println("情報が入力されていません"); + } else { + rs = stmt.executeQuery(); + int nRecords = 0; + while (rs.next()) { + EmployeeDTO employee = new EmployeeDTO(); + employee.setIdEmployee(rs.getInt(ID_EMPLOYEE)); + employee.setNmEmployee(rs.getString(NM_EMPLOYEE)); + employee.setKnEmployee(rs.getString(KN_EMPLOYEE)); + employee.setMailaddress(rs.getString(MAIL_ADDRESS)); + employee.setPassword(rs.getString(PASSWORD)); + employee.setIdDepartment(rs.getInt(ID_DEPARTMENT)); + rtnList.add(employee); + nRecords++; + } + if (nRecords==0) { + System.out.println("入力された社員情報で情報がみつかりませんでした"); + } + } + } finally { + DbUtil.closeStatement(this.stmt); + } + return rtnList; + } + // 部署名入力 + public List empSelect(int idEmployee, String name, String kn, String mailaddress, String password, String nmDepartment) throws SQLException, ClassNotFoundException { + List rtnList = new ArrayList<>(); + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT "); + sql.append(" " + "*"); + sql.append(" FROM "); + sql.append(" " + TBL_NAME); + if (nmDepartment.trim().length()!=0) { // テーブル結合 + sql.append(" INNER JOIN " + DepartmentDAO.getTblName() + " ON "); + sql.append(TBL_NAME+"."+ID_DEPARTMENT + " = " + DepartmentDAO.getTblName()+"."+DepartmentDAO.getIdColumnName()); + } + sql.append(" WHERE "); + if (idEmployee!=0) sql.append(" " + ID_EMPLOYEE + " = " + "?" + "AND"); + if (name.trim().length()!=0) sql.append(" " + NM_EMPLOYEE + " LIKE " + " CONCAT('%',?,'%')" + "AND"); + if (kn.trim().length()!=0) sql.append(" "+KN_EMPLOYEE + " LIKE " + " CONCAT('%',?,'%')" + "AND"); + if (mailaddress.trim().length()!=0) sql.append(" " + MAIL_ADDRESS + " LIKE " + " CONCAT('%',?,'%')" + "AND"); + if (password.trim().length()!=0) sql.append(" " + PASSWORD + " LIKE " + " CONCAT('%',?,'%')" + "AND"); + if (nmDepartment.trim().length()!=0) sql.append(" " + DepartmentDAO.getNmColumnName() + " LIKE " + " CONCAT('%',?,'%')" + "AND"); + sql.delete(sql.length()-3, sql.length()); // 末尾"AND"を削除する + try { + int nConditions = 0; + this.stmt = con.prepareStatement(sql.toString()); + if (idEmployee!=0) stmt.setInt(++nConditions, idEmployee); + if (name.trim().length()!=0) stmt.setString(++nConditions, name); + if (kn.trim().length()!=0) stmt.setString(++nConditions, kn); + if (mailaddress.trim().length()!=0) stmt.setString(++nConditions, mailaddress); + if (password.trim().length()!=0) stmt.setString(++nConditions, password); + if (nmDepartment.trim().length()!=0) stmt.setString(++nConditions, nmDepartment); + if (nConditions==0) { + System.out.println("情報が入力されていません"); + } else { + rs = stmt.executeQuery(); + int nRecords = 0; + while (rs.next()) { + EmployeeDTO employee = new EmployeeDTO(); + employee.setIdEmployee(rs.getInt(ID_EMPLOYEE)); + employee.setNmEmployee(rs.getString(NM_EMPLOYEE)); + employee.setKnEmployee(rs.getString(KN_EMPLOYEE)); + employee.setMailaddress(rs.getString(MAIL_ADDRESS)); + employee.setPassword(rs.getString(PASSWORD)); + employee.setIdDepartment(rs.getInt(ID_DEPARTMENT)); + rtnList.add(employee); + nRecords++; + } + if (nRecords==0) { + System.out.println("入力された社員情報で情報がみつかりませんでした"); + } } } finally { DbUtil.closeStatement(this.stmt); @@ -153,24 +267,68 @@ public class EmployeeDAO { * @throws SQLException * @throws ClassNotFoundException */ + // 部署ID入力 public void empInsert(String name, String kn, String mailaddress, String password, int idDepartment) throws SQLException, ClassNotFoundException { - StringBuilder sql = new StringBuilder(); - sql.append(" INSERT INTO "); - sql.append(" " + TBL_NAME); - sql.append(" ("+NM_EMPLOYEE+", "+KN_EMPLOYEE+","+MAIL_ADDRESS+","+PASSWORD+","+ID_DEPARTMENT+") "); - sql.append(" VALUES "); - sql.append(" (?, ?, ?, ?, ?) "); - try { - this.stmt = con.prepareStatement(sql.toString()); - stmt.setString(1,name); - stmt.setString(2,kn); - stmt.setString(3,mailaddress); - stmt.setString(4,password); - stmt.setInt(5,idDepartment); - stmt.executeUpdate(); - System.out.println("登録が完了しました"); - } finally { - DbUtil.closeStatement(this.stmt); + DepartmentDAO depDao = new DepartmentDAO(con); + if (depDao.selectById(idDepartment).size()!=0) { // 存在しない部署IDが入力されたときは登録処理を行わない + StringBuilder sql = new StringBuilder(); + sql.append(" INSERT INTO "); + sql.append(" " + TBL_NAME); + sql.append(" (" + NM_EMPLOYEE + "," + KN_EMPLOYEE + "," + MAIL_ADDRESS + "," + PASSWORD + "," + ID_DEPARTMENT + ") "); + sql.append(" VALUES "); + sql.append(" (?, ?, ?, ?, ?) "); + System.out.println("指定された情報を登録しますか? Y/y"); + System.out.println("(Y/y以外の入力であればキャンセル)"); + Scanner sc = new Scanner(System.in); + String flag = sc.nextLine(); + if (flag.equals("Y")||flag.equals("y")) { + try { + this.stmt = con.prepareStatement(sql.toString()); + stmt.setString(1,name); + stmt.setString(2,kn); + stmt.setString(3,mailaddress); + stmt.setString(4,password); + stmt.setInt(5,idDepartment); + stmt.executeUpdate(); + System.out.println("登録が完了しました"); + } finally { + DbUtil.closeStatement(this.stmt); + } + } + } + } + // 部署名入力 + public void empInsert(String name, String kn, String mailaddress, String password, String nmDepartment) throws SQLException, ClassNotFoundException { + DepartmentDAO depDao = new DepartmentDAO(con); + List rtnList = depDao.selectByNm(nmDepartment); + if (rtnList.size()==1) { // 部署名が特定できないときは登録処理を行わない + DepartmentDTO department = rtnList.get(0); + StringBuilder sql = new StringBuilder(); + sql.append(" INSERT INTO "); + sql.append(" " + TBL_NAME); + sql.append(" (" + NM_EMPLOYEE + "," + KN_EMPLOYEE + "," + MAIL_ADDRESS + "," + PASSWORD + "," + ID_DEPARTMENT + ") "); + sql.append(" VALUES "); + sql.append(" (?, ?, ?, ?, ?) "); + System.out.println("指定された情報を登録しますか? Y/y"); + System.out.println("(Y/y以外の入力であればキャンセル)"); + Scanner sc = new Scanner(System.in); + String flag = sc.nextLine(); + if (flag.equals("Y")||flag.equals("y")) { + try { + this.stmt = con.prepareStatement(sql.toString()); + stmt.setString(1,name); + stmt.setString(2,kn); + stmt.setString(3,mailaddress); + stmt.setString(4,password); + stmt.setInt(5,department.getIdDepartment()); + stmt.executeUpdate(); + System.out.println("登録が完了しました"); + } finally { + DbUtil.closeStatement(this.stmt); + } + } + } else if (rtnList.size()>1) { + System.out.println("入力された情報で部署を1つに特定できません"); } } @@ -180,33 +338,92 @@ public class EmployeeDAO { * @throws SQLException * @throws ClassNotFoundException */ + // 部署ID入力 public void empUpdate(int idEmployee, String name, String kn, String mailaddress, String password, int idDepartment) throws SQLException, ClassNotFoundException { - if (selectById(idEmployee).size()!=0) { + EmployeeDTO employee = selectById(idEmployee).get(0); + if (name.trim().length()==0) name = employee.getNmEmployee(); + if (kn.trim().length()==0) kn = employee.getKnEmployee(); + if (mailaddress.trim().length()==0) mailaddress = employee.getMailaddress(); + if (password.trim().length()==0) password = employee.getPassword(); + if (idDepartment==0) idDepartment = employee.getIdDepartment(); + DepartmentDAO depDao = new DepartmentDAO(con); + if (depDao.selectById(idDepartment).size()!=0) { // 存在しない部署IDが入力されたときは更新処理を行わない StringBuilder sql = new StringBuilder(); sql.append(" UPDATE "); sql.append(" " + TBL_NAME); sql.append(" SET "); - sql.append(" "+NM_EMPLOYEE+" = ?"+","); - sql.append(" "+KN_EMPLOYEE+" = ?"+","); - sql.append(" "+MAIL_ADDRESS+" = ?"+","); - sql.append(" "+PASSWORD+" = ?"+","); - sql.append(" "+ID_DEPARTMENT+" = ?"); + sql.append(" " + NM_EMPLOYEE + " = " + "?" + ","); + sql.append(" " + KN_EMPLOYEE + " = " + "?" +","); + sql.append(" " + MAIL_ADDRESS + " = " + "?" + ","); + sql.append(" " + PASSWORD + " = " + "?" + ","); + sql.append(" " + ID_DEPARTMENT + " = " + "?"); sql.append(" WHERE "); sql.append(" " + ID_EMPLOYEE + " = " + "?"); - try { - this.stmt = con.prepareStatement(sql.toString()); - stmt.setString(1,name); - stmt.setString(2,kn); - stmt.setString(3,mailaddress); - stmt.setString(4,password); - stmt.setInt(5,idDepartment); - stmt.setInt(6,idEmployee); - stmt.executeUpdate(); - System.out.println("更新が完了しました"); - } finally { - DbUtil.closeStatement(this.stmt); + System.out.println("指定されたIDの情報を更新しますか? Y/y"); + System.out.println("(Y/y以外の入力であればキャンセル)"); + Scanner sc = new Scanner(System.in); + String flag = sc.nextLine(); + if (flag.equals("Y")||flag.equals("y")) { + try { + this.stmt = con.prepareStatement(sql.toString()); + stmt.setString(1,name); + stmt.setString(2,kn); + stmt.setString(3,mailaddress); + stmt.setString(4,password); + stmt.setInt(5,idDepartment); + stmt.setInt(6,idEmployee); + stmt.executeUpdate(); + System.out.println("更新が完了しました"); + } finally { + DbUtil.closeStatement(this.stmt); + } } } } + // 部署名入力 + public void empUpdate(int idEmployee, String name, String kn, String mailaddress, String password, String NmDepartment) throws SQLException, ClassNotFoundException { + EmployeeDTO employee = selectById(idEmployee).get(0); + if (name.trim().length()==0) name = employee.getNmEmployee(); + if (kn.trim().length()==0) kn = employee.getKnEmployee(); + if (mailaddress.trim().length()==0) mailaddress = employee.getMailaddress(); + if (password.trim().length()==0) password = employee.getPassword(); + DepartmentDAO depDao = new DepartmentDAO(con); + List rtnList = depDao.selectByNm(NmDepartment); + if (rtnList.size()==1) { // 部署名が特定できないときは登録処理を行わない + DepartmentDTO department = rtnList.get(0); + StringBuilder sql = new StringBuilder(); + sql.append(" UPDATE "); + sql.append(" " + TBL_NAME); + sql.append(" SET "); + sql.append(" " + NM_EMPLOYEE + " = " + "?" + ","); + sql.append(" " + KN_EMPLOYEE + " = " + "?" + ","); + sql.append(" " + MAIL_ADDRESS + " = " + "?" + ","); + sql.append(" " + PASSWORD + " = " + "?" + ","); + sql.append(" " + ID_DEPARTMENT + " = " + "?"); + sql.append(" WHERE "); + sql.append(" " + ID_EMPLOYEE + " = " + "?"); + System.out.println("指定されたIDの情報を更新しますか? Y/y"); + System.out.println("(Y/y以外の入力であればキャンセル)"); + Scanner sc = new Scanner(System.in); + String flag = sc.nextLine(); + if (flag.equals("Y")||flag.equals("y")) { + try { + this.stmt = con.prepareStatement(sql.toString()); + stmt.setString(1,name); + stmt.setString(2,kn); + stmt.setString(3,mailaddress); + stmt.setString(4,password); + stmt.setInt(5,department.getIdDepartment()); + stmt.setInt(6,idEmployee); + stmt.executeUpdate(); + System.out.println("更新が完了しました"); + } finally { + DbUtil.closeStatement(this.stmt); + } + } + } else if (rtnList.size()>1) { + System.out.println("入力された情報で部署を1つに特定できません"); + } + } } diff --git a/src/com/rhizome/example/main/MainNew.java b/src/com/rhizome/example/main/MainNew.java index b45652a..9970b36 100644 --- a/src/com/rhizome/example/main/MainNew.java +++ b/src/com/rhizome/example/main/MainNew.java @@ -1,5 +1,6 @@ package com.rhizome.example.main; +import java.nio.charset.Charset; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; @@ -94,14 +95,33 @@ public class MainNew { empList = empDao.selectAll(); break; case "2": - empList = empDao.selectById(Integer.parseInt(inputCheck("社員ID", true))); + String infoEmployee = inputCheck("社員ID", false, "AllowEmpty"); + int idEmployee = 0; // 未入力時は0を渡す + try { + idEmployee = Integer.parseInt(infoEmployee); + } catch (NumberFormatException err) {} + String name = inputCheck("社員名", false, "AllowEmpty"); + String kn = inputCheck("フリガナ", false, "AllowEmpty"); + String mailaddress = inputCheck("メールアドレス", false, "AllowEmpty"); + String password = inputCheck("パスワード", false, "AllowEmpty"); + String infoDepartment = (inputCheck("部署情報", false, "AllowEmpty")); + try { + int idDepartment = Integer.parseInt(infoDepartment); + empList = empDao.empSelect(idEmployee, name, kn, mailaddress, password, idDepartment); + } catch (NumberFormatException err) { + if (infoDepartment.trim().length()==0) { + empList = empDao.empSelect(idEmployee, name, kn, mailaddress, password, 0); // 未入力時は0を渡す + } else { + empList = empDao.empSelect(idEmployee, name, kn, mailaddress, password, infoDepartment); + } + } break; default: return; } for (EmployeeDTO emp : empList) { - System.out.println(emp); - //System.out.println(toStringEmployee(emp)); // 出力文字調整:ongoing + //System.out.println(emp); + System.out.println(toStringEmployee(emp)); } } finally { DbUtil.closeConnection(empDao.con); @@ -132,8 +152,8 @@ public class MainNew { return; } for (DepartmentDTO dep : depList) { - System.out.println(dep); - //System.out.println(toStringDepartment(dep)); // 出力文字調整:ongoing + //System.out.println(dep); + System.out.println(toStringDepartment(dep)); } } finally { DbUtil.closeConnection(depDao.con); @@ -185,11 +205,17 @@ public class MainNew { Connection con = DbUtil.getConnection(); if (tblFlg == 0) { EmployeeDAO empDao = new EmployeeDAO(con); - empDao.empInsert(inputCheck("社員名", false), - inputCheck("フリガナ", false), - inputCheck("メールアドレス", false), - inputCheck("パスワード", false), - inputCheckIdDepartmentRep()); // 部署IDと照合できるまで入力を受け付ける + String name = inputCheck("社員名", false); + String kn = inputCheck("フリガナ", false); + String mailaddress = inputCheck("メールアドレス", false); + String password = inputCheck("パスワード", false); + String infoDepartment = inputCheck("部署情報", false); + try { + int idDepartment = Integer.parseInt(infoDepartment); + empDao.empInsert(name, kn, mailaddress, password, idDepartment); + } catch (NumberFormatException err) { + empDao.empInsert(name, kn, mailaddress, password, infoDepartment); + } } else { DepartmentDAO depDao = new DepartmentDAO(con); depDao.depInsert(inputCheck("部署名", false)); @@ -208,15 +234,24 @@ public class MainNew { Connection con = DbUtil.getConnection(); if (tblFlg == 0) { EmployeeDAO empDao = new EmployeeDAO(con); - int id = Integer.parseInt(inputCheck("社員ID", true)); - if (empDao.selectById(id).size()==0) {} // 社員IDの照合に失敗した場合は更新処理を行わない + int idEmployee = Integer.parseInt(inputCheck("社員ID", true)); + if (empDao.selectById(idEmployee).size()==0) {} // 社員IDの照合に失敗した場合は更新処理を行わない else { - empDao.empUpdate(id, - inputCheck("社員名", false), - inputCheck("フリガナ", false), - inputCheck("メールアドレス", false), - inputCheck("パスワード", false), - inputCheckIdDepartmentRep()); // 部署IDと照合できるまで入力を受け付ける + String name = inputCheck("社員名", false, "AllowEmpty"); + String kn = inputCheck("フリガナ", false, "AllowEmpty"); + String mailaddress = inputCheck("メールアドレス", false, "AllowEmpty"); + String password = inputCheck("パスワード", false, "AllowEmpty"); + String infoDepartment = (inputCheck("部署情報", false, "AllowEmpty")); + try { + int idDepartment = Integer.parseInt(infoDepartment); + empDao.empUpdate(idEmployee, name, kn, mailaddress, password, idDepartment); + } catch (NumberFormatException err) { + if (infoDepartment.trim().length()==0) { + empDao.empUpdate(idEmployee, name, kn, mailaddress, password, 0); // 未入力時は0を渡す + } else { + empDao.empUpdate(idEmployee, name, kn, mailaddress, password, infoDepartment); + } + } } } else { DepartmentDAO depDao = new DepartmentDAO(con); @@ -253,10 +288,10 @@ public class MainNew { * * @param tblFlg * テーブル名判定用フラグ - * @return 変更後フラグ + * @return 変更後テーブル名判定用フラグ */ public static int ChangeTable(int tblFlg) { - if (tblFlg == 0) { + if (tblFlg==0) { tblFlg = 1; } else { tblFlg = 0; @@ -271,8 +306,9 @@ public class MainNew { * 入力項目名 * @param flg * 数値チェック可否フラグ - * @return + * @return 入力内容 */ + // 入力必須 public static String inputCheck(String titleName, boolean flg) { String str = null; while (true) { @@ -296,50 +332,30 @@ public class MainNew { } return str; } - - /** - * 入力値と社員IDを照合し、返却する(照合できるまで入力を受け付ける) - * - * @throws ClassNotFoundException - * @throws SQLException - * @return - */ - public static int inputCheckIdEmployeeRep() throws ClassNotFoundException, SQLException { - int id; - Connection con = DbUtil.getConnection(); - EmployeeDAO empDao = new EmployeeDAO(con); + // 未入力許可 + public static String inputCheck(String titleName, boolean flg, String AllowEmpty) { + String str = null; while (true) { - id = Integer.parseInt(inputCheck("社員ID", true)); - if (empDao.selectById(id).size()!=0) { - break; + System.out.println(titleName + "を入力してください"); + str = sc.nextLine(); + if (flg) { + if (str.trim().length() > 0) { + try { + Integer.parseInt(str); + } catch (NumberFormatException e) { + System.out.println(titleName + "は数値入力です"); + continue; + } + } } + break; } - return id; - } - - /** - * 入力値と部署IDを照合し、返却する(照合できるまで入力を受け付ける) - * - * @throws ClassNotFoundException - * @throws SQLException - * @return - */ - public static int inputCheckIdDepartmentRep() throws ClassNotFoundException, SQLException { - int id; - Connection con = DbUtil.getConnection(); - DepartmentDAO depDao = new DepartmentDAO(con); - while (true) { - id = Integer.parseInt(inputCheck("部署ID", true)); - if (depDao.selectById(id).size()!=0) { - break; - } - } - return id; + return str; } /** * 社員テーブルの出力文字列を生成する - * ・縦の線が揃うように位置を調整する + * ・各列の横幅が揃うように位置を調整する * ・部署IDを部署名に変更する * * @throws ClassNotFoundException @@ -349,58 +365,49 @@ public class MainNew { public static String toStringEmployee(EmployeeDTO employee) throws ClassNotFoundException, SQLException { Connection con = DbUtil.getConnection(); DepartmentDAO depDao = new DepartmentDAO(con); - return fixCharCount(8, employee.getIdEmployee()) - +fixCharCountFull(8, employee.getNmEmployee()) - +fixCharCountFull(12, employee.getKnEmployee()) - +fixCharCount(20, employee.getMailaddress()) - +fixCharCount(12, employee.getPassword()) - +fixCharCountFull(8, depDao.getNmDepartment(employee.getIdDepartment())); + return format(8, employee.getIdEmployee()) + +format(16, employee.getNmEmployee()) + +format(24, employee.getKnEmployee()) + +format(24, employee.getMailaddress()) + +format(8, employee.getPassword()) + +format(16, depDao.getNmDepartment(employee.getIdDepartment())); } /** * 部署テーブルの出力文字列を生成する - * ・縦の線が揃うように位置を調整する + * ・各列の横幅が揃うように位置を調整する * - * * @throws ClassNotFoundException * @throws SQLException * @return 出力文字列 */ public static String toStringDepartment(DepartmentDTO department) throws ClassNotFoundException, SQLException { - return fixCharCount(8, department.getIdDepartment()) - +fixCharCountFull(12, department.getNmDepartment()); + return format(8, department.getIdDepartment()) + +format(12, department.getNmDepartment()); } /** - * 入力文字列の文字数が一定になるように空白を追加する(半角文字/数字/全角文字) + * 出力文字数の表示幅が一定になるように空白を追加する * - * @return + * @param bytelength + * 指定表示幅 + * @param input + * 空白を追加する文字列 + * @return 空白を追加した文字列 */ - public static String fixCharCount(int nChars, String input) { - if (nChars-input.length()>=0) { - for (int i=0; i=0) { + return String.format("%-"+(bytelength-diff)+"s", input); // 表示幅=指定幅-全角文字表示に必要な追加表示幅 + } else { + return input; } - return input; } - public static String fixCharCount(int nChars, int id) { + // 整数入力 + public static String format(int bytelength, int id) { String input = Integer.toString(id); - if (nChars-input.length()>=0) { - for (int i=0; i=0) { - System.out.println(nChars-input.length()); - for (int i=0; i