블로그에 올리진 않았지만 성적입력, 출력, 종료 기능을 가진 프로그램을 만들었다.
베이스 코드
package ex1.ex1;
import java.util.Scanner;
public class base_code {
public static void main(String[] args) {
int kor1, kor2, kor3;
int total;
float avg;
Scanner scan = new Scanner(System.in);
kor1 = 0;
kor2 = 0;
kor3 = 0;
exit:
while (true) {
// ------ 메뉴 선택 부분 -------
System.out.println("\n+---------------------------------+");
System.out.println("| 메인 메뉴 |");
System.out.println("+---------------------------------+");
System.out.println("\t1.성적입력 ");
System.out.println("\t2.성적출력 ");
System.out.println("\t3.종료 ");
System.out.print("\t> ");
int menu = scan.nextInt();
switch (menu) {
// ------ 성적 입력 부분 -------
case 1:
System.out.println("\n+---------------------------------+");
System.out.println("| 성적 입력 |");
System.out.println("+---------------------------------+");
do {
System.out.print("국어1: ");
kor1 = scan.nextInt();
if (kor1 < 0 || 100 < kor1)
System.out.println("성적범위(0 ~ 100)를 벗어났습니다.");
} while (kor1 < 0 || 100 < kor1);
do {
System.out.print("국어2: ");
kor2 = scan.nextInt();
if (kor2 < 0 || 100 < kor2)
System.out.println("성적범위(0 ~ 100)를 벗어났습니다.");
} while (kor2 < 0 || 100 < kor2);
do {
System.out.print("국어3: ");
kor3 = scan.nextInt();
if (kor3 < 0 || 100 < kor3)
System.out.println("성적범위(0 ~ 100)를 벗어났습니다.");
} while (kor3 < 0 || 100 < kor3);
break; // Add break statement here
// ------ 성적 출력 부분 -------
case 2:
total = kor1 + kor2 + kor3;
avg = total / 3.0f;
System.out.println("+---------------------------------+");
System.out.println("| 성적출력 |");
System.out.println("+---------------------------------+");
for (int i = 0; i < 3; i++) {
if (i == 0) {
System.out.printf("\t국어%d: %3d\n", i + 1, kor1);
}else if (i == 1) {
System.out.printf("\t국어%d: %3d\n", i + 1, kor2);
}else if (i == 2) {
System.out.printf("\t국어%d: %3d\n", i + 1, kor3);
}
}
System.out.printf("\n총점: %3d", total);
System.out.printf("\n평균: %6.2f", avg);
System.out.println("\n--------------------------------------");
break; // Add break statement here
case 3:
break exit;
default:
System.out.println("입력 오류!");
break; // Add break statement here
}
}
}
}
우선 베이스 코드를 간단히 리뷰해보겠다. 베이스 코드는 절차지향적으로 작성되었으며, 그 내용은 아래와 같다.
이 코드는 case 3에서 break exit;를 통해 while 루프를 종료하고 프로그램을 종료
이 코드에서 분기는 3가지이다.
성적 입력 (case 1): 사용자로부터 세 과목의 국어 성적을 입력
성적 출력 (case 2): 세 번의 국어 성적을 출력하고, 총점과 평균을 계산하여 출력
종료 (case 3): 프로그램을 종료합니다.
전반적으로 코드는 성적 입력과 출력을 처리하는 기능을 제공한다.
하지만 코드에는 몇 가지 개선할 점이 있다.
우선 코드가 '절차 지향적'으로 작성되었다는 것이다. 현재 구조적인 프로그래밍 학습을 진행하려고 하기 때문에, 이렇게 절차지향적으로 작성된 코드를 구조적인 코드로 변경하여 코드의 가독성을 높이고 재사용성을 높이려고 한다.
구조적인 코드로의 리팩토링은 다음 글에 작성하겠다.