학생성적처리하기

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()

+ Recent posts