본문 바로가기
Project/Study | etc

성적 관리 프로그램 + 설계, 메소드 구현

by 코젼 2022. 6. 28.
728x90
반응형

🚩 프로젝트 설계 및 보고서

성적관리설계1_김지연.txt
0.00MB
성적 관리 프로그램_설계 및 보고서.pdf
4.98MB

💾 소스코드

StudentScore.zip
0.01MB


📃 학생들의 c언어, 자바 성적을 저장하고 평균과 석차를 출력하는 성적관리 프로그램

🚨 본 프로그램은 동명의 학생이 없다는 가정 하에 만듭니다.

💬 저장할 데이터
◾ 이름(String)
◾ C언어 성적(int)
◾ 자바 성적(int)
◾ 평균(float)
◾ 석차(int)
◾ 학급 인원 : 5명

💬 메뉴
◾ 1. 데이터 입력 : 학생별 이름과 C언어와 자바 성적을 입력
◾ 2. 데이터 출력 : 저장된 모든 학생의 이름과 성적을 출력
◾ 3. 이름입력하면 과목별 성적과 평균 및 석차 출력
◾ 4. 성적순으로 이름 출력
◾ 5. 현재 입력된 학생들의 총인원수를 출력
◾ 6. 이름으로 삭제 (이름을 입력받아 학생의 정보를 모두 삭제)

📃 ScoreManagment, SelectMenu 클래스

package Project;

import java.util.Scanner;

public class ScoreManagment {
	public static void main(String[] args) {
		SelectMenu s = new SelectMenu();

		s.Information();
		s.ClickButton();
	}
}

class SelectMenu {
	final int MAX_NUM = 5; // 등록할 수 있는 최대 학생 수
	int index = 0; // 등록한 학생 수

	String[] name = new String[MAX_NUM]; // 학생 이름

	int[] c_score = new int[MAX_NUM]; // C언어 성적
	int[] java_score = new int[MAX_NUM]; // JAVA 성적

	int[] rank = new int[MAX_NUM]; // 석차
	int[] sum = new int[MAX_NUM]; // 합
	float[] average = new float[MAX_NUM]; // 평균

	Scanner s = new Scanner(System.in);

	SelectMenu() {
		for (int i = 0; i < MAX_NUM; i++) {
			name[i] = "null";
		}
	}

	// 기능 설명 출력
	void Information() {
		System.out.println("*****************************************");
		System.out.println("\t   [ 성적 관리 프로그램 ]\n\t실행할 기능의 번호를 입력하세요.");
		System.out.println("-----------------------------------------");
		System.out.println("1. 데이터 입력\n2. 데이터 출력\n3. 과목별 성적, 평균, 석차 확인\n4. 성적 석차 확인\n5. 학생 인원수 확인\n6. 학생 삭제");

	}

	// 버튼 선택하기
	int WhatIsButton() {
		int button;
		button = s.nextInt();
		return button;
	}

	// *****1. 데이터 입력 : 학생별 이름과 C언어와 자바 성적을 입력
	void InputData() {
		System.out.println("등록할 수 있는 최대 학생 수는 " + MAX_NUM + "명 입니다.");
		System.out.println("현재 등록하는 학생은 " + (index + 1) + "번째 학생입니다.");
		// 인덱스를 벗어나면 오류
		if (index > MAX_NUM) {
			System.out.println("오류");
			return;
		}
		System.out.println("-----------------------------------------");

		// 이름 입력
		System.out.print("이름 >> ");
		name[index] = s.next();

		// C언어 성적 입력
		System.out.print("C언어 성적 >> ");
		c_score[index] = s.nextInt();

		// JAVA 성적 입력
		System.out.print("JAVA 언어 성적 >> ");
		java_score[index] = s.nextInt();

		index++;

	}

	// *****2. 데이터 출력 : 저장된 모든 학생의 이름과 성적을 출력
	void OutputData() {
		System.out.println("-----------------------------------------");
		System.out.println("이름\t  C성적\tJAVA성적");
		for (int i = 0; i < index; i++) {
			System.out.println(name[i] + "\t" + c_score[i] + "\t" + java_score[i]);
		}
	}

	// *****3. 이름 입력하면 과목별 성적과 평균 및 석차 출력
	void FindScore() {
		System.out.println("-----------------------------------------");
		System.out.print("성적을 검색하려면 이름을 적으세요>> ");
		String nameLookup = s.next();

		for (int i = 0; i < MAX_NUM; i++) {
			if (name[i].equals(nameLookup)) {
				System.out.println("이름\tC성적\tJAVA성적\t평균\t석차");
				System.out.println(
						name[i] + "\t" + c_score[i] + "\t" + java_score[i] + "\t" + getAvg()[i] + "\t" + getRank()[i]);
			}
		}
	}

	// *****4. 성적순으로 이름 출력
	void ScoreRank() {
		rank = getRank();
		String[] arr = new String[rank.length];

		for (int i = 0; i < MAX_NUM; i++) {
			for (int j = 0; j < MAX_NUM; j++) {
				if (rank[j] == (i + 1)) {
					arr[i] = name[j];
				}
			}
		}
		for (int i = 0; i < index; i++) {
			System.out.println((i + 1) + "등 : " + arr[i]);
		}
	}

	// *****5. 현재 입력된 학생들의 총인원수를 출력
	void StudentNumber() {
		System.out.println("현재 입력된 학생 인원수 : " + index);
	}

	// *****6. 이름으로 삭제(이름을 입력받아 학생의 정보를 모두 삭제)
	void RemoveInfo() {
		System.out.print("삭제할 학생의 이름을 입력하세요 >> ");
		String nameLookup = s.next();

		for (int i = 0; i < index; i++) {
			if (name[i].equals(nameLookup)) {
				System.out.println(name[i] + "과 관련된 정보를 모두 삭제합니다.");

				for (int j = i; j < index - 1; j++) {
					name[j] = name[j + 1]; // 이름 제거
					c_score[j] = c_score[j + 1]; // c언어 점수 제거
					java_score[j] = java_score[j + 1]; // java언어 점수 제거

				}
				index--;
			}
		}

		for (int i = 0; i < index; i++) {
			System.out.println(name[i] + "\t" + c_score[i] + "\t" + java_score[i]);
		}
//		System.out.println("이름\tC성적\tJAVA성적");
//		for(int i=0; i<index-1; i++) {
//			if(name[i] == null) {
//				--index;
//			}
//			System.out.println(
//					name[i] + "\t" + c_score[i] + "\t" + java_score[i]);
//		}

	}

	// 학생별 (C언어 점수 + JAVA언어 점수) 합계 반환 메소드
	int[] getSum() {
		// 0으로 모두 초기화
		for (int i = 0; i < MAX_NUM; i++) {
			sum[i] = 0;
		}
		for (int i = 0; i < MAX_NUM; i++) {
			sum[i] += c_score[i] + java_score[i];
		}
		return sum;
	}

	// 학생별 평균 반환 메소드
	float[] getAvg() {
		sum = getSum();
		for (int i = 0; i < MAX_NUM; i++) {
			average[i] = (float) sum[i] / 2;
		}
		return average;
	}

	// 평균별 석차 구하는 메소드
	int[] getRank() {
		average = getAvg();

		// 모두 1로 초기화
		for (int i = 0; i < rank.length; i++) {
			rank[i] = 1;
		}

		for (int i = 0; i < MAX_NUM; i++) {
			for (int j = 0; j < MAX_NUM; j++) {
				if (average[i] < average[j]) {
					rank[i]++;
				}
			}
		}
		return rank;
	}

	// 버튼을 눌렀을 때
	void ClickButton() {

		int button = WhatIsButton();

		switch (button) {
		case 1:
			System.out.println("\n메뉴 1 이동");
			InputData();
			Information();
			ClickButton();
			break;

		case 2:
			System.out.println("\n메뉴 2 이동");
			OutputData();
			Information();
			ClickButton();
			break;

		case 3:
			System.out.println("\n메뉴 3 이동");
			FindScore();
			Information();
			ClickButton();
			break;

		case 4:
			System.out.println("\n메뉴 4 이동");
			ScoreRank();
			Information();
			ClickButton();
			break;

		case 5:
			System.out.println("\n메뉴 5 이동");
			StudentNumber();
			Information();
			ClickButton();
			break;

		case 6:
			System.out.println("\n메뉴 6 이동");
			RemoveInfo();
			Information();
			ClickButton();
			break;

		default:
			System.out.println("잘못 입력하셨습니다.");
			Information();
			ClickButton();

		}
	}
}

💻 실행 결과

728x90
반응형

댓글