학생성적처리하기
1. 클래스는 2개 필요 코딩 짤 때는 클래스별로 각각 만들고 저장해야함!
class 1.
1명 학생의
이름/ 국영수점수 / 총점/ 평균/등수를 저장 클래스 만들기
즉, 성적정보를 저장하는 자료구조를 추상화
public class GradeRecord {
**이거 다 멤버변수넴
public static fianl int SUBJECTS =3 ; =>과목수는 상수로
String name ;
int [ ] jumsu = new int [SUBJECTS];
=>국 영 수 점수 int형 배열로 메모리 먼저 생성
int total ;
double avg ;
int rank =1;
}
class 2.
저장된 성적을 처리하는 로직 추상화
GradeRecord타입의 배열 즉, GradeRecord [ ] 배열명 = new GradeRecord[학생수] 요렇게
저장된 성적을 처리하는 로직을 추상화 하자
멤버변수]:학생수,
GradeRecord타입의 배열
(배열크기는 학생수 만큼) 멤버메소드]:
1]학생수를 설정하는 메소드
2]점수를 입력받고 총점 및 평균을 구하는 메소드
3]등수를 구하는 메소드
4]결과를 출력하는 메소드
public class GradeLogic {
** 멤버변수
int numberOfStudents ; 학생수
GradeRecord [ ] records ; GradeRecord타입의 배열
String [ ] titles = {"국어", "영어", "수학"} 이거 출력할때 보일 타이틀 미리 만든거
Scanner sc = new Scanner(System.in); 사용자 입력 받아야 해서 스캐너 쓰기
** 멤버메소드
1]학생수를 설정하는 메소드 **메소드 무슨 타입인지 모를땐 그냥 1타입으로 가고 나중에 추가하면 됨
void setNumberOfStudents ( ) {
System.out.println("학생수를 입력하세요?")
numberOfStudents = sc.nextInt(); 사용자한테 값 받기
sc.nextLine(); 엔터값 버림
records = new GradeRecord[ numberOfStudents ] 사용자 값 받았으니까 records 배열도 메모리 할당 가능해졌음
for(int i=0 ; i <records.length; i++){
records[ i ] = new GradeRecord(); 그래서 메모리 초기화를 먼저 시킴
}
}
2]점수를 입력받고 총점 및 평균을 구하는 메소드 gradeRecord 안에 사용자가 입력한 값 넣기
void setNameNJumsu(){ // 메소드는 멤버변수로 로직을 만드는거임!!
학생 수 만큼 이름 및 국영수 점수받기
i번 째 학생(행)
for(int i =0; i< records.length : i++){
System.out.printf("[%d번째 학생]%n",i+1);
System.out.println("이름을 입력하세요?");
record.[i].name = sc.nextLine();
i번째 학생의 국영수 점수받기 (열)
for(int k =0 ; k<GradeRecord.SUBJECTS;k++ )
System.out.println(titles[k]+"점수를 입력하세요?");
records[i].jumsu[k] = sc.nextInt();
i번 째 학생의 점수 누적
records[i].total += records[i].jumsu ; //멤버변수 total에 값을 넣는 로직
} /////안쪽for
i번 째 학생의 평균 구하기
records[i].avg =(double) records[i].total/GradeRecord.SUBJECTS //멤버변수 avg에 값을 넣을거
sc.nextLine(); 마지막으로 엔터값 버림
}////바깥for
3]등수를 구하는 메소드
void setRank(){
for(int i=0; i< numberOfStudents-1 ; i++){ ***등수가 밀릴수록 +1등, 자기자신과는 비교 x
for(int k= i+1; k < numberOfStudents; k++){
if(records[i].total< records[k].total) records[i].rank ++;
else if (records[i].total > records[k].total) records[k].rank ++;
}
}
}
문제 ) 점수 순서로 1등부터 출력되도록 records배열을 재정렬해라
private void sort() {
for(int i =0 ; i <numberOfStudents-1 ; i++ ) {
for(int k =i+1 ; k< numberOfStudents ; k++) {
if(records[i].total < records[k].total) {
GradeRecord temp = records[i]; //등수에 따라 전체가 움직이니까
records[i]= records[k];
records[k]= temp;}
}
}
4]결과를 출력하는 메소드
void print(){
sort();
System.out.println("================================================"); System.out.printf("%-10s%-5s%-5s%-5s%-5s%-8s%s%n",
"NAME","KOR","ENG","MATH","SUM","AVG","RANK");
System.out.println("================================================");
for(int i=0 ; i<numberOfStudents ; i++) {
System.out.printf("%-10s", records[i].name);
for(int k=0; k < GradeRecord.SUBJECTS ; k++){
System.out.printf("%-5s",records[i].jumsu[k]);
}///// for안
System.out.printf("%-5s%-8.2f%s%n",
records[i].total,records[i].avg,records[i].rank);
}////for밖
System.out.println("================================================");
}
main
1.GradeLogic 객체화
GradeLogic logic = new GradeLogic (); main skack 에 GradeLogic타입에 메모리 할당
2.학생수 설정하는 메소드 호출
logic.setNumberOfStudents();
System.out.println(logic.records);
3.학생 점수 입력하는 메소드 호출
logic.setNameNJumsu();
4.등수 설정하는 메소드 호출
logic.setRank();
5.결과 출력하는 메소드 호출
logic.print()
'학원 > JAVA' 카테고리의 다른 글
9.27 10-1 GlobalNLocalVar (0) | 2022.09.27 |
---|---|
9.26 9-4일 차 [접근 지정자] (1) | 2022.09.26 |
9.26 9-2일 차 계좌 입/출금 & 통장정리 (0) | 2022.09.26 |
9.26 9-1 일 차 (class로 Car 찍어내기) (0) | 2022.09.26 |
9.23 8-3 class들어가기 abstraction (1) | 2022.09.25 |