본문 바로가기
Java기초

[Java]클래스활용 성적관리프로그램(getter and setter)+has ~ a관계이해

by jackypark 2022. 6. 28.

Today's memo:

개발자는 항상 사용자들의 평의를 위해서 여러가지 상황에 맞는 코드들을 제공해줘야한다. 

필드사용은 항상 메소드를 통해서 사용하게끔 하는거 잊지말기!

why? 객체 무결성을 유지하기위해서이다.

 

 

import java.util.Scanner;

class Name{//data class : 독립적으로 사용
	private String name;
	public Name() {}
	public Name(String name) {this.name=name;}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
}

class Subject{// data class gradeManager가 가져다 쓰는 클래스라 이건 건들여지면안됨
	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 {
	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;
	}
	private 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=total/3.0f;
	}
	public void setAvg(float avg) {
		this.avg = avg;
	}
	public int getTotal() {
		return total=kor.getScore()+eng.getScore()+math.getScore();
	}

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		GradeManager gm=new GradeManager();
		System.out.println("이름을 입력하시오");
		gm.setName(sc.next());
		System.out.println("국어 성적 입력");
		gm.setKor(sc.nextInt());
		System.out.println("영어 성적 입력");
		gm.setEng(sc.nextInt());
		System.out.println("수학 성적 입력");
		gm.setMath(sc.nextInt());	
		
		System.out.println("이름:"+gm.getName());
		System.out.println("국어: "+gm.getKor()+"영어: "+gm.getEng()+"수학: "+gm.getMath());
		System.out.println("총점: "+gm.getTotal()+"평균: "+gm.getAvg());
	}

}

 위 클래스를 활용하여 여러명 성적관리를 해보자

import java.util.Scanner;


public class Studentes {
	private GradeManager[ ] stu;
	
	Studentes(int num){
		stu=new GradeManager[num];
		for(int i=0;i<num;i++) {
			stu[i]=new GradeManager();
		}
	}
	
	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<st.stu.length;i++) {
			System.out.println("이름 입력");
			st.stu[i].setName(sc.next());
			System.out.println("국어 성적입력");
			st.stu[i].setKor(sc.nextInt());
			System.out.println("영어 성적입력");
			st.stu[i].setEng(sc.nextInt());
			System.out.println("수학 성적입력");
			st.stu[i].setMath(sc.nextInt());

		}
		for(int i=0;i<st.stu.length;i++) {
			System.out.print("이름: "+st.stu[i].getName()+"\t");
			System.out.print("국어: "+st.stu[i].getKor()+"\t");
			System.out.print("영어: "+st.stu[i].getEng()+"\t");
			System.out.println("수학: "+st.stu[i].getMath()+"\t");
			System.out.println("총점:"+st.stu[i].getTotal()+"\t"+"평균:"+st.stu[i].getAvg()+"\t" );
		}
		
		
	}

}

메인에 너무 기능을 떄려 넣은거같으니 메소드를 만들어서 만들어보자!

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();	
	}

}

댓글