본문 바로가기
JAVA/JAVA

[JAVA] 01-2. class를 활용하여 학생부 프로그램 만들기

by ssunooo 2024. 7. 3.

 

메뉴구성

 

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 = 0; i < cnti++) {
                    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