새소식

인기 검색어

비트교육_단기과정

1주차 주말과제 성적관리

  • -

요구사항 1번 => 클래스를 선택하여 해당 학생정보 입력 기능 결과물
요구사항 2번 => 전체 학생(성적순)과 사용자에게 입력받은 특정 반(성적순) 출력 기능 결과물
요구사항 3번 => 이름검색 기능과 과목을 정하여 커트라인을 기준으로 출력

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
 
public class Day2 {
    static String[] Subject_name = { "학번""국어""영어""수학""총점" };
    static int[][][] score;// 몇반,어떤학생의,어떤과목의점수?
    static String[][] name;
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int std_total_num = 50;
        System.out.print("반의 개수는 몇개입니까? : ");// 반 입력
        int cc = sc.nextInt();// 반 개수
        name = new String[cc][std_total_num]; // 반 수, 학생 이름
        score = new int[cc][std_total_num][Subject_name.length];// 몇반,어떤학생의,어떤과목의점수?
        int[] nc = new int[std_total_num];// 각반의 학생수
        int[][] full_std = new int[cc * std_total_num][3]; // 반,학번,총점
        int std_count = 0// 현재 학생 총 인원
        while (true) {
            System.out.print("1.입력 2.출력 3.검색 4.종료 : ");
            int cc_opt = sc.nextInt();
            switch (cc_opt) {
            case 1:
 
                System.out.print("몇 반에 입력할 것입니까? : ");
                int temp = sc.nextInt();
                int cl_num = temp - 1// 현재 반
                System.out.print(temp + "반에 입력할 학생의 이름은 무엇입니까? : ");
                String std_name = sc.next();
                name[temp - 1][nc[cl_num]] = std_name; // ex)1반이면 name[0][nc[0]]
                score[cl_num][nc[cl_num]][0= nc[cl_num]; // 학번 부여
                for (int i = 1; i < Subject_name.length - 1; i++) {
                    System.out.print(Subject_name[i] + "점수 : ");
                    score[cl_num][nc[cl_num]][i] = sc.nextInt();
                    score[cl_num][nc[cl_num]][score[cl_num][nc[cl_num]].length - 1+= score[cl_num][nc[cl_num]][i]; // 총점
                }
                full_std[std_count][0= temp; // 반 인
                full_std[std_count][1= nc[cl_num]; // 반내 학번 번호
                full_std[std_count][2= score[cl_num][nc[cl_num]][score[cl_num][nc[cl_num]].length - 1]; // 총점
                nc[cl_num]++;
                std_count++;
                break;
            case 2:
 
                System.out.print("전체 학생 출력(성적순) => 1번    반 별로 학생 출력(성적순) => 2번 : ");
                int case2_opt = sc.nextInt();
 
                switch (case2_opt) {
                case 1:// 전체 학생 출력
 
                    Arrays.sort(full_std, new Comparator<int[]>() {// 전체 학생에 대하여 총점순으로 배열 정렬
 
                        @Override
                        public int compare(int[] o1, int[] o2) {
                            return o2[2- o1[2];
                        }
                    });
                    for (int h = 0; h < full_std.length; h++) { // 천체학생수 만큼 반복
                        if (full_std[h][0== 0)
                            break;
                        printScore(full_std[h][0- 1, full_std[h][1]);// 반 과 학번을 값으로 넘김
                    }
                    break;
                case 2// 반별로 학생 출력
 
                    System.out.print("어떤 반을 출력하시겠습니까? : ");
 
                    int _classnum_2 = sc.nextInt();
                    _classnum_2--// 1반을 출력하겠다하면 score 첫 배열의 인덱스값으로 0이 들어가야하기떄문에 --연산을 함
                    for (int i = 0; i < name.length; i++) {
                        Arrays.sort(score[i], new Comparator<int[]>() {// 반별 성적순으로 배열 정렬
 
                            @Override
                            public int compare(int[] o1, int[] o2) {
                                return o2[Subject_name.length - 1- o1[Subject_name.length - 1];
                            }
                        });
                    }
 
                    for (int k = 0; k < nc[_classnum_2]; k++) {// 학생수 만큼 반복문
                        printScore(_classnum_2, k);
                    }
                    break;
                default:
                    System.out.println("잘못입력하셨습니다 다시 입력하세요");
                    break;
                }
                break;
            case 3:
 
                System.out.print("이름으로 검섁 => 1번 |||| 성적으로 검색 => 2번 : ");
                int case3_opt = sc.nextInt();
                switch (case3_opt) {
                case 1:
 
                    System.out.print("이름을 입력하시오 : ");
                    String case3_1_name = sc.next();
                    for (int i = 0; i < name.length; i++) {// i = 반
                        for (int j = 0; j < name[i].length; j++) {// j = 학생 수
                            if (name[i][j] != null) {
                                if (name[i][j].equals(case3_1_name)) {// equals 사용시 null값이랑 비교하면 nullpointexception
                                                                        // 발생하기에 위에서 먼저 null값인지 확인
                                    printName(i, j);
                                }
                            }
                        }
                    }
                    break;
                case 2:
 
                    System.out.print("1. 국어 2. 영어 3. 수학 4. 총점 : ");
                    int case3_2_subName = sc.nextInt();
                    System.out.print("커트라인을 입력하시오 : ");
                    int case3_2_subGrade = sc.nextInt();
                    for (int i = 0; i < name.length; i++) {
                        for (int j = 0; j < name[i].length; j++) {
                            if (score[i][j][case3_2_subName] >= case3_2_subGrade) {
                                printScore(i, j);
                            }
                        }
                    }
                    break;
                default:
                    System.out.println("잘못입력하셨습니다 다시 입력하세요");
                    break;
                }
                break;
            case 4:
 
                System.out.println("프로그램을 종료합니다");
                System.exit(-1);
                break;
            default:
                System.out.println("잘못입력하셨습니다 다시 입력하세요");
                break;
            }
        }
    }
 
    public static void printScore(int i, int j) {
 
        for (int k = 0; k < Subject_name.length; k++) {
            if (k == 0) {// 이름 출력
                System.out.print(i + 1 + "반 => " + "이름 : " + name[i][score[i][j][0]]);
                continue;
            }
            System.out.print(", " + Subject_name[k] + " : " + score[i][j][k]);// 과목 점수 출력
            if (k == score[i][j].length - 1) {// 평균출력
                System.out.println(", 평균 : " + score[i][j][k] / (float) (Subject_name.length - 2));
            }
        }
    }
 
    public static void printName(int i, int j) {
 
        for (int k = 0; k < Subject_name.length; k++) {
            if (k == 0) {// 이름 출력
                System.out.print(i + 1 + "반 => " + "이름 : " + name[i][j]);// 반 학번
                continue;
            }
            System.out.print(", " + Subject_name[k] + " : " + score[i][j][k]);// 과목 점수 출력
            if (k == score[i][j].length - 1) {// 평균출력
                System.out.println(", 평균 : " + score[i][j][k] / (float) (Subject_name.length - 2));
            }
        }
    }
}
cs
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.