========================ClassRoom.java==============================
public class ClassRoom
{
private Student[] students = new Student[10];
private int size;
public void printStudent(){
for(int i= 0; i<size; i++){
students[i].printStudent();
}
}
public void addStudent(Student st){
students[size++] = st; //++size 먼저 1이 증가함. // 이것은 먼저 0을 저장하고 1을 더함
}
public int getSize(){
return size;
}
public void setClassRank(){
Student[] temp = new Student[size];
for(int i=0; i<size; i++){
temp[i] =students[i];
}
for(int i= 0; i<size-1; i++){
for(int j=i+1; j<size; j++){
if (temp[i].getTot() < temp[j].getTot()){
Student t = temp[i];
temp[i] = temp[j];
temp[j] = t;
}
}
}
for(int i=0; i<size; i++){
temp[i].setClassRank(i+1);
}
}
public Student getStudent(int index){
return students[index];
}
}
================ScoreManager.java=========================================================
import java.util.*;
public class ScoreManager {
private Scanner sc;
private boolean bContinue=true;
private Student[] classRoom;
private int no = 0;
int classNum = 0;
ClassRoom[] classes;
public static void main(String[] args) {
new ScoreManager().go();
}
private void go() {
//정의
sc = new Scanner(System.in);
classRoom = new Student[10];
showTitle();
classNum = howManyClasses();
classes = new ClassRoom[classNum];
for( int i = 0; i<classNum; i++){
classes[i] = new ClassRoom();
}
while(bContinue){
int menu = showMenu();
switch(menu){
case 0:
System.out.println("프로그램을 종료합니다....");
bContinue=false;
break;
case 1:
inputStudent();
break;
case 2:
showScoreTable();
break;
default:
System.out.println("메뉴는 (0-2) 사이의 값만 선택가능합니다.");
break;
}
}
}
private void showScoreTable() {
System.out.println();
System.out.println("=====================성적 처리 결과========================");
System.out.println("반 번호 이름 국어 영어 수학 총점 평균 학점 반석차 전체석차");
System.out.println("===========================================================");
setTotalRank();
for(int i=0; i<classNum; i++){
classes[i].setClassRank();
classes[i].printStudent(); //classes[0] 종료후 --------------출력, classes[1] 종료후ㅠ -------출력 classes[classnum-1] 종료후====== 출력
System.out.println("----------------------------------------------------------");
}
System.out.println("===========================================================");
}
private void setTotalRank(){
int totalSize = 0;
for(int i=0; i<classNum; i++){
totalSize += classes[i].getSize();
}
Student[] temp = new Student[totalSize];
int count = 0;
for(int i=0; i<classNum; i++){
for(int j=0; j<classes[i].getSize(); j++){
temp[count++] = classes[i].getStudent(j);
}
}
//정렬과정
for(int i=0; i<totalSize-1; i++){
for(int j=i+1; j<totalSize; j++){
if(temp[i].getTot() < temp[j].getTot())
{
Student t = temp[i];
temp[i] = temp[j];
temp[j] = t;
}
}
}
for(int i=0; i<totalSize; i++){
temp[i].setTotalRank(i+1);
}
}
private void inputStudent() {
try{
System.out.println("======성적 입력=====");
System.out.print("몇 반 학생을 추가합니까?(1~"+classNum+")");
int ban = sc.nextInt();
int no = classes[ban-1].getSize()+1;
System.out.print(no+"번 학생 이름 = ");
sc.reset();
String name = sc.next();
sc.reset();
System.out.print("국어 = ");
int kor = sc.nextInt();
System.out.print("영어 = ");
int eng = sc.nextInt();
System.out.print("수학 = ");
int mat = sc.nextInt();
//학생 생성;
Student st = new Student(ban, no, name, kor, eng, mat);
classes[ban-1].addStudent(st); //student[size++] = st; size=0 size = size + 1;
} catch (Exception e){
System.out.println("잘못된 정보 입력으로 메뉴로 돌아갑니다.");
sc.nextLine();
return;
}
}
private void showTitle() {
System.out.println();
System.out.println("==========================================");
System.out.println("= 성적 관리 프로그램 =");
System.out.println("= ver 0.2 =");
System.out.println("= created by JI =");
System.out.println("= 설명:반별로 성적을 관리할 수 있습니다. =");
System.out.println("==========================================");
}
private int showMenu() {
int menu=-1;
System.out.println();
System.out.println("===================메 뉴===================");
System.out.println("0 : 프로그램 종료");
System.out.println("1 : 성적 입력");
System.out.println("2 : 성적 출력");
System.out.println("===========================================");
System.out.print("선택 >> ");
try{
menu = sc.nextInt();
} catch (Exception e){
System.out.println("숫자만 입력 가능합니다.");
sc.nextLine();
}
return menu;
}
private int howManyClasses() {
System.out.print("몇 개의 학급을 생성하겠습니다?");
int num = sc.nextInt();
return num;
}
}
===========================================Student.java==========================================
public class Student {
private int classNum;
private String name;
private int no;
private int kor;
private int eng;
private int mat;
private int tot;
private double avg;
private String grade;
private int classRank;
private int totalRank;
public Student(int ban, int no, String name, int kor, int eng, int mat){
classNum = ban;
this.no = no;//(class에 있는 변수를 사용) this.no는 class에 , no은 Student 생성자)
this.name = name;
this.kor = kor;
this.eng = eng;
this.mat = mat;
calcTot();
calcAvg();
calcGrade();
}
public void calcGrade(){
if(avg >=90) grade = "A";
else if(avg >=80) grade = "B";
else if(avg >=70) grade = "C";
else if(avg >=60) grade = "D";
else grade = "F";
}
public void calcTot(){
tot = kor+eng+mat;
}
public void calcAvg(){
avg = tot/3.0f;
}
public void printStudent(){
System.out.printf("%2d %4d %3s %4d %4d %4d %4d %4.1f %2s %6d %8d \\n",
classNum, no, name, kor, eng, mat, tot, avg, grade, classRank, totalRank);
}
public int getTot(){
return tot;
}
public void setClassRank(int rank){
classRank = rank;
}
public void setTotalRank(int rank){
totalRank = rank;
}
}
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.