이름, 주소, 전화번호 속성을 갖는 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 |