Daily coding

Java Basic : day 5 - Example 01 : 성적통계 프로그램 만들기(Sorting, 중복제거 ) 본문

Language/Java_basic

Java Basic : day 5 - Example 01 : 성적통계 프로그램 만들기(Sorting, 중복제거 )

sunnnkim 2019. 11. 22. 19:12
package day5;

import java.util.Scanner;

public class Ex01_2dArrayExample {

	public static void main(String[] args) {
		/*
		 		성적 통계 프로그램 만들기
		 		
		 		1. 몇 명의 학생의 성적을 입력할 것인지 입력받기
		 		-----------------------------------
		 		예시 : 1 홍길동 90 85 100
		 		(row : 입력받기, column 4) 
		 		- 2차원 배열 : String[관리하는 학생의 수][입력받을 점수 및 이름]
		 		
		 		2. 이름, 국어, 영어, 수학 입력받기
		 		
		 		각 학생의 총점 : sum;
		 		전체 총점	: allSum;
		 		총점의 1등	: max;
		 		총점의 꼴지 : min;
		 */
		
		Scanner sc= new Scanner(System.in);
		
		// 선언
		String stuGrade[][];	// 학생의 점수 데이터
		int stuNum;
		int sum[];			// 각 학생의 총점
		int allSum = 0;			// 전체 학생의 총점
		int max = 0;			// 총점의 1등
		int min = 0;			// 총점의 꼴지
		String input;	// 입력값은 모두 String으로 우선 받아둔다.
		int n;	// 입력값(charAt) 검사용 변수
		
		// 초기화
		allocation:
		while(true) {
		System.out.println("몇 명의 학생의 점수를 입력하시겠습니까?");
		System.out.print(">> ");
		input = sc.next();
		for (int i = 0; i < input.length(); i++) {
			n = input.charAt(i);
			if( n <48 || n > 57) {
				System.out.println("잘못 입력했습니다.");
				continue allocation;
			}
		}break;
		}
		stuNum = Integer.parseInt(input);
		
		
		
		stuGrade = new String [stuNum][4];
		sum = new int[stuNum];	// 학생 수에 맞는 각각 학생의 총점 
		int w = 0;
		outer:
		while(w < stuGrade.length) {
			// w번째 학생의 데이터 입력
				System.out.print((w+1)+"번째 학생의 이름 : ");
				stuGrade[w][0] = sc.next();
				System.out.print((w+1)+"번째 학생의 국어 점수 : ");
				stuGrade[w][1] = sc.next();
				System.out.print((w+1)+"번째 학생의 영어 점수 : ");
				stuGrade[w][2] = sc.next();
				System.out.print((w+1)+"번째 학생의 수학 점수 : ");
				stuGrade[w][3] = sc.next();
				// 점수가 잘 들어왔는지 검사

				for (int i = 0; i < stuGrade[w].length; i++) {
					for (int j = 0; j < stuGrade[w][i].length(); j++) {
						 n = stuGrade[w][i].charAt(j);
						if((n<48 || n>57) && i != 0 ) {
							System.out.println("점수를 잘못 입력했습니다. 다시입력하시오.");
							continue outer;
						}
					}
				}
				w++;
			}
				
		// 처리

		// 1. 학생의 총점
	
		for (int i = 0; i < sum.length; i++) {
			for (int j = 1; j < stuGrade[0].length; j++) {
				sum[i] += Integer.parseInt(stuGrade[i][j]);
			}
		}
		
		// 2. 전체 학생의 총점
		for (int i = 0; i < sum.length; i++) {
			allSum += sum[i];
		}
		
		// 3. 총점의 1등 (max)
		int markMax =0;
		int markMin =0;
		max = sum[0];
		for (int i = 1; i < sum.length; i++) {
			if(sum[i] > max) {
				max = sum[i];
				markMax = i;
			}
		}
		
		min = sum[0];
		for (int i = 1; i < sum.length; i++) {
			if(sum[i] < min) {
				min = sum[i];
				markMin = i;
			}
		}
		
		
		// 4. 각 학생 점수의 sorting
		String sortGrade[][] = new String[stuNum][2]; 
		for (int i = 0; i < sortGrade.length; i++) {
			sortGrade[i][0] = stuGrade[i][0];
			sortGrade[i][1] = Integer.toString(sum[i]);
		}
		
		String[] temp;
		for (int i = 0; i < sortGrade.length-1; i++) {
			for (int j = i+1; j < sortGrade.length; j++) {
				if( Integer.parseInt(sortGrade[i][1]) < Integer.parseInt(sortGrade[j][1]) ) {
					temp = sortGrade[i];
					sortGrade[i] = sortGrade[j];
					sortGrade[j] = temp;
				}
			}
		}
		
		
		// 결과 출력
		// 1. 모든 학생 출력
		System.out.println(" 번호\t이름\t국어\t영어\t수학");
		for (int i = 0; i < stuGrade.length; i++) {
			System.out.print(" "+(1+i)+ "\t");
			for (int j = 0; j < stuGrade[0].length; j++) {
				System.out.print(stuGrade[i][j]+ "\t");
			}System.out.println();
		}
		
		// 2. 각 학생의 총점
		for (int i = 0; i < sum.length; i++) {
			System.out.println(stuGrade[i][0] + "학생 총점 : " + sum[i]);
		}
		// 3. 전체 학생의 총점
		System.out.println("------------------ 전체 학생의 총점 :" + allSum + "점");
		// 4. 성적 순으로 출력
		System.out.println("< 전체 등수 >");
		for (int i = 0; i < sortGrade.length; i++) {
			System.out.println(1+i + "등: " +sortGrade[i][0]+" 학생, "+sortGrade[i][1] + "점");
		}
		
		// 5. max
		System.out.println("-------------------------------------");
		System.out.println("총점 1등 : " + stuGrade[markMax][0] + " 학생  "+ max+"점");
		
		// 6. min
		System.out.println("총점 꼴지 : " + stuGrade[markMin][0] + " 학생  "+ min+"점");
		
		
	}

}