오늘의하루

[Java] 성적 조회 프로그램 만들기 본문

JAVA

[Java] 성적 조회 프로그램 만들기

오늘의하루_master 2022. 11. 3. 17:21

지금까지 배운 내용으로 만들어본 성적 조회 프로그램

필요한 기능

  1. 성적 입력
    • 학번, 이름, 영어 점수, 수학 점수를 입력받는다.
  2. 성적 조회
    1. 개인의 성적을 조회한다.
      • 학번, 이름, 영어 성적, 수학 성적, 평균 점수, 전교 등수를 출력한다.
    2. 전교생의 성적을 조회한다.
      • 전교 등수대로 출력된다.
      • 전교 등수, 이름, 학번, 영어 점수, 수학 점수, 평균 점수를 출력한다.
  3. 과목별 통계
    • 과목명, 최고 점수, 최저 점수, 평균 점수를 출력한다.
  4. 프로그램을 종료

소스코드

import java.util.*;

public class Main
{
   public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
       Map<String[], int[]> map = new HashMap<>(); // 학번, 이름, 점수등을 저장하는 용도
       List<Integer> math = new LinkedList<>(); // 수학 점수를 저장하는 용도
       List<Integer> english = new LinkedList<>(); // 영어 점수를 저장하는 용도
       Map<String, Integer> rank = new HashMap<>(); // 전교 등수를 알기 위해 만든 용도
       
       while(true){
            System.out.println("메뉴를 선택해주세요.");
            System.out.println("1. 성적 입력");
            System.out.println("2. 성적 출력");
            System.out.println("3. 통계 출력");
            System.out.println("4. 프로그램 종료");
            System.out.print("메뉴 선택 : ");
            int x = s.nextInt();
            show.menuShow(map, x, s, math, english, rank);
       }
   }
}
class show{
    static String[] sub = {"학번","이름","영어", "수학", "평균"};
    static void menuShow(Map map, int x, Scanner s, List math, List english, Map rank){
        if(x == 1){
            menu1(map, s, math, english, rank);
        }else if(x == 2){
            menu2(map, s, rank);
        }else if(x == 3){
            menu3(math, english, s);
        }else if(x == 4){
            System.out.println("\n프로그램이 종료되었습니다.");
            System.exit(0);
        }else{
            System.out.println("잘못입력 하셨습니다.");
        }
    }
    static void menu1(Map<String[], int[]> map, Scanner s, List<Integer> math, List<Integer> english, Map<String, Integer> rank){
        System.out.println("\n성적 입력창 입니다.");
        System.out.print("1. 학번 : ");
        String cn = s.next();
        System.out.print("2. 이름 : ");
        String name = s.next();
        System.out.print("3. 영어 점수 : ");
        int e = s.nextInt();
        System.out.print("4. 수학 점수 : ");
        int m = s.nextInt();
        map.put(new String[]{cn, name}, new int[]{e, m, (e+m)/2});
        math.add(m);
        english.add(e);
        Collections.sort(math);
        Collections.sort(english);
        rank.put(cn, (e+m)/2);
        System.out.println();
    }
    static void menu2(Map<String[], int[]> map, Scanner s, Map<String, Integer> rank){
        List<String> rankList = new LinkedList<>(rank.keySet());
        Collections.sort(rankList, (o1,o2)->(rank.get(o2).compareTo(rank.get(o1))));
        System.out.println("\n성적 출력창 입니다.");
        System.out.println("1. 개인 성적 출력");
        System.out.println("2. 전체 성적 출력");
        System.out.print("메뉴 선택 : ");
        int x = s.nextInt();
        if(x == 1){
            System.out.print("\n학번을 입력 : ");
            int pcn = s.nextInt();
            for(Map.Entry<String[], int[]> entrypcn : map.entrySet()){
                if(Arrays.toString(entrypcn.getKey()).contains(pcn+"")){
                    for(int i = 0; i < sub.length; i++){
                        if(i < 2){
                            System.out.println(sub[i] + " : " + entrypcn.getKey()[i]);
                        }else{
                            System.out.println(sub[i] + " 점수 : " + entrypcn.getValue()[i-2]);
                        }
                    }
                    for(String key : rankList){
                        if(key.equals(pcn+"")){
                            System.out.println("전교 등수 : " + (rankList.indexOf(key)+1));
                        }
                    }
                    System.out.println();
                }else{
                    System.out.println("잘못 입력하셨습니다.\n");
                }
            }
        }else if(x == 2){
            int i = 0;
            for(String tkey : rankList){
                for(Map.Entry<String[], int[]> entryt : map.entrySet()){
                    if(Arrays.toString(entryt.getKey()).contains(tkey)){
                        System.out.println("전교 " + ++i +"등 : " + entryt.getKey()[1] + ", 학번 : " + entryt.getKey()[0] + ", 영어 점수 : " + entryt.getValue()[0] + ", 수학 점수 : " + entryt.getValue()[1] + "평균 점수 : " + entryt.getValue()[2]);
                        break;
                    }
                }
            }
        }else{
            System.out.println("잘못 입력하셨습니다.");
        }
        
    }
    static void menu3(List<Integer> math, List<Integer> english, Scanner s){
        System.out.println("\n과목별 통계 출력창 입니다.");
        System.out.println("1. 영어");
        System.out.println("2. 수학");
        System.out.print("과목 선택 : ");
        int ch = s.nextInt();
        if(ch == 1){
            int sum = 0;
            System.out.println("\n수학 과목에 대한 통계입니다.");
            System.out.println("최고 점수 : " + math.get(math.size() - 1));
            System.out.println("최저 점수 : " + math.get(0));
            for(int i = 0; i < math.size(); i++){
                sum = sum + (int)math.get(i);
            }
            System.out.println("평균 점수 : " + sum/math.size()+"\n");
        }else if(ch == 2){
            int sum = 0;
            System.out.println("\n영어 과목에 대한 통계입니다.");
            System.out.println("최고 점수 : " + english.get(english.size() - 1));
            System.out.println("최저 점수 : " + english.get(0));
            for(int i = 0; i < english.size(); i++){
                sum = sum + (int)english.get(i);
            }
            System.out.println("평균 점수 : " + sum/english.size()+"\n");
        }else{
            System.out.println("잘못 입력하셨습니다.\n");
        }
    }
}
Comments