Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * 문제 - n명의 학생의 3과목의 답안지를 채점하고 총점과 평균과 학점을 구하라
- *
- * 1) 각 과목은 객관식으로 20문항
- * 2) 각 과목의 정답은 프로그래머가 임의로 생성
- * 3) 각 과목의 n명의 학생 답안은 랜덤으로 생성
- * 4) 학생들의 성적 출력 후 분석 내용 추가 (ex: 분산, 최대값, 최소값, 순위) [아직안함]
- *
- */
- package Exam;
- import java.util.Scanner;
- import java.util.Random;
- public class Score {
- int[][] answer = new int[3][20];
- int[] score = new int[3];
- int tot = 0, ave = 0;
- String grade = "";
- // 학생 문제 답지 생성 객체
- public void iniData() {
- Random random = new Random();
- for ( int sub = 0; sub < 3; sub++ ) {
- for ( int i = 0; i < 20; i++ ) {
- answer[sub][i] = random.nextInt(4) + 1;
- }
- }
- }
- // 학생 문제와 답안지를 비교하여 결과값을 반환하는 객체
- public void getScore(int sub, int[] sheet) {
- int correct = 0;
- for ( int i = 0; i < 20; i++ ) {
- if ( answer[sub][i] == sheet[i] ) {
- System.out.print("O ");
- correct++;
- } else {
- System.out.print("X ");
- }
- }
- score[sub] = correct * 5;
- tot += score[sub];
- System.out.printf(" %d\n", correct * 5);
- }
- // 학생들의 평균점수와 학점등을 구분하는 객체
- public void calScore() {
- ave = tot / 3;
- if (ave >= 95) grade = "A+";
- else if (ave >= 90) grade = "A0";
- else if (ave >= 85) grade = "B+";
- else if (ave >= 80) grade = "B0";
- else if (ave >= 75) grade = "C+";
- else if (ave >= 70) grade = "C0";
- else grade = "F";
- }
- // 학생 답지를 답안지의 답과 랜덤으로 같게 조정하는 객체
- public void editScore(int sub, int[] sheet) {
- Random random = new Random();
- for ( int i = 0; i < random.nextInt(11) + 10; i++ ) {
- answer[sub][i] = sheet[i];
- }
- }
- public void infoScore() {
- for (int sub = 0; sub < 3; sub++ ) {
- System.out.printf("%3d ", score[sub]);
- }
- System.out.printf("%3d ", tot);
- System.out.printf("%3d ", ave);
- System.out.printf("%s ", grade);
- System.out.println("");
- }
- // 메인
- public static void main(String[] args) {
- Scanner s = new Scanner(System.in);
- Random random = new Random();
- // 정답지 sheet 배열 초기화 및 난수 저장
- int[][] sheet = new int[3][20];
- for ( int sub = 0; sub < 3; sub++ ) {
- for ( int i = 0; i < 20; i++ ) {
- sheet[sub][i] = random.nextInt(4) + 1;
- }
- }
- // 학생수 입력
- System.out.print("학생수를 입력해주세요 : ");
- int num = s.nextInt();
- if (num < 1 || num > 500 ) return;
- // 입력받은 학생수 만큼 Score 객체를 만듬
- Score[] score = new Score[num];
- for ( int i = 0; i < num; i++ ) {
- score[i] = new Score();
- score[i].iniData();
- }
- // 난수로 생성되는 답지와 답안지의 답 특성상 정답률이 매우 떨어짐으로 학생 답을 임의로 조정
- for ( int sub = 0; sub < 3; sub++ ) {
- for ( int i = 0; i < num; i++ ) {
- score[i].editScore(sub, sheet[sub]);
- }
- }
- // 점수 출력
- System.out.println("────────────────────────────────────────────────────────");
- for ( int sub = 0; sub < 3; sub++ ) {
- switch (sub) {
- case 0 : System.out.println("[언어 영역]"); break;
- case 1 : System.out.println("[외국어 영역]"); break;
- case 2 : System.out.println("[수리 영역]"); break;
- }
- for ( int i = 0; i < num; i++ ) {
- System.out.printf(" └ %3d번 : ", i+1);
- score[i].getScore(sub, sheet[sub]);
- }
- System.out.println("");
- }
- System.out.println("────────────────────────────────────────────────────────");
- // 평균, 학점등 계산
- for ( int i = 0; i < num; i++ ) {
- score[i].calScore();
- }
- // 세부사항 출력
- System.out.println(" 언어 외국어 수리 총합 평균 학점");
- for ( int i = 0; i < num; i++ ) {
- System.out.printf("%3d번 ", i+1);
- score[i].infoScore();
- }
- System.out.println("────────────────────────────────────────────────────────");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement