Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Everything has an expiration date

★ 101 - Java 클래스와 인스턴스의 활용 : Record 클래스(속성)의 배열을 선언하고, Sungjuk 클래스(기능)에서 연산을 처리한 후, Test101의 메인 메소드에서 구동시키는 프로그램 (내 풀이) 본문

[Java]/review

★ 101 - Java 클래스와 인스턴스의 활용 : Record 클래스(속성)의 배열을 선언하고, Sungjuk 클래스(기능)에서 연산을 처리한 후, Test101의 메인 메소드에서 구동시키는 프로그램 (내 풀이)

Jelly-fish 2023. 9. 9. 17:18
MyRecord.java - 속성 값들만을 담는 클래스
package Review101;

//이름, 학생별로 국어점수, 영어점수, 수학점수를 입력받아
//총점, 평균을 계산하는 프로그램을 구현한다.
//단, 클래스의 개념을 활용하여 작성할 수 있도록 한다.
//또한, 이 과정에서 배열을 적극적으로 활용할 수 있도록 한다.
//클래스 설계는 다음의 가이드라인에 따라 진행할 수 있도록 한다.


//1. Record 클래스 → 학생 1명
//- 속성만 존재하는 클래스로 설계할 것~!!!

public class MyRecord
{
	String name;
	int kor;
	int eng;
	int mat;
	int tot;
	double avg;
	int rank;
}

MySungjuk.java - 연산 처리, 기능, 동작을 처리하는 클래스
package Review101;


//이름, 학생별로 국어점수, 영어점수, 수학점수를 입력받아
//총점, 평균을 계산하는 프로그램을 구현한다.
//단, 클래스의 개념을 활용하여 작성할 수 있도록 한다.
//또한, 이 과정에서 배열을 적극적으로 활용할 수 있도록 한다.
//클래스 설계는 다음의 가이드라인에 따라 진행할 수 있도록 한다.


//2. Sungjuk 클래스
//- 인원 수를 입력받아.
//입력받은 인원 수 만큼 이름, 국어점수, 영어점수, 수학점수를 입력받고
//총점과 평균을 산출하는 클래스로 설계할 것~!!!
//* 속성 : 인원 수 , Record 타입의 배열 (학생들)
//* 기능 : 인원수 입력, 상세 데이터 입력, 총점 및 평균 연산, 결과 출력
//3. Test101
//- main() 메소드가 존재하는 외부 클래스로 설계할 것~!!!


//실행 예)
//인원 수 입력(1~100) : 102
//인원 수 입력(1~100) : -10
//인원 수 입력(1~100) : 3

//1번째 학생의 이름 입력 : 강혜성
//국어 점수 : 90
//영어 점수 : 80
//수학 점수 : 70

//2번째 학생의 이름 입력 : 길현욱
//국어 점수 : 92
//영어 점수 : 82
//수학 점수 : 72


//3번째 학생의 이름 입력 : 김경태
//국어 점수 : 82
//영어 점수 : 72
//수학 점수 : 62

//길현욱  92  82  72 xxx  xx.xx 1
//강혜성  90  80  70 240  xx.xx 2
//김경태  82  72  62 xxx  xx.xx 3

//계속하려면 아무 키나 누르세요...



import java.util.Scanner;

public class MySungjuk
{
	private int countPeople;
	MyRecord[] student;
	// 1. 인원수를 입력 받는 메소드(입력값 1 ~ 100 일 때까지)
	public void input()
	{
		Scanner sc = new Scanner(System.in);
		do
		{
			System.out.print("인원 수 입력(1~100) : ");
			countPeople = sc.nextInt();
		}
		while(countPeople < 1 || countPeople > 100);
		
		// MyRecord 클래스의 배열 MyRecord[] student의 배열 길이를 countPeople 값으로 지정.
		student = new MyRecord[countPeople];
			
	}
	
	// 2. 인원수 만큼 반복 하면서, 학생들의 이름과 국, 영, 수 점수 입력 받기
	// 3. 학생들의 총점과 평균 구하기
	public void inputDataProcess()
	{
		Scanner sc = new Scanner(System.in);
		
		for(int i = 0; i < student.length; i++)
		{
			student[i] = new MyRecord(); 		//-->> ★ Record 타입 배열의 i번째 방마다 인스턴스를 생성해 주는 구문.
			System.out.printf("\n%d번째 학생 이름 입력 : ", i+1);
			student[i].name = sc.next();
			
			System.out.print("\n국어 점수 입력 : ");
			student[i].kor = sc.nextInt();
			student[i].tot += student[i].kor;	//-->> 입력과 동시에 총합 값에 더해준다.
			
			System.out.print("영어 점수 입력 : ");
			student[i].eng = sc.nextInt();
			student[i].tot += student[i].eng;	//-->> 입력과 동시에 총합 값에 더해준다.
			
			System.out.print("수학 점수 입력 : ");
			student[i].mat = sc.nextInt();
			student[i].tot += student[i].mat;	//-->> 입력과 동시에 총합 값에 더해준다.
		
			student[i].avg = student[i].tot / (double)countPeople;	//-->> 총합 값을 이용해, 평균 값도 구해준다.
		}
		
		
		
	}
	
	
	

	// 4. 결과 출력하기

	//길현욱  92  82  72 xxx  xx.xx 1
	//강혜성  90  80  70 240  xx.xx 2
	//김경태  82  72  62 xxx  xx.xx 3

	//계속하려면 아무 키나 누르세요...
		
	public void write()
	{
		for (int i = 0; i < student.length ; i++)
		{
			System.out.printf("\n%-5s", student[i].name);
			System.out.printf("%4d", student[i].kor);
			System.out.printf("%4d", student[i].eng);
			System.out.printf("%4d", student[i].mat);
			System.out.printf("%4d", student[i].tot);
			System.out.printf("%8.2f", student[i].avg);
			System.out.printf("%4d", student[i].rank);
		}
					
	}
	
	// 5. 번외 : 학생들의 석차 구하여 출력하기.
	
	public void rank()
	{
		for(int i = 0; i < student.length; i++)
		{
			student[i].rank = 1;							//--> 모든 student의 랭크 값 1로 초기화.
		}
		for(int i = 0; i < (student.length - 1); i++)
		{
			for(int j = i+1; j < student.length; j++)
			{
				if (student[i].avg > student[j].avg)		//--> 평균값이 낮은 학생 j의 랭크 + 1
				{
					student[j].rank++;
				}
				
				else if (student[i].avg < student[j].avg)	//--> 평균값이 낮은 학생 i의 랭크 + 1
				{
					student[i].rank++;
				}
			}
		}
	}
	
	
	
	
	
	
}

Review101.java - main() 메소드를 통해 MySungjuk의 인스턴스 생성 후, 실행 시키는 클래스
package Review101;

/*======================================
■■■ 클래스와 인스턴스 ■■■	
- 클래스와 인스턴스의 활용
=======================================*/


//이름, 학생별로 국어점수, 영어점수, 수학점수를 입력받아
//총점, 평균을 계산하는 프로그램을 구현한다.
//단, 클래스의 개념을 활용하여 작성할 수 있도록 한다.
//또한, 이 과정에서 배열을 적극적으로 활용할 수 있도록 한다.
//클래스 설계는 다음의 가이드라인에 따라 진행할 수 있도록 한다.

//[가이드라인]
//프로그램을 구성하는 클래스
//1. Record 클래스 → 학생 1명
//- 속성만 존재하는 클래스로 설계할 것~!!!
//2. Sungjuk 클래스
//- 인원 수를 입력받아.
//입력받은 인원 수 만큼 이름, 국어점수, 영어점수, 수학점수를 입력받고
//총점과 평균을 산출하는 클래스로 설계할 것~!!!
//* 속성 : 인원 수 , Record 타입의 배열 (학생들)
//* 기능 : 인원수 입력, 상세 데이터 입력, 총점 및 평균 연산, 결과 출력
//3. Test101
//- main() 메소드가 존재하는 외부 클래스로 설계할 것~!!!


//실행 예)
//인원 수 입력(1~100) : 102
//인원 수 입력(1~100) : -10
//인원 수 입력(1~100) : 3

//1번째 학생의 이름 입력 : 강혜성
//국어 점수 : 90
//영어 점수 : 80
//수학 점수 : 70

//2번째 학생의 이름 입력 : 길현욱
//국어 점수 : 92
//영어 점수 : 82
//수학 점수 : 72


//3번째 학생의 이름 입력 : 김경태
//국어 점수 : 82
//영어 점수 : 72
//수학 점수 : 62

//길현욱  92  82  72 xxx  xx.xx 1
//강혜성  90  80  70 240  xx.xx 2
//김경태  82  72  62 xxx  xx.xx 3

//계속하려면 아무 키나 누르세요...


public class Review101
{
	public static void main(String[] args)
	{
		MySungjuk msj = new MySungjuk();	// 인스턴스 생성.
		msj.input();
		msj.inputDataProcess();
		msj.rank();
		msj.write();
	}
}


//실행 결과

/*

인원 수 입력(1~100) : 3

1번째 학생 이름 입력 : 뫄뫄

국어 점수 입력 : 100
영어 점수 입력 : 97
수학 점수 입력 : 98

2번째 학생 이름 입력 : 봐봐

국어 점수 입력 : 80
영어 점수 입력 : 50
수학 점수 입력 : 49

3번째 학생 이름 입력 : 좌좌

국어 점수 입력 : 65
영어 점수 입력 : 70
수학 점수 입력 : 50

뫄뫄    100  97  98 295   98.33   1
봐봐     80  50  49 179   59.67   3
좌좌     65  70  50 185   61.67   2

*/