메뉴구성
1. 학생추가 - 학생을 입력하면 추가한다.
2. 전체목록출력 - 학생부 모든 학생을 출력한다.
3. 번호검색 - 번호를 입력하면 해당 번호의 학생을 출력한다.
4. 이름검색 - 단어를 입력하면 해당 단어가 포함된 학생을 전부 출력한다.
5. 1등출력 - 점수가 가장높은 학생을 출력한다.(여러명일 경우 전부 출력)
6. 등급검색 - 등급을 입력하면 해당 등급의 학생을 전부 출력한다.
7. 재시험 - 전체 학생은 재시험을 보면 학생의 점수~100점으로 랜덤하게 변경된다.
0. 프로그램 종료 - 프로그램을 종료한다.
import java.util.Random;
import java.util.Scanner;
class Student { // Student class 생성
int num;
String name;
int score;
char grade; // 멤버변수
Student(int num,String name) {
this(num,name,0);
}
Student(int num,String name,int score) {
this.num=num;
this.name=name;
this.score=score;
this.setGrade();
}
void printInfo() {
System.out.println(this.num+"번 "+this.name+" "+this.score+"점 "+this.grade+"등급");
}
// 학생 1명이 재시험을 봄 ==> 메서드
// 60 -> 60~100 랜덤 점수로 변경됨 : 경계값 검사
void test() {
Random random=new Random();
this.score=random.nextInt(101-this.score)+this.score;
this.setGrade();
}
void setGrade() {
this.grade='C';
if(this.score>=80) {
this.grade='A';
}
else if(this.score>=60) {
this.grade='B';
}
}
}
public class Test01 {
public static boolean isEmpty(int cnt) {
if(cnt<=0) {
System.out.println("데이터가 없습니다!");
return true;
}
return false;
}
public static boolean isFull(int cnt,Student[] datas) {
if(cnt>=datas.length) {
System.out.println("데이터가 가득찼습니다!");
return true;
}
return false;
}
public static int firstScore(Student[] datas,int cnt) {
int pivot=datas[0].score;
for(int i=1;i<cnt;i++ ) {
if(pivot < datas[i].score) {
pivot=datas[i].score;
}
}
return pivot;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int PK=1001; // 시스템에서 부여하는 PK값
int cnt=0; // 현재 배열에 저장된 데이터의 개수
Student[] datas=new Student[3];
datas[0]=new Student(PK++,"티모",50);
cnt++;
while(true) {
System.out.println("=== 메 뉴 ===");
System.out.println("1. 학생추가");
System.out.println("2. 전체목록출력");
System.out.println("3. 번호검색");
System.out.println("4. 이름검색");
System.out.println("5. 1등출력");
System.out.println("6. 등급검색");
System.out.println("7. 재시험");
System.out.println("0. 프로그램 종료");
System.out.println("============");
System.out.print("메뉴 입력 >> ");
int menu=sc.nextInt();
if(menu==0) {
break;
}
else if(menu==1) { // 학생추가
if(isFull(cnt,datas)) {
continue;
}
String name;
int score;
while(true) {
System.out.print("이름 입력 >> ");
name=sc.next();
System.out.print("정말로? (Y/N) >> ");
String ans=sc.next();
if(ans.equals("Y")) {
break;
}
}
while(true) {
System.out.print("성적 입력 >> ");
score=sc.nextInt();
if(0<=score && score<=100) {
break;
}
}
datas[cnt++]=new Student(PK++,name,score);
}
else if(menu==2) { // 전체목록출력
if(isEmpty(cnt)) {
continue;
}
System.out.println("=================");
for(int i=0;i<cnt;i++) {
// datas == 배열 == 학생부
// datas[i] == 배열의 요소 == 학생
// datas[i].num == 학생.번호 == 학생의번호
datas[i].printInfo();
}
System.out.println("=================");
}
else if(menu==3) { // 번호 검색
if(isEmpty(cnt) ) { // 데이터있나? 체크
continue;
}
// 번호를 사용자에게 입력받아서
int num;
while(true) {
System.out.print("번호 입력 >> ");
num=sc.nextInt();
if(1001<=num && num<2000) {
break;
}
}
boolean flag=false;
for(int i=0;i<cnt;i++) {
if(datas[i].num==num) {
// 현재 살펴보고있는 학생.번호 == 사용자가 입력한 번호
flag=true;
datas[i].printInfo();
}
}
if(!flag) {
System.out.println("검색결과가 없습니다...");
}
// 해당번호의 학생 출력
}
else if(menu==4) { // 이름 검색
System.out.print("검색어 입력 >> ");
String serchContent=sc.next(); // 이름을 검색했을때
// 검색어 : searchContent,searchKeyword,sk,sc
// 유효성 검사 x
// 학생부에 저장되어있는 학생의 이름안에 검색어가 있어?
boolean flag=false;
System.out.println("==============");
for(int i=0;i<cnt;i++) {
if(datas[i].name.contains(serchContent)) { // 입력값에 이름이 포함되어있다면
datas[i].printInfo(); // 해당값 모두 출력!
flag=true;
}
}
if(!flag) { // 혹시 없을경우 알려주기
System.out.println("검색결과가 없습니다...");
}
}
else if(menu==5) { // 1등 출력
if(isEmpty(cnt)) {
continue;
}
// 1등의 점수
// : 함수
int score=firstScore(datas,cnt);
for(int i=0;i<cnt;i++) {
if(score==datas[i].score) {
datas[i].printInfo();
}
}
// 해당 점수를 가지는 학생을 모두 출력
// : 1명은 메서드 .printInfo()
// : N명은 함수
}
else if(menu==6) { // 등급검색
if(isEmpty(cnt)) {
continue;
}
char searchGrade;
while(true) { // 유효성 검사
System.out.println("A,B,C 중 등급 입력 >> "); // 등급을 입력하고
searchGrade=sc.next().charAt(0);
if(searchGrade=='A' || searchGrade=='B' || searchGrade=='C') { // A,B,C 가맞다면~~
break;
}
System.out.println("A,B,C중에서만 입력해주세용"); // A,B,C 입력안했을때
}
boolean flag=false;
for (int i = 0; i < cnt; i++) {
if (datas[i].grade == searchGrade) { // 입력한 등급과 같다면
datas[i].printInfo(); // 해당 등급 모두출력
flag=true;
}
}
if(!flag) { // 입력한 등급과 같은 학생이 없을경우
System.out.println("해당등급학생이 없습니다.");
}
}
else if(menu==7) { // 재시험
if(isEmpty(cnt)) {
continue;
}
// 전체학생들이 재시험을 봅니다.
for(int i=0;i<cnt;i++) {
datas[i].test();
}
}
else {
System.out.println("잘못입력하셨습니다.");
continue;
}
}
}
}
2024.07.03
'JAVA > JAVA' 카테고리의 다른 글
| [JAVA] 03. 포켓몬 게임 프로그램 작성 (2) | 2024.07.11 |
|---|---|
| [JAVA] 02-1 상속(2) (0) | 2024.07.11 |
| [JAVA] 02. 상속 (0) | 2024.07.04 |
| [JAVA] 01-1. 멤버변수, 생성자, 메서드 (0) | 2024.07.03 |
| [JAVA] 01. 객체지향 (0) | 2024.07.02 |