ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 성적 조회 프로그램 만들기
    JAVA 2022. 11. 3. 17:21
    728x90
    반응형

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

    필요한 기능

    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");
            }
        }
    }
    728x90
    반응형
Designed by Tistory.