<<쌤이 주신 문제>>
학생 부정행위여부(O, 무조건 F)/출석점수(80점 미만 F)
학점 ( > = 90 : A, >=80 : B, >=70 : C , 69점부터.. F )
출석점수 20% 반영! 총점 80%반영 = 최종점수(100%)
즉 최종점수로! 학점 판단해주세요
첫번째. main에서 작성해주세요.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
boolean cheating=true; // 부정행위 여부
// 출석률 // 총점 // 학점
int attendrate;
int totalscore;
char grade;
Scanner scan = new Scanner(System.in);
// 1. 부정행위 여부를 입력 받아 cheating에 저장한다
System.out.print("부정행위 여부(O/X)>>");
if(!scan.next().equals("O")) cheating=false;
// 2. 출석률을 입력 받아 attendrate에 저장한다
System.out.print("출석률 입력>>");
attendrate = scan.nextInt();
// 3. 총점을 입력 totalscore에 저장한다
System.out.print("총점 입력>>");
totalscore = scan.nextInt();
scan.close();
// 4. 부정행위 여부, 출석률과 총점에 따라 학점을 부여한다
grade='F';
if(cheating==false) {
if(attendrate>79) {
double total= attendrate*0.2+totalscore*0.8;
System.out.println(total);
if(total>=90) grade = 'A';
else if(total>=80) grade = 'B';
else if(total>=70) grade = 'C';
}
}
// 5. 학점을 출력한다
System.out.println(grade);
}
}
두번째. 클래스 설계해서 작성해주세요.
시나리오
1. 부정행위 여부를 판단한다!
2. 부정행위를 하지 않았다면? 출석점수와 총점을 입력받는다.
<Main 클래스>
public class Main {
public static void main(String[] args) {
new CheatingChk().run();
}
}
<CheatingChk 클래스> 부정행위확인
import java.util.Scanner;
public class CheatingChk {
public void run() {
Scanner scan = new Scanner(System.in);
System.out.print("부정행위 여부(O/X)>>");
if(!scan.next().equals("O")) new CalculateGrade().run();
else System.out.println("F학점입니다!! 부정행위NONONO");
}
}
<CalculateGrade 클래스> 학점계산
import java.util.Scanner;
public class CalculateGrade {
int attendrate;
int totalscore;
char grade;
double total;
public CalculateGrade() {
attendrate=0;
grade='F';
}
public void run() {
input();
System.out.println("학점은 "+calGrade()+"입니다.");
}
void input(){
Scanner scan = new Scanner(System.in);
System.out.print("출석률 입력>>");
attendrate = scan.nextInt();
System.out.print("총점 입력>>");
totalscore = scan.nextInt();
scan.close();
}
double calTotal() {
return total = attendrate*0.2+totalscore*0.8;
}
char calGrade() {
if(attendrate>79) {
calTotal();
if(total>=90) grade = 'A';
else if(total>=80) grade = 'B';
else if(total>=70) grade = 'C';
}
return grade;
}
}
처음에는 CalculateGrade 클래스의 run 메소드에서 attendrate과 totalscore를 입력받도록 했었는데 input이라는 메소드를 추가해서 입력받는 부분은 분리시켰다.
(궁금한 부분) 입력받는 부분을 input이라는 메소드로 분리시켰는데 메소드가 아니라 클래스화 시키는게 나은건가..?
만약 그렇다면 그래야 하는 이유는 뭘까..?
피드백 받고 수정한 코드
'소스코드' 카테고리의 다른 글
jdbc 이클립스 - db 연동 (mysql/sqlite/oracle) (0) | 2022.12.30 |
---|---|
[미니프로젝트] 시나리오01 커피 주문프로그램 (0) | 2022.09.22 |
[코딩습관잡기] - 2.9단계 (0) | 2022.09.19 |
[코딩습관잡기] - 2단계 (수정) (2) | 2022.09.19 |
[주말과제] JAVA 클래스배열을 이용한 연락처입력프로그램 (0) | 2022.09.05 |