JDBC 직원 관리 프로그램

32924 단어 JDBCJDBC
○ 직원 관리 프로그램을 구현한다.
   - 데이터베이스 연동 프로그램으로 작성
   - MemberDTO, MemberDAO 를 활용한다.
   - 메뉴 구성 및 기능을 구현한다 → Process
   
     
실행 예)

=======================
=====[ 직원 관리 ]=====
1. 직원 정보 입력
2. 직원 전체 출력
   - 사번 정렬
   - 이름 정렬
   - 부서 정렬
   - 직위 정렬
   - 급여 내림차순 정렬
3. 직원 검색 출력
   - 사번 검색
   - 이름 검색
   - 부서 검색
   - 직위 검색
4. 직원 정보 수정
5. 직원 정보 삭제
=======================
>> 메뉴 선택(1~5, -1:종료) : 1

직원 정보 입력 ---------------------------------------------------------- (정적인 데이터들이 아님)
이름 : 김정용
주민등록번호(yymmdd-nnnnnn) : 960608-2234567
입사일(yyyy-mm-dd) : 2019-06-08
지역(강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/) : 경기
전화번호 : 010-2731-3153
부서(개발부/기획부/영업부/인사부/자재부/총무부/홍보부/) : 개발부
직위 (사장/전무/상무/이사/부장/차장/과장/대리/사원/) : 대리
기본급(최소 1800000 이상) : 5000000
수당 : 2000000

직원 정보 입력 완료
---------------------------------------------------------- 직원 정보 입력


=====[ 직원 관리 ]=====
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명
사번   이름   주민번호   입사일   지역   전화번호   부서   직위    기본급   수당   급여
1001
1002
1003
 :                                           ...

1060


=====[ 직원 관리 ]=====
1. 직원 정보 입력
2. 직원 전체 출력
   - 사번 정렬
   - 이름 정렬
   - 부서 정렬
   - 직위 정렬
   - 급여 내림차순 정렬
3. 직원 검색 출력
   - 사번 검색
   - 이름 검색
   - 부서 검색
   - 직위 검색
4. 직원 정보 수정
5. 직원 정보 삭제
=======================
>> 메뉴 선택(1~5, -1:종료) : 3

1. 사번 검색
2. 이름 검색
3. 부서 검색
4. 직위 검색
>> 선택(1~4, -1:종료) : 1

검색할 사번 입력 : ...


=====[ 직원 관리 ]=====
1. 직원 정보 입력
2. 직원 전체 출력
   - 사번 정렬
   - 이름 정렬
   - 부서 정렬
   - 직위 정렬
   - 급여 내림차순 정렬
3. 직원 검색 출력
   - 사번 검색
   - 이름 검색
   - 부서 검색
   - 직위 검색
4. 직원 정보 수정
5. 직원 정보 삭제
=======================
>> 메뉴 선택(1~5, -1:종료) : -1


프로그램이 종료되었습니다.

DBConn.java


package com.util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBConn
{
	private static Connection dbConn;
	
	public static Connection getConnection()
	{
		if (dbConn == null)
		{
			try
			{
				String url = "jdbc:oracl:thin:@localhost:1521:xe";
				String user = "scott";
				String pwd = "tiger";
				
				Class.forName("oracle.jdbc.driver.OracleDriver");
				dbConn = DriverManager.getConnection(url, user, pwd);
			} catch (Exception e)
			{
				System.out.println(e.toString());
			}
		}
		
		
		return dbConn;
	}
	
	public static Connection getConnection(String url, String user, String pwd)
	{
		if (dbConn == null)
		{
			try
			{
				Class.forName("oracle.jdbc.driver.OracleDriver");
				dbConn = DriverManager.getConnection(url, user, pwd);
				
			} catch (Exception e)
			{
				System.out.println(e.toString());
			}
		}
		
		
		return dbConn;
	}
	
	public static void close()
	{
		if (dbConn != null)
		{
			try
			{
				if (!dbConn.isClosed())
				{
					dbConn.close();
				}
			} catch (Exception e)
			{
				System.out.println(e.toString());
			}
		}
		dbConn = null;
	}
}

MemberDTO

/*
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

- 데이터베이스 액션 처리 전용 클래스

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;
	}//end add()
	
	
	//전체 직원 수 조회
	public int memberCount() throws SQLException
	{
		int result = 0;
		
		Statement stmt = conn.createStatement();
		
		String sql = "SELECT COUNT(*) AS COUNT FROM TBL_EMP";
		
		// 쿼리문 실행 (select) -> executeQuery -> ResultSet 반환
		ResultSet rs = stmt.executeQuery(sql);
		
		// ResultSet 처리 -> 반복문 구성(단일값의 경우 if 문도 가능) 
		while (rs.next())			
			result = rs.getInt("COUNT");
			
		
		//리소스반납
		rs.close();
		stmt.close();
		
		return result;
		
	}// end memberCount
	
	
	
	
	// 검색 결과 직원 수 조회(메소드오버로딩)
	// EMP_ID = 1001;         -> key:EMP_ID		/ value:1001
	// 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.equals("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");
		}
		return result;
		
	}//end memberCount()
	
	
	
	// 직원 데이터 전체 조회 (사번/이름/부서/직위/급여내림차순)
	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, TEL, BUSEO_NAME, JIKWI_NAME, BASICPAY"
							   + ", SUDANG, PAY"
							   + " FROM EMPVIEW"
							   + " ORDER BY %s", key);
		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<MemberDTO> searchLists(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); // %s → 사번
		} 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); //'%s' → 사번을 제외한 이름 부서 직위는 문자열이므로
		}
		
		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;
	}// end searchLists()
	
	
	
	
	// 지역 리스트 조회 반환하는 값 : 지역"들" 이므로 arraylist
	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 = '%s'"
							   + ", 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;
		
	}// end modify()
	
	
	
	
	// 직원 데이터 삭제
	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;
		
	}//end remove()
	
}

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 + "/");
				// "사장/전무/상무/이사/부장/차장/과장/대리/사원/"
			}
			
			
			// 위의 것들을 가지고 난 다음에야 사용자에게 보여지는 화면 처리가 가능해짐
			// 사용자에게 보여지는 화면 처리
			
			System.out.println();
			System.out.println("직원 정보 입력 ----------------------------------------------------------");
			System.out.print("이름 : ");
			String empName = sc.next();
			System.out.print("주민등록번호(yymmdd-nnnnnn) : ");
			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 memberLists()
	{
		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; // MemberProcess 종료 
			}
			
			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;
			default:
				break;
			}
			
			dao.connection();
			
			System.out.println();
			System.out.printf("전체 인원 : %d명\n", dao.memberCount());
			System.out.println("사번   이름   주민번호   입사일   지역   전화번호   부서   직위    기본급   수당   급여");
			ArrayList<MemberDTO> memList = dao.lists(key); // 전체인원 출력을 위한 memList 변수 선언
			for (MemberDTO dto : memList)
			{
				System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %8d %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 memberLists()
	
	
	
	// 직원 검색 출력 메소드 정의
	public void memberSearch()
	{
		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.print(">> 항목 선택(1~4, -1:종료) : "); 
		String menuStr = sc.next();
		
		try
		{
			int menu = Integer.parseInt(menuStr); // int 형태가 아니라면 예외처리
			if (menu == -1)
			{
				return;
			}
			String key = "";
			String value = "";
			
			switch (menu)
			{
				case 1:
					key = "EMP_ID";
					System.out.print("검색할 사원번호 입력 : ");
					value = sc.next();
					break;
				case 2:
					key = "EMP_NAME";
					System.out.print("검색할 이름 입력 : ");
					value = sc.next();
					break;
				case 3:
					key = "BUSEO_NAME";
					System.out.print("검색할 부서 입력 : ");
					value = sc.next();
					break;
				case 4:
					key = "JIKWI_NAME";
					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.searchLists(key, value);
			for (MemberDTO dto : memList)
			{
				System.out.printf("%5d %4s %14s %10s %4s %12s %4s %3s %8d %8d %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.print("수정할 직원의 사원번호 입력 : ");
			String value = sc.next();
			
			// 데이터베이스 연결
			dao.connection();
			
			ArrayList<MemberDTO> memList = dao.searchLists("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-nnnnnn) : 960608-2234567
				수정 주민등록번호(yymmdd-nnnnnn) : -                             
				기존 입사일(yyyy-mm-dd) : 2019-06-08
				수정 입사일(yyyy-mm-dd) : -                                       
				기존 지역 : 경기
				수정 지역(강원/경기/경남/경북/부산/서울/인천/전남/전북/제주/충남/충북/) : -                      
				기존 전화번호 : 010-2731-3153   
				수정 전화번호 : -                                            
				기존 부서 : 개발부
				수정 부서(개발부/기획부/영업부/인사부/자재부/총무부/홍보부/) : -                            
				기존 직위 : 대리
				수정 직위 (사장/전무/상무/이사/부장/차장/과장/대리/사원/) : -                             
				기존 기본급 : 5000000
				수정 기본급(최소 1800000 이상) : -                                       
				기존 수당 : 2000000                                                       
                수정 수당 : 				                                                                   
				직원 정보 수정 완료                                                        
				---------------------------------------------------------- 직원 정보 입력 
				 */
				
				
				
				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("기존 주민등록번호(yymmdd-nnnnnn) : %s\n", mSsn);
				System.out.print("수정 주민등록번호(yymmdd-nnnnnn) : ");
				String ssn = sc.next();
				if (ssn.equals("-"))
					ssn = mSsn;
				
				System.out.printf("기존 입사일(yyyy-mm-dd) : %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);
				String buseoName = sc.next();
				if (buseoName.equals("-"))
					buseoName = mBuseoName;
				
				System.out.printf("기존 직위 : %s\n", mJikwiName);
				System.out.printf("수정 직위 (%s) : ", jikwiStr);
				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);
				
				
				// 새로 입력받은(수정한) 내용을 통해 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("---------------------------------------------------------- 직원 정보 수정");
				
			}
			else
			{
				System.out.println("수정 대상을 검색하지 못했습니다.");
			}
			
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				dao.close();
			} catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	} // 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.searchLists("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 %8d %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.print("\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

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.memberLists();
		
		// 직원 검색 메소드 호출
		//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.memberLists();
					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("프로그램이 종료되었습니다.");
	}
}

좋은 웹페이지 즐겨찾기