백지부터 시작하는 이세계 코딩 생활
성적 입출력 본문
값을 입력받고 결과를 출력한다.
값을 출력 할 때는 등급, 평균, 랭크까지 함께 출력되게 한다.
import java.util.Scanner;
import static java.lang.System.out;
public class s0504_성적출력_sol {
static final int MAX = 100;
static int top = 0; // 현재 입력 위치 index
static String[] name = new String[MAX];
static int[] kor = new int[MAX];
static int[] eng = new int[MAX];
static int[] mat = new int[MAX];
static int[] total = new int[MAX];
static double[] avg = new double[MAX];
static char[] grade = new char[MAX];
static int[] rank = new int[MAX];
static Scanner scan = new Scanner(System.in);
static String[] menuItems = { "INPUT", "OUTPUT", "SEARCH", "MODIFY", "DELETE", "END" };
static int input() {
System.out.println("---- 입력기능 --");
if (top >= MAX) {
out.println("더 이상 입력 할 수 없습니다!");
}
out.print("성명입력: ");
name[top] = scan.next();
do {
out.print("국어점수: ");
kor[top] = scan.nextInt();
} while (kor[top] < 0 || kor[top] > 100);
do {
out.print("영어점수: ");
eng[top] =scan.nextInt();
} while (eng[top] < 0 || eng[top] > 100);
do {
out.print("수학점수: ");
mat[top] =scan.nextInt();
} while (mat[top] < 0 || mat[top] > 100);
total[top] = kor[top] + eng[top] + mat[top];
avg[top] = total[top] / 3.0;
switch ((int) avg[top] / 10) {
case 10:
case 9:
grade[top] = 'A';
break;
case 8:
grade[top] = 'B';
break;
case 7:
grade[top] = 'C';
break;
case 6:
grade[top] = 'D';
break;
default:
grade[top] = 'F';
}
for (int i = 0; i <= top; i++) {
rank[i] = 1;
for (int j = 0; j <= top; j++) {
if (total[i] < total[j]) {
rank[i]++;
}
}
}
return top++;
}
static int output() {
out.println("---- 출력기능 --");
// 목록 출력
out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "번호", "성명", "국어", "영어", "수학", "총점", "평균", "학점", "등수");
for (int i = 0; i < top; i++) {
out.printf("%d\t%s\t%d\t%d\t%d\t%d\t%.1f\t%c\t%d\n", i, name[i],kor[i], eng[i], mat[i], total[i], avg[i],
grade[i],rank[i]);
}
return top;
}
static int search() {
out.println("---- 검색기능 --");
if (top == 0) {
out.println("저장 된 데이터 내용이 없습니다.");
}
out.print("성명입력: ");
String searchName = scan.next();
out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "번호", "성명", "국어", "영어", "수학", "총점", "평균", "학점", "등수");
boolean flag = false;
for (int i = 0; i < top; i++) {
if (searchName.equals(name[i])) {
out.printf("%d\t%s\t%d\t%d\t%d\t%d\t%.1f\t%c\t%d\n", i, name[i],kor[i], eng[i], mat[i], total[i],
avg[i],grade[i], rank[i]);
flag= true;
}
}
if (!flag) {
out.println("검색 내용이 없습니다!");
}
return top;
}
public static void modify() {
out.println("---- 수정기능 --");
out.print("수정 할 학생의 번호 입력: ");
int no =scan.nextInt();
out.println("no=>" + no + ",top=>" + top);
while (no < 0 || no >= top) {
out.println("범위를 벗어났습니다!");
out.print("번호 다시 입력: ");
no = scan.nextInt();
}
out.print("성명입력: ");
name[no] = scan.next();
do {
out.print("국어점수: ");
kor[no] =scan.nextInt();
} while (kor[no] < 0 || kor[no] > 100);
do {
out.print("영어점수: ");
eng[no] =scan.nextInt();
} while (eng[no] < 0 || eng[no] > 100);
do {
out.print("수학점수: ");
mat[no] =scan.nextInt();
} while (mat[no] < 0 || mat[no] > 100);
total[no] = kor[no] + eng[no] + mat[no];
avg[no] = total[no] / 3.0;
switch ((int) avg[no] / 10) {
case 10:
case 9:
grade[no] = 'A';
break;
case 8:
grade[no] = 'B';
break;
case 7:
grade[no] = 'C';
break;
case 6:
grade[no] = 'D';
break;
default:
grade[no] = 'F';
}
for (int i = 0; i <= top; i++) {
rank[i] = 1;
for (int j = 0; j <= top; j++) {
if (total[i] < total[j]) {
rank[i]++;
}
}
}
}
static int delete() {
out.println("---- 삭제기능 --");
if (top == 0) {
out.println("삭제 할 내용이 없습니다!");
}
out.print("삭제 할 번호 입력: ");
int no = scan.nextInt();
while (no < 0 || no >= top) {
out.print("삭제 할 번호 다시 입력: ");
no =scan.nextInt();
}
// no 첨자를 기준으로 한칸씩 앞으로 땡겨주기
for (int i = no; i < top - 1; i++) {
name[i] = name[i + 1];
kor[i] = kor[i + 1];
eng[i] = eng[i + 1];
mat[i] = mat[i + 1];
total[i] = total[i + 1];
avg[i] = avg[i + 1];
grade[i] = grade[i + 1];
rank[i] = rank[i + 1];
}
top--;
return no;
}
public static void end() {
out.println("---- 종료기능 --");
}
public static void main(String[] args) {
int no = 0;
while (true) {
// 메뉴 출력
out.println("-------------성적 출력 프로그램 ------------");
for (int i = 0; i < menuItems.length; i++) {
out.printf("%s(%d)", menuItems[i], i + 1);
}
System.out.print("\n선택: ");
no = scan.nextInt();
switch (no) {
case 1:
input();
break;
case 2:
output();
break;
case 3:
search();
break;
case 4:
modify();
break;
case 5:
delete();
break;
case 6:
end();
System.exit(0);
break;
default:
out.println("잘못 입력 하셨습니다!");
}
System.out.println();
}
}
}
'JAVA > 조건문' 카테고리의 다른 글
날짜 계산기 (0) | 2020.08.08 |
---|---|
조건문, 스무고개 만들기 (0) | 2020.08.08 |
Comments