참고 코드
학점 출력기(성적표) - 클래스와 메인 메소드 배열 (4)

인터페이스와 상속을 사용한 상품출력와 개인정보 출력 프로그램

조건

[문제] 주어진 클래스와 인터페이스를 정의한 다음 성적을 입력받아 처리한 다음 학번에 exit 를 입력 받으면 입력을 끝낸다.
그리고 개인정보를 입력받는다.
개인 정보 중 hakbun에 exit 를 입력받으면 입력을 끝낸다.
입력이 끝나면 성적을 먼저 출력하고 개인정보를 출력한다.

처리 조건

성적 클래스는 이전에 작성했던 코드를 바탕으로 한다.
학점 출력기(성적표) - 클래스와 메인 메소드 배열 (4)

  1. 성적과 개인정보는 최대 입력 가능한 데이터는 100개로 한다.
  2. 성적과 대인정보는 출력할 때 다형성을 이용하도록 코드를 작성한다.

구성도

입력 형식

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
###성적 입력 ###

학번 입력 ⇒ 
이름 입력 ⇒
국어 입력 ⇒
영어 입력 ⇒
수학 입력 ⇒

학번입력 ⇒ exit

###개인정보 입력 ###

학변 입력 ⇒
이름 입력 ⇒
전화번호 입력 ⇒

학번 입력 ⇒ exit

출력 형식

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
### 성적 입력 ###
학번 입력 => 
a00
이름 입력 => 
첫번째
국어 입력 => 
80
영어 입력 => 
90
수학 입력 => 
89

학번 입력 => 
a01
이름 입력 => 
두번째
국어 입력 => 
90
영어 입력 => 
80
수학 입력 => 
90

학번 입력 => 
a02
이름 입력 => 
세번째
국어 입력 => 
70
영어 입력 => 
77
수학 입력 => 
90

학번 입력 => 
exit

### 개인정보 입력 ###
학번 입력 => 
a00
이름 입력 => 
첫번째
전화번호 입력 => 
010-1234-5678
주소 입력 => 
서울

학번 입력 => 
a01
이름 입력 => 
두번째
전화번호 입력 => 
111-2222-3333
주소 입력 => 
경기

학번 입력 => 
a02
이름 입력 => 
세번째
전화번호 입력 => 
777-7777-7777
주소 입력 => 
인천

학번 입력 => 
exit

=======================================================
학번   이름      국어  영어  수학  총점  평균     등급
=======================================================
 a00   첫번째    80    90    89   259   86.00    우
 a01   두번째    90    80    90   260   86.00    우
 a02   세번째    70    77    90   237   79.00    미
=======================================================

           *** 개인정보 ***
======================================
학번   이름     전화번호         주소
======================================
 a00   첫번째   010-1234-5678    서울  
 a01   두번째   111-2222-3333    경기  
 a02   세번째   777-7777-7777    인천  
======================================

코드

  • Person.java
    1
    2
    3
    4
    5
    6
    7
    
      public class Person {
      String hakbun;
      String irum;
        
          Person()
          { }
      }
    
  • Personable.java
    1
    2
    3
    4
    
      public interface Personable {
          boolean input();
          void output();
      }
    
  • Sungjuk.java
    input(), output() 은 상속 방아야 하기 때문에 반드시 public 여야 한다.
    동일한 패키지 내에서만 하는 process() 는 default이다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    
      import java.util.Scanner;
    
      public class Sungjuk extends Person implements Personable {
        
      int kor;
      int eng;
      int math;
      int tot = 0;
      double avg = 0;
      String grade;
        
      Sungjuk() {
      //super();
      }
        
      @Override
      public boolean input(){  //앞에 public abstruct 반드시 붙음
          Scanner scan = new Scanner(System.in);
        
          System.out.println("학번 입력 => ");
          this.hakbun = scan.next();
    
          if(hakbun.toLowerCase().equals("exit"))  //toLowerCase() : 소문자로 변환
              return true;
            
          System.out.println("이름 입력 => ");
          this.irum = scan.next();
          System.out.println("국어 입력 => ");
          this.kor = scan.nextInt();
          System.out.println("영어 입력 => ");
          this.eng = scan.nextInt();
          System.out.println("수학 입력 => ");
          this.math = scan.nextInt();
            
          return false;
      }
    
      @Override
      public void output() {
          System.out.printf("%4s   %3s   %3d   %3d   %3d   %3d   %5.2f   %2s\n",
              hakbun, irum, kor, eng, math, tot, avg, grade);
      }
        
      void process() {
          tot += kor + eng + math;
          avg = tot / 3;
        
          switch ((int)avg / 10) {
              case 10:
              case 9:
              grade = "수";
              break;
                
              case 8: 
              grade = "우";
              break;
              case 7:
              grade = "미";
              break;
              case 6:
              grade = "양";
              break;
              default: 
              grade = "가";
              break;
          }
      }
    
      }
    
  • PersonInfo.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
      import java.util.Scanner;
    
      public class PersonInfo extends Person implements Personable{
          String phone;
          String addr;
            
          PersonInfo() {
          //super();
          }
            
          @Override
          public boolean input(){
          Scanner scan = new Scanner(System.in);
            
          System.out.println("학번 입력 => ");
          this.hakbun = scan.next();
            
          if(hakbun.toLowerCase().equals("exit"))
              return true;
            
          System.out.println("이름 입력 => ");
          this.irum = scan.next();
          System.out.println("전화번호 입력 => ");
          this.phone = scan.next();
          System.out.println("주소 입력 => ");
          this.addr = scan.next();
            
          return false;
          }
            
          @Override
          public void output() {
              System.out.printf("%4s   %3s   %13s   %3s  \n",
                  hakbun, irum, phone, addr);
          }
      }
    
  • 실행 클래스 ExampleSungjuk.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
      public class ExampleSungjuk {
    
      final static int MAX = 100;
        
          public static void main(String[] args) {
              Sungjuk obj1[] = new Sungjuk[MAX];
              PersonInfo obj2[] = new PersonInfo[MAX];
              int i, obj1_cnt=0, obj2_cnt=0;
                
              System.out.println("### 성적 입력 ###");
              for (i=0; i<MAX; i++)
              {
                  obj1[i] = new Sungjuk();
                  if (obj1[i].input())
                      break;
                    
                  obj1[i].process();
                  obj1_cnt++;
                  System.out.println();
              }
                
              System.out.println("\n### 개인정보 입력 ###");
              for (i=0; i<MAX; i++)
              {
                  obj2[i] = new PersonInfo();
                  if (obj2[i].input())
                      break;
    
                  obj2_cnt++;
                  System.out.println();
              }
                
              System.out.println();
                
              System.out.println("==========================================");
              System.out.println("학번  이름  국어  영어  수학  총점  평균  등급");
              System.out.println("==========================================");
              printData(obj1, obj1_cnt);
              System.out.println("==========================================");
                
              System.out.println("\n           *** 개인정보 ***");
              System.out.println("====================================");
              System.out.println("학번  이름  전화번호  주소");
              System.out.println("====================================");
              printData(obj2, obj2_cnt);
              System.out.println("====================================");
          }
            
          static void printData(Personable obj[], int cnt)
          {
              for (int i=0; i<cnt; i++)
              {
                  obj[i].output();  // output()메서드에 대한 다형성 구현
              }
          }
    
      }
    

🌞 정보 : 공부 기록용 블로그입니다. 오타나 내용 오류가 있을 경우 알려주시면 감사하겠습니다.

태그:

카테고리:

업데이트:

댓글남기기