본문 바로가기
Study Note/Java

JAVA_ Test093_ Record 클래스, Sungjuk 클래스, Test093클래스를 이용한 성적 계산 프로그램 작성

by 시뮝 2018. 4. 30.
728x90

 

 

Test093  Record 클래스, Sungjuk 클래스, Test093클래스를 이용한 성적 계산 프로그램 작성

※ 실습 문제

 

   학생별로 국어점수, 영어점수, 수학점수를 입력받아 총점, 평균을 계산하는 프로그램을 구현한다.

   단, 클래스의 개념을 활용하여 작성할 수 있도록 한다. 또한, 이 과정에서 배열을 적극적으로 활용할 수 있도록 한다.

 

   프로그램을 구성하는 클래스

   1. Record 클래스

      속성만 존재하는 클래스로 설계할것~!!! (변수들로만 구성)

   2. Sungjuk 클래스

      인원 수를 입력받아, 입력받은 인원 수 만큼 이름, 국어점수, 영어점수, 수학점수를 입력받고 총점과 평균을 산출하는 클래스로 설계할 것~!!!

  - 속성 : 인원수, Record 형태의 배열

  - 기능 : 인원수 입력, 상세 데이터 입력, 총점/평균 연산, 결과 출력

 

   3. Test093 클래스

      main() 메소드가 존재하는 외부 클래스로 설계할 것~!!!

 

 

Test093.java

 

 

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.IOException;

 

public class Test093

{

public static void main(String[] args) throws IOException

{

// Record rc = new Record(); //Sungjuk 메소드에서 사용했음 여기선 필요없음

 

Sungjuk ob = new Sungjuk();

ob.set();

ob.input();

ob.print();

}

}

 

Record.java

 

 

class Record

{

//학생 1명을 표현할 수 있는 속성들로 구성

String name;

int[] score = new int[3]; //int kor, eng, mat;

int tot;

double avg;

int rank;

 

public void setName(String name)

{

this.name = name;

}

public String getName()

{

return name;

}

public void setScore(int a, int b, int c)

{

score[0]=a;

score[1]=b;

score[2]=c;

}

public int[] getScore()

{

return score;

}

}

 

Sungjuk.java

 

 

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.IOException;

import java.util.Scanner;

 

class Sungjuk

{

//주요 변수 선언

int inwon; //-- 인원 수

Record[] rec; //-- Record 배열(학생 1명 당 Record배열의 방 1개 활용)

String[] title = {"국어 점수 : ", "영어 점수 : ", "수학 점수 : "};

 

//기능(메소드)

// ① 인원 수 입력

void set()

{

Scanner sc = new Scanner(System.in);

 

do

{

System.out.print("인원 수 입력(1~100) : ");

inwon = sc.nextInt();

}

while (inwon<1 || inwon>100);

 

// Check~!!

// Record 클래스를 기반으로 생성된 객체(인스턴스)를 담을 수 있는 배열방을

// inwon 만큼 생성한 것이지, Record 클래스의 인스턴스를 생성한 것은 아니다.

rec = new Record[inwon];

}//end set()

 

 

// ② 상세 데이터 입력 + 총점/평균 산출

void input()

{

Scanner sc = new Scanner(System.in);

 

 

for (int i=0; i<inwon; i++)

{

// Check~!!!

// Record 클래스 기반의 인스턴스 생성

rec[i] = new Record(); //-- ★ Record ob1 = new Record()

 

System.out.printf("%d번째 학생의 이름 입력 : ", (i+1));

rec[i].name = sc.next();

 

 

for (int j=0; j<title.length; j++) //국,영,수 과목수 만큼 반복~!!!

{

// 안내 메세지 출력

System.out.print(title[j]);

 

// 사용자가 입력한 데티어를 스코어(score) 배열에 담아내기

rec[i].score[j] = sc.nextInt();

 

// 국어, 영어, 수학 점수 데이터를 반복적으로 입력받는 동안

// 총점 누적하기

rec[i].tot += rec[i].score[j];

}

 

// 평균 산출하기

rec[i].avg =  rec[i].tot / 3.0;

}

}// end input()

 

// ③ 결과 출력

void print()

{

// 석차 산출 메소드 호출구문 추가~!!

ranking();

 

 

// 개행

System.out.println();

 

// 학생 1인 당 반복 출력 구문

for (int i=0; i<inwon; i++)

{

// 이름 출력

System.out.printf("%5s", rec[i].name);

 

// 성적(국어, 영어, 수학) 반복 출력

for (int j=0; j<title.length; j++)

System.out.printf("%4d", rec[i].score[j]);

 

// 총점, 평균 출력

System.out.printf("%5d", rec[i].tot);

System.out.printf("%8.2f", rec[i].avg);

 

// 석차 출력구문 추가~!!

System.out.printf("%5d", rec[i].rank);

 

// 개행

System.out.println();

}

}//end print()

 

// ④ 석차 산출 메소드 추가~!!!

// - Racord 배열의 rank 속성을 초기화 기능 → 반환자료형 void

// - 클래스 내부적으로 활용할 메소드 정의 → 접근제어지시자 private → 외부에서 호출 불가

private void ranking()

{

int i, j;

 

// 모든 학생들의 등수를 1로 초기화

for (i=0; i<inwon; i++)

rec[i].rank = 1;

 

// 등수 산출

for (i=0; i<inwon-1; i++) //(0~2)

{

for (j=i+1; j<inwon; j++) //(1~3)

{

//기준이 비교보다 크다면

if (rec[i].avg < rec[j].avg) //기준데이터가 비교데이터보다 크다면

{

//비교데이터의 rank 를 1만큼 증가

rec[i].rank++;

}

else if (rec[i].avg > rec[j].avg) //비교데이터가 기준데이터보다 크다면

{

//기준데이터의 rank 를 1만큼 증가

rec[j].rank++;

}

}

}

}//end ranking()

}

 

cmd

인원 수 입력(1~100) : 21번째 학생의 이름 입력 : 김밍밍국어 점수 : 40영어 점수 : 50수학 점수 : 302번째 학생의 이름 입력 : 장밍밍국어 점수 : 90영어 점수 : 80수학 점수 : 60
  김밍밍  40  50  30  120   40.00    2  장밍밍  90  80  60  230   76.67    1계속하려면 아무 키나 누르십시오 . . .
 

 

 

 

 

 

728x90

댓글