일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- selectoptions
- hide
- is_check
- 파일질라설치오류
- slideUp
- calc.plus
- Git
- excel중복체크
- FileZilla설치
- Math.ceil()
- 1521
- Parent
- index %
- addClass
- Excel
- 소스트리인증실패
- toFixed()
- removeClass
- Math.floor()
- ctrl+/
- 파일질라다운로드
- 주석이 먹히지 않을 때
- selectedIndex
- calc.minus
- Math.round()
- FileZilla다운로드
- 증가값
- 파일질라설치
- push오류
- SUB함수
- Today
- Total
잡동사니에도 사랑을
[21.08.19]Ch.10 성적관리 프로그램 만들기1 (Main, DTO, Service) 본문
[21.08.19]Ch.10 성적관리 프로그램 만들기1 (Main, DTO, Service)
luvforjunk 2021. 8. 24. 23:00
[문제 - 성적관리 프로그램]
<조건>
1. 번호, 이름, 국어, 영어, 수학점수를 입력하여 총점과 평균을 구하시오.
2. 각 기능에 따라 3개의 클래스로 나누어 작성하시오.
SungJukDTO.java
SungJukService.java
SungJukMain.java
3. 평균은 소수 이하 2째자리까지 출력.
소수 이하 자리값이 0이면 출력하지 않는다. ex) 92.000 → 92
4. 번호는 중복되지 않게 입력한다.
5. 이름은 중복되어도 된다. (똑같은 이름을 입력하세요)
6. Comparable / Comparator 이용.
7. SungJukDTO에서 toString( )을 Override하시오.
<결과값>
menu( )
*****************
1. 입력
2. 출력
3. 검색
4. 삭제
5. 정렬
6. 끝
*****************
번호 :
1~6중에 선택하세요
insertArticle( )
번호 입력 :
이름 입력 :
국어 입력 :
영어 입력 :
수학 입력 :
등록 완료
printArticle( )
번호 이름 국어 영어 수학 총점 평균
15 홍길동 90 92 91 xxx xx.xx
30 또치 85 92 100 xxx xx.xx
searchArticle( )
검색 할 이름 입력 : 코난
찾고자 하는 이름이 없습니다
검색 할 이름 입력 : 홍길동
번호 이름 국어 영어 수학 총점 평균
15 홍길동 90 92 91 xxx xx.xx
16 홍길동 89 45 78 xxx xx.xx
deleteArticle( ) - 똑같은 이름이 있으면 모두 삭제
삭제 할 이름 입력 : 홍길동
데이터를 삭제하였습니다
sortArticle( )
1. 이름으로 오름차순
2. 총점으로 내림차순
3. 이전메뉴
번호 입력 :
-----------------------------------------------------------------------------------------------------------
////////SungJukMain
package collection;
public class SungJukMain {
public static void main(String[ ] args) {
//List 처리
SungJukService service = new SungJukService( );
service.menu( );
System.out.println("프로그램을 종료합니다");
}
}
////////SungJukService
package collection;
import java.util.*;
public class SungJukService {
Scanner scan = new Scanner(System.in);
private List<SungJukDTO> list; // 부모를 List로 설정해놓고 생성자는 ArrayList
여기서 잠깐!
List 컬렉션에 대해 다시 한번 정리해보자면!
List컬렉션은 저장 용량이 자동으로 증가하며, 객체를 저장할 때 자동 인덱스가 부여된다.
객체를 저장할 때는 add( )메소드, 객체를 찾아올 때는 get( )메소드, 그리고 삭제는 remove( )메소드를 사용한다.
ArrayList는 List 인터페이스의 가장 대표적인 구현 클래스인데,
ArryList에서 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨진다.
마찬가지로 객체를 삽입하면 해당 인덱스부터 마지막 인덱스까지 모두 1씩 밀려난다.
.
.
.
//----------------------------중략------------------
public SungJukService( ) {
list = new ArrayList<SungJukDTO>( );
}
public void menu( ) {
int num;
while (true) {
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("6. 끝");
System.out.println("*****************");
System.out.print(" 번호 : ");
num = scan.nextInt( );
if (num == 6)
break;
if (num == 1)
insertArticle( );
else if (num == 2)
printArticle( );
else if (num == 3)
searchArticle( );
else if (num == 4)
deleteArticle( );
else if (num == 5)
sortArticle( );
else
System.out.println("1~6중에 선택하세요");
} // while
} // menu
public void sortArticle( ) { // -------------------sortArticle( )
int num;
while (true) {
System.out.println("1. 이름으로 오름차순");
System.out.println("2. 총점으로 내림차순");
System.out.println("3. 이전메뉴");
System.out.print("번호 입력 : ");
num = scan.nextInt( );
if (num == 3)
break;
// 이름으로 오름차순
if (num == 1) {
// // interface라 뉴가 안되니 익명 설정해주기
// Comparator<SungJukDTO> com = new Comparator<SungJukDTO>( ) {
// @Override
// public int compare(SungJukDTO dto1, SungJukDTO dto2) {
// return dto1.getName( ).compareTo(dto2.getName( ));
// //문자열과 문자열의 크기 비교가 불가하므로 compareTo가 그 역할을 대신한다
// }
// };
// Collections.sort(list, com); // 객체 전체를 움직여주는 역할을 함. 총점만 바뀌는 것이 아님.
// printArticle();
Collections.sort(list);
printArticle( );
// DTO에서 이미 CompareTo 다 잡아놨으니 위 Comparator는 없어도 됨.
// Comparable은 클래스에다 implements해서 자체적으로 기준점을 잡아주고,
// Comparator은 직접 기준점을 잡는다
// 총점으로 내림차순
} else if (num == 2) {
Comparator<SungJukDTO> com = new Comparator<SungJukDTO>( ) {
@Override
public int compare(SungJukDTO dto1, SungJukDTO dto2) {
// 조건연산자 : 조건 ? 참 : 거짓;
// return dto1.getTot( ) > dto2.getTot( ) ? 1 : -1; - 오름차순
return dto1.getTot( ) > dto2.getTot( ) ? -1 : 1;
}
};
Collections.sort(list, com);
printArticle( );
}
} // while
} // sortArticle( )
public void deleteArticle( ) {// -------------------deleteArticle( )***
System.out.println( );
System.out.print("삭제할 이름 입력 : ");
String name = scan.next( );
int sw = 0; // 변수 설정
// for(int i =0; i<list.size(); i++) {
// if(list.get(i).getName().equals(name)) {
// list.remove(list.get(i));
// sw =1;
// }
// }
// list size가 계속 움직이면서 번호가 같이 움직여버려 에러가 남
Iterator<SungJukDTO> it = list.iterator( ); // 생성 - 반복해서 가져올 객체가 SungJukDTO
while (it.hasNext()) { // it값이 있습니까? 항목이 있으면 T, 없으면 F (hasnext는 데이터가 있다 없다만 판단)
SungJukDTO dto = it.next( );
// 항목을 꺼내서 dto에게 전달, 다음으로 이동(next는 항목을 꺼내고 전달한 뒤 다음으로 이동하는 것 까지)
if (dto.getName( ).equals(name)) {
it.remove( ); // it가 가리키는 현재 위치를 지우는 것이 아닌 dto에 보관한 내용 삭제
sw = 1;
} // if
} // while
if (sw == 0) // 변수에 변화가 없으면
System.out.println("찾고자 하는 이름이 없습니다");
else // 변수 변화가 있으면
System.out.println("데이터를 삭제하였습니다");
} // deleteArticle( )
public void searchArticle( ) { // -------------------searchArticle( )
System.out.println( );
System.out.print("검색 할 이름 입력 : ");
String Name = scan.next( );
int sw = 0; // 1번 - 변수를 잡는다(for문으로 전 데이터 돌기)
for (SungJukDTO dto : list) {
if (Name.equals(dto.getName( ))) { // 검색한 이름과 같은 이름을 찾으면
if (sw == 0) // 0부터 시작해서 처음엔 0, 그 다음에 1 이렇게 찍히고
// 0일때는 딱 한번밖에 안나오니 이름도 한번밖에 안찍힘
System.out.println("번호\t이름\t국어\t영어\t수학\t총점\t평균");
System.out.println(dto); // 2번 - 데이터를 찍고
sw = 1; // 3번 - 뭔가를 찍고 나니 변수가 0에서 1로
// &n
'JAVA_SE > 09_collection' 카테고리의 다른 글
[21.08.19]Ch.10-1 성적관리 프로그램 만들기2 - DB연동(Main, DAO, ServiceDB) (0) | 2021.08.24 |
---|