본문 바로가기
Java기초

[JAVA] Class 관계 (has~ a) 포함오브젝트 활용

by jackypark 2022. 6. 30.

has a관계를 활용하여 저번에 만들었던 성적관리 프로그램을 계승해 봤다.

import java.util.Scanner;

class Name{//data Class : 독립적
	private String name;
	public Name() {}
	public Name(String name) {this.name=name;}
	//필드명에 바로접근하는건 안좋은 습관으로 getter와setter을 활용하는게 좋다.
	public String getName() { 
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
}

class Subject{//data Class : 독립적 // 
	private int score;
	public Subject() {}
	public Subject(int score) {this.score=score;}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}	
}

public class GradeManager { //data 관리클래스
	private Name name;
	private Subject kor,math,eng;// 과목 성적들을 기입한다
	private float avg;
	private int total;
	public GradeManager() {
		name=new Name();
		kor=new Subject();
		math=new Subject();
		eng=new Subject();
	}
	public GradeManager(String name,int kor,int eng,int math) {
		this.name=new Name(name);
		this.kor=new Subject(kor);
		this.eng=new Subject(eng);
		this.math=new Subject(math);
		
		total=this.getKor()+this.getEng()+this.getMath();
		avg=total/3.f;
	}
	void setName(String name) {
		this.name.setName(name);		
	}
	public String getName() {
		return name.getName();
	}
	public int getKor() {
		return kor.getScore();
	}

	public void setKor(int kor) {
		this.kor.setScore(kor);
	}
	public int getMath() {
		return math.getScore();
	}
	public void setMath(int math) {
		this.math.setScore(math);
	}
	public int getEng() {
		return eng.getScore();
	}
	public void setEng(int eng) {
		this.eng.setScore(eng);
	}
	public float getAvg() {
		return avg=getTotal()/3.f; // == total/3.0f;
	}
	public void setAvg(float avg) {
		this.avg = avg;
	}
	public int getTotal() {
		return total=kor.getScore()+eng.getScore()+math.getScore();
	}

}
import java.util.Scanner;


public class Studentes {
	private GradeManager[ ] stu;
	private int pos;
	Studentes(int num){
		pos=0;
		stu=new GradeManager[num];
		for(int i=0;i<stu.length;i++) {
			stu[i]=new GradeManager(); //크기만 큼 개체 성적관리 클래스 개체생성
		}
	}
	public void setStuInfo(String name,int kor,int eng,int math) { 성적 기입
  
		stu[pos].setName(name);
		stu[pos].setKor(kor);
		stu[pos].setEng(eng);
		stu[pos].setMath(math);
		pos++;
	}
	
	public void disp() { //화면 출력
		for(int i=0;i<pos;i++) {
			System.out.print("이름: "+stu[i].getName()+"\t");
			System.out.print("국어: "+stu[i].getKor()+"\t");
			System.out.print("영어: "+stu[i].getEng()+"\t");
			System.out.println("수학: "+stu[i].getMath()+"\t");
			System.out.println("총점:"+stu[i].getTotal()+"\t"+"평균:"+stu[i].getAvg()+"\t" );
		}
	}
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int num;
		System.out.println("몇명 성적관리하시겠습니까?");
		num=sc.nextInt();
		Studentes st=new Studentes(num);
		
		for(int i=0;i<num;i++) {
			System.out.println("이름입력");
			String na=sc.next();
			System.out.println("국어성적");
			int kor=sc.nextInt();
			System.out.println("영어성적");
			int eng=sc.nextInt();
			System.out.println("수학성적");
			int math=sc.nextInt();
			st.setStuInfo(na,kor,eng,math);
		}		
		st.disp();	
	}
}

댓글