본문으로 바로가기

12_전화번호부관리

category HighJava 2020. 9. 17. 13:52

이름, 주소, 전화번호 속성을 갖는 Phone클래스를 만들고, 이 Phone클래스를 이용하여 

전화번호 정보를 관리하는 프로그램을 완성하시오.

이 프로그램에는 전화번호를 등록, 수정, 삭제, 검색, 전체출력하는 기능이 있다.   


전체의 전화번호 정보는 Map을 이용하여 관리한다.

(key는 '이름'으로 하고 value는 'Phone클래스의 인스턴스'로 한다.)



실행예시)

===============================================

   전화번호 관리 프로그램

===============================================


  메뉴를 선택하세요.

  1. 전화번호 등록

  2. 전화번호 수정

  3. 전화번호 삭제

  4. 전화번호 검색

  5. 전화번호 전체 출력

  0. 프로그램 종료

  번호입력 >> 1  <-- 직접 입력

  

  새롭게 등록할 전화번호 정보를 입력하세요.

  이름 >> 홍길동  <-- 직접 입력

  전화번호 >> 010-1234-5678  <-- 직접 입력

  주소 >> 대전시 중구 대흥동 111  <-- 직접 입력

  

  메뉴를 선택하세요.

  1. 전화번호 등록

  2. 전화번호 수정

  3. 전화번호 삭제

  4. 전화번호 검색

  5. 전화번호 전체 출력

  0. 프로그램 종료

  번호입력 >> 5  <-- 직접 입력

  

  =======================================

  번호   이름       전화번호         주소

  =======================================

   1    홍길동   010-1234-5678    대전시

   ~~~~~

   

  =======================================

  출력완료...

  

  메뉴를 선택하세요.

  1. 전화번호 등록

  2. 전화번호 수정

  3. 전화번호 삭제

  4. 전화번호 검색

  5. 전화번호 전체 출력

  0. 프로그램 종료

  번호입력 >> 0  <-- 직접 입력

  

  프로그램을 종료합니다...

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
package kr.or.ddit.basic;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
 
 
public class T11_PhoneBookTest {
    private Scanner scan;
    private Map<String, Phone> phoneBookMap;
 
    public T11_PhoneBookTest() {
        scan = new Scanner(System.in);
        phoneBookMap = new HashMap<>();
    }
 
    // 메뉴를 출력하는 메서드
    public void displayMenu() {
        System.out.println();
        System.out.println("메뉴를 선택하세요.");
        System.out.println(" 1. 전화번호 등록");
        System.out.println(" 2. 전화번호 수정");
        System.out.println(" 3. 전화번호 삭제");
        System.out.println(" 4. 전화번호 검색");
        System.out.println(" 5. 전화번호 전체 출력");
        System.out.println(" 0. 프로그램 종료");
        System.out.print(" 번호입력 >> ");
    }
 
    // 프로그램을 시작하는 메서드
    public void phoneBookStart() {
        System.out.println("===============================================");
        System.out.println("   전화번호 관리 프로그램(파일로 저장되지 않음)");
        System.out.println("===============================================");
 
        while (true) {
 
            displayMenu(); // 메뉴 출력
 
            int menuNum = scan.nextInt(); // 메뉴 번호 입력
 
            switch (menuNum) {
            case 1:
                insert(); // 등록
                break;
            case 2:
                update(); // 수정
                break;
            case 3:
                delete(); // 삭제
                break;
            case 4:
                search(); // 검색
                break;
            case 5:
                displayAll(); // 전체 출력
                break;
            case 0:
                System.out.println("프로그램을 종료합니다...");
                return;
            default:
                System.out.println("잘못 입력했습니다. 다시입력하세요.");
            } // switch문
        } // while문
    }
 
    /**
     * 새로운 전화번호 정보를 등록하는 메서드 (이미 등록된 사람은 등록되지 않는다)
     */
    private void insert() {
        System.out.println();
        System.out.println("새롭게 등록할 전화번호 정보를 입력하세요.");
        System.out.print("이름 >>");
        String name = scan.next();
 
        // 이미 등록된 사람인지 검사
        // get()메서드로 값을 가져올 때 가져올 자료가 없으면 null을 반환한다.
        if (phoneBookMap.get(name) != null) {
            System.out.println(name + "님은 이미 등록된 사람입니다.");
            return// 메서드 종료
        }
        System.out.println("전화번호 >>");
        String tel = scan.next();
 
        System.out.println("주소>>");
        scan.nextLine(); // 입력 버퍼에 남아 있는 엔터키 값까지 읽어와 버리는 역할
                            // next()호출 후 nextLine() 호출 시 남아있는 엔터값을 제거하기 위해 호출
        String addr = scan.nextLine(); // 주소에는 공백이 들어가므로 next가 아닌 nextLine을 사용
 
        phoneBookMap.put(name, new Phone(name, tel, addr));
        System.out.println(name + "님 등록 완료");
    }
 
    /**
     * 전화번호 정보를 수정하는 메서드
     */
    private void update() {
        System.out.println();
        System.out.println("수정할 전화번호 정보를 입력하세요.");
        System.out.print("이름 >>");
        String name = scan.next();
 
        // 수정할 자료가 있는지 검사
        if (phoneBookMap.get(name) == null) {
            System.out.println(name + "님은 전화번호 정보가 없습니다.");
            return// 메서드 종료
        }
        System.out.println("전화번호 >>");
        String tel = scan.next();
 
        System.out.println("주소>>");
        scan.nextLine(); // 입력 버퍼에 남아 있는 엔터키 값까지 읽어와 버리는 역할
                            // next()호출 후 nextLine() 호출 시 남아있는 엔터값을 제거하기 위해 호출
        String addr = scan.nextLine(); // 주소에는 공백이 들어가므로 next가 아닌 nextLine을 사용
 
        // Phone p = new Phone(name, tel, addr); // 객체 생성
        // phoneBookMap.put(name, p);
 
        phoneBookMap.put(name, new Phone(name, tel, addr));
 
        System.out.println(name + "님 수정 완료");
 
    }
 
    /**
     * 전화번호 정보를 삭제하는 메서드
     */
    private void delete() {
        System.out.println();
        System.out.println("삭제할 전화번호 정보를 입력하세요.");
        System.out.print("이름 >>");
        String name = scan.next();
 
        // remove(key) => 삭제 성공하면 삭제된 value값을 반환하고, 실패하면 null을 반환함.
        if (phoneBookMap.remove(name) == null) {
            System.out.println(name + "님은 등록된 사람이 아닙니다.");
        } else {
            System.out.println(name + "님 정보를 삭제하였습니다.");
        }
 
    }
 
    /**
     * 이름을 이용한 전화번호 정보를 검색하는 메서드
     */
    private void search() {
        System.out.println();
        System.out.println("검색할 전화번호 정보를 입력하세요.");
        System.out.print("이름 >>");
        String name = scan.next();
        
        Phone p = phoneBookMap.get(name);
        
        if(p==null) {
            System.out.println(name + "님의 전화번호 정보가 없습니다.");
        }else {
            System.out.println(name + "님의 전화번호 정보");
            System.out.println("이      름 :" + p.getName());
            System.out.println("전화번호 :" + p.getTel());
            System.out.println("주      소 :" + p.getAddr());
        }
        System.out.println("검색 작업 완료");
    }
 
    /**
     * 전체 자료를 출력하는 메서드
     */
    private void displayAll() {
        Set<String> keySet = phoneBookMap.keySet();
 
        System.out.println("================================================");
        System.out.println(" 번호\t이름\t전화번호\t\t주소");
        System.out.println("================================================");
 
        if (keySet.size() == 0) {
            System.out.println("등록된 전화번호 정보가 없습니다.");
        } else {
            Iterator<String> it = keySet.iterator();
 
            int cnt = 0;
            while (it.hasNext()) {
                cnt++;
                String name = it.next(); // 키값
                Phone p = phoneBookMap.get(name);
                System.out.println(" " + cnt + "\t" + p.getName() + "\t" + p.getTel() + p.getAddr());
            }
        }
        System.out.println("================================================");
        System.out.println("출력 완료.");
    }
 
    public static void main(String[] args) {
        new T11_PhoneBookTest().phoneBookStart();
    }
}
 
/**
 * 전화번호 정보를 저장하기 위한 VO 클래스
 */
class Phone {
    private String name; // 이름
    private String tel; // 전화번호
    private String addr; // 주소
 
    public Phone(String name, String tel, String addr) {
        super();
        this.name = name;
        this.tel = tel;
        this.addr = addr;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getTel() {
        return tel;
    }
 
    public void setTel(String tel) {
        this.tel = tel;
    }
 
    public String getAddr() {
        return addr;
    }
 
    public void setAddr(String addr) {
        this.addr = addr;
    }
 
    @Override
    public String toString() {
        return "Phone [name=" + name + ", tel=" + tel + ", addr=" + addr + "]";
    }
 
}
 
cs


'HighJava' 카테고리의 다른 글

14_Args_가변형 인수  (0) 2020.09.17
13_Properties  (0) 2020.09.17
11_호텔관리  (0) 2020.09.17
10_Map  (0) 2020.09.17
09_Hash  (0) 2020.09.17