drexqq

[Java, 자바] 성적 통계프로그램 본문

공부노트/개인공부!

[Java, 자바] 성적 통계프로그램

drexqq 2020. 5. 26. 09:07
728x90
반응형

Java를 이용해서 성적 통계프로그램을 만들어보았다.

 

학생 수 = 동적 할당

과목 수 = 4과목 ( 이름과 과목을 따로 받는다 )

 

결과

학생의 과목당 점수/합계/평균/모든 점수의 최댓값/모든 점수의 최솟값

 

모든 점수는 0 ~ 100 사이의 숫자로만 받을 수 있다.

 

코드

package work0525;

import java.util.Scanner;

public class Work04 {

	public static void main(String[] args) {
		/*
		 * 성적 통계 프로그램
		 * 
		 * 통계를 산출할 학생의 수 - 입력 (o)
		 * 
		 * 동적할당 -> student[][] ex) 홍길동 90 100 85
		 * 
		 * 일지매 85 90 100
		 * 
		 * ....
		 * 
		 * 이름, 과목점수 - 입력 (o) 과목점수 >> 숫자로 입력받도록 >> 숫자가 아닌경우 다시 입력 (o) 0 ~ 100 사이의 숫자 >>
		 * 초과한 경우 다시입력 (o)
		 * 
		 * 국어, 수학, 영어 최고 점수 국어, 수학, 영어 최저 점수
		 * 
		 * 점수의 총합 (o) 학생 수에 따른 평균 (o)
		 */
		Scanner sc = new Scanner(System.in);
		// 학생수
		System.out.println("학생 수를 입력해주세요.");
		int num = sc.nextInt();
		// 과목 이름
		String subject[] = { "C", "C++", "C#", "Java" };
		// 과목 점수
		String subNum[] = new String[subject.length];
		// 학생정보
		String student[][] = new String[num][5];

		String name;
		
		int sum = 0, min = 100, max = 0;
		Double avg;

		for (int i = 0; i < student.length; i++) {
			System.out.println("학생 이름을 입력해주세요.");
			name = sc.next();
			// 이름 해당 배열 첫 칸에 저장
			student[i][0] = name;
			int c = 0;
			boolean pass = false;
			while (!pass) {
				System.out.println(subject[c] + "과목의 점수를 입력해주세요.");
				subNum[c] = sc.next();
				// 받은 과목별점수 배열에 저장
				// 제일 첫 칸은 이름이기때문에 + 1
				student[i][c+1] = subNum[c];
				out:for (int j = 0; j < subNum[c].length(); j++) {
					// 점수에 문자껴있음
					for (int k = 0; k < subNum[c].length(); k++) {
						if ((int) subNum[c].charAt(k) < 47 || (int) subNum[c].charAt(k) > 57) {
							System.out.println("점수는 숫자만 입력해주세요.");
							j--;
							break out;
						}
					}
					// 점수판별 0 ~ 100
					int temp = Integer.parseInt(subNum[c]);
					if (temp > 100 || temp < 0) {
						System.out.println("점수는 0 ~ 100점 사이입니다 !");
						j--;
						break;
					} else {
						c++;
						break;
					}
				}
				// 탈출 - 과목수만큼 반복되었으면 종료
				if (c == subject.length) {
					pass = true;
				}
			}
		}
		// 학생별 과목 점수
		for (int i = 0; i < student.length; i++) {
			for (int j = 1; j < student[i].length; j++) {
				System.out.print(student[i][0]+"학생의 "+subject[j-1]+" 점수는 "+student[i][j]+"점 입니다. \n");
				//합계
				sum += Integer.parseInt(student[i][j]);
				//최대
				if (max < Integer.parseInt(student[i][j])) {
					max = Integer.parseInt(student[i][j]);
				}
				//최소
				if (min > Integer.parseInt(student[i][j])) {
					min = Integer.parseInt(student[i][j]);
				}
			}
		}
		//평균
		avg = Double.valueOf(sum / num);
		System.out.println("평균은 "+avg+"점입니다");
		System.out.println("합계는 "+sum+"점입니다");
		System.out.println("최대 점수는 "+max+"점입니다");
		System.out.println("최소 점수는 "+min+"점입니다");
	}

}
728x90
반응형
Comments