Advertisement
DevNeon

Exam20191014

Oct 17th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.37 KB | None | 0 0
  1. /*
  2.  * 문제 - n명의 학생의 3과목의 답안지를 채점하고 총점과 평균과 학점을 구하라
  3.  *
  4.  * 1) 각 과목은 객관식으로 20문항
  5.  * 2) 각 과목의 정답은 프로그래머가 임의로 생성
  6.  * 3) 각 과목의 n명의 학생 답안은 랜덤으로 생성
  7.  * 4) 학생들의 성적 출력 후 분석 내용 추가 (ex: 분산, 최대값, 최소값, 순위) [아직안함]
  8.  *
  9.  */
  10.  
  11. package Exam;
  12. import java.util.Scanner;
  13. import java.util.Random;
  14.  
  15. public class Score {
  16.    
  17.     int[][] answer = new int[3][20];
  18.     int[] score = new int[3];
  19.     int tot = 0, ave = 0;
  20.     String grade = "";
  21.    
  22.     // 학생 문제 답지 생성 객체
  23.     public void iniData() {
  24.         Random random = new Random();
  25.         for ( int sub = 0; sub < 3; sub++ ) {
  26.             for ( int i = 0; i < 20; i++ ) {
  27.                 answer[sub][i] = random.nextInt(4) + 1;
  28.             }
  29.         }
  30.     }
  31.    
  32.     // 학생 문제와 답안지를 비교하여 결과값을 반환하는 객체
  33.     public void getScore(int sub, int[] sheet) {
  34.         int correct = 0;
  35.         for ( int i = 0; i < 20; i++ ) {
  36.             if ( answer[sub][i] == sheet[i] ) {
  37.                 System.out.print("O ");
  38.                 correct++;
  39.             } else {
  40.                 System.out.print("X ");
  41.             }
  42.         }
  43.         score[sub] = correct * 5;
  44.         tot += score[sub];
  45.         System.out.printf(" %d\n", correct * 5);
  46.     }
  47.    
  48.     // 학생들의 평균점수와 학점등을 구분하는 객체
  49.     public void calScore() {
  50.         ave = tot / 3;
  51.         if (ave >= 95) grade = "A+";
  52.         else if (ave >= 90) grade = "A0";
  53.         else if (ave >= 85) grade = "B+";
  54.         else if (ave >= 80) grade = "B0";
  55.         else if (ave >= 75) grade = "C+";
  56.         else if (ave >= 70) grade = "C0";
  57.         else grade = "F";
  58.     }
  59.    
  60.     // 학생 답지를 답안지의 답과 랜덤으로 같게 조정하는 객체
  61.     public void editScore(int sub, int[] sheet) {
  62.         Random random = new Random();
  63.         for ( int i = 0; i < random.nextInt(11) + 10; i++ ) {
  64.             answer[sub][i] = sheet[i];
  65.         }
  66.     }
  67.    
  68.     public void infoScore() {
  69.         for (int sub = 0; sub < 3; sub++ ) {
  70.             System.out.printf("%3d  ", score[sub]);
  71.         }
  72.         System.out.printf("%3d  ", tot);
  73.         System.out.printf("%3d  ", ave);
  74.         System.out.printf("%s   ", grade);
  75.         System.out.println("");
  76.     }
  77.    
  78.     // 메인
  79.     public static void main(String[] args) {
  80.         Scanner s = new Scanner(System.in);
  81.         Random random = new Random();
  82.        
  83.         // 정답지 sheet 배열 초기화 및 난수 저장
  84.         int[][] sheet = new int[3][20];
  85.         for ( int sub = 0; sub < 3; sub++ ) {
  86.             for ( int i = 0; i < 20; i++ ) {
  87.                 sheet[sub][i] = random.nextInt(4) + 1;
  88.             }
  89.         }
  90.        
  91.         // 학생수 입력
  92.         System.out.print("학생수를 입력해주세요 : ");
  93.         int num = s.nextInt();
  94.         if (num < 1 || num > 500 ) return;
  95.        
  96.         // 입력받은 학생수 만큼 Score 객체를 만듬
  97.         Score[] score = new Score[num];
  98.         for ( int i = 0; i < num; i++ ) {
  99.             score[i] = new Score();
  100.             score[i].iniData();
  101.         }
  102.        
  103.         // 난수로 생성되는 답지와 답안지의 답 특성상 정답률이 매우 떨어짐으로 학생 답을 임의로 조정
  104.         for ( int sub = 0; sub < 3; sub++ ) {
  105.             for ( int i = 0; i < num; i++ ) {
  106.                 score[i].editScore(sub, sheet[sub]);
  107.             }
  108.         }
  109.        
  110.         // 점수 출력
  111.         System.out.println("────────────────────────────────────────────────────────");
  112.         for ( int sub = 0; sub < 3; sub++ ) {
  113.             switch (sub) {
  114.             case 0 : System.out.println("[언어 영역]"); break;
  115.             case 1 : System.out.println("[외국어 영역]"); break;
  116.             case 2 : System.out.println("[수리 영역]"); break;
  117.             }
  118.             for ( int i = 0; i < num; i++ ) {
  119.                 System.out.printf(" └ %3d번 : ", i+1);
  120.                 score[i].getScore(sub, sheet[sub]);
  121.             }
  122.            
  123.             System.out.println("");
  124.         }
  125.         System.out.println("────────────────────────────────────────────────────────");
  126.        
  127.         // 평균, 학점등 계산
  128.         for ( int i = 0; i < num; i++ ) {
  129.             score[i].calScore();
  130.         }
  131.        
  132.         // 세부사항 출력
  133.         System.out.println("    언어  외국어   수리  총합  평균  학점");
  134.         for ( int i = 0; i < num; i++ ) {
  135.             System.out.printf("%3d번   ", i+1);
  136.             score[i].infoScore();
  137.         }
  138.         System.out.println("────────────────────────────────────────────────────────");
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement