ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 006. DB 연동 직원 관리 프로그램 구현 (해설)
    SsY/Class 2023. 4. 28. 12:50
    728x90
    JDBC05_1

    • DBConn
      - JDBC05 에서 복사 가져오기

    JDBC05_1 에 동일 작업 예정으로 JDBC05 를 Close Project 로 비활성화 해 둠


    SQL DEVELOPER

    더보기

    ※ 5. INSERT 문에도 서브쿼리 사용 가능
        7. VIEW 의 활용을 잘하자

    SELECT USER
    FROM DUAL;
    --==>> SCOTT
    
    --■■■ 문제 해결을 위한 쿼리문 준비 ■■■--
    
    DESC TBL_EMP;
    --==>>
    /*
    이름       널?       유형           
    -------- -------- ------------ 
    EMP_ID   NOT NULL NUMBER(5)    
    EMP_NAME          VARCHAR2(30) 
    SSN               CHAR(14)     
    IBSADATE          DATE         
    CITY_ID           NUMBER(5)    
    TEL               VARCHAR2(20) 
    BUSEO_ID          NUMBER(5)    
    JIKWI_ID          NUMBER(5)    
    BASICPAY          NUMBER(10)   
    SUDANG            NUMBER(10)   
    */
    
    --1. 지역 리스트 조회 쿼리문 구성   -- 입력 받을 때 사용
    SELECT CITY_NAME
    FROM TBL_CITY;
    --> 한 줄 구성
    SELECT CITY_NAME FROM TBL_CITY
    ;
    
    --2. 부서 리스트 조회 쿼리문 구성   -- 입력 받을 때 사용
    SELECT BUSEO_NAME
    FROM TBL_BUSEO;
    -->
    SELECT BUSEO_NAME FROM TBL_BUSEO
    ;
    
    --3. 직위 리스트 조회 쿼리문 구성   -- 입력 받을 때 사용
    SELECT JIKWI_NAME
    FROM TBL_JIKWI;
    --> 
    SELECT JIKWI_NAME FROM TBL_JIKWI
    ;
    
    --4. 직위에 따른 최소 기본급 조회 쿼리문 구성    -- 입력 받을 때 사용
    SELECT MIN_BASICPAY
    FROM TBL_JIKWI
    WHERE JIKWI_NAME = '부장';
    -->
    SELECT MIN_BASICPAY FROM TBL_JIKWI WHERE JIKWI_NAME = '부장'
    ;
    
    -- 5번 + CITY명 -> CITY_ID
    SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME = '경기'
    ;
    -- 5번 ++ 부서명 -> 부서ID
    SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='개발부'
    ;
    -- 5번 +++ 직위명 -> 직위ID
    SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='대리'
    ;
    
    --5. 데이터(직원 데이터) 입력 쿼리문 구성
    INSERT INTO TBL_EMP(EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG)
    VALUES(EMPSEQ.NEXTVAL, '유서영', '990224-2234567', TO_DATE('2019-06-08','YYYY-MM-DD')
          ,(SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME = '경기')
          ,'010-2222-2222'
          , (SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='개발부')
          , (SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='대리')
          , 5000000
          , 2000000);
    -->
    INSERT INTO TBL_EMP(EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG) VALUES(EMPSEQ.NEXTVAL, '유서영', '990224-2234567', TO_DATE('2019-06-08','YYYY-MM-DD'),(SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME = '경기'),'010-2222-2222', (SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='개발부'), (SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='대리'), 5000000, 2000000)
    ;
    --==>> 1 행 이(가) 삽입되었습니다.
    
    SELECT *
    FROM TBL_EMP;
    
    COMMIT;
    --==>> 커밋 완료.
    --6. 전체 직원 수 출력 쿼리문 구성
    SELECT COUNT(*) AS COUNT
    FROM TBL_EMP;
    -->
    SELECT COUNT(*) AS COUNT FROM TBL_EMP
    ;
    
    --7. 전체 직원 리스트 조회 쿼리문 구성
    -- 사번, 이름, 주민번호, 입사일, 지역, 전화번호, 부서, 직위, 기본급, 수당, 급여
    --SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID, TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG
    --FROM TBL_EMP;
    
    SELECT E.EMP_ID, E.EMP_NAME, E.SSN, TO_CHAR(E.IBSADATE,'YYYY-MM-DD') AS IBSADATE
         , C.CITY_NAME, E.TEL, B.BUSEO_NAME, J.JIKWI_NAME
         , E.BASICPAY, E.SUDANG
         , (E.BASICPAY + E.SUDANG) AS PAY
    FROM TBL_EMP E, TBL_CITY C, TBL_BUSEO B, TBL_JIKWI J
    WHERE E.CITY_ID = C.CITY_ID
      AND E.BUSEO_ID = B.BUSEO_ID
      AND E.JIKWI_ID = J.JIKWI_ID;
    
    -- 7.1 뷰 생성(EMPVIEW)
    CREATE OR REPLACE VIEW EMPVIEW
    AS
    SELECT E.EMP_ID, E.EMP_NAME, E.SSN, TO_CHAR(E.IBSADATE,'YYYY-MM-DD') AS IBSADATE
         , C.CITY_NAME, E.TEL, B.BUSEO_NAME, J.JIKWI_NAME
         , E.BASICPAY, E.SUDANG
         , (E.BASICPAY + E.SUDANG) AS PAY
    FROM TBL_EMP E, TBL_CITY C, TBL_BUSEO B, TBL_JIKWI J
    WHERE E.CITY_ID = C.CITY_ID
      AND E.BUSEO_ID = B.BUSEO_ID
      AND E.JIKWI_ID = J.JIKWI_ID;
    --==>> View EMPVIEW이(가) 생성되었습니다.
    
    -- 생성 된 뷰(VIEW) 확인
    SELECT *
    FROM EMPVIEW;
    --> 
    SELECT * FROM EMPVIEW
    ;
    
    --8. 전체 직원 리스트 출력 쿼리문 구성(사번/이름/부서/직위/급여내림차순)
    -- 사번, 이름, 주민번호, 입사일, 지역, 전화번호, 부서, 직위, 기본급, 수당, 급여
    SELECT EMP_ID, EMP_NAME, SSN, IBSADATE
         , CITY_NAME, TEL, BUSEO_NAME, JIKWI_NAME
         , BASICPAY, SUDANG, PAY
    FROM EMPVIEW
    --ORDER BY EMP_ID;      -- 사번
    --ORDER BY EMP_NAME;    -- 이름
    --ORDER BY BUSEO_NAME;  -- 부서
    --ORDER BY JIKWI_NAME;  -- 직위
    ORDER BY PAY DESC;      -- 기본급
    -->
    SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME, TEL, BUSEO_NAME, JIKWI_NAME, BASICPAY, SUDANG, PAY FROM EMPVIEW ORDER BY EMP_ID
    ;
    -- 전화번호 없는 직원들을 위한 쿼리문 구성
    SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME, NVL(TEL,'번호없음') AS TEL, BUSEO_NAME, JIKWI_NAME, BASICPAY, SUDANG, PAY FROM EMPVIEW ORDER BY EMP_ID
    ;
    
    --9. 검색 직원 수 출력 쿼리문 구성(사번/이름/부서/직위)
    SELECT COUNT(*) AS COUNT
    FROM EMPVIEW
    --WHERE EMP_ID = 1002;
    --WHERE EMP_NAME = '유서영';
    --WHERE BUSEO_NAME='개발부';
    WHERE JIKWI_NAME='대리';
    -->
    SELECT COUNT(*) AS COUNT FROM EMPVIEW WHERE EMP_ID = 1002
    ;
    
    --10. 검색 직원 쿼리문 구성
    SELECT EMP_ID, EMP_NAME, SSN, IBSADATE
        , CITY_NAME, NVL(TEL,'번호없음') AS TEL
        , BUSEO_NAME, JIKWI_NAME
        , BASICPAY, SUDANG, PAY
    FROM EMPVIEW
    --WHERE EMP_ID = 1002;
    --WHERE EMP_NAME = '유서영';
    --WHERE BUSEO_NAME = '개발부';
    WHERE JIKWI_NAME='대리';
    -->
    SELECT EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_NAME, NVL(TEL,'번호없음') AS TEL, BUSEO_NAME, JIKWI_NAME, BASICPAY, SUDANG, PAY FROM EMPVIEW WHERE EMP_ID = 1002
    ;
    
    --11. 직원 데이터 수정 쿼리문 구성
    UPDATE TBL_EMP
    SET EMP_NAME = '박건우', SSN ='991212-1234567'
        , IBSADATE = TO_DATE('2022-10-10','YYYY-MM-DD')
        , CITY_ID =(SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME = '제주')
        , TEL = '010-3333-3333'
        , BUSEO_ID =(SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME = '개발부')
        , JIKWI_ID =(SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME = '과장')
        , BASICPAY = 3000000
        , SUDANG = 3000000
    WHERE EMP_ID = 1002;
    -->
    UPDATE TBL_EMP SET EMP_NAME = '박건우', SSN ='991212-1234567', IBSADATE = TO_DATE('2022-10-10','YYYY-MM-DD'), CITY_ID =(SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME = '제주'), TEL = '010-3333-3333', BUSEO_ID =(SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME = '개발부'), JIKWI_ID =(SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME = '과장'), BASICPAY = 3000000, SUDANG = 3000000 WHERE EMP_ID = 1002
    ;
    --==>> 1 행 이(가) 업데이트되었습니다.
    SELECT *
    FROM TBL_EMP;
    
    COMMIT;
    --==>> 커밋 완료.
    
    --12. 직원 데이터 삭제 쿼리문 구성
    SELECT *
    FROM TBL_EMP
    WHERE EMP_ID=1002;
    
    DELETE
    FROM TBL_EMP
    WHERE EMP_ID=1002;
    -->
    DELETE FROM TBL_EMP WHERE EMP_ID=1002
    ;
    --==> 1 행 이(가) 삭제되었습니다.
    ROLLBACK;
    --==>> 롤백 완료.

    • MemberDTO
      - 주요 속성 구성을 위해 앞서 필요한 쿼리문들을 구성하고 ECLIPSE 에서 작업한다
    /*===================
    	MemberDTO.java
    =====================*/
    
    /*
    이름       널?       유형           
    -------- -------- ------------ 
    EMP_ID   NOT NULL NUMBER(5)    
    EMP_NAME          VARCHAR2(30) 
    SSN               CHAR(14)     
    IBSADATE          DATE         
    CITY_ID           NUMBER(5)    
    TEL               VARCHAR2(20) 
    BUSEO_ID          NUMBER(5)    
    JIKWI_ID          NUMBER(5)    
    BASICPAY          NUMBER(10)   
    SUDANG            NUMBER(10)   
    */
    
    package com.test;
    
    public class MemberDTO
    {
    	// 주요 속성 구성
    	//-- 사번, 이름, 주민번호, 입사일, 지역, 전화번호
    	//  , 부서, 직위, 기본급, 수당, 급여
    	private	int	empId, basicPay, sudang, pay;
    	private String empName, ssn, cityName, tel, buseoName, jikwiName;
    	private String ibsaDate;
    	// ※ 입사일은 오라클에서 날짜 형식으로 처리되지만 문자열로 구성
    	
    	// getter / setter 구성 
    	public int getEmpId()
    	{
    		return empId;
    	}
    	public void setEmpId(int empId)
    	{
    		this.empId = empId;
    	}
    	public int getBasicPay()
    	{
    		return basicPay;
    	}
    	public void setBasicPay(int basicPay)
    	{
    		this.basicPay = basicPay;
    	}
    	public int getSudang()
    	{
    		return sudang;
    	}
    	public void setSudang(int sudang)
    	{
    		this.sudang = sudang;
    	}
    	public int getPay()
    	{
    		return pay;
    	}
    	public void setPay(int pay)
    	{
    		this.pay = pay;
    	}
    	public String getEmpName()
    	{
    		return empName;
    	}
    	public void setEmpName(String empName)
    	{
    		this.empName = empName;
    	}
    	public String getSsn()
    	{
    		return ssn;
    	}
    	public void setSsn(String ssn)
    	{
    		this.ssn = ssn;
    	}
    	public String getCityName()
    	{
    		return cityName;
    	}
    	public void setCityName(String cityName)
    	{
    		this.cityName = cityName;
    	}
    	public String getTel()
    	{
    		return tel;
    	}
    	public void setTel(String tel)
    	{
    		this.tel = tel;
    	}
    	public String getBuseoName()
    	{
    		return buseoName;
    	}
    	public void setBuseoName(String buseoName)
    	{
    		this.buseoName = buseoName;
    	}
    	public String getJikwiName()
    	{
    		return jikwiName;
    	}
    	public void setJikwiName(String jikwiName)
    	{
    		this.jikwiName = jikwiName;
    	}
    	public String getIbsaDate()
    	{
    		return ibsaDate;
    	}
    	public void setIbsaDate(String ibsaDate)
    	{
    		this.ibsaDate = ibsaDate;
    	}
    
    }

    • MemberDAO
      - 검색 결과 직원 수 조회 memberCount(value, key) 오버로딩 (MAP 자료구조 느낌)
      - 직원 데이터 전체 조회와 같이 order by 절만 변하는 경우도 매개변수 넘겨받아서 메소드 하나로 처리가능
      - 직원 데이터 검색 조회는 ( 직원수 조회 + 데이터 전체조회 ) 구조로 메소드 하나로 처리 가능
      - 지역/부서/직위 리스트의 경우 String 단일 값만 들어가기 때문에 ArrayList<String> 으로 return 가능
         이 경우, 반복문에서 단일 String 값이 나올 때마다, 바로 ArrayList 에 String 값 추가 가능
    /*=========================================
    	MemberDAO.java
    	- 데이터베이스 액션 처리 전용 클래스
    ==========================================*/
    
    package com.test;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    
    import com.util.DBConn;
    
    public class MemberDAO
    {
    	// ○ 주요 속성 구성
    	private Connection conn;
    	
    	// ○ 주요 기능 정의
    	
    	//	- 데이터베이스 연결
    	public Connection connection()
    	{
    		conn = DBConn.getConnection();
    		return conn;
    	}
    	
    	//	- 데이터베이스 연결 종료
    	public void close()
    	{
    		DBConn.close();
    	}
    	
    	//	- 직원 데이터 입력
    	public int add(MemberDTO dto) throws SQLException
    	{
    		int result = 0;
    		
    		Statement stmt = conn.createStatement();
    		String sql = String.format("INSERT INTO TBL_EMP"
    				+ "(EMP_ID, EMP_NAME, SSN, IBSADATE, CITY_ID"
    				+ ", TEL, BUSEO_ID, JIKWI_ID, BASICPAY, SUDANG)"
    				+ " VALUES(EMPSEQ.NEXTVAL, '%s', '%s', TO_DATE('%s','YYYY-MM-DD')"
    				+ ",(SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME = '%s')"
    				+ ",'%s'"
    				+ ", (SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME='%s')"
    				+ ", (SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME='%s')"
    				+ ", %d, %d)"
    				, dto.getEmpName(),dto.getSsn(), dto.getIbsaDate()
    				, dto.getCityName(),dto.getTel(), dto.getBuseoName(), dto.getJikwiName()
    				, dto.getBasicPay(), dto.getSudang());
    		result = stmt.executeUpdate(sql);
    		stmt.close();
    		
    		return result;
    	}
    	
    	//	- 전체 직원 수 조회
    	public int memberCount() throws SQLException
    	{
    		int result = 0;
    		
    		Statement stmt = conn.createStatement();
    		String sql = "SELECT COUNT(*) AS COUNT FROM TBL_EMP";
    		
    		ResultSet rs = stmt.executeQuery(sql);
    		
    		//ResultSet 처리 → 반복문 구성(단일 값의 경우 조건문도 가능) → 결과 수신
    		while (rs.next())
    			result = rs.getInt("COUNT");
    		
    		rs.close();
    		stmt.close();
    		
    		return result;
    	}
    	
    	//	- 검색 결과 직원 수 조회
    	// map 
    	// EMP_ID = 1002;			→ key : EMP_ID			/	value : 1002
    	// EMP_NAME = '유서영';		→ key : EMP_NAME		/	value : '유서영'
    	// BUSEO_NAME='개발부';		→ key : BUSEO_NAME		/	value : '개발부'
    	// JIKWI_NAME='대리';		→ key : JIKWI_NAME		/	value : '대리'
    	public int memberCount(String key, String value) throws SQLException
    	{
    		int result = 0;
    		
    		Statement stmt = conn.createStatement();
    		String sql = "";
    		
    		if (key.contentEquals("EMP_ID"))
    			sql = String.format("SELECT COUNT(*) AS COUNT FROM EMPVIEW WHERE %s = %s", key, value);
    		else 
    			sql = String.format("SELECT COUNT(*) AS COUNT FROM EMPVIEW WHERE %s = '%s'", key, value);
    
    		ResultSet rs = stmt.executeQuery(sql);
    		while (rs.next())
    			result = rs.getInt("COUNT");
    		
    		rs.close();
    		stmt.close();		
    		
    		return result;
    	}
    	
    	//	- 직원 데이터 전체 조회(사번/이름/부서/직위/급여내림차순)
    	public ArrayList<MemberDTO> lists(String key) throws SQLException
    	{
    		// 반환할 결과 값 선언 및 초기화
    		ArrayList<MemberDTO> result = new ArrayList<MemberDTO>();
    		
    		// 작업 객체 생성
    		Statement stmt = conn.createStatement();
    		
    		// 쿼리문 준비
    		String sql = String.format("SELECT EMP_ID, EMP_NAME, SSN, IBSADATE"
    								+ ", CITY_NAME, NVL(TEL,'번호없음') AS TEL"
    								+ ", BUSEO_NAME, JIKWI_NAME"
    								+ ", BASICPAY, SUDANG, PAY"
    								+ " FROM EMPVIEW"
    								+ " ORDER BY %s" , key);
    		
    		// 쿼리문 실행
    		ResultSet rs = stmt.executeQuery(sql);
    		
    		// ResultSet 처리 → 반복문 구성
    		while (rs.next())
    		{
    			// 한 개의 MemberDTO 생성 → 비어있는 상태
    			MemberDTO dto = new MemberDTO();
    			
    			// 생성된 MemberDTO 에 값 채워넣기 → 속성값이 채워진 MemberDTO 구성
    			dto.setEmpId(rs.getInt("EMP_ID"));
    			dto.setEmpName(rs.getString("EMP_NAME"));
    			dto.setSsn(rs.getString("SSN"));
    			dto.setIbsaDate(rs.getString("IBSADATE"));
    			dto.setCityName(rs.getString("CITY_NAME"));
    			dto.setTel(rs.getString("TEL"));
    			dto.setBuseoName(rs.getString("BUSEO_NAME"));
    			dto.setJikwiName(rs.getString("JIKWI_NAME"));
    			dto.setBasicPay(rs.getInt("BASICPAY"));
    			dto.setSudang(rs.getInt("SUDANG"));
    			dto.setPay(rs.getInt("PAY"));
    			
    			// ArrayList 에 요소로 추가
    			result.add(dto);
    		}
    		
    		// 리소스 반납
    		rs.close();
    		stmt.close();
    		
    		// 최종 결과값 반환
    		return result;
    	}
    	
    	//	- 직원 데이터 검색 조회(사번/이름/부서/직위)
    	public ArrayList<MemberDTO> searchList(String key, String value) throws SQLException
    	{
    		ArrayList<MemberDTO> result = new ArrayList<MemberDTO>();
    		
    		Statement stmt = conn.createStatement();
    		String sql = "";
    		
    		if (key.equals("EMP_ID"))
    		{
    			sql = String.format("SELECT EMP_ID, EMP_NAME, SSN, IBSADATE"
    								+ ", CITY_NAME, NVL(TEL,'번호없음') AS TEL"
    								+ ", BUSEO_NAME, JIKWI_NAME"
    								+ ", BASICPAY, SUDANG, PAY"
    								+ " FROM EMPVIEW"
    								+ " WHERE %s = %s", key, value);
    		} 
    		else
    		{
    			sql = String.format("SELECT EMP_ID, EMP_NAME, SSN, IBSADATE"
    					+ ", CITY_NAME, NVL(TEL,'번호없음') AS TEL"
    					+ ", BUSEO_NAME, JIKWI_NAME"
    					+ ", BASICPAY, SUDANG, PAY"
    					+ " FROM EMPVIEW"
    					+ " WHERE %s = '%s'", key, value);
    		}
    		
    		ResultSet rs = stmt.executeQuery(sql);
    		while (rs.next())
    		{
    			MemberDTO dto = new MemberDTO();
    						
    			dto.setEmpId(rs.getInt("EMP_ID"));
    			dto.setEmpName(rs.getString("EMP_NAME"));
    			dto.setSsn(rs.getString("SSN"));
    			dto.setIbsaDate(rs.getString("IBSADATE"));
    			dto.setCityName(rs.getString("CITY_NAME"));
    			dto.setTel(rs.getString("TEL"));
    			dto.setBuseoName(rs.getString("BUSEO_NAME"));
    			dto.setJikwiName(rs.getString("JIKWI_NAME"));
    			dto.setBasicPay(rs.getInt("BASICPAY"));
    			dto.setSudang(rs.getInt("SUDANG"));
    			dto.setPay(rs.getInt("PAY"));
    			
    			result.add(dto);
    		}
    		rs.close();
    		stmt.close();
    		
    		return result;
    	}
    	
    	//	지역 리스트 조회 	
    	public ArrayList<String> searchCity() throws SQLException
    	{
    		ArrayList<String> result = new ArrayList<String>();
    		
    		Statement stmt = conn.createStatement();
    		String sql = "SELECT CITY_NAME FROM TBL_CITY";
    		ResultSet rs = stmt.executeQuery(sql);
    		while (rs.next())
    			result.add(rs.getString("CITY_NAME"));
    		rs.close();
    		stmt.close();
    		
    		return result;
    	}
    	
    	//	부서 리스트 조회
    	public ArrayList<String> searchBuseo() throws SQLException
    	{
    		ArrayList<String> result = new ArrayList<String>();
    		
    		Statement stmt = conn.createStatement();
    		String sql = "SELECT BUSEO_NAME FROM TBL_BUSEO";
    		ResultSet rs = stmt.executeQuery(sql);
    		while (rs.next())
    			result.add(rs.getString("BUSEO_NAME"));
    		rs.close();
    		stmt.close();
    		
    		return result;
    	}
    	
    	//	직위 리스트 조회
    	public ArrayList<String> searchJikwi() throws SQLException
    	{
    		ArrayList<String> result = new ArrayList<String>();
    		
    		Statement stmt = conn.createStatement();
    		String sql = "SELECT JIKWI_NAME FROM TBL_JIKWI";
    		ResultSet rs = stmt.executeQuery(sql);
    		while (rs.next())
    			result.add(rs.getString("JIKWI_NAME"));
    		rs.close();
    		stmt.close();
    		
    		return result;
    	}
    	
    	// 직위에 따른 최소 기본급 검색
    	public int searchBasicPay(String jikwi) throws SQLException
    	{
    		int result = 0;
    		
    		Statement stmt = conn.createStatement();
    		String sql = String.format("SELECT MIN_BASICPAY FROM TBL_JIKWI WHERE JIKWI_NAME = '%s'", jikwi);
    		ResultSet rs = stmt.executeQuery(sql);
    		while (rs.next())
    			result = rs.getInt("MIN_BASICPAY");
    		rs.close();
    		stmt.close();
    		
    		return result;
    	}
    	
    	// 직원 데이터 수정
    	public int modify(MemberDTO dto) throws SQLException
    	{
    		int result = 0;
    		
    		Statement stmt = conn.createStatement();
    		String sql = String.format("UPDATE TBL_EMP"
    								+ " SET EMP_NAME = '%s', SSN ='%s', IBSADATE = TO_DATE('%s','YYYY-MM-DD')"
    								+ ", CITY_ID =(SELECT CITY_ID FROM TBL_CITY WHERE CITY_NAME = '%s')"
    								+ ", TEL = '010-3333-3333'"
    								+ ", BUSEO_ID =(SELECT BUSEO_ID FROM TBL_BUSEO WHERE BUSEO_NAME = '%s')"
    								+ ", JIKWI_ID =(SELECT JIKWI_ID FROM TBL_JIKWI WHERE JIKWI_NAME = '%s')"
    								+ ", BASICPAY = %d, SUDANG = %d"
    								+ " WHERE EMP_ID = %d"
    								, dto.getEmpName(), dto.getSsn(), dto.getIbsaDate()
    								, dto.getCityName(), dto.getTel(), dto.getBuseoName(), dto.getJikwiName()
    								, dto.getBasicPay(), dto.getSudang(), dto.getEmpId() );
    		result = stmt.executeUpdate(sql);
    		stmt.close();
    		
    		return result;
    	}
    	
    	// 직원 데이터 삭제
    	public int remove(int empId) throws SQLException
    	{
    		int result = 0;
    		
    		Statement stmt = conn.createStatement();
    		String sql = String.format("DELETE FROM TBL_EMP WHERE EMP_ID=%d", empId);
    		result = stmt.executeUpdate(sql);
    		stmt.close();
    		
    		return result;
    	}
    	
    }

    • MemberProcess
      - 해당 클래스 생성 이유 : DAO 에서 기능 + 입출력 시 사용자에게 메시지 출력/ 데이터 입력 받아오는 역할
      - 메소드 시작시 데이터베이스 연결되어야 사용가능
      - StringBuilder 클래스의 append() 활용법
    /*===============================================
    	MemberProcess.java
    	- 콘솔 기반 서브 메뉴 입출력 전용 클래스
    ================================================*/
    
    package com.test;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class MemberProcess
    {
    	// 주요 속성 구성
    	private MemberDAO dao;
    	
    	// 생성자 정의(사용자 정의 생성자)
    	public MemberProcess()
    	{
    		dao = new MemberDAO();
    	}
    	
    	// 직원 데이터 입력 메소드 정의
    	public void memberInsert()
    	{
    		Scanner sc = new Scanner(System.in);
    		
    		try
    		{
    			// 데이터베이스 연결
    			dao.connection();
    			
    			// 지역 리스트 구성
    			ArrayList<String> citys = dao.searchCity();
    			StringBuilder cityStr = new StringBuilder();
    			for (String city : citys)
    				cityStr.append(city + "/");
    				//-- "강원/경기/경남/.../충북/"
    			
    			// 부서 리스트 구성
    			ArrayList<String> buseos = dao.searchBuseo();
    			StringBuilder buseoStr = new StringBuilder();
    			for (String buseo : buseos)
    				buseoStr.append(buseo + "/");
    				//-- "개발부/기획부/.../홍보부/"
    			
    			// 직위 리스트 구성
    			ArrayList<String> jikwis = dao.searchJikwi();
    			StringBuilder jikwiStr = new StringBuilder();
    			for (String jikwi : jikwis)
    				jikwiStr.append(jikwi + "/");
    				//-- "사장/전무/.../사원/"
    			
    			// 사용자에게 보여지는 화면 처리
    			/*
    			직원 정보 입력 ------------------------------------------------------------------
    			이름 : 김재혁
    			주민등록번호(yymmdd-nnnnnnn) : 980202-1234567
    			입사일(yyyy-mm-dd) : 2019-06-08
    			지역(강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/) : 경기
    			전화번호 : 010-1212-3434
    			부서(개발부/기획부/영업부/인사부/자재부/총무부/홍보부/) : 개발부
    			직위(사장/전무/상무/이사/부장/차장/과장/대리/사원/) : 대리
    			기본급(최소 1800000 이상) : 4000000	
    			수당 : 1000000
    			
    			직원 정보 입력 완료~!!!
    			------------------------------------------------------------------ 직원 정보 입력 
    			*/
    			System.out.println();
    			System.out.println("직원 정보 입력 ------------------------------------------------------------------");
    			System.out.print("이름 : ");
    			String empName = sc.next();
    			System.out.print("주민등록번호(yymmdd-nnnnnnn) : ");
    			String ssn = sc.next();
    			System.out.print("입사일(yyyy-mm-dd) : ");
    			String ibsaDate = sc.next();
    			System.out.printf("지역(%s) : ", cityStr.toString());
    			String cityName = sc.next();
    			System.out.print("전화번호 : ");
    			String tel = sc.next();
    			System.out.printf("부서(%s) : ", buseoStr.toString());
    			String buseoName = sc.next();
    			System.out.printf("직위(%s) : ", jikwiStr.toString());
    			String jikwiName = sc.next();
    			System.out.printf("기본급(최소 %d 이상) : ", dao.searchBasicPay(jikwiName));
    			int basicPay = sc.nextInt();
    			System.out.print("수당 : ");
    			int sudang = sc.nextInt();
    			System.out.println();
    			
    			MemberDTO dto = new MemberDTO();
    			dto.setEmpName(empName);
    			dto.setSsn(ssn);
    			dto.setIbsaDate(ibsaDate);
    			dto.setCityName(cityName);
    			dto.setTel(tel);
    			dto.setBuseoName(buseoName);
    			dto.setJikwiName(jikwiName);
    			dto.setBasicPay(basicPay);
    			dto.setSudang(sudang);
    			
    			int result = dao.add(dto);
    			if (result>0)
    				System.out.println("직원 정보 입력 완료~!!!");
    			
    			System.out.println("------------------------------------------------------------------ 직원 정보 입력 ");
    			
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		finally
    		{
    			try
    			{
    				dao.close();
    			} catch (Exception e)
    			{
    				System.out.println(e.toString());
    			}
    		}
    	}// end memberInsert()
    	
    	// 직원 전체 출력 메소드 정의
    	public void memberList()
    	{
    		Scanner sc = new Scanner(System.in);
    		
    		// 서브 메뉴 출력 안내
    		System.out.println("");
    		System.out.println("1. 사번 정렬");				// EMP_ID
    		System.out.println("2. 이름 정렬");				// EMP_NAME
    		System.out.println("3. 부서 정렬");				// BUSEO_NAME
    		System.out.println("4. 직위 정렬");				// JIKWI_NAME
    		System.out.println("5. 급여 내림차순 정렬");	// PAY DESC
    		System.out.print(">> 항목 선택(1~5, -1종료)");
    		String menuStr = sc.next();
    		
    		try
    		{
    			int menu = Integer.parseInt(menuStr);
    			if (menu==-1)
    				return;	// 메인 메뉴로 돌아감
    			
    			String key = "";
    			
    			switch (menu)
    			{
    			case 1:
    				key = "EMP_ID";
    				break;
    			case 2:
    				key = "EMP_NAME";
    				break;
    			case 3:
    				key = "BUSEO_NAME";
    				break;
    			case 4:
    				key = "JIKWI_NAME";
    				break;
    			case 5:
    				key = "PAY DESC";
    				break;
    			}
    			
    			// 데이터베이스 연결
    			dao.connection();
    			
    			// 직원 리스트 출력
    			System.out.println();
    			System.out.printf("전체 인원 : %d 명\n", dao.memberCount());
    			System.out.println("사번 이름 주민번호 입사일 지역 전화번호 부서 직위 기본급 수당 급여");
    			ArrayList<MemberDTO> memList = dao.lists(key);
    			for (MemberDTO dto : memList)
    			{
    				System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %7d %8d\n"
    								, dto.getEmpId(), dto.getEmpName(), dto.getSsn()
    								, dto.getIbsaDate(), dto.getCityName(), dto.getTel()
    								, dto.getBuseoName(), dto.getJikwiName()
    								, dto.getBasicPay(), dto.getSudang(), dto.getPay());
    			}
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		finally
    		{
    			try
    			{
    				dao.close();
    			} catch (Exception e)
    			{
    				System.out.println(e.toString());
    			}
    		}
    		
    	}// end memberList()
    	
    	// 직원 검색 출력 메소드 정의
    	public void memberSearch()
    	{
    		Scanner sc = new Scanner(System.in);
    		
    		// 서브 메뉴 출력 안내
    		System.out.println("");
    		System.out.println("1. 사번 검색");				// → key : EMP_ID			/	value : 1002  
    		System.out.println("2. 이름 검색");				// → key : EMP_NAME		/	value : '유서영' 
    		System.out.println("3. 부서 검색");				// → key : BUSEO_NAME		/	value : '개발부' 
    		System.out.println("4. 직위 검색");				// → key : JIKWI_NAME		/	value : '대리'  
    		System.out.print(">> 항목 선택(1~4, -1종료) : ");
    		String menuStr = sc.next();
    		
    		try
    		{
    			int menu = Integer.parseInt(menuStr);
    			if (menu==-1)
    				return;	// 메인 메뉴로 돌아감
    			
    			String key = "";
    			String value = "";
    			
    			switch (menu)
    			{
    				case 1:
    					key = "EMP_ID";
    					System.out.println();
    					System.out.print(">> 검색할 사원번호 입력 : ");
    					value = sc.next();
    					break;
    				case 2:
    					key = "EMP_NAME";
    					System.out.println();
    					System.out.print(">> 검색할 이름 입력 : ");
    					value = sc.next();
    					break;
    				case 3:
    					key = "BUSEO_NAME";
    					System.out.println();
    					System.out.print(">> 검색할 부서명 입력 : ");
    					value = sc.next();
    					break;
    				case 4:
    					key = "JIKWI_NAME";
    					System.out.println();
    					System.out.print(">> 검색할 직위명 입력 : ");
    					value = sc.next();
    					break;
    			}
    			
    			// 데이터베이스 연결
    			dao.connection();
    			
    			// 검색 결과 출력
    			System.out.println();
    			System.out.printf("검색 인원 : %d 명\n", dao.memberCount(key, value));
    			System.out.println("사번 이름 주민번호 입사일 지역 전화번호 부서 직위 기본급 수당 급여");
    			ArrayList<MemberDTO> memList = dao.searchList(key, value);
    			for (MemberDTO dto : memList)
    			{
    				System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %7d %8d\n"
    								, dto.getEmpId(), dto.getEmpName(), dto.getSsn()
    								, dto.getIbsaDate(), dto.getCityName(), dto.getTel()
    								, dto.getBuseoName(), dto.getJikwiName()
    								, dto.getBasicPay(), dto.getSudang(), dto.getPay());
    			}
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		finally
    		{
    			try
    			{
    				dao.close();
    			} catch (Exception e)
    			{
    				System.out.println(e.toString());
    			}
    		}
    	}// end memberSearch()
    	
    	// 직원 정보 수정 메소드 정의
    	public void memberUpdate()
    	{
    		Scanner sc = new Scanner(System.in);
    		
    		try
    		{
    			// 수정할 대상 입력받기
    			System.out.println();
    			System.out.print("수정할 직원의 사원번호 입력 : ");
    			String value = sc.next();
    			
    			// 데이터베이스 연결
    			dao.connection();
    			
    			ArrayList<MemberDTO> memList = dao.searchList("EMP_ID", value);
    			
    			if (memList.size() > 0)
    			{
    				// 수정 대상을 찾은 경우...
    				
    				// 지역 리스트 구성
    				ArrayList<String> citys = dao.searchCity();
    				StringBuilder cityStr = new StringBuilder();
    				for (String city : citys)
    					cityStr.append(city + "/");
    				
    				// 부서 리스트 구성
    				ArrayList<String> buseos = dao.searchBuseo();
    				StringBuilder buseoStr = new StringBuilder();
    				for (String buseo : buseos)
    					buseoStr.append(buseo + "/");
    				
    				// 직위 리스트 구성
    				ArrayList<String> jikwis = dao.searchJikwi();
    				StringBuilder jikwiStr = new StringBuilder();
    				for (String jikwi : jikwis)
    					jikwiStr.append(jikwi + "/");
    				
    				// 사용자에게 보여지는 화면 처리
    				/*
    				직원 정보 수정 ------------------------------------------------------------------
    				기존 이름 : 김재혁
    				수정 이름 : 이재혁		|	- 	(안바꾸겠다는 의미)
    				기존 주민등록번호(yymmdd-nnnnnnn) : 980202-1234567
    				수정 주민등록번호(yymmdd-nnnnnnn) : 980202-2234567	|	-
    				기존 입사일(yyyy-mm-dd) : 2019-06-08
    				수정 입사일(yyyy-mm-dd) : 2019-07-08	|	-
    				기존 지역 : 경기
    				수정 지역(강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/) : 서울	|	-
    				기존 전화번호 : 010-1212-3434
    				수정 전화번호 : 010-1212-3456	|	-
    				기존 부서 : 개발부
    				수정 부서(개발부/기획부/영업부/인사부/자재부/총무부/홍보부/) : 기획부	|	-
    				기존 직위 : 대리
    				수정 직위(사장/전무/상무/이사/부장/차장/과장/대리/사원/) : 과장	|	-
    				기존 기본급 : 4000000
    				수정 기본급(최소 2260000 이상) : 4000000	|	-
    				기존 수당 : 1000000
    				수정 수당 : 1000000	|	-
    				
    				직원 정보 수정 완료~!!!
    				------------------------------------------------------------------ 직원 정보 수정 
    				*/
    				
    				MemberDTO mMember = memList.get(0);
    				
    				int mEmpId = mMember.getEmpId();
    				String mEmpName = mMember.getEmpName();
    				String mSsn = mMember.getSsn();
    				String mIbsaDate = mMember.getIbsaDate();
    				String mCityName = mMember.getCityName();
    				String mTel = mMember.getTel();
    				String mBuseoName = mMember.getBuseoName();
    				String mJikwiName = mMember.getJikwiName();
    				int mBasicPay = mMember.getBasicPay();
    				int mSudang = mMember.getSudang();
    				
    				System.out.println();
    				System.out.println("직원 정보 수정 ------------------------------------------------------------------");
    				System.out.printf("기존 이름 : %s\n", mEmpName);
    				System.out.print("수정 이름 : ");
    				String empName = sc.next();
    				if (empName.equals("-"))
    					empName = mEmpName;
    				
    				System.out.printf("기존 주민등록번호 : %s\n", mSsn);
    				System.out.print("수정 주민등록번호(yymmdd-nnnnnnn) : ");
    				String ssn = sc.next();
    				if (ssn.equals("-"))
    					ssn = mSsn;
    				
    				System.out.printf("기존 입사일 : %s\n", mIbsaDate);
    				System.out.print("수정 입사일(yyyy-mm-dd) : ");
    				String ibsaDate = sc.next();
    				if (ibsaDate.equals("-"))
    					ibsaDate = mIbsaDate;
    				
    				System.out.printf("기존 지역 : %s\n", mCityName);
    				System.out.printf("수정 지역(%s) : ", cityStr.toString());
    				String cityName = sc.next();
    				if (cityName.equals("-"))
    					cityName = mCityName;
    				
    				System.out.printf("기존 전화번호 : %s\n", mTel);
    				System.out.print("수정 전화번호 : ");
    				String tel = sc.next();
    				if (tel.equals("-"))
    					tel = mTel;
    				
    				System.out.printf("기존 부서 : %s\n", mBuseoName);
    				System.out.printf("수정 부서(%s) : ", buseoStr.toString());
    				String buseoName = sc.next();
    				if (buseoName.equals("-"))
    					buseoName = mBuseoName;
    				
    				System.out.printf("기존 직위 : %s\n", mJikwiName);
    				System.out.printf("수정 직위(%s) : ", jikwiStr.toString());
    				String jikwiName = sc.next();
    				if (jikwiName.equals("-"))
    					jikwiName = mJikwiName;
    				
    				System.out.printf("기존 기본급 : %d\n", mBasicPay);
    				System.out.printf("수정 기본급(최소 %d 이상) : ",dao.searchBasicPay(jikwiName));
    				String basicPayStr = sc.next();
    				int basicPay = 0;
    				if (basicPayStr.equals("-"))
    					basicPay = mBasicPay;
    				else
    					basicPay = Integer.parseInt(basicPayStr);
    				
    				System.out.printf("기존 수당 : %d\n", mSudang);
    				System.out.print("수정 수당 : ");
    				String sudangStr = sc.next();
    				int sudang = 0;
    				if (sudangStr.equals("-"))
    					sudang = mSudang;
    				else
    					sudang = Integer.parseInt(sudangStr);
    				
    				System.out.println();
    				
    				// 새로 입력받은(수정한) 내용을 통해 DTO 구성
    				MemberDTO member = new MemberDTO();
    				
    				member.setEmpId(mEmpId);		// check!!!
    				member.setEmpName(empName);
    				member.setSsn(ssn);
    				member.setIbsaDate(ibsaDate);
    				member.setCityName(cityName);
    				member.setTel(tel);
    				member.setBuseoName(buseoName);
    				member.setJikwiName(jikwiName);
    				member.setBasicPay(basicPay);
    				member.setSudang(sudang);
    				
    				int result = dao.modify(member);
    				if (result > 0)
    					System.out.println("직원 정보 수정 완료~!!!");
    				
    				System.out.println("------------------------------------------------------------------ 직원 정보 수정 ");
    								
    				/* 내 풀이 ===========================================================================================
    				MemberDTO dto = memList.get(0);
    				
    				System.out.println();
    				System.out.println("직원 정보 수정 ------------------------------------------------------------------");
    				System.out.printf("기존 이름 : %s\n", dto.getEmpName());
    				System.out.print("수정 이름 : ");
    				String name = sc.next();
    				if (!name.equals("-"))
    					dto.setEmpName(name);
    				System.out.printf("기존 주민등록번호(yymmdd-nnnnnnn) : %s\n", dto.getSsn());
    				System.out.print("수정 주민등록번호(yymmdd-nnnnnnn) : ");
    				String ssn = sc.next();
    				if (!ssn.equals("-"))
    					dto.setEmpName(ssn);
    				System.out.printf("기존 입사일(yyyy-mm-dd) : %s\n", dto.getIbsaDate());
    				System.out.print("수정 입사일(yyyy-mm-dd) : ");
    				String ibsaDate = sc.next();
    				if (!ibsaDate.equals("-"))
    					dto.setIbsaDate(ibsaDate);
    				System.out.printf("기존 지역 : %s\n", dto.getCityName());
    				System.out.printf("수정 지역(%s) : ", cityStr.toString());
    				String cityName = sc.next();
    				if (!cityName.equals("-"))
    					dto.setCityName(cityName);
    				System.out.printf("기존 전화번호 : %s\n", dto.getTel());
    				System.out.print("수정 전화번호 : ");
    				String tel = sc.next();
    				if (!tel.equals("-"))
    					dto.setTel(tel);
    				System.out.printf("기존 부서 : %s\n", dto.getBuseoName());
    				System.out.printf("수정 부서(%s) : ", buseoStr.toString());
    				String buseoName = sc.next();
    				if (!buseoName.equals("-"))
    					dto.setBuseoName(buseoName);
    				System.out.printf("기존 직위 : %s\n", dto.getJikwiName());
    				System.out.printf("수정 직위(%s) : ", jikwiStr.toString());
    				String jikwiName = sc.next();
    				if (!jikwiName.equals("-"))
    					dto.setJikwiName(jikwiName);
    				System.out.printf("기존 기본급 : %s\n", dto.getBasicPay());
    				System.out.printf("수정 기본급(최소 %d 이상) : ",dao.searchBasicPay(dto.getJikwiName()));
    				String basicPay = sc.next();
    				if (!basicPay.equals("-"))
    					dto.setBasicPay(Integer.parseInt(basicPay));
    				System.out.printf("기존 수당 : %s\n", dto.getSudang());
    				System.out.print("수정 수당 : ");
    				String sudang = sc.next();
    				if (!sudang.equals("-"))
    					dto.setBasicPay(Integer.parseInt(sudang));
    
    				System.out.println();
    				
    				int result = dao.modify(dto);
    				if (result > 0)
    				{
    					System.out.println("직원 정보 수정 완료~!!!");
    					System.out.println("------------------------------------------------------------------ 직원 정보 수정 ");
    				}
    				===========================================================================================================*/
    			}
    			else
    			{
    				// 수정 대상을 찾지 못한 경우...
    				System.out.println(">> 수정 대상을 검색하지 못했습니다.");
    			}
    			
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		finally
    		{
    			try
    			{
    				dao.close();
    			} catch (Exception e)
    			{
    				System.out.println(e.toString());
    			}
    		}
    	}// end memberUpdate()
    	
    	
    	// 직원 정보 삭제 메소드 정의
    	public void memberDelete()
    	{
    		Scanner sc = new Scanner(System.in);
    		
    		try
    		{
    			System.out.print("삭제할 직원의 사원번호 입력 : ");
    			String value = sc.next();
    			
    			// 사용자가 입력한 직원의 사원번호에 대한 유효성 검사 코드 삽입 가능
    			
    			// 직원 정보 확인 후 삭제여부 결정
    			dao.connection();
    			ArrayList<MemberDTO> members = dao.searchList("EMP_ID", value);
    			
    			if (members.size()>0)
    			{
    				// 삭제 대상을 찾은 경우
    				System.out.println();
    				System.out.println("사번 이름 주민번호 입사일 지역 전화번호 부서 직위 기본급 수당 급여");
    				for (MemberDTO dto : members)
    				{
    					System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %7d %8d\n"
    							, dto.getEmpId(), dto.getEmpName(), dto.getSsn()
    							, dto.getIbsaDate(), dto.getCityName(), dto.getTel()
    							, dto.getBuseoName(), dto.getJikwiName()
    							, dto.getBasicPay(), dto.getSudang(), dto.getPay());
    				}
    				
    				System.out.println("\n정말 삭제하시겠습니까?(Y/N) : ");
    				String response = sc.next();
    				if (response.equals("Y")||response.equals("y"))
    				{
    					int result = dao.remove(Integer.parseInt(value));
    					if (result > 0)
    						System.out.println("직원 데이터가 정상적으로 삭제되었습니다.");
    				}
    				
    			} else
    			{
    				// 삭제 대상을 찾지 못한 경우
    				System.out.println("삭제 대상을 찾지 못하였습니다.");
    			}
    			
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		finally
    		{
    			try
    			{
    				dao.close();
    			} catch (Exception e)
    			{
    				System.out.println(e.toString());
    			}
    		}
    	}// end memberDelete()
    	
    	
    } // end class MemberProcess

    • MemberMain
      - Main() 에 Process 호출하여 처리하기 → 구문 먼저 작성 전에 메소드 들이 잘 작동하는지 먼저 확인
    /*=====================
    	MemberMain.java
    =======================*/
    /*
    ○ 직원 관리 프로그램을 구현한다.
    	- 데이터베이스 연동 프로그램으로 작성한다.
    	- MemberDTO, MemberDAO 를 활용한다.
    	- 메뉴 구성 및 기능을 구현한다. → MemberProcess
    	
    실행 예)
    
    ======[ 직원 관리 ]======
    =========================
    1. 직원 정보 입력
    2. 직원 전체 출력
       - 사번 정렬
       - 이름 정렬
       - 부서 정렬
       - 직위 정렬
       - 급여 내림차순 정렬
    3. 직원 검색 출력
       - 사번 검색
       - 이름 검색
       - 부서 검색
       - 직위 검색
    4. 직원 정보 수정
    5. 직원 정보 삭제
    =========================
    >> 메뉴 선택(1~5, -1 종료) : 1
    
    직원 정보 입력 ------------------------------------------------------------------
    이름 : 김재혁
    주민등록번호(yymmdd-nnnnnnn) : 980202-1234567
    입사일(yyyy-mm-dd) : 2019-06-08
    지역(강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/) : 경기				-- 지역도 city 테이블에 있는 것 만 출력
    전화번호 : 010-1212-3434
    부서(개발부/기획부/영업부/인사부/자재부/총무부/홍보부/) : 개발부						-- 부서도 buseo 테이블에 있는 것 만 출력
    직위(사장/전무/상무/이사/부장/차장/과장/대리/사원/) : 대리
    기본급(최소 1800000 이상) : 4000000														-- 직위에 따른 최소 급여로 출력
    수당 : 1000000
    
    직원 정보 입력 완료~!!!
    ------------------------------------------------------------------ 직원 정보 입력 
    
    ======[ 직원 관리 ]======
    =========================
    1. 직원 정보 입력
    2. 직원 전체 출력
       - 사번 정렬
       - 이름 정렬
       - 부서 정렬
       - 직위 정렬
       - 급여 내림차순 정렬
    3. 직원 검색 출력
       - 사번 검색
       - 이름 검색
       - 부서 검색
       - 직위 검색
    4. 직원 정보 수정
    5. 직원 정보 삭제
    =========================
    >> 메뉴 선택(1~5, -1 종료) : 2
    
    1. 사번 정렬
    2. 이름 정렬
    3. 부서 정렬
    4. 직위 정렬
    5. 급여 내림차순 정렬
    >> 선택(1~5, -1 종료) : -1
    
    ======[ 직원 관리 ]======
    =========================
    1. 직원 정보 입력
    2. 직원 전체 출력
       - 사번 정렬
       - 이름 정렬
       - 부서 정렬
       - 직위 정렬
       - 급여 내림차순 정렬
    3. 직원 검색 출력
       - 사번 검색
       - 이름 검색
       - 부서 검색
       - 직위 검색
    4. 직원 정보 수정
    5. 직원 정보 삭제
    =========================
    >> 메뉴 선택(1~5, -1 종료) : 2
    
    1. 사번 정렬
    2. 이름 정렬
    3. 부서 정렬
    4. 직위 정렬
    5. 급여 내림차순 정렬
    >> 선택(1~5, -1 종료) : 1
    
    전체 인원 : xx 명
    사번 이름 주민번호 입사일 지역 전화번호 부서 직위 기본급 수당 급여		-- id 가 아닌 실제 값이 출력되게 구성
    1001																	-- 급여 = 기본급 + 수당
    1002
    1003
      :								...
    1060 
    
    
    ======[ 직원 관리 ]======
    =========================
    1. 직원 정보 입력
    2. 직원 전체 출력
       - 사번 정렬
       - 이름 정렬
       - 부서 정렬
       - 직위 정렬
       - 급여 내림차순 정렬
    3. 직원 검색 출력
       - 사번 검색
       - 이름 검색
       - 부서 검색
       - 직위 검색
    4. 직원 정보 수정
    5. 직원 정보 삭제
    =========================
    >> 메뉴 선택(1~5, -1 종료) : 
     */
    package com.test;
    
    import java.util.Scanner;
    
    public class MemberMain
    {
    
    	public static void main(String[] args)
    	{
    		Scanner sc = new Scanner(System.in);
    		MemberProcess prc = new MemberProcess();
    		
    		// 직원 데이터 입력 메소드 호출
    		//prc.memberInsert();
    		
    		// 직원 데이터 전체 출력 메소드 호출
    		//prc.memberList();
    		
    		// 직원 검색 메소드 호출
    		//prc.memberSearch();
    		
    		// 직원 데이터 수정 메소드 호출
    		//prc.memberUpdate();
    		
    		// 직원 데이터 삭제 메소드 호출
    		// prc.memberDelete();
    		
    		do
    		{
    			System.out.println();
    			System.out.println("======[ 직원 관리 ]======   ");
    			System.out.println("========================");
    			System.out.println("1. 직원 정보 입력             ");
    			System.out.println("2. 직원 전체 출력             ");
    			System.out.println("   - 사번 정렬              ");
    			System.out.println("   - 이름 정렬              ");
    			System.out.println("   - 부서 정렬              ");
    			System.out.println("   - 직위 정렬              ");
    			System.out.println("   - 급여 내림차순 정렬         ");
    			System.out.println("3. 직원 검색 출력             ");
    			System.out.println("   - 사번 검색              ");
    			System.out.println("   - 이름 검색              ");
    			System.out.println("   - 부서 검색              ");
    			System.out.println("   - 직위 검색              ");
    			System.out.println("4. 직원 정보 수정             ");
    			System.out.println("5. 직원 정보 삭제             ");
    			System.out.println("========================");
    			System.out.print(">> 메뉴 선택(1~5, -1 종료) : ");
    
    			String menuStr = sc.next();
    			
    			try
    			{
    				int menu= Integer.parseInt(menuStr);
    				
    				if (menu == -1)
    					break;
    
    				switch (menu)
    				{
    					case 1:
    						// 직원 데이터 입력 메소드 호출
    						prc.memberInsert();
    						break;
    					case 2:
    						// 직원 전체 출력 메소드 호출
    						prc.memberList();
    						break;
    					case 3:
    						// 직원 검색 출력 메소드 호출
    						prc.memberSearch();
    						break;
    					case 4:
    						// 직원 데이터 수정 메소드 호출
    						prc.memberUpdate();
    						break;
    					case 5:
    						// 직원 데이터 삭제 메소드 호출
    						prc.memberDelete();
    						break;
    				}
    			} catch (Exception e)
    			{
    				System.out.println(e.toString());
    			}
    		} while (true);
    		
    		System.out.println();
    		System.out.println(">> 프로그램이 종료되었습니다.");
    	}
    	
    
    }
    728x90
Designed by planet-si