직원관리 콘솔 버전

- 입력과정 이후 작업 진행중..


--------------------------------------

직원 관리_콘솔 버전

-> 새 프로젝트 생성(Employee_Console)

-> 메뉴 구성 추가

-> DBConn, EmployeeDTO, EmployeeDAO, Process, Oracle11 클래스 이용.

-> emp.sql 쿼리를 먼저 실행해서 환경 구성할 것.



실행 예)

======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->1


직원 정보 입력 --------------

(입력하는 과정에서 -1 입력시 입력 중단)

이름?박길동

주민등록번호(YYMMDD-NNNNNNN)?800110-1234567

입사일(YYYY-MM-DD)?2010-10-10

지역번호 종류(1-강원 2-경기 3-경남 4-경북 5-부산 6-서울 7-인천 8-전남 9-전북 10-제주 11-충남 )

지역번호?6

전화번호?010-345-6789

부서번호 종류(1-개발부 2-기획부 3-영업부 4-인사부 5-자재부 6-총무부 7-홍보부 )

부서번호?7

직위번호 종류(1-사장 2-전무 3-상무 4-이사 5-부장 6-차장 7-과장 8-대리 9-사원)

직위번호?9

기본급(최소 840000원 이상)?1000000

수당?100000

직원 정보 입력 완료!



======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->2


직원 전체 출력(서브 메뉴)-------------

1.사번 정렬

2.이름 정렬

3.부서 정렬

4.직위 정렬

5.급여 내림차순 정렬

선택(1~5, -1 종료)->1


전체 인원: 62명

------------------------------------------------------------------

사번 이름   주민번호       입사일     지역 전화번호      부서   직위 기본급  수당   급여

1001 홍길동 771212-1022432 1998-10-11 서울 011-2356-4528 기획부 부장 2610000 200000 2810000

1002 이순신 801007-1544236 2000-11-29 경기 010-4758-6532 총무부 사원 1320000 200000 1520000

...



======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->3


직원 검색 출력(서브 메뉴)-------------

1.사번 검색

2.이름 검색

3.부서 검색

4.직위 검색

선택(1~4, -1 종료)->1


검색할 사번?1001


------------------------------------------------------------------

사번 이름   주민번호       입사일     지역 전화번호      부서   직위 기본급  수당   급여

1001 홍길동 771212-1022432 1998-10-11 서울 011-2356-4528 기획부 부장 2610000 200000 2810000



======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->4


수정하고자하는 자료의 사번?1001


------------------------------------------------------------------

사번 이름   주민번호       입사일     지역 전화번호      부서   직위 기본급  수당   급여

1001 홍길동 771212-1022432 1998-10-11 서울 011-2356-4528 기획부 부장 2610000 200000 2810000


직원 정보 수정 --------------

(입력하는 과정에서 -1 입력시 기존 데이터 재입력)

이름?-1

주민등록번호(YYMMDD-NNNNNNN)?-1

입사일(YYYY-MM-DD)?-1

지역번호 종류(1-강원 2-경기 3-경남 4-경북 5-부산 6-서울 7-인천 8-전남 9-전북 10-제주 11-충남 )

지역번호?-1

전화번호?-1

부서번호 종류(1-개발부 2-기획부 3-영업부 4-인사부 5-자재부 6-총무부 7-홍보부 )

부서번호?1

직위번호 종류(1-사장 2-전무 3-상무 4-이사 5-부장 6-차장 7-과장 8-대리 9-사원 )

직위번호?8

기본급(최소 840000원 이상)?1200000

수당?200000

직원 정보 수정 완료!



======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->5


삭제하고자하는 자료의 사번?1001


------------------------------------------------------------------

사번 이름   주민번호       입사일     지역 전화번호      부서   직위 기본급  수당   급여

1001 홍길동 771212-1022432 1998-10-11 서울 011-2356-4528 기획부 부장 2610000 200000 2810000


이 자료를 삭제하시겠습니까(Y/N)?y

1개의 행이 삭제됨.



======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->-1


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


--------------------------------------

--지역 검색 쿼리

SELECT city_id, city FROM city ORDER BY city_id


--부서 검색 쿼리

SELECT buseo_id, buseo FROM buseo ORDER BY buseo_id


--직위 검색 쿼리

SELECT jikwi_id, jikwi FROM jikwi ORDER BY jikwi_id


--직위별 최소 기본급 검색 쿼리

SELECT min_basicpay FROM jikwi WHERE jikwi_id=9


--입력 쿼리

INSERT INTO emp (emp_id, name, ssn, ibsadate, city_id, tel, buseo_id, jikwi_id, basicpay, sudang) 

VALUES (empSeq.nextval

, '홍길동'

, '771212-1022432'

, '1998-10-11'

, 6

, '011-2356-4528'

, 7

, 9

, 2610000

, 200000)


--직원 명단 출력 쿼리(emp 테이블이 아니라 empView 이용)

SELECT emp_id, name, ssn, TO_CHAR(ibsadate, 'YYYY-MM-DD') AS ibsadate

, city_id, city, tel, buseo_id, buseo, jikwi_id, jikwi, basicpay, sudang, pay 

FROM empView 

ORDER BY emp_id ASC


--전체 직원수 출력 쿼리 (emp 테이블이나 empView나 결과 동일함)

SELECT COUNT(*) AS count 

FROM emp


--검색 쿼리(emp테이블이 아니라 empView이용)


SELECT emp_id, name, ssn, TO_CHAR(ibsadate, 'YYYY-MM-DD') AS ibsadate

, city_id, city, tel, buseo_id, buseo, jikwi_id, jikwi, basicpay, sudang, pay 

FROM empView 

WHERE emp_id = 1001

ORDER BY emp_id ASC


--수정 쿼리

UPDATE emp

SET name = '새로운이름'

,ssn='새로운 주민번호'

,ibsadate='새로운 입사일'

,city_id=1

,tel='새로운 전화번호'

,buseo_id=1

,jikwi_id=1

,basicpay=1

,sudang=1

WHERE emp_id = 1001


--삭제 쿼리

DELETE emp

WHERE emp_id = 1001


------------------------------------

//DBConn.java

package com.test;


import java.sql.*;


public class DBConn {

//Singleton pattern

private static Connection dbConn;

public static Connection getConnection()

throws SQLException, ClassNotFoundException {

if (dbConn == null) {


String url = "jdbc:oracle:thin:@localhost:1521:xe";

String user = "scott";

String pw = "tiger";

Class.forName("oracle.jdbc.driver.OracleDriver");

dbConn = DriverManager.getConnection(url, user, pw);


}

return dbConn;

}

public static void close()

throws SQLException {

if (dbConn != null) {

if (!dbConn.isClosed()) {

dbConn.close();

}

}

dbConn = null;

}

}




//EmployeeDTO.java

package com.test;


public class EmployeeDTO {

//멤버변수

private int emp_id, city_id, buseo_id, jikwi_id;

private int min_basicpay, basicpay, sudang, pay;

private String ibsadate; //날짜지만 문자열로 취급

private String name, ssn, city, buseo, jikwi, tel;

//getter, setter

public int getEmp_id() {

return emp_id;

}

public void setEmp_id(int emp_id) {

this.emp_id = emp_id;

}

public int getCity_id() {

return city_id;

}

public void setCity_id(int city_id) {

this.city_id = city_id;

}

public int getBuseo_id() {

return buseo_id;

}

public void setBuseo_id(int buseo_id) {

this.buseo_id = buseo_id;

}

public int getJikwi_id() {

return jikwi_id;

}

public void setJikwi_id(int jikwi_id) {

this.jikwi_id = jikwi_id;

}

public int getMin_basicpay() {

return min_basicpay;

}

public void setMin_basicpay(int min_basicpay) {

this.min_basicpay = min_basicpay;

}

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 getIbsadate() {

return ibsadate;

}

public void setIbsadate(String ibsadate) {

this.ibsadate = ibsadate;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSsn() {

return ssn;

}

public void setSsn(String ssn) {

this.ssn = ssn;

}

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getBuseo() {

return buseo;

}

public void setBuseo(String buseo) {

this.buseo = buseo;

}

public String getJikwi() {

return jikwi;

}

public void setJikwi(String jikwi) {

this.jikwi = jikwi;

}

public String getTel() {

return tel;

}

public void setTel(String tel) {

this.tel = tel;

}


}




//Oracle11.java

package com.test;


import java.util.Scanner;


public class Oracle11 {


public static void main(String[] args) {

Process obj = new Process();

Scanner sc = new Scanner(System.in);

do {

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.print("선택(1~5, -1 종료)->");

int menu = sc.nextInt();

if (menu == -1) {

System.out.println("프로그램 종료됨.");

break;

}

switch(menu) {

case 1: obj.menuInsert(); break;

case 2: obj.menuSelect(); break;

case 3: obj.menuSearch(); break;

case 4: obj.menuUpdate(); break;

case 5: obj.menuDelete(); break;

}

}while(true);

}


}





//EmployeeDAO.java

package com.test;


import java.sql.*;

import java.util.*;



public class EmployeeDAO {


private Connection conn;

public void connect() throws SQLException, ClassNotFoundException{

conn = DBConn.getConnection();

}

public void close() throws SQLException {

DBConn.close();

conn = null;

}

//입력되어 있는 도시명 전체 리스트를 컬렉션으로 반환

public ArrayList<EmployeeDTO> cityList() throws SQLException {

ArrayList<EmployeeDTO> list = new ArrayList<EmployeeDTO>();

String sql = String.format("SELECT city_id, city FROM city ORDER BY city_id");

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {

EmployeeDTO dto = new EmployeeDTO();

dto.setCity_id(rs.getInt("city_id"));

dto.setCity(rs.getString("city"));

list.add(dto);

}

rs.close();

return list;

}


//입력되어 있는 부서명 전체 리스트를 컬렉션으로 반환

public ArrayList<EmployeeDTO> buseoList() throws SQLException {

ArrayList<EmployeeDTO> list = new ArrayList<EmployeeDTO>();

String sql = String.format("SELECT buseo_id, buseo FROM buseo ORDER BY buseo_id");

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {

EmployeeDTO dto = new EmployeeDTO();

dto.setBuseo_id(rs.getInt("buseo_id"));

dto.setBuseo(rs.getString("buseo"));

list.add(dto);

}

rs.close();

return list;

}

//입력되어 있는 직위명 전체 리스트를 컬렉션으로 반환

public ArrayList<EmployeeDTO> jikwiList() throws SQLException {

ArrayList<EmployeeDTO> list = new ArrayList<EmployeeDTO>();

String sql = String.format("SELECT jikwi_id, jikwi FROM jikwi ORDER BY jikwi_id");

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {

EmployeeDTO dto = new EmployeeDTO();

dto.setJikwi_id(rs.getInt("jikwi_id"));

dto.setJikwi(rs.getString("jikwi"));

list.add(dto);

}

rs.close();

return list;

}

//직위아이디를 입력받은 후 해당 직위의 최저급여액을 int형으로 반환

public int minBasicpay(int jikwi_id) throws SQLException {

int result = 0;

String sql = String.format("SELECT min_basicpay FROM jikwi WHERE jikwi_id=%d", jikwi_id);

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {

result = rs.getInt("min_basicpay");

}

rs.close();

return result;

}

public int add(EmployeeDTO dto)

throws SQLException {

int result =0;


String sql = String.format("INSERT INTO emp (emp_id, name, ssn, ibsadate, city_id, tel, buseo_id, jikwi_id, basicpay, sudang) VALUES (empSeq.nextval, '%s', '%s', '%s', %d, '%s', %d, %d, %d, %d)"

, dto.getName()

, dto.getSsn()

, dto.getIbsadate()

, dto.getCity_id()

, dto.getTel()

, dto.getBuseo_id()

, dto.getJikwi_id()

, dto.getBasicpay()

, dto.getSudang());


Statement stmt = conn.createStatement();

result = stmt.executeUpdate(sql);


return result;

}

public ArrayList<EmployeeDTO> lists(String orders) throws SQLException{

ArrayList<EmployeeDTO> arrayList = new ArrayList<EmployeeDTO>();

String sql = String.format("SELECT emp_id, name, ssn, TO_CHAR(ibsadate, 'YYYY-MM-DD') AS ibsadate, city, tel, buseo, jikwi, basicpay, sudang, pay FROM empView %s", orders);

Statement stmt = conn.createStatement();

ResultSet rs =stmt.executeQuery(sql);

while(rs.next()) {

EmployeeDTO dto = new EmployeeDTO();

dto.setEmp_id(rs.getInt("emp_id"));

dto.setName(rs.getString("name"));

dto.setSsn(rs.getString("ssn"));

dto.setIbsadate(rs.getString("ibsadate"));

dto.setCity(rs.getString("city"));

dto.setTel(rs.getString("tel"));

dto.setBuseo(rs.getString("buseo"));

dto.setJikwi(rs.getString("jikwi"));

dto.setBasicpay(rs.getInt("basicpay"));

dto.setSudang(rs.getInt("sudang"));

dto.setPay(rs.getInt("pay"));

arrayList.add(dto);

}

rs.close();

return arrayList;

}

public int count() throws SQLException{

int result = 0;

String sql = String.format("SELECT COUNT(*) AS count FROM emp");

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {

result = rs.getInt("count");

}

return result;

}

public ArrayList<EmployeeDTO> searchLists(String wheres) throws SQLException {

ArrayList<EmployeeDTO> arrayList = new ArrayList<EmployeeDTO>();

String sql = String.format("SELECT emp_id, name, ssn, TO_CHAR(ibsadate, 'YYYY-MM-DD') AS ibsadate, city_id, city, tel, buseo_id, buseo, jikwi_id, jikwi, basicpay, sudang, pay FROM empView %s ORDER BY emp_id ASC", wheres);

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {

EmployeeDTO dto = new EmployeeDTO();

dto.setEmp_id(rs.getInt("emp_id"));

dto.setName(rs.getString("name"));

dto.setSsn(rs.getString("ssn"));

dto.setIbsadate(rs.getString("ibsadate"));

dto.setCity_id(rs.getInt("city_id"));

dto.setCity(rs.getString("city"));

dto.setTel(rs.getString("tel"));

dto.setBuseo_id(rs.getInt("buseo_id"));

dto.setBuseo(rs.getString("buseo"));

dto.setJikwi_id(rs.getInt("jikwi_id"));

dto.setJikwi(rs.getString("jikwi"));

dto.setBasicpay(rs.getInt("basicpay"));

dto.setSudang(rs.getInt("sudang"));

dto.setPay(rs.getInt("pay"));

arrayList.add(dto);

}

return arrayList;

}

public int modify (EmployeeDTO dto) throws SQLException {

int result = 0;

String sql = String.format("UPDATE emp SET name = '%s', ssn='%s', ibsadate='%s', city_id=%d, tel='%s', buseo_id=%d, jikwi_id=%d, basicpay=%d, sudang=%d WHERE emp_id = %d", dto.getName()

, dto.getSsn(), dto.getIbsadate(), dto.getCity_id(), dto.getTel(), dto.getBuseo_id(), dto.getJikwi_id(), dto.getBasicpay(), dto.getSudang(), dto.getEmp_id());

Statement stmt = conn.createStatement();

result = stmt.executeUpdate(sql);

return result;

}


public int remove (String wheres) throws SQLException {

int result = 0;

String sql = String.format("DELETE emp %s", wheres);

Statement stmt = conn.createStatement();

result = stmt.executeUpdate(sql);

return result;

}

}







//Process.java

package com.test;


import java.util.*;


public class Process {


private EmployeeDAO dao;

public Process() {

dao = new EmployeeDAO();

}

public void menuInsert(){

Scanner sc = new Scanner(System.in);

try {

dao.connect();


//--------------------------------

//외부입력과정

//지역, 부서, 직위의 경우 종류 출력

//직위별 최소 급여 검색 및 출력

//입력과정에서 -1입력시 입력 중단 -> 강제 예외(Exception)발생

//무한실행문이 아니므로 break 안됨. return 구문으로 사용하면 void이므로 반환없이 메소드 종료.

//return 사용시 close() 메소드 실행안되므로 finally 처리.

System.out.println("직원 정보 입력 --------------");

System.out.println("(입력하는 과정에서 -1 입력시 입력 중단)");

System.out.print("이름?");

String name = sc.next();

if (name.equals("-1")) { // 강제예외발생시켜서 메소드 종료와 함께 catch와 finally를 실행시킬수 있도록 함.

throw new Exception("입력 중단됨.");

}

System.out.print("주민등록번호(YYMMDD-NNNNNNN)?");

String ssn = sc.next();

if (ssn.equals("-1")) {

throw new Exception("입력 중단됨.");

}

System.out.print("입사일(YYYY-MM-DD)?");

String ibsadate = sc.next();

if (ibsadate.equals("-1")) {

throw new Exception("입력 중단됨.");

}

//지역번호와 지역명을 -> 메세지로 -> 출력하는 과정 추가

System.out.println(this.cityList()); // this 는 빼도됨

System.out.print("지역번호?");

int city_id = sc.nextInt();

if (city_id == -1) {

throw new Exception("입력 중단됨.");

}

System.out.print("전화번호?");

String tel = sc.next();

if (tel.equals("-1")) {

throw new Exception("입력 중단됨.");

}

System.out.println(this.buseoList());

System.out.print("부서번호?");

int buseo_id = sc.nextInt();

if (buseo_id == -1) {

throw new Exception("입력 중단됨.");

}

System.out.println(this.jikwiList());

System.out.print("직위번호?");

int jikwi_id = sc.nextInt();

if (jikwi_id == -1) {

throw new Exception("입력 중단됨.");

}

System.out.print(String.format("기본급(최소 %d원 이상)?", dao.minBasicpay(jikwi_id)));

int basicpay = sc.nextInt();

if (basicpay == -1) {

throw new Exception("입력 중단됨.");

}

System.out.print("수당?");

int sudang = sc.nextInt();

if (sudang == -1) {

throw new Exception("입력 중단됨.");

}

//--------------------------------

//--------------------------------

//입력된 데이터를 데이터베이스에 입력하는 과정

EmployeeDTO dto = new EmployeeDTO();

dto.setName(name);

dto.setSsn(ssn);

dto.setIbsadate(ibsadate);

dto.setCity_id(city_id);

dto.setTel(tel);

dto.setBuseo_id(buseo_id);

dto.setJikwi_id(jikwi_id);

dto.setBasicpay(basicpay);

dto.setSudang(sudang);


dao.add(dto);

System.out.printf("%n직원 정보 입력 완료!%n");

//--------------------------------

} catch(Exception e) {

System.out.println(e.toString());

} finally { // 예외 발생 유무와 관계없이 finally 구문에 있는 실행문은 반드시 실행된다.

try {

dao.close();

} catch(Exception e) {

}

}

}

public void menuSelect(){

try {

dao.connect();

//서브메뉴 출력 부분 추가

System.out.println();

System.out.println("직원 전체 출력(서브 메뉴)-------------");

System.out.println("1.사번 정렬");

System.out.println("2.이름 정렬");

System.out.println("3.부서 정렬");

System.out.println("4.직위 정렬");

System.out.println("5.급여 내림차순 정렬");

System.out.print("선택(1~5, -1 종료)->");

Scanner sc = new Scanner(System.in);

int submenu = sc.nextInt();

if (submenu == -1){

return; //무한루프 안이 아니고 메소드 안에서 종료이므로 리턴.

}

//서브메뉴 선택 단계 추가

String orders = "";

switch (submenu) {

case 1 : orders = "ORDER BY emp_id ASC"; break;

case 2 : orders = "ORDER BY name ASC"; break;

case 3 : orders = "ORDER BY buseo ASC"; break;

case 4 : orders = "ORDER BY jikwi ASC"; break;

case 5 : orders = "ORDER BY pay ASC"; break;

}

//정렬 기준에 따라서 출력 메소드(lists()) 호출

//리턴 받은 컬렉션 데이터를 화면에 출력.

System.out.println();

System.out.printf("전체 인원: %d명%n", dao.count());

System.out.println("--------------------------------------------------------------------------------------------");

System.out.println("사번 이름   주민번호       입사일     지역 전화번호      부서   직위  기본급    수당    급여");

for (EmployeeDTO dto : dao.lists(orders)) {

System.out.printf("%4d %3s %14s %s %s %13s %s %s %7d %7d %7d%n", dto.getEmp_id(), dto.getName(), dto.getSsn(), dto.getIbsadate()

           , dto.getCity(), dto.getTel(), dto.getBuseo(), dto.getJikwi(), dto.getBasicpay()

           , dto.getSudang(), dto.getPay());

}

dao.close();

} catch(Exception e) {

System.out.println(e.toString());

}

}

public void menuSearch(){

try {

dao.connect();

System.out.println();

//서브 메뉴 출력

System.out.println("직원 검색 출력(서브 메뉴)-------------");

System.out.println("1.사번 검색");

System.out.println("2.이름 검색");

System.out.println("3.부서 검색");

System.out.println("4.직위 검색");

System.out.print("선택(1~4, -1 종료)->");


Scanner sc = new Scanner(System.in);

int submenu = sc.nextInt();

if (submenu == -1) {

return;

}

//서브 메뉴 선택

String wheres = "";

System.out.println();

switch (submenu) {

case 1: 

System.out.print("검색할 사번?");

String emp_id = sc.next();

wheres = String.format("WHERE emp_id=%s", emp_id);

break;

case 2:

System.out.print("검색할 이름?");

String name = sc.next();

wheres = String.format("WHERE name='%s'", name);

break;

case 3:

System.out.print("검색할 부서?");

String buseo = sc.next();

wheres = String.format("WHERE buseo='%s'", buseo);

break;

case 4:

System.out.print("검색할 직위?");

String jikwi = sc.next();

wheres = String.format("WHERE jikwi='%s'", jikwi);

break;

}

System.out.println();

//검색 기준에 따라서 검색 메소드(searchLists()) 호출

//리턴 받은 컬렉션 데이터를 화면에 출력

//경우에 따른 검색 결과 없음 메시지 출력

ArrayList<EmployeeDTO> arrayList = dao.searchLists(wheres);

if (arrayList.size() > 0) {

System.out.println("--------------------------------------------------------------------------------------------");

System.out.println("사번 이름   주민번호       입사일     지역 전화번호      부서   직위  기본급    수당    급여");

for (EmployeeDTO dto : arrayList) {

System.out.printf("%4d %3s %14s %s %s %13s %s %s %7d %7d %7d%n", dto.getEmp_id(), dto.getName(), dto.getSsn(), dto.getIbsadate()

           , dto.getCity(), dto.getTel(), dto.getBuseo(), dto.getJikwi(), dto.getBasicpay()

           , dto.getSudang(), dto.getPay());

}

} else {

System.out.println("검색 결과가 없습니다.");

}

dao.close();

} catch(Exception e) {

System.out.println(e.toString());

}

}

public void menuUpdate(){

try {

dao.connect();

//수정 대상 검색 과정(사번 기준) 추가

//검색 결과 출력

//검색 결과 있는 경우만 수정 화면 진행

//EmployeeDTO 객체에 수정 데이터 작성

//수정 메소드(modify()) 호출

System.out.println();

System.out.print("수정하고자하는 자료의 사번?");

Scanner sc = new Scanner(System.in);

int emp_id = sc.nextInt();

String wheres = String.format("WHERE emp_id = %d", emp_id);

ArrayList<EmployeeDTO> arrayList = dao.searchLists(wheres);

if (arrayList.size() > 0) {

//검색결과 출력

EmployeeDTO dto = arrayList.get(0); // get(0)는 arrayList가 가진 맨 처음 가진 값을 가져오게함.

System.out.println("--------------------------------------------------------------------------------------------");

System.out.println("사번 이름   주민번호       입사일     지역 전화번호      부서   직위  기본급    수당    급여");

System.out.printf("%4d %3s %14s %s %s %13s %s %s %7d %7d %7d%n", dto.getEmp_id(), dto.getName(), dto.getSsn(), dto.getIbsadate()

           , dto.getCity(), dto.getTel(), dto.getBuseo(), dto.getJikwi(), dto.getBasicpay()

           , dto.getSudang(), dto.getPay());

//수정 진행

System.out.println("직원 정보 수정 --------------");

System.out.println("(입력하는 과정에서 -1 입력시 기존 데이터 재입력)");

System.out.print("이름?");

String name = sc.next();

if(name.equals("-1")) {

name = dto.getName();

}

System.out.print("주민등록번호(YYMMDD-NNNNNNN)?");

String ssn = sc.next();

if (ssn.equals("-1")) {

ssn = dto.getSsn();

}

System.out.print("입사일(YYYY-MM-DD)?");

String ibsadate = sc.next();

if (ibsadate.equals("-1")) {

ibsadate = dto.getIbsadate();

}

//지역번호와 지역명을 -> 메세지로 -> 출력하는 과정 추가

System.out.println(this.cityList()); // this 는 빼도됨

System.out.print("지역번호?");

int city_id = sc.nextInt();

if (city_id == -1) {

city_id = dto.getCity_id();

}

System.out.print("전화번호?");

String tel = sc.next();

if (tel.equals("-1")) {

tel = dto.getTel();

}

System.out.println(this.buseoList());

System.out.print("부서번호?");

int buseo_id = sc.nextInt();

if (buseo_id == -1) {

buseo_id = dto.getBuseo_id();

}

System.out.println(this.jikwiList());

System.out.print("직위번호?");

int jikwi_id = sc.nextInt();

if (jikwi_id == -1) {

jikwi_id = dto.getJikwi_id();

}

System.out.print(String.format("기본급(최소 %d원 이상)?", dao.minBasicpay(jikwi_id)));

int basicpay = sc.nextInt();

if (basicpay == -1) {

basicpay = dto.getBasicpay();

}

System.out.print("수당?");

int sudang = sc.nextInt();

if (sudang == -1) {

sudang = dto.getSudang();

}

if (name.equals("-1") && ssn.equals("-1") && ibsadate.equals("-1") && city_id == -1 && tel.equals("-1") && buseo_id == -1 && jikwi_id == -1 && basicpay == -1 && sudang == -1) {

System.out.println("모든 항목을 수정하지 않고, 메인메뉴로 돌아갑니다.");

} else {

EmployeeDTO newDto = new EmployeeDTO();

newDto.setEmp_id(emp_id);

newDto.setName(name);

newDto.setSsn(ssn);

newDto.setIbsadate(ibsadate);

newDto.setCity_id(city_id);

newDto.setTel(tel);

newDto.setBuseo_id(buseo_id);

newDto.setJikwi_id(jikwi_id);

newDto.setBasicpay(basicpay);

newDto.setSudang(sudang);

int result = dao.modify(newDto);

if (result == 1) {

System.out.println("직원 정보 수정 완료!");

}

}

} else {

System.out.println("검색 결과가 없습니다.");

}

dao.close();

} catch(Exception e) {

System.out.println(e.toString());

}

}

public void menuDelete(){

try {

dao.connect();

System.out.println();

System.out.print("수정하고자하는 자료의 사번?");

Scanner sc = new Scanner(System.in);

int emp_id = sc.nextInt();

String wheres = String.format("WHERE emp_id = %d", emp_id);

ArrayList<EmployeeDTO> arrayList = dao.searchLists(wheres);

if (arrayList.size() > 0) {

//검색결과 출력

EmployeeDTO dto = arrayList.get(0); // get(0)는 arrayList가 가진 맨 처음 가진 값을 가져오게함.

System.out.println("--------------------------------------------------------------------------------------------");

System.out.println("사번 이름   주민번호       입사일     지역 전화번호      부서   직위  기본급    수당    급여");

System.out.printf("%4d %3s %14s %s %s %13s %s %s %7d %7d %7d%n", dto.getEmp_id(), dto.getName(), dto.getSsn(), dto.getIbsadate()

           , dto.getCity(), dto.getTel(), dto.getBuseo(), dto.getJikwi(), dto.getBasicpay()

           , dto.getSudang(), dto.getPay());

//삭제 여부 물어보는 과정 추가

//삭제 메소드(remove) 호출

System.out.print("이 자료를 삭제하시겠습니까(Y/N)?");

String answer = sc.next();

if (answer.equals("y") || answer.equals("Y")) {

int result = dao.remove(wheres);

if (result == 1) {

System.out.println("1개의 행이 삭제됨.");

}

}

} else {

System.out.println("검색 결과가 없습니다.");

}

dao.close();

} catch(Exception e) {

System.out.println(e.toString());

}

}

public String cityList() {

StringBuilder result = new StringBuilder();

//지역번호 종류(1-강원 2-경기 3-경남 4-경북 5-부산 6-서울 7-인천 8-전남 9-전북 10-제주 11-충남)

try{

result.append(String.format("지역번호 종류("));

for (EmployeeDTO dto : dao.cityList()) {

result.append(String.format("%d-%s ", dto.getCity_id(), dto.getCity()));

}

result.append(String.format(")"));

} catch(Exception e) {

System.out.println(e.toString());

}

return result.toString();

}

public String buseoList() {

StringBuilder result = new StringBuilder();

//부서번호 종류(1-개발부 2-기획부 3-영업부 4-인사부 5-자재부 6-총무부 7-홍보부 )

try{

result.append(String.format("부서번호 종류("));

for (EmployeeDTO dto : dao.buseoList()) {

result.append(String.format("%d-%s ", dto.getBuseo_id(), dto.getBuseo()));

}

result.append(String.format(")"));

} catch(Exception e) {

System.out.println(e.toString());

}

return result.toString();

}

public String jikwiList() {

StringBuilder result = new StringBuilder();

//직위번호 종류(1-사장 2-전무 3-상무 4-이사 5-부장 6-차장 7-과장 8-대리 9-사원 )

try{

result.append(String.format("부서번호 종류("));

for (EmployeeDTO dto : dao.jikwiList()) {

result.append(String.format("%d-%s ", dto.getJikwi_id(), dto.getJikwi()));

}

result.append(String.format(")"));

} catch(Exception e) {

System.out.println(e.toString());

}

return result.toString();

}

}




-----------------------------------------------



WRITTEN BY
빨강꼬마

,

//성적 처리 _ 메뉴 버전 (콘솔 기반 최종)


전날에 이어서~ 문제) 성적 처리. 메뉴 구성 추가. 새 프로젝트에서 구성할 것.

DBConn.java, ScoreDTO, ScoreDAO, Process, Oralce10 클래스 이용.


여러명의 이름, 국어, 영어, 수학 입력 받아서 총점, 평균, 판정, 등수 계산해서 출력. 출력시 이름 오름차순 정렬해서 출력.


실행 예)

======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->1


성적 입력(이름 국어 영어 수학)?park 80 75 60

성적 입력(이름 국어 영어 수학)?hong 100 90 80

성적 입력(이름 국어 영어 수학)?kim 80 85 80

성적 입력(이름 국어 영어 수학)?-1


======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->2


번호 이름   국어  영어  수학  총점  평균   판정  등수

   2 hong    100   90    80    XXX  XXX.X  합격   1

   3 kim      80   85    80    XXX  XXX.X  합격   2

   1 park     80   75    60    XXX  XXX.X  합격   3



======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->3

검색하려는 이름?kim

번호 이름   국어  영어  수학  총점  평균   판정  등수

   3 kim      80   85    80    XXX  XXX.X  합격   2



======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->3

검색하려는 이름?choi

검색 결과가 없습니다.



======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->4

수정하고자하는 자료의 번호?3

번호 이름   국어  영어  수학  총점  평균   판정  등수

   3 kim      80   85    80    XXX  XXX.X  합격   2


수정할 데이터(이름 국어 영어 수학)?kim 80 90 80

1개의 행이 수정됨.



======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->5

삭제하고자하는 자료의 번호?3

번호 이름   국어  영어  수학  총점  평균   판정  등수

   3 kim      80   85    80    XXX  XXX.X  합격   2


이 자료를 삭제하시겠습니까(Y/N)?y

1개의 행이 삭제됨.



======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->-1


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





------------------------------------------------------------------------

INSERT INTO score (sid, name, kor, eng, mat) VALUES (scoreSeq.nextval, '%s', %d, %d, %d)


SELECT sid, name, kor, eng, mat, (kor+eng+mat) as tot, (kor+eng+mat)/3 as ave, case when ((kor+eng+mat)/3 >= 60) and (kor<40 or eng<40 or mat<40) then '과락' when ((kor+eng+mat)/3 >= 60) then '합격' else '불합격' end as grade, rank() over(order by (kor+eng+mat) desc) as rank FROM score ORDER BY name asc



-- VIEW 생성 및 select 쿼리 등록

create or replace view scoreView

as

SELECT sid, name, kor, eng, mat, (kor+eng+mat) as tot, (kor+eng+mat)/3 as ave

          , case 

                    when ((kor+eng+mat)/3 >= 60) and (kor<40 or eng<40 or mat<40) then '과락' 

                    when ((kor+eng+mat)/3 >= 60) then '합격' else '불합격'

            end as grade

          , rank() over(order by (kor+eng+mat) desc) as rank

FROM score

ORDER BY name asc;


select sid, name, kor, eng, mat, tot, ave, grade, rank 

from scoreView


--인원수 출력 쿼리 샘플

select count(*) as count from score;



--검색 결과 select 쿼리 샘플

select sid, name, kor, eng, mat, tot, ave, grade, rank 

from scoreView

where name = 'kim'



--수정 update 쿼리

select sid, name, kor, eng, mat, tot, ave, grade, rank 

from scoreView

where sid=1


update score

set name='kim', kor=90 , eng=90 , mat=90

where sid =1 


--삭제 delete 쿼리

delete score

where sid =1

------------------------------------------------------------------------


//새 프로젝트 생성(Score_Console)


//DBConn.java    -> 오라클 데이터베이스 접속 클래스.

//ScoreDTO.java  -> 멤버변수, getter, setter. 등수 관련 멤버 추가.

//ScoreDAO.java  -> 연결, 입력, 출력, 검색, 수정, 삭제 메소드.

//Process.java   -> 입력, 출력, 검색, 수정, 삭제 관련 인터페이스

//Oralce10.java  -> main() 메소드. 주메뉴 무한실행



------------------------------------------------------------------------

Employee_Console 프로젝트

--------------------------------------

직원 관리_콘솔 버전

-> 메뉴 구성 추가

-> DBConn, EmployeeDTO, EmployeeDAO, Process, Oracle11 클래스 이용.

-> emp.sql 쿼리를 먼저 실행해서 환경 구성할 것.



실행 예)

======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->1


직원 정보 입력 --------------

(입력하는 과정에서 -1 입력시 입력 중단)

이름?박길동

주민등록번호(YYMMDD-NNNNNNN)?800110-1234567

입사일(YYYY-MM-DD)?2010-10-10

지역번호 종류(1-강원 2-경기 3-경남 4-경북 5-부산 6-서울 7-인천 8-전남 9-전북 10-제주 11-충남 )

지역번호?6

전화번호?010-345-6789

부서번호 종류(1-개발부 2-기획부 3-영업부 4-인사부 5-자재부 6-총무부 7-홍보부 )

부서번호?7

직위번호 종류(1-사장 2-전무 3-상무 4-이사 5-부장 6-차장 7-과장 8-대리 9-사원 )

직위번호?9

기본급(최소 840000원 이상)?1000000

수당?100000


직원 정보 입력 완료!



======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->2


직원 전체 출력(서브 메뉴)-------------

1.사번 정렬

2.이름 정렬

3.부서 정렬

4.직위 정렬

5.급여 내림차순 정렬

선택(1~5, -1 종료)->1


전체 인원: 62명

------------------------------------------------------------------

사번 이름   주민번호       입사일     지역 전화번호      부서   직위 기본급  수당   급여

1001 홍길동 771212-1022432 1998-10-11 서울 011-2356-4528 기획부 부장 2610000 200000 2810000

1002 이순신 801007-1544236 2000-11-29 경기 010-4758-6532 총무부 사원 1320000 200000 1520000

...



======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->3


직원 검색 출력(서브 메뉴)-------------

1.사번 검색

2.이름 검색

3.부서 검색

4.직위 검색

선택(1~4, -1 종료)->1


검색할 사번?1001


------------------------------------------------------------------

사번 이름   주민번호       입사일     지역 전화번호      부서   직위 기본급  수당   급여

1001 홍길동 771212-1022432 1998-10-11 서울 011-2356-4528 기획부 부장 2610000 200000 2810000



======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->4


수정하고자하는 자료의 사번?1001


------------------------------------------------------------------

사번 이름   주민번호       입사일     지역 전화번호      부서   직위 기본급  수당   급여

1001 홍길동 771212-1022432 1998-10-11 서울 011-2356-4528 기획부 부장 2610000 200000 2810000


직원 정보 수정 --------------

(입력하는 과정에서 -1 입력시 기존 데이터 재입력)

이름?-1

주민등록번호(YYMMDD-NNNNNNN)?-1

입사일(YYYY-MM-DD)?-1

지역번호 종류(1-강원 2-경기 3-경남 4-경북 5-부산 6-서울 7-인천 8-전남 9-전북 10-제주 11-충남 )

지역번호?-1

전화번호?-1

부서번호 종류(1-개발부 2-기획부 3-영업부 4-인사부 5-자재부 6-총무부 7-홍보부 )

부서번호?1

직위번호 종류(1-사장 2-전무 3-상무 4-이사 5-부장 6-차장 7-과장 8-대리 9-사원 )

직위번호?8

기본급(최소 840000원 이상)?1200000

수당?200000

직원 정보 수정 완료!



======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->5


삭제하고자하는 자료의 사번?1001


------------------------------------------------------------------

사번 이름   주민번호       입사일     지역 전화번호      부서   직위 기본급  수당   급여

1001 홍길동 771212-1022432 1998-10-11 서울 011-2356-4528 기획부 부장 2610000 200000 2810000


이 자료를 삭제하시겠습니까(Y/N)?y

1개의 행이 삭제됨.



======== 직원 관리 (데이터베이스 이용) ==============

1. 직원 입력

2. 직원 전체 출력

- 사번 정렬

- 이름 정렬

- 부서 정렬

- 직위 정렬

- 급여 내림차순 정렬

3. 직원 검색 출력

- 사번 검색

- 이름 검색

- 부서 검색

- 직위 검색

4. 직원 수정

5. 직원 삭제

선택(1~5, -1 종료)->-1


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


--------------------------------------

--지역 검색 쿼리

SELECT city_id, scity FROM city ORDER BY city_id


--부서 검색 쿼리

SELECT buseo_id, buseo FROM buseo ORDER BY buseo_id


--직위 검색 쿼리

SELECT jikwi_id, jikwi FROM jikwi ORDER BY jikwi_id


--직위별 최소 기본급 검색 쿼리

SELECT min_basicpay FROM jikwi WHERE jikwi_id=9


--입력 쿼리

INSERT INTO emp (emp_id, name, ssn, ibsadate, city_id, tel, buseo_id, jikwi_id, basicpay, sudang) 

VALUES (empSeq.nextval

, '홍길동'

, '771212-1022432'

, '1998-10-11'

, 6

, '011-2356-4528'

, 7

, 9

, 2610000

, 200000)


--직원 명단 출력 쿼리(emp 테이블이 아니라 empView 이용)

SELECT emp_id, name, ssn, TO_CHAR(ibsadate, 'YYYY-MM-DD') AS ibsadate

, city, tel, buseo, jikwi, basicpay, sudang, pay 

FROM empView 

ORDER BY emp_id ASC


--전체 직원수 출력 쿼리 (emp 테이블이나 empView나 결과 동일함)

SELECT COUNT(*) AS count 

FROM emp



------------------------------------

//DBConn.java

//연결 전용 클래스 작성

//DBConn.java

package com.test;


import java.sql.*;


public class DBConn {

//Singleton pattern

private static Connection dbConn;

public static Connection getConnection() throws SQLException, ClassNotFoundException {

if (dbConn == null) {  // 이미 getConnection 을 호출하여 성공한적이 있으면 dbConn 을 그냥 리턴.

  // Singleton pattern은 이것을 의미함.


String url = "jdbc:oracle:thin:@localhost:1521:xe";

String user = "scott";

String pw = "tiger";

Class.forName("oracle.jdbc.driver.OracleDriver");

dbConn = DriverManager.getConnection(url, user, pw);


}

return dbConn;

}

public static void close() throws SQLException {

if (dbConn != null) {

if (!dbConn.isClosed()) {

dbConn.close();

}

}

dbConn = null;

}

}



//EmployeeDTO.java

package com.test;


public class EmployeeDTO {


private int city_id, buseo_id, jikwi_id, min_basicpay, emp_id, basicpay, sudang, pay;

private String city, buseo, jikwi, name, ssn, tel;  

private String ibsadate; //날짜지만 문자열로 취급.

public int getCity_id() {

return city_id;

}

public void setCity_id(int city_id) {

this.city_id = city_id;

}

public int getBuseo_id() {

return buseo_id;

}

public void setBuseo_id(int buseo_id) {

this.buseo_id = buseo_id;

}

public int getJikwi_id() {

return jikwi_id;

}

public void setJikwi_id(int jikwi_id) {

this.jikwi_id = jikwi_id;

}

public int getMin_basicpay() {

return min_basicpay;

}

public void setMin_basicpay(int min_basicpay) {

this.min_basicpay = min_basicpay;

}

public int getEmp_id() {

return emp_id;

}

public void setEmp_id(int emp_id) {

this.emp_id = emp_id;

}

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 getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getBuseo() {

return buseo;

}

public void setBuseo(String buseo) {

this.buseo = buseo;

}

public String getJikwi() {

return jikwi;

}

public void setJikwi(String jikwi) {

this.jikwi = jikwi;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSsn() {

return ssn;

}

public void setSsn(String ssn) {

this.ssn = ssn;

}

public String getTel() {

return tel;

}

public void setTel(String tel) {

this.tel = tel;

}

public String getIbsadate() {

return ibsadate;

}

public void setIbsadate(String ibsadate) {

this.ibsadate = ibsadate;

}

}




//Oracle11.java

package com.test;


import java.util.Scanner;


public class Oracle11 {


public static void main(String[] args) {

Process obj = new Process();

Scanner sc = new Scanner(System.in);

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.print("선택(1~5, -1 종료)->");

int menu = sc.nextInt();

if (menu == -1) {

System.out.println("프로그램을 종료합니다.");

break;

}

switch (menu) {

case 1 : obj.menuInsert(); break;

case 2 : obj.menuSelect(); break;

case 3 : obj.menuSearch(); break;

case 4 : obj.menuUpdate(); break;

case 5 : obj.menuDelete(); break;

}

} while (true);



}


}



WRITTEN BY
빨강꼬마

,

** 별도로 공부할 내용



예외처리(exception)

쿼리문(인서트, 셀렉트) 실행하는 자바 구문.

executeUpdate

executeQuery -- > 결과집합인 ResultSet 을 리턴받는다.


테이블 불러와서 출력할때는

while (ResultSet의 변수명.next()) 를 사용하고 row단위로 먼저 접근하고

실행문에서는 컬럼 단위로 접근한다.



http://devyongsik.tistory.com/294

Class.forName() 내용 확인 url






문제) 여러명의 국,영,수 점수를 입력 받아서 총점, 평균, 판정 결과 출력.

JDBC 프로그램 작성. 오라클 이용. 총점 기준 정렬 출력(내림차순 desc)


판정 기준은 

합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상.

과락 -> 과목중 40점 미만이 있고, 평균이 60이상.

불합격 -> 평균이 60점 미만


평균이 60점 이상 -> 합격 또는 과락 -> 국영수 점수가 모두 40점 이상인지 확인.

평균이 60점 이하 -> 불합격


정렬 기준은 총점 기준으로 내림차순 정렬.


실행 예)

성적 입력(이름 국어 영어 수학)?hong 100 100 100

성적 입력(이름 국어 영어 수학)?kim 80 90 80

성적 입력(이름 국어 영어 수학)?-1 -> 입력끝 지정 필요


------------------------------------------

    이름  국어  영어  수학  총점   평균   판정

------------------------------------------

1등 hong   100   100   100   300  100.0   합격

2등 kim     80    90    80    ..    ..    합격

------------------------------------------



** 오라클 별도작업

--오라클에 성적저장용 테이블 생성

CREATE TABLE score(

sid NUMBER --PK, 자동번호 기능 부여.

,name VARCHAR2(10)

,kor NUMBER(3) --CK (0~100)

,end NUMBER(3) --CK (0~100)

,mat NUMBER(3) --CK (0~100)

);



-- 제약조건 추가

ALTER TABLE score

ADD CONSTRAINT score_sid_pk PRIMARY KEY (sid)

ALTER TABLE score

ADD CONSTRAINT score_kor_ck CHECK (kor BETWEEN 0 AND 100);

ALTER TABLE score

ADD CONSTRAINT score_eng_ck CHECK (eng BETWEEN 0 AND 100);

ALTER TABLE score

ADD CONSTRAINT score_mat_ck CHECK (mat BETWEEN 0 AND 100);


--자동번호부여


CREATE SEQUENCE scoreSeq;



--INSERT 쿼리 샘플 (자바 소스에 복사할 목적으로 미리 만든 샘플이므로 구문 끝에 ; 표시를 제외함.)

INSERT INTO score (sid, name, kor, eng, mat) VALUES (scoreSeq.nextVal, 'hong', 100, 100, 100)


--SELECT 쿼리 샘플

  SELECT sid, name, kor, eng, mat

  , (kor+eng+mat) as tot

  , (kor+eng+mat)/3 as ave

  , case

           when ((kor+eng+mat)/3 >= 60) and (kor<40 or eng<40 or mat<40) then '과락'

   when ((kor+eng+mat)/3 >= 60) then '합격'

   else '불합격'

    end as "grade"

FROM score

ORDER BY (kor+eng+mat) DESC



------------------------------------------------------------

//DBconn.java



//Oracle07.java






문제) 이름과 전화번호를 저장하는 JDBC 프로그램 작성. 오라클 이용.

MemberDTO, MemberDAO, Oracle08 클래스 작성


실행 예)

이름 전화번호(1)?홍길동 010-123-1234

이름 전화번호(2)?김길동 010-222-3333

이름 전화번호(3)?-1


----------------------------

전체 회원수 : 2명

----------------------------

회원번호 이름   전화번호

----------------------------

1        홍길동 010-123-1234

2        김길동 010-222-3333

----------------------------


-- 회원수 출력쿼리

SELECT COUNT(*) AS count FROM member 


-- 회원정보 출력

SELECT mid, name, tel FROM member ORDER BY mid


-- 회원정보 입력

INSERT INTO member (mid, name, tel) VALUES (memberSeq.nextval, '%s', '%s')



//회원 테이블 생성. 회원번호, 이름, 전화번호. 시퀀스 객체 생성.

CREATE TABLE member (

mid NUMBER --PK

,name VARCHAR2(10)

,tel VARCHAR2(20)

);


ALTER TABLE member

ADD CONSTRAINT member_mid_pk PRIMARY KEY(mid);


CREATE SEQUENCE memberSeq;



----

//DBconn.java -> 오라클 연결용 클래스

//연결 전용 클래스 작성

//DBConn.java

package com.test;


import java.sql.*;


public class DBConn {

//Singleton pattern

private static Connection dbConn;

public static Connection getConnection() throws SQLException, ClassNotFoundException {

if (dbConn == null) {  // 이미 getConnection 을 호출하여 성공한적이 있으면 dbConn 을 그냥 리턴.

   // Singleton pattern은 이것을 의미함.


String url = "jdbc:oracle:thin:@localhost:1521:xe";

String user = "scott";

String pw = "tiger";

Class.forName("oracle.jdbc.driver.OracleDriver");

dbConn = DriverManager.getConnection(url, user, pw);


}

return dbConn;

}

public static void close() throws SQLException {

if (dbConn != null) {

if (!dbConn.isClosed()) {

dbConn.close();

}

}

dbConn = null;

}

}




//MemberDTO.java -> 자료처리 전용 클래스. 멤버변수, getter, setter

package com.test;


public class MemberDTO {

private int mid;

private String name, tel;

public int getMid() {

return mid;

}

public void setMid(int mid) {

this.mid = mid;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getTel() {

return tel;

}

public void setTel(String tel) {

this.tel = tel;

}

}




//MemberDAO.java -> 데이터베이스 엑세스 담당 클래스. 입력, 출력, 연결용 메소드.

package com.test;


import java.util.*;

import java.sql.*;


public class MemberDAO {

private Connection conn;

//연결 전용 메소드

public void connect() throws SQLException, ClassNotFoundException{

conn  = DBConn.getConnection();

}

//연결 해제 전용 메소드

public void close() throws SQLException{

DBConn.close();

conn = null;

}

//입력 메소드 즉, INSERT 쿼리 실행

public int add(MemberDTO dto) throws SQLException{

int result = 0;

String sql = String.format("INSERT INTO member (mid, name, tel) VALUES (memberSeq.nextval, '%s', '%s')", dto.getName(), dto.getTel());


//쿼리 실행

//Java에서 쿼리를 실행하면 

//내부적으로 COMMIT은 자동 실행됨.

//executeUpdate() 메소드는 DML문인 경우만 실행.

Statement stmt = conn.createStatement();

result = stmt.executeUpdate(sql);

return result;

}

//회원수 출력 전용 메소드

public int count() throws SQLException {

int result = 0;

String sql = String.format("SELECT COUNT(*) AS count FROM member");

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql); //결과집합

while(rs.next()) { //row 단위 접근

int count = rs.getInt("count"); //column 단위 접근

result = count;

}


rs.count();

return result;

}

//출력 메소드 즉, SELECT 쿼리 실행

public ArrayList<MemberDTO> lists() throws SQLException{

ArrayList<MemberDTO> arrayList = new ArrayList<MemberDTO>();

//SELECT 쿼리 준비

String sql = String.format("SELECT mid, name, tel FROM member ORDER BY mid");

//쿼리 실행

//executeQuery() 메소드는 DQL문인 경우만 실행.

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql); //결과집합

//결과 집합(ResultSet)을 리턴해야 된다.

//결과 집합은 특성상 이 메소드를 벗어날 수 없다. 왜냐하면 ResultSet은 메소드 빠져나가기 전에 반드시 클로즈하기 때문.

//결과 집합을 -> 결렉션 저장

//컬렉션을 리턴.

while(rs.next()) { //row 단위 접근

int mid = rs.getInt("mid"); //column 단위 접근

String name = rs.getString("name");

String tel = rs.getString("tel");

MemberDTO dto = new MemberDTO();

dto.setMid(mid);

dto.setName(name);

dto.setTel(tel);

arrayList.add(dto);

}

rs.close();

return arrayList;

}


}




//Oracle08.java -> main() 메소드. 인터페이스 담당.

package com.test;


import java.util.*;


public class Oracle08 {


public static void main(String[] args) {


MemberDAO dao = new MemberDAO();

Scanner sc = new Scanner(System.in);

try {

//연결

dao.connect();

//입력 - 무한실행

do {

System.out.printf("이름 전화번호(%d)?", (dao.count()+1));

String name = sc.next(); //이름

if (name.equals("-1")) {

break;

}

String tel = sc.next();  //전화번호

MemberDTO dto = new MemberDTO();

dto.setName(name);

dto.setTel(tel);

int rowCount = dao.add(dto);

System.out.printf("%d개의 행이 입력됨. %n", rowCount);

} while (true);

//출력

System.out.println("----------------------");

System.out.printf("전체 회원수 : %d명 %n", dao.count());

System.out.println("----------------------");

System.out.println("회원번호 이름  전화번호");

for(MemberDTO dto : dao.lists()) {

System.out.printf("%8d %4s %9s %n", dto.getMid(), dto.getName(), dto.getTel());

}

System.out.println("----------------------");

} catch (Exception e) {

System.out.println(e.toString());

}


}


}








문제) 여러명의 국,영,수 점수를 입력 받아서 총점, 평균, 판정 결과 출력.

JDBC 프로그램 작성. 오라클 이용. 총점 기준 정렬 출력(내림차순 desc)

DBConn, ScoreDTO, ScoreDAO, Oracle09


판정 기준은 

합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상.

과락 -> 과목중 40점 미만이 있고, 평균이 60이상.

불합격 -> 평균이 60점 미만


평균이 60점 이상 -> 합격 또는 과락 -> 국영수 점수가 모두 40점 이상인지 확인.

평균이 60점 이하 -> 불합격


정렬 기준은 총점 기준으로 내림차순 정렬.


실행 예)

성적 입력(이름 국어 영어 수학)?hong 100 100 100

성적 입력(이름 국어 영어 수학)?kim 80 90 80

성적 입력(이름 국어 영어 수학)?-1 -> 입력끝 지정 필요


------------------------------------------

    이름  국어  영어  수학  총점   평균   판정

------------------------------------------

1등 hong   100   100   100   300  100.0   합격

2등 kim     80    90    80    ..    ..    합격

------------------------------------------



//DBConn.java 오라클 접속을 위한 클래스


//ScoreDTO.java 자료처리전용 클래스 - 멤버변수, getter, setter




//ScoreDAO.java 데이터베이스 엑세스 전용 클래스.




//Oracle09.java main() 메소드 구현. 인터페이스 출력 클래스.







문제) 성적 처리. 메뉴 구성 추가. 새 프로젝트에서 구성할 것.

DBConn.java, ScoreDTO, ScoreDAO, Process, Oralce10 클래스 이용.


여러명의 이름, 국어, 영어, 수학 입력 받아서 총점, 평균, 판정, 등수 계산해서 출력. 출력시 이름 오름차순 정렬해서 출력.


실행 예)

======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->1


성적 입력(이름 국어 영어 수학)?park 80 75 60

성적 입력(이름 국어 영어 수학)?hong 100 90 80

성적 입력(이름 국어 영어 수학)?kim 80 85 80

성적 입력(이름 국어 영어 수학)?-1


======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->2


 이름   국어  영어  수학  총점  평균   판정  등수

 hong    100   90    80    XXX  XXX.X  합격   1

 kim      80   85    80    XXX  XXX.X  합격   2

 park     80   75    60    XXX  XXX.X  합격   3



======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->3

검색하려는 이름?kim

 이름   국어  영어  수학  총점  평균   판정  등수

 kim      80   85    80    XXX  XXX.X  합격   2



======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->3

검색하려는 이름?choi

검색 결과가 없습니다.


======== 성적 처리 ==============

1. 성적 입력

2. 성적 전체 출력

3. 이름 검색 출력

4. 성적 수정

5. 성적 삭제

선택(1~5, -1 종료)->-1


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


-------------------------------------------------------------

//새 프로젝트 생성(Score_Console)


//DBConn.java    -> 오라클 데이터베이스 접속 클래스.

//ScoreDTO.java  -> 멤버변수, getter, setter. 등수 관련 멤버 추가.

//ScoreDAO.java  -> 연결, 입력, 출력, 검색, 수정, 삭제 메소드.

//Process.java   -> 입력, 출력, 검색, 수정, 삭제 관련 인터페이스

//Oralce10.java  -> main() 메소드. 주메뉴 무한실행


WRITTEN BY
빨강꼬마

,

예외처리(Exception)


1. 프로그램 실행시 발생하는 오류를 붙잡아주는 기능.


오류 - 문법적인 오류(컴파일 단계에서 체크). 실행 오류(실행 단계에서 체크). 예외(실행 단계에서 체크).


예외 - 탐색기에서 CD드라이브를 더블클릭하는 경우 CD의 내용을 나타나기도 하고(예상 결과), CD를 넣으라는 메시지가 나타나기도(예외 상황) 한다.

예외 처리를 하지 않았다면 CD를 넣지 않은 경우 오류 발생하면서 프로그램이 종료되버린다.


2. Exception 클래스 


- ArithmeticException

- ArrayStoreException

- IndexOutOfBoundsException

- ClassCastException

- NullPointerException


3. 예외 처리 형식


try {


//오류 발생 가능성이 있는 실행문;


} catch(예외종류) {

//처리 방법

}



//Exception 처리 없는 경우

//Sample01.java



//Exception 처리 있는 경우

//Sample02.java






try~catch 구문


1. 예외처리를 담당하는 구문. 예외가 발생할 수 있는 부분을 try 블럭으로 감싸주면 예외처리를 할 수 있다.


2. 형식


형식1 -------

try {

//실행문;

} catch(예외종류) {

//예외처리 

}


형식2 -------

try {

//실행문;

} [catch(하위예외) { //예를들어, FileNotFoundException

//예외처리 

} catch(하위예외) { //예를들어, IOException

//예외처리 

}] catch(상위예외) { //예를들어, Exception

//예외처리 

}



형식3 -------

try {

//실행문;

} catch(예외종류) {

//예외처리 

} [finally {

//예외 발생과 관련없이 항상 실행되는 부분;

}]





//예외가 발생해도 프로그램이 중지되지 않도록 하는 방법-예외 처리

//Sample03.java







예외 발생 가능성 확인

-> 메소드 원형에서 예외 가능성과 종류를 확인할 수 있다.


//Integer.parseInt() 메소드에서 예외 종류 확인

//Sample04.java







throws 구문


1. 예외처리를 담당하는 구문. try~catch는 예외 발생시 try~catch 구문이 처리하지만, throws는 예외 발생시 외부에 예외를 넘기게 된다.


2. 형식


접근지정자 반환자료형 메소드이름(매개변수 리스트)  throws 예외종류 {

//실행문;

//예외 발생 가능성이 있는 문장;

return 값;

}



//예외 처리를 throws 구문으로 처리하는 경우







JDBC (Java DataBase Connectivity)


1. 자바 프로그램이 DBMS에 일관된 방식으로 접근할 수 있도록 제공하는 API.


2. JDBC는 데이터베이스에 접속하기 위해서 한 개의 클래스(java.sql.DriverManager)와 두 개의 인터페이스(java.sql.Driver, java.sql.Connection)을 사용한다.


3. 오라클용 JDBC 드라이버(ojdbc14.jar)를 Java/jdk1.7.XX/jre/lib/ext 폴더와 Java/jre7/lib/ext 폴더에 복사할 것. ojdbc14.jar 파일은 오라클 설치 폴더에서 복사할 수 있음.



//오라클 연결 테스트

//Oracle01.java








//연결 전용 클래스 작성

//DBConn.java



//Oracle02.java








SQL 쿼리 전송 테스트1 (scott 계정)


//회원 테이블 생성. 회원번호, 이름, 전화번호. 시퀀스 객체 생성.

CREATE TABLE member (

mid NUMBER --PK

,name VARCHAR2(10)

,tel VARCHAR2(20)

);


ALTER TABLE member

ADD CONSTRAINT member_mid_pk PRIMARY KEY(mid);


CREATE SEQUENCE memberSeq;



//회원 테이블에 자료 입력. INSERT 쿼리.

//쿼리문의 끝에 ; 표시하지 말것.

//INSERT INTO member (mid, name, tel) VALUES (memberSeq.nextval, 'hong', '111-1111')

//Oracle03.java

package com.test;


import java.sql.*;


public class Oracle03 {


public static void main(String[] args) {

try {

//연결

Connection conn = DBConn.getConnection();

//쿼리 준비

//쿼리 작성시 끝에 ; 표시하지 말것.

String sql = String.format("INSERT INTO member (mid, name, tel) VALUES (memberSeq.nextval, 'hong', '111-1111')");

//쿼리 실행

//Java에서 쿼리를 실행하면 

//내부적으로 COMMIT은 자동 실행됨.

//executeUpdate() 메소드는 DML문인 경우만 실행.

Statement stmt = conn.createStatement();

int count = stmt.executeUpdate(sql);

//결과 출력

System.out.printf("%d개의 행이 입력되었습니다. %n"

, count);

}catch(Exception e) {

System.out.println(e.toString());

}


}


}




//회원 테이블 자료 출력. SELECT 쿼리.

//쿼리문의 끝에 ; 표시하지 말것.

//SELECT mid, name, tel FROM member

//Oracle04.java

package com.test;


import java.sql.*;


public class Oracle04 {


public static void main(String[] args) {

try {

//연결

Connection conn = DBConn.getConnection();

//쿼리 준비

//쿼리 작성시 끝에 ; 표시하지 말것.

String sql = String.format("SELECT mid, name, tel FROM member");

//쿼리 실행

//executeQuery() 메소드는 DQL문인 경우만 실행.

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql); //결과집합

//결과 출력

while(rs.next()) { //row 단위 접근

int mid = rs.getInt("mid"); //column 단위 접근

String name = rs.getString("name");

String tel = rs.getString("tel");

System.out.printf("%d %s %s %n"

, mid, name, tel);

}


//ResultSet 객체 소멸->필수

rs.close();

}catch(Exception e) {

System.out.println(e.toString());

}


}


}






문제) member 테이블의 회원수를 출력하는 프로그램 작성.

//SELECT COUNT(*) AS count FROM member

//Oracle05.java







문제) 이름과 전화번호를 저장하는 JDBC 프로그램 작성. 오라클 이용.

데이터 입력과 INSERT 쿼리 실행을 반복 실행. 입력이 끝나면 SELECT 쿼리와 출력문 실행.


실행 예)

이름 전화번호(1)?홍길동 010-123-1234

이름 전화번호(2)?김길동 010-222-3333

이름 전화번호(3)?-1


----------------------------

전체 회원수 : 2명

----------------------------

회원번호 이름   전화번호

----------------------------

1        홍길동 010-123-1234

2        김길동 010-222-3333

----------------------------


//DBConn.java

package com.test;


import java.sql.*;


public class DBConn {

//Singleton pattern

private static Connection dbConn;

public static Connection getConnection()

throws SQLException, ClassNotFoundException {

if (dbConn == null) {


String url = "jdbc:oracle:thin:@localhost:1521:xe";

String user = "scott";

String pw = "tiger";

Class.forName("oracle.jdbc.driver.OracleDriver");

dbConn = DriverManager.getConnection(url, user, pw);


}

return dbConn;

}

public static void close()

throws SQLException {

if (dbConn != null) {

if (!dbConn.isClosed()) {

dbConn.close();

}

}

dbConn = null;

}

}




//Oracle06.java


WRITTEN BY
빨강꼬마

,