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


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

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
빨강꼬마

,