! 현재 배워가고 있는 주인장이 쓴 글이니 정보의 정확성에 유의하시기바랍니다 !
ScoreDTO.java
String sid(번호), name(이름)
int kor(국어점수), eng(영어점수), mat(수학점수), tot(총점), rank(석차)
double avg(평균)
/*==================================
ScoreDTO.java
- 데이터 보관 및 전송 전용 객체
===================================*/
package com.test;
public class ScoreDTO
{
// 주요 속성 구성
private String sid, name; //--번호, 이름
private int kor, eng, mat; //--국어점수, 영어점수, 수학점수
private int tot, rank; //--총점, 석차
private double avg; //--평균
// getter / setter
public String getSid()
{
return sid;
}
public void setSid(String sid)
{
this.sid = sid;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getKor()
{
return kor;
}
public void setKor(int kor)
{
this.kor = kor;
}
public int getEng()
{
return eng;
}
public void setEng(int eng)
{
this.eng = eng;
}
public int getMat()
{
return mat;
}
public void setMat(int mat)
{
this.mat = mat;
}
public int getTot()
{
return tot;
}
public void setTot(int tot)
{
this.tot = tot;
}
public int getRank()
{
return rank;
}
public void setRank(int rank)
{
this.rank = rank;
}
public double getAvg()
{
return avg;
}
public void setAvg(double avg)
{
this.avg = avg;
}
}
ScoreDAO.java
Connection connection() : 데이터베이스 연결 담당 메소드
int add(ScoreDTO) : 데이터 입력 담당 메소드
ArrayList<ScoreDTO> lists() : 전체 리스트 출력 담당 메소드
ArrayList(ScoreDTO) lists(String name) : 이름 검색 담당 메소드
ArrayList<ScoreDTO> lists(int sid) : 번호 검색 담당 메소드
int count() : 전체 인원수 확인 담당 메소드
int remove(int sid) : 데이터 삭제 담당 메소드
int countName(int sid) : 검색 인원수 확인 담당 메소드
/*=====================================
ScoreDAO.java
- 데이터베이스 액션 처리 전용 객체
======================================*/
package com.test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import com.util.DBConn;
public class ScoreDAO
{
// 주요 속성 구성
private Connection conn;
// 데이터베이스 연결 담당 메소드
public Connection connection() throws ClassNotFoundException, SQLException
{
conn = DBConn.getConnection();
return conn;
}
// 데이터 입력 담당 메소드
public int add(ScoreDTO dto) throws SQLException
{
int result = 0;
Statement stmt = conn.createStatement();
String sql = String.format("INSERT INTO TBL_SCORE(SID, NAME, KOR, ENG, MAT)"
+ " VALUES(SCORESEQ.NEXTVAL, '%s', %d, %d, %d)"
, dto.getName(), dto.getKor(), dto.getEng(), dto.getMat());
result = stmt.executeUpdate(sql);
stmt.close();
return result;
}
// 전체 리스트 출력 담당 메소드
public ArrayList<ScoreDTO> lists() throws SQLException
{
ArrayList<ScoreDTO> result = new ArrayList<ScoreDTO>();
Statement stmt = conn.createStatement();
String sql = "SELECT SID, NAME, KOR, ENG, MAT"
+ ", (KOR+ENG+MAT) AS TOT"
+ ", ((KOR+ENG+MAT)/3) AS AVG"
+ ", RANK() OVER(ORDER BY (KOR+ENG+MAT) DESC) AS RANK"
+ " FROM TBL_SCORE "
+ "ORDER BY SID ASC";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next())
{
ScoreDTO dto = new ScoreDTO();
dto.setSid(rs.getString("SID"));
dto.setName(rs.getString("NAME"));
dto.setKor(rs.getInt("KOR"));
dto.setEng(rs.getInt("ENG"));
dto.setMat(rs.getInt("MAT"));
dto.setTot(rs.getInt("TOT"));
dto.setAvg(rs.getDouble("AVG"));
dto.setRank(rs.getInt("RANK"));
result.add(dto);
}
rs.close();
stmt.close();
return result;
}
// 이름 검색 담당 메소드
public ArrayList<ScoreDTO> lists(String name) throws SQLException
{
ArrayList<ScoreDTO> result = new ArrayList<ScoreDTO>();
Statement stmt = conn.createStatement();
String sql = String.format("SELECT SID, NAME, KOR, ENG, MAT, TOT, AVG, RANK "
+ "FROM(SELECT SID, NAME, KOR, ENG, MAT"
+ ", (KOR+ENG+MAT) AS TOT"
+ ", ((KOR+ENG+MAT)/3) AS AVG"
+ ", RANK() OVER(ORDER BY (KOR+ENG+MAT) DESC) AS RANK"
+ " FROM TBL_SCORE)"
+ " WHERE NAME LIKE '%%%s%%'", name);
//JAVA에서 % 표현 -> '%%'
ResultSet rs = stmt.executeQuery(sql);
while (rs.next())
{
ScoreDTO dto = new ScoreDTO();
dto.setSid(rs.getString("SID"));
dto.setName(rs.getString("NAME"));
dto.setKor(rs.getInt("KOR"));
dto.setEng(rs.getInt("ENG"));
dto.setMat(rs.getInt("MAT"));
dto.setTot(rs.getInt("TOT"));
dto.setAvg(rs.getDouble("AVG"));
dto.setRank(rs.getInt("RANK"));
result.add(dto);
}
rs.close();
stmt.close();
return result;
}
// 번호 검색 담당 메소드
public ArrayList<ScoreDTO> lists(int sid) throws SQLException
{
ArrayList<ScoreDTO> result = new ArrayList<ScoreDTO>();
Statement stmt = conn.createStatement();
String sql = String.format("SELECT SID, NAME, KOR, ENG, MAT, TOT, AVG, RANK "
+ "FROM(SELECT SID, NAME, KOR, ENG, MAT"
+ ", (KOR+ENG+MAT) AS TOT"
+ ", ((KOR+ENG+MAT)/3) AS AVG"
+ ", RANK() OVER(ORDER BY (KOR+ENG+MAT) DESC) AS RANK"
+ " FROM TBL_SCORE)"
+ " WHERE SID = %d", sid);
ResultSet rs = stmt.executeQuery(sql);
while (rs.next())
{
ScoreDTO dto = new ScoreDTO();
dto.setSid(rs.getString("SID"));
dto.setName(rs.getString("NAME"));
dto.setKor(rs.getInt("KOR"));
dto.setEng(rs.getInt("ENG"));
dto.setMat(rs.getInt("MAT"));
dto.setTot(rs.getInt("TOT"));
dto.setAvg(rs.getDouble("AVG"));
dto.setRank(rs.getInt("RANK"));
result.add(dto);
}
rs.close();
stmt.close();
return result;
}
// 전체 인원 수 확인 담당 메소드
public int count() throws SQLException
{
int result = 0;
Statement stmt = conn.createStatement();
String sql = "SELECT COUNT(*) AS COUNT FROM TBL_SCORE";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next())
{
result = rs.getInt("COUNT");
}
rs.close();
stmt.close();
return result;
}
// 데이터 수정 담당 메소드 → 매개변수 유형 check~!!!
public int modify(ScoreDTO dto) throws SQLException
{
int result = 0;
Statement stmt = conn.createStatement();
String sql = String.format("UPDATE TBL_SCORE SET NAME = '%s', KOR = %d, ENG = %d, MAT = %d WHERE SID = %s"
, dto.getName(), dto.getKor(), dto.getEng(), dto.getMat(), dto.getSid());
result = stmt.executeUpdate(sql);
stmt.close();
return result;
}
// 데이터 삭제 담당 메소드
public int remove(int sid) throws SQLException
{
int result = 0;
Statement stmt = conn.createStatement();
String sql = String.format("DELETE FROM TBL_SCORE WHERE SID = %d", sid);
result = stmt.executeUpdate(sql);
stmt.close();
return result;
}
// 데이터메이스 연결 종료 담당 메소드
public void close() throws SQLException
{
DBConn.close();
}
// 추가
// 검색 인원수 확인 담당 메소드
public int countName(String name) throws SQLException
{
int result = 0;
Statement stmt = conn.createStatement();
String sql = String.format("SELECT COUNT(*) AS COUNT FROM TBL_SCORE WHERE NAME = '%s'", name);
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{
result = rs.getInt("COUNT");
}
rs.close();
stmt.close();
return result;
}
}
Process.java
: dao를 활용한 기능 구현
/*================
Process.java
=================*/
/*
1. 성적 입력
2. 성적 전체 출력
3. 이름 검색 출력
4. 성적 수정
5. 성적 삭제
*/
package com.test;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Scanner;
public class Process
{
// 주요 속성 구성 → 데이터베이스 액션 처리 전담 객체 → ScoreDAO
private ScoreDAO dao;
// 생성자 정의(사용자 정의 생성자)
public Process()
{
dao = new ScoreDAO();
}
// 성적 입력 기능
public void sungjukInsert() throws SQLException
{
try
{
// 데이터베이스 연결
dao.connection();
// 레코드 수 확인
int count = dao.count();
Scanner sc = new Scanner(System.in);
do
{
System.out.println();
System.out.printf("%d번 학생 성적 입력(이름 국어 영어 수학) : ", ++count);
String name = sc.next();
if (name.equals("."))
break;
int kor = sc.nextInt();
int eng = sc.nextInt();
int mat = sc.nextInt();
// 입력받은 항목들을 토대로 ScoreDTO 객체 구성
ScoreDTO dto = new ScoreDTO();
dto.setName(name);
dto.setKor(kor);
dto.setEng(eng);
dto.setMat(mat);
// dao 의 add() 메소드 호출
int result = dao.add(dto);
if (result > 0)
System.out.println("성적 입력이 완료되었습니다.");
} while (true);
// 데이터베이스 연결 종료
dao.close();
} catch (Exception e)
{
System.out.println(e.toString());
}
}
// 성적 전체 출력 기능
public void sungjukSelectAll()
{
try
{
// dao 의 connection() 메소드 호출 → 데이터베이스 연결~!!!
dao.connection();
Scanner sc = new Scanner(System.in);
// dao 의 count() 메소드 호출 → 인원 수 확인~!!!
int count = dao.count();
// dao 의 lists() 메소드 호출 → 리스트 출력~!!!
System.out.println();
System.out.printf("전체인원 : %d명\n", count);
System.out.println("번호 이름 국어 영어 수학 총점 평균 석차");
// lists() 메소드의 호출 결과를 반복문을 활용하여 처리
//dao.lists();
for (ScoreDTO dto : dao.lists())
{
System.out.printf("%3s %4s %4d %4d %4d %5d %5.1f %5d\n"
, dto.getSid(), dto.getName()
, dto.getKor(), dto.getEng(), dto.getMat()
, dto.getTot(), dto.getAvg(), dto.getRank());
}
System.out.println();
// dao 의 close() 메소드 호출 → 데이터베이스 연결 종료~!!!
dao.close();
} catch (Exception e)
{
System.out.println(e.toString());
}
}
// 이름 검색 출력 기능
public void sungjukSearchName()
{
try
{
// 검색할 이름 입력받기
Scanner sc = new Scanner(System.in);
System.out.print("\n>> 검색할 이름 입력 :");
String name = sc.next();
//-- 필요한 경우 이 과정에서 프로그래밍적으로 검증(검사) 수행
// 데이터베이스 연결
dao.connection();
// dao 의 lists() 메소드 호출 → 매개변수로 검색할 이름을 문자열 형태로 넘겨주기
ArrayList<ScoreDTO> arrayList = dao.lists(name);
if (arrayList.size() > 0)
{
// 수신된 내용 출력
//int count = dao.countName(name);
//System.out.printf("전체 인원 : %d명\n", count);
System.out.printf("\n전체 인원 : %d명\n", dao.countName(name));
System.out.println("\n번호 이름 국어 영어 수학 총점 평균 석차\n");
for (ScoreDTO dto : arrayList)
{
System.out.printf("%3s %4s %4d %4d %4d %5d %5.1f %5d\n"
, dto.getSid(), dto.getName()
, dto.getKor(), dto.getEng(), dto.getMat()
, dto.getTot(), dto.getAvg(), dto.getRank());
}
}
else
{
// 수신된 내용이 없는 상황이라는 안내
System.out.println("\n>> 검색 결과가 존재하지 않습니다.\n");
}
// 데이터베이스 연결 종료
dao.close();
} catch (Exception e)
{
System.out.println(e.toString());
}
}
// 성적 수정 기능
public void sungjukUpdate()
{
try
{
/* 내가
dao.connection();
Scanner sc = new Scanner(System.in);
System.out.print(">> 수정하고자 하는 번호를 입력해주세요. : ");
String sid = sc.next();
System.out.print(">> 수정하고자 하는 이름을 입력해주세요. : ");
String name = sc.next();
System.out.print(">> 변경하실 점수를 입력해주세요.(국어, 영어, 수학) : ");
int kor = sc.nextInt();
int eng = sc.nextInt();
int mat = sc.nextInt();
ScoreDTO dto = new ScoreDTO();
dto.setSid(sid);
dto.setName(name);
dto.setKor(kor);
dto.setEng(eng);
dto.setMat(mat);
dao.modify(dto);
*/
// 수정할 대상의 번호 입력받기
Scanner sc = new Scanner(System.in);
System.out.print("수정 대상의 번호를 입력하세요 : ");
int sid = sc.nextInt();
//-- 입력받은 번호로 점검해야 할 로직 적용 삽입 가능
// 데이터베이스 연결
dao.connection();
// 수정할 대상 확인(수신)
ArrayList<ScoreDTO> arrayList = dao.lists(sid);
if (arrayList.size() > 0)
{
// 수신된 내용 출력
System.out.println();
System.out.println("번호 이름 국어 영어 수학 총점 평균 석차");
for (ScoreDTO dto : arrayList)
{
System.out.printf("%3s %4s %4d %4d %4d %5d %5.1f %5d\n"
, dto.getSid(), dto.getName()
, dto.getKor(), dto.getEng(), dto.getMat()
, dto.getTot(), dto.getAvg(), dto.getRank());
}
// 대상에 대해 수정할 데이터 입력
System.out.println();
System.out.println("수정 데이터 입력(이름 국어 영어 수학) : ");
String name = sc.next();
int kor = sc.nextInt();
int eng = sc.nextInt();
int mat = sc.nextInt();
// 입력된 데이터를 활용하여 ScoreDTO 객체 구성
ScoreDTO dto = new ScoreDTO();
dto.setName(name);
dto.setKor(kor);
dto.setEng(eng);
dto.setMat(mat);
dto.setSid(String.valueOf(sid));
// 구성된 ScoreDTO 객체를 넘겨주며 dao 의 modify() 메소드 호출
int result = dao.modify(dto);
if (result > 0)
{
System.out.println(">> 수정이 완료되었습니다.\n");
}
}
else
{
// 수신된 내용이 존재하지 않는 상황임을 전달(안내)
System.out.println(">> 수정 대상이 존재하지 않습니다.\n");
}
// 데이터베이스 연결 종료
dao.close();
} catch (Exception e)
{
System.out.println(e.toString());
}
}
// 성적 삭제 기능
public void sungjukDelete()
{
/*내가
try
{
// 데이터베이스 연결
dao.connection();
Scanner sc = new Scanner(System.in);
System.out.println(">> 삭제할 번호를 입력해주세요.");
int sid = sc.nextInt();
// 수정할 대상 확인(수신)
ArrayList<ScoreDTO> arrayList = dao.lists(sid);
if (arrayList.size() > 0)
{
int result = dao.remove(sid);
if (result > 0)
{
System.out.println(">> 삭제가 완료되었습니다.");
}
}
else
{
System.out.println(">> 삭제 대상이 존재하지 않습니다.");
}
// 데이터베이스 연결 종료
dao.close();
} catch (Exception e)
{
System.out.println(e.toString());
}
*/
try
{
// 삭제할 번호 입력받기
Scanner sc = new Scanner(System.in);
System.out.print("삭제 대상의 번호를 입력하세요 : ");
int sid = sc.nextInt();
// 데이터베이스 연결
dao.connection();
// dao 의 lists() 메소드 호출 → sid 넘겨주며 삭제할 대상 검색
ArrayList<ScoreDTO> arrayList = dao.lists(sid);
// 삭제할 대상의 존재여부 확인
if (arrayList.size() > 0)
{
// 수신된 내용 출력
System.out.println();
System.out.println("번호 이름 국어 영어 수학 총점 평균 석차");
for (ScoreDTO dto : arrayList)
{
System.out.printf("%3s %4s %4d %4d %4d %5d %5.1f %5d\n"
, dto.getSid(), dto.getName()
, dto.getKor(), dto.getEng(), dto.getMat()
, dto.getTot(), dto.getAvg(), dto.getRank());
}
// 삭제 여부 확인
System.out.println(">> 정말 삭제하시겠습니까?(Y/N) : ");
String response = sc.next();
if (response.equals("Y") || response.equals("y"))
{
// 삭제 처리
int result = dao.remove(sid);
if (result > 0)
{
System.out.println(">> 삭제가 완료되었습니다.\n");
}
}
else
{
System.out.println(">> 취소되었습니다.\n");
}
}
else
{
// 삭제 대상으로 수신된 내용이 존재하지 않는 상황임을 전달(안내)
System.out.println(">> 삭제할 대상이 존재하지 않습니다.\n");
}
// 데이터베이스 연결 종료
dao.close();
} catch (Exception e)
{
System.out.println(e.toString());
}
}
}
SocreMain.java
○ 성적 처리 → 데이터베이스 연동(데이터베이스 연결 및 액션 처리)
- ScoreDTO 클래스 활용(속성만 존재하는 클래스 , getter / setter 구성)
- ScoreDAO 클래스 활용(데이터베이스 액션 처리)
- Process 클래스 활용(업무 단위 기능 구성)
- DBConn 클래스(데이터베이스 연결 전담 전용 객체 처리)
여러 명의 이름, 국어점수, 영어점수, 수학점수를 입력받아
총점, 평균, 석차 등을 계산하여 출력하는 프로그램을 구현한다.
※ 이 과정에서 업무 단위로 기능을 묶어 사용할 수 있는 서브 메뉴를 구성한다. → Process 클래스 활용
실행 예)
=====[ 성적 처리 ]=====
1. 성적 입력
2. 성적 전체 출력
3. 이름 검색 출력
4. 성적 수정
5. 성적 삭제
=======================
>> 선택(1~5, -1종료) : 1
7번 학생 성적 입력(이름 국어 영어 수학) : 이사아 50 60 70
>> 성적 입력이 완료되었습니다.
8번 학생 성적 입력(이름 국어 영어 수학) : 이아자 80 80 80
>> 성적 입력이 완료되었습니다.
9번 학생 성적 입력(이름 국어 영어 수학) : .
=====[ 성적 처리 ]=====
1. 성적 입력
2. 성적 전체 출력
3. 이름 검색 출력
4. 성적 수정
5. 성적 삭제
=======================
>> 선택(1~5, -1종료) : 2
전체 인원 : 8명
번호 이름 국어 영어 수학 총점 평균 석차
1
2
3
4 ....
5
6
7
8
=====[ 성적 처리 ]=====
1. 성적 입력
2. 성적 전체 출력
3. 이름 검색 출력
4. 성적 수정
5. 성적 삭제
=======================
>> 선택(1~5, -1종료) : 3
>> 검색할 이름 입력 : 홍길동
전체 인원 : 1명
번호 이름 국어 영어 수학 총점 평균 석차
1
=====[ 성적 처리 ]=====
1. 성적 입력
2. 성적 전체 출력
3. 이름 검색 출력
4. 성적 수정
5. 성적 삭제
=======================
>> 선택(1~5, -1종료) : -1
>> 프로그램이 종료되었습니다.
*/
/*=================
ScoreMain.java
==================*/
package com.test;
import java.util.Scanner;
public class ScoreMain
{
public static void main(String[] args)
{
Process prc = new Process();
Scanner sc = new Scanner(System.in);
do
{
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.println("=======================");
System.out.print(">> 선택(1~5, -1종료) : ");
String menus = sc.next();
//-- 필요에 따라 입력값에 대한 유효성 검사 코드 삽입 가능
try
{
int menu = Integer.parseInt(menus);
if (menu == -1)
{
System.out.println();
System.out.println(">> 프로그램이 종료되었습니다.");
return;
}
switch (menu)
{
case 1:
// 성적 입력 기능 수행
prc.sungjukInsert();
break;
case 2:
// 성적 전체 출력 기능 수행
prc.sungjukSelectAll();
break;
case 3:
// 이름 검색 출력 기능 수행
prc.sungjukSearchName();
break;
case 4:
// 성적 수정 기능 수행
prc.sungjukUpdate();
break;
case 5:
// 성적 삭제 기능 수행
prc.sungjukDelete();
break;
}
} catch (Exception e)
{
System.out.println(e.toString());
}
} while (true);
}
}
! 현재 배워가고 있는 주인장이 쓴 글이니 정보의 정확성에 유의하시기바랍니다 !
'JAVA개념&실습' 카테고리의 다른 글
JDBC : 07. ScoreDTO/ScoreDAO/PreparedStatement/성적처리 실습 (0) | 2023.05.24 |
---|---|
JDBC : 05. MemberDTO/MemberDAO/Statement/직원관리 실습 (0) | 2023.05.23 |
JDBC : 03. MemberDTO/MemberDAO/Statement/회원정보 실습 (0) | 2023.05.23 |
JDBC : 02. DB연결 실습 (0) | 2023.05.23 |
HTML : 01. eclipse 설정 (0) | 2023.05.06 |