[자바] 성적관리 프로그램 (추상)

오늘·2021년 3월 15일
0

문제풀기

목록 보기
19/24

요구사항

-초등학생 성적관리 : 과목명, 점수(원점수), 시험(중간, 기말, 수행평가)
-중학생 성적관리 : 과목명, 점수(원점수), 담당교사, 시험(중간, 기말, 수행평가, 출석점수, 봉사점수)
-고등학생 성적관리 : 과목명, 점수(원점수, 표준편차), 담당교사, 시험(중간, 기말, 수행평가, 출석점수, 봉사점수)

출력모습

요구사항 처리 생각해보기

부모클래스
: 과목명, 원점수, 중간, 기말, 수행평가
: 입력받기 - 추상메소드
: 출력 - 추상메소드 (각각 출력하는 모양이 다르니)
: 점수 계산 - 추상메소드

자식클래스
1) 초등 클래스
2) 중학 클래스
: 담당교사, 출석점수, 봉사점수
3) 고등 클래스
: 표준편차점수, 담당교사


1. 상위 클래스 Score( =SungJuk) 클래스 작성

-필드값 선언
-오버라이딩해 사용할 추상 메소드 작성

public abstract class Score {
	// 필드
	String subjectName; // 과목명
	int wonJumsu; // 원점수
	int midJumsu; // 중간고사 점수
	int finalJumsu; // 기말고사 점수
	int performJum; // 기말고사 점수

	// 메소드
	// 입력받는 메소드(내용없이 추상으로 작성 후 오버라이딩 사용)
	abstract void inputMethod();
	
	// 출력처리하는 메소드(내용없이 추상으로 작성 후 오버라이딩 사용)
	abstract void outputMethod();
	
	// 점수 계산하는 추상 메소드
	abstract int scoreCal();
}

2. Score를 상속받는 초등 클래스

import java.util.Scanner;

public class Elementary extends Score{
	Scanner sc = new Scanner(System.in);
	
	@Override
	void inputMethod() {
		System.out.println("----------------------------");
		System.out.println("\t 초등학교 학생 성적입니다 ");
		System.out.println("----------------------------");
		System.out.println("과목명 ");
		System.out.print(">>");
		subjectName = sc.next();
		
		System.out.println("시험 중간고사 점수");
		System.out.print(">>");
		midJumsu = sc.nextInt();
		
		System.out.println("시험 기말고사 점수");
		System.out.print(">>");
		finalJumsu = sc.nextInt();
		
		System.out.println("수행평가 점수");
		System.out.print(">>");
		performJum = sc.nextInt();
	}
	@Override
	void outputMethod() {
		System.out.println("----------------------------");
		System.out.println("\t 초등학교 학생 처리 결과입니다 ");
		System.out.println("----------------------------");
		System.out.println("과목명 : " + subjectName);
		System.out.println("시험점수 : 중간고사-" + midJumsu + " 기말고사-" + finalJumsu + " 수행평가-" + performJum);
		System.out.println("총 점수 : " + scoreCal());
	}
	@Override
	int scoreCal() {
		int hap = midJumsu + finalJumsu + performJum;
		return hap;
	}
}

3. Score를 상속받는 중등 클래스

import java.util.Scanner;

public class Middle extends Score{
	String teacher;	// 담당 교사
	int attendance;	// 출석점수
	int volunteer;	// 봉사점수
	
	Scanner sc = new Scanner(System.in);
	
	@Override
	void inputMethod() {
		System.out.println("----------------------------");
		System.out.println("\t 중학교 학생 성적입니다 ");
		System.out.println("----------------------------");
		System.out.println("과목명");
		System.out.print(">>");
		subjectName = sc.next();
		
		System.out.println("담당교사");
		System.out.print(">>");
		teacher = sc.next();
		
		System.out.println("시험 중간고사 점수");
		System.out.print(">>");
		midJumsu = sc.nextInt();
		
		System.out.println("시험 기말고사 점수");
		System.out.print(">>");
		finalJumsu = sc.nextInt();
		
		System.out.println("수행평가 점수");
		System.out.print(">>");
		performJum = sc.nextInt();
		
		System.out.println("출석 점수");
		System.out.print(">>");
		attendance = sc.nextInt();
		
		System.out.println("봉사 점수");
		System.out.print(">>");
		volunteer = sc.nextInt();
	}
	@Override
	void outputMethod() {
		System.out.println("----------------------------");
		System.out.println("\t 중학교 학생 성적처리 결과입니다 ");
		System.out.println("----------------------------");	
		System.out.println("과목명 : " + subjectName);
		System.out.println("담당교사 : " + teacher);
		System.out.println("시험점수 : 중간-" + midJumsu + " 기말-"+finalJumsu
				+ " 수행-" + performJum + " 출셕-"+attendance + " 봉사-" + volunteer);
		System.out.println("총 점수 : " + scoreCal());
	}
	@Override
	int scoreCal() {
		int hap = midJumsu + finalJumsu + performJum + attendance + volunteer;
		return hap;
	}
}

4. Score를 상속받는 고등 클래스

import java.util.Scanner;

public class High extends Middle {
	double standardDeviation; // 표준편차 점수

	Scanner sc = new Scanner(System.in);

	@Override
	void inputMethod() {
		System.out.println("----------------------------");
		System.out.println("\t 고등 학생 성적입니다 ");
		System.out.println("----------------------------");
		System.out.println("과목명");
		System.out.print(">>");
		subjectName = sc.next();

		System.out.println("담당교사");
		System.out.print(">>");
		teacher = sc.next();

		System.out.println("시험 중간고사 점수");
		System.out.print(">>");
		midJumsu = sc.nextInt();

		System.out.println("시험 기말고사 점수");
		System.out.print(">>");
		finalJumsu = sc.nextInt();

		System.out.println("수행평가 점수");
		System.out.print(">>");
		performJum = sc.nextInt();

		System.out.println("출석 점수");
		System.out.print(">>");
		attendance = sc.nextInt();

		System.out.println("봉사 점수");
		System.out.print(">>");
		volunteer = sc.nextInt();
	}

	@Override
	void outputMethod() {
		System.out.println("----------------------------");
		System.out.println("\t 고등학생 성적처리 결과입니다 ");
		System.out.println("----------------------------");
		System.out.println("과목명 : " + subjectName);
		System.out.println("담당교사 : " + teacher);
		System.out.println("시험점수 : 중간-" + midJumsu + " 기말-" + finalJumsu + " 수행-" + performJum + " 출셕-" + attendance
				+ " 봉사-" + volunteer);
		System.out.println("점수 : " + scoreCal());
		System.out.println("표준편차 : " + std());
	}

	@Override
	int scoreCal() {
		int hap = midJumsu + finalJumsu + performJum + attendance + volunteer;
		return hap;
	}


	// 표준편차 구하기
	double std() {
		// 평균
		double avg = scoreCal() / 5.0;
		// 제곱 구하기
		// : Math.pow(값, 제곱)
		double dis = Math.pow((volunteer - avg), 2);
		double dis1 = Math.pow((midJumsu - avg), 2);
		double dis2 = Math.pow((finalJumsu - avg), 2);
		double dis3 = Math.pow((performJum - avg), 2);
		double dis4 = Math.pow((attendance - avg), 2);

		// 분산구하기
		double var = (dis + dis1 + dis2 + dis3 + dis4) / 5;
		// 표준편차 구하기
		standardDeviation = Math.sqrt(var);
		return standardDeviation;
	}
}

5. 출력할 메인 클래스

public class Main {
	public static void main(String[] args) {
		// 초등학교 성적 입력
		Elementary ele = new Elementary();  // 초등 클래스 객체생성
		Score score = ele;	// 다형성
		score.inputMethod();
		
		// 중학교 성적 입력
		Middle mi = new Middle();
		score = mi;
		score.inputMethod();
		
		// 고등학교 성적 입력
		High high = new High();
		score = high;
		score.inputMethod();
		
		// 출력
		ele.outputMethod();
		mi.outputMethod();
		high.outputMethod();
	}
}

실행결과

0개의 댓글