seunghyun Note
JAVA 성적 DTO 만들기 본문
728x90
반응형
파일 구조
sungJuk
├── SungJuk.java
├── SungJukDTO.java
├── SungJukDelete.java
├── SungJukInsert.java
├── SungJukMain.java
├── SungJukPrint.java
├── SungJukService.java
├── SungJukSort.java
└── SungJukUpdate.java
혼자 끄적인 구조도😂
SungJukMain.java
리모콘의 전원 ▶️ 같은 느낌이다. menu 버튼을 누르면 서비스가 시작 된다.
public class SungJukMain {
public static void main(String[] args) {
SungJukService sungJukservice = new SungJukService();
sungJukservice.menu();
}
}
SungJukService.java
리모콘의 번호키 부분이다.
번호키를 while문에 넣어서 작동시키고
버튼을 누르기 전에 정보를 준다(SungJukDTO)
package sungJuk;
import java.util.ArrayList;
import java.util.Scanner;
public class SungJukService {
private ArrayList<SungJukDTO> list = new ArrayList<SungJukDTO>();
SungJuk sungJuk = null;
public void menu() {
Scanner sc = new Scanner(System.in);
boolean run = true;
while (run) {
System.out.println("****************");
System.out.println(" 1. input");
System.out.println(" 2. print");
System.out.println(" 3. modify");
System.out.println(" 4. delete");
System.out.println(" 5. sort");
System.out.println(" 6. exit");
System.out.println("****************");
System.out.println(" number : ");
int num = sc.nextInt();
switch (num) {
case 1:
sungJuk = new SungJukInsert();
break;
case 2:
sungJuk = new SungJukPrint();
break;
case 3:
sungJuk = new SungJukUpdate();
case 4:
sungJuk = new SungJukDelete();
break;
case 5:
sungJuk = new SungJukSort();
case 6:
System.out.println("프로그램 종료");
run = false;
break;
}
sungJuk.execute(list);
}
}
}
SungJukDTO.java
information 부분이다.
나중에 list를 그냥 출력하면 코드가 길어지기때문에 toString을 override해서 수정해놨다.
package sungJuk;
public class SungJukDTO {
private String no;
private String name;
private int kor;
private int eng;
private int mat;
private int tot;
private float avg;
public SungJukDTO(String no, String name, int kor, int eng, int mat, int tot, float avg) {
this.no = no;
this.name = name;
this.kor = kor;
this.eng = eng;
this.mat = mat;
this.tot = tot;
this.avg = avg;
}
public void setNo(String no) {
this.no = no;
}
public void setName(String name) {
this.name = name;
}
public void setKor(int kor) {
this.kor = kor;
}
public void setEng(int eng) {
this.eng = eng;
}
public void setMat(int mat) {
this.mat = mat;
}
public void setTot(int tot) {
this.tot = tot;
}
public void setAvg(float avg2) {
this.avg = avg2;
}
@Override
public String toString() {
return no + "\t" + name + "\t" + kor + "\t" + eng + "\t" + mat + "\t" + tot + "\t" + String.format("%.2f", avg);
}
}
SungJuk.java (interface)
인터페이스이다.
interface를 사용해서 나중에 기능들을 override해서 같은 함수 내에 다른 기능을 부여한다.
package sungJuk;
import java.util.ArrayList;
public interface SungJuk {
public void execute(ArrayList<SungJukDTO> list);
}
Function part
1. 삽입 : SungJukInsert.java
2. 출력 : SungJukPrint.java
3. 삭제 : SungJukDelete.java
4. 수정 : SungJukUpdate.java
5. 정렬 : SungJukSort.java
6. 종료
삽입 : SungJukInsert.java
tot, avg를 function 내에서 값을 계산
생성자에 값을 대입
package sungJuk;
import java.util.ArrayList;
import java.util.Scanner;
public class SungJukInsert implements SungJuk {
private String no;
private String name;
private int kor;
private int eng;
private int mat;
private int tot;
private float avg;
public SungJukInsert() {
Scanner sc = new Scanner(System.in);
System.out.print("번호 입력 : ");
no = sc.next();
System.out.print("이름 입력 : ");
name = sc.next();
System.out.print("국어 입력 : ");
kor = sc.nextInt();
System.out.print("영어 입력 : ");
eng = sc.nextInt();
System.out.print("수학 입력 : ");
mat = sc.nextInt();
tot = kor + eng + mat;
avg = tot / 3;
}
@Override
public void execute(ArrayList<SungJukDTO> list) {
SungJukDTO sungJukDTO = new SungJukDTO(no, name, kor, eng, mat, tot, avg);
list.add(sungJukDTO);
}
}
출력: SungJukPrint.java
SungJukDTO를 이용해 반복문으로 순회시켜 출력
package sungJuk;
import java.util.ArrayList;
public class SungJukPrint implements SungJuk {
@Override
public void execute(ArrayList<SungJukDTO> list) {
// TODO Auto-generated method stub
for (SungJukDTO sungJukDTO : list) {
System.out.println(sungJukDTO);
}
}
public SungJukPrint() {
}
}
삭제: SungJukDelete.java
list로 지우면 error..
Iterator에 list를 할당에서 remove()함수를 사용해 지운다.
ConcurrentModificationException은 자바에서 발생하는 예외 중 하나이다. 이것을 예방하기 위해 Iterator를 사용한다.
이 예외는 변경 동시 수정 예외 로 , 어떤 컬렉션을 반복 중에 그 구조를 수정하려고 할 때 발생한다.
즉 list로 그냥 해버리면 순회 도중에 구조가 변경 되기 때문에 ConcurrentModificationException 이 발생하기 때문에 Iterator를 사용해서 리스트의 요소를 안전하게 삭제할 수 있다.
문제를 피하는 방법은 삭제할 요소들을 모아두었다가 순회가 끝난 후 한꺼번에 삭제하는 방법도 있다. (번거로움)
cnt++를 추가해서 중복된 값들이 몇개인지 체크하기!
package sungJuk;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class SungJukDelete implements SungJuk {
private String name;
@Override
public void execute(ArrayList<SungJukDTO> list) {
Scanner sc = new Scanner(System.in);
int cnt = 0;
boolean found = false;
Iterator<SungJukDTO> iterator = list.iterator();
while (iterator.hasNext()) {
SungJukDTO sungJukDTO = iterator.next();
if (sungJukDTO.getName().equals(name)) {
iterator.remove();
cnt++;
found = true;
}
}
if (!found)
System.out.println("회원의 정보가 없습니다.");
else
System.out.println(cnt + "건의 항목을 삭제하였습니다.");
}
public SungJukDelete() {
Scanner sc = new Scanner(System.in);
System.out.print("이름 입력 : ");
name = sc.next();
}
}
수정: SungJukUpdate.java
equals ()를 사용하여 같은 번호를 찾고 수정한다.
수정할 때는 SungJukDTO에 있는 setFunction()을 사용한다.
package sungJuk;
import java.util.ArrayList;
import java.util.Scanner;
public class SungJukUpdate implements SungJuk {
private String no;
private String name;
private int kor;
private int eng;
private int mat;
private int tot;
private float avg;
@Override
public void execute(ArrayList<SungJukDTO> list) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
boolean found = false;
for (SungJukDTO sungJukDTO : list) {
if (sungJukDTO.getNo().equals(no)) {
found = true;
System.out.print("수정할 이름 입력 : ");
name = sc.next();
sungJukDTO.setName(name);
System.out.print("수정할 국어 입력 : ");
kor = sc.nextInt();
sungJukDTO.setKor(kor);
System.out.print("수정할 영어 입력 : ");
eng = sc.nextInt();
sungJukDTO.setEng(eng);
System.out.print("수정할 수학 입력 : ");
mat = sc.nextInt();
sungJukDTO.setMat(mat);
tot = kor + eng + mat;
avg = tot / 3;
sungJukDTO.setTot(tot);
sungJukDTO.setAvg(avg);
}
}
if (!found)
System.out.println("해당 번호가 없습니다.");
}
public SungJukUpdate() {
Scanner sc = new Scanner(System.in);
System.out.print("번호 입력 : ");
no = sc.next();
}
}
정렬정렬 : SungJukSort.java
아직도 이해가 잘 되지는 않지만 Comparator를 사용한다
package sungJuk;
import java.util.ArrayList;
import java.util.Comparator;
public class SungJukSort implements SungJuk {
@Override
public void execute(ArrayList<SungJukDTO> list) {
list.sort(Comparator.comparing(SungJukDTO::getName)); // 이름에 대해 오름차순으로 정렬
// 정렬된 결과 출력
for (SungJukDTO sungJukDTO : list) {
System.out.println(sungJukDTO);
}
}
public SungJukSort() {
}
}
728x90
반응형
'스터디 > JAVA' 카테고리의 다른 글
DB 연결을 통한 학교 관리 시스템 (0) | 2024.01.11 |
---|---|
JAVA 자동 Calendar 만들기 (3) | 2024.01.04 |