문제 1) 전화번호 관리 프로그램
이름, 주소, 전화번호를 멤버로 갖는 Phone클래스를 만들고 Map을 이용하여 전화번호 정보를 관리하는 프로그램을 작성하시오.
- Map의 구조 : key값은 입력한 '이름'으로 사용하고 value값은 'Phone클래스의 인스턴스'로 한다.
예) HashMap<String, Phone> 변수명;
- 아래의 메뉴를 구현한다.
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
-----------------------------
- 삭제, 검색 기능은 '이름'을 입력 받아 처리한다.
실행예시)
-----------------------------
다음 메뉴를 선택하세요.
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
-----------------------------
번호입력 >> 1
새롭게 등록할 전화번호 정보를 입력하세요.
이 름 >> 홍길동
전화번호 >> 010-1111-1111
주 소 >> 대전시 중구 오류동
'홍길동'씨의 전화번호 정보가 등록되었습니다.
-----------------------------
다음 메뉴를 선택하세요.
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
-----------------------------
번호입력 >> 1
새롭게 등록할 전화번호 정보를 입력하세요.
이 름 >> 홍길동
'홍길동'은 이미 등록된 사람입니다.
-----------------------------
다음 메뉴를 선택하세요.
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
-----------------------------
번호입력 >> 5
----------------------------------
번호 이 름 전화번호 주 소
1 홍길동 010-1111-1111 대전시 중구 오류동
----------------------------------
출력 완료...
-----------------------------
다음 메뉴를 선택하세요.
1. 전화번호 등록
2. 전화번호 수정
3. 전화번호 삭제
4. 전화번호 검색
5. 전화번호 전체 출력
0. 프로그램 종료
-----------------------------
번호입력 >> 0
프로그램을 종료합니다.
A. Phone 클래스
// 이름, 주소, 전화번호를 멤버로 갖는 Phone 클래스 생성
class Phone {
private String name;
private String tel;
private String addr;
public Phone02() { }
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;
}
} // Phone 클래스
B. PhoneBook 클래스
public class PhoneBook {
private HashMap<String, Phone> phoneBookMap;
private Scanner scan;
public PhoneBook() {
phoneBookMap = new HashMap<>();
scan = new Scanner(System.in);
} // PhoneBook()
public static void main(String[] args) {
new PhoneBook().phoneBootStart();
} // main
public void phoneBootStart() {
System.out.println("******************************************");
System.out.println(" 전 화 번 호 관 리 프 로 그 램 ");
System.out.println("******************************************");
System.out.println();
while (true) {
int choice = displayMenu();
switch (choice) {
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("프로그램을 종료합니다.");
break;
default:
System.out.println("번호를 잘 못 입력했습니다. 다시 선택하세요.");
break;
}
}
} // phoneBootStart()
// 전화번호 정보를 검색하는 메서드
private void search() {
System.out.println();
System.out.println("검색할 전화번호 정보를 입력하세요.");
System.out.print("이 름 >> ");
String name = scan.next();
if (!phoneBookMap.containsKey(name)) {
System.out.println(name + "씨의 전화번호 정보가 없습니다.");
return;
}
Phone02 p = phoneBookMap.get(name);
System.out.println(name + "씨의 전화번호 정보");
System.out.println("-------------------------------------");
System.out.println("이 름 : " + p.getName());
System.out.println("전 화 : " + p.getTel());
System.out.println("주 소 : " + p.getAddr());
System.out.println("-------------------------------------");
System.out.println();
} // search()
// 전화번호 정보를 삭제하는 메서드
private void delete() {
System.out.println();
System.err.println("삭제할 전화번호 정보를 입력하세요.");
System.out.print("이 름 >> ");
String name = scan.next();
// 삭제할 대상이 있는지 검산
if (!phoneBookMap.containsKey(name)) {
System.out.println(name + "시는 전화번호 정보가 등록되지 않은 사람입니다.");
return;
}
phoneBookMap.remove(name);
System.out.println(name + "씨의 전화번호 정보가 삭제되었습니다.");
} //delete()
// 전화번호 정보를 수정하는 메서도
private void update() {
System.out.println();
System.out.println("수정할 전화번호 정보를 입력하세요.");
System.out.print("이 름 >> ");
String name = scan.next();
// 수정할 대상이 등록되어 있지 않으면 수정 작업을 못한다.
if (!phoneBookMap.containsKey(name)) {
System.out.println(name + "시는 전화번호 정보가 등록되지 않은 사람입니다.");
return;
}
System.out.print("새로운 전화번호 >> ");
String newTel = scan.next();
scan.nextLine();
System.out.print("새로운 주소 >> ");
String newAddr = scan.nextLine();
// 같은 key값에 새로운 전화번호 정보를 저장한다. ==> 수정작업
phoneBookMap.put(name, new Phone(name, newTel, newAddr));
System.out.println(name + "씨의 전화번호 정보를 변경했습니다.");
} // update()
// 전화번호 정보 전체를 출력하는 메서드
private void displayAll() {
System.out.println();
System.out.println("-------------------------------------------------");
System.out.println("번호\t이 름\t전화번호\t주소");
System.out.println("-------------------------------------------------");
Set<String> phoneKeySet = phoneBookMap.keySet();
if (phoneKeySet.size() == 0) {
System.out.println("등록된 전화번호 정보가 하나도 없습니다.");
} else {
int num = 0;
for (String name : phoneKeySet) { // Set 개수만큼 반복
num++;
Phone02 p = phoneBookMap.get(name); // value값(Phonoe 객체) 구하기
System.out.println(num + "\t" + p.getName() + "\t" + p.getTel() + "\t" + p.getAddr());
}
}
System.out.println("-------------------------------------------------");
System.out.println("출력 끝");
} // displayAll()
// 전화번호 정보를 등록하는 메서드
private void insert() {
System.out.println();
System.out.println("새롭게 등록할 전화번호 정보를 입력하세요.");
System.out.print("이 름 >> ");
String name = scan.next();
// 이미 등록된 사람인지 여부 검사
if (phoneBookMap.containsKey(name)) {
System.out.println(name + "씨는 이미 등록된 사람입니다.");
return;
}
System.out.print("전화번호 >> ");
String tel = scan.next();
scan.nextLine(); // 입력 버퍼 비우기
System.out.print("주 소 >> ");
String addr = scan.nextLine();
// Phone p = new Phone(name, tel, addr);
// phoneBookMap.put(name, p);
phoneBookMap.put(name, new Phone(name, tel, addr));
System.out.println(name + "씨 전화번호 정보 등록 완료!!!");
} // insert()
// 메뉴를 출력하고 사용자가 입력한 작업 번호를 반환하는 메서드
private int 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.println("------------------------------------");
System.out.print("번호입력 >> ");
return scan.nextInt();
} // displayMenu()
} // PhoneBook
문제 2) 호텔 객실 관리 프로그램
조건 1) 호텔 객식을 나타내는 Room클래스는 방번호(int), 방종류, 투숙객이름 필드로 구성되어 있고 방번호와 방종류는 다음과 같다.
- 201~209 : 싱글룸
- 301~309 : 더블룸
- 401~409 : 스위트룸
조건 2) 전체 객실 관리는 Map을 이용한다. (Map의 key값은 방번호로 하고 value값은 Room의 인스턴스로 한다.)
- 생성자에서는 방번호와 방종류를 초기화한다.
실행예시)
*********************************************
호텔문을 열었습니다. 어서오십시요.
*********************************************
-----------------------------------------------------------
어떤 업무를 하시겠습니까?
1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료
-----------------------------------------------------------
선택>> 1 <--- 입력
----------------------------------------------
체크인 작업
----------------------------------------------
* 201~209 : 싱글룸
* 301~309 : 더블룸
* 401~409 : 스위트룸
----------------------------------------------
방 번호 입력 >> 101 <--- 입력
101호 객실은 존재하지 않습니다.
-----------------------------------------------------------
어떤 업무를 하시겠습니까?
1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료
-----------------------------------------------------------
선택>> 1 <--- 입력
----------------------------------------------
체크인 작업
----------------------------------------------
* 201~209 : 싱글룸
* 301~309 : 더블룸
* 401~409 : 스위트룸
----------------------------------------------
방 번호 입력 >> 201 <--- 입력
누구를 체크인 하시겠습니까?
이름 입력 >> 홍길동
체크인이 완료되었습니다.
-----------------------------------------------------------
어떤 업무를 하시겠습니까?
1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료
-----------------------------------------------------------
선택>> 1 <--- 입력
----------------------------------------------
체크인 작업
----------------------------------------------
* 201~209 : 싱글룸
* 301~309 : 더블룸
* 401~409 : 스위트룸
----------------------------------------------
방 번호 입력 >> 201 <--- 입력
201호 객실은 이미 손님이 있습니다.
-----------------------------------------------------------
어떤 업무를 하시겠습니까?
1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료
-----------------------------------------------------------
선택>> 3 <--- 입력
----------------------------------------------
현재 객실 상태
----------------------------------------------
방 번호 방 종류 투숙객 이름
----------------------------------------------
201 싱글룸 홍길동
202 싱글룸 -
203 싱글룸 -
204 싱글룸 -
205 싱글룸 -
206 싱글룸 -
207 싱글룸 -
208 싱글룸 -
209 싱글룸 -
301 더블룸 -
302 더블룸 -
303 더블룸 -
304 더블룸 -
305 더블룸 -
306 더블룸 -
307 더블룸 -
308 더블룸 -
309 더블룸 -
401 스위트룸 -
402 스위트룸 -
403 스위트룸 -
404 스위트룸 -
405 스위트룸 -
406 스위트룸 -
407 스위트룸 -
408 스위트룸 -
409 스위트룸 -
----------------------------------------------
-----------------------------------------------------------
어떤 업무를 하시겠습니까?
1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료
-----------------------------------------------------------
선택>> 2 <--- 입력
----------------------------------------------
체크아웃 작업
----------------------------------------------
체크아웃 할 방 번호를 입력하세요.
방번호 입력 >> 101 <--- 입력
101호 객실은 존재하지 않습니다.
-----------------------------------------------------------
어떤 업무를 하시겠습니까?
1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료
-----------------------------------------------------------
선택>> 2 <--- 입력
----------------------------------------------
체크아웃 작업
----------------------------------------------
체크아웃 할 방 번호를 입력하세요.
방번호 입력 >> 303 <--- 입력
303호 객실에는 체크인 한 사람이 없습니다.
-----------------------------------------------------------
어떤 업무를 하시겠습니까?
1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료
-----------------------------------------------------------
선택>> 2 <--- 입력
----------------------------------------------
체크아웃 작업
----------------------------------------------
체크아웃 할 방 번호를 입력하세요.
방번호 입력 >> 201 <--- 입력
201호 객실의 홍길동님 체크아웃을 완료하였습니다.
-- null로 비우기
-----------------------------------------------------------
어떤 업무를 하시겠습니까?
1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료
-----------------------------------------------------------
선택>> 3 <--- 입력
----------------------------------------------
현재 객실 상태
----------------------------------------------
방 번호 방 종류 투숙객 이름
----------------------------------------------
201 싱글룸 -
202 싱글룸 -
203 싱글룸 -
204 싱글룸 -
205 싱글룸 -
206 싱글룸 -
207 싱글룸 -
208 싱글룸 -
209 싱글룸 -
301 더블룸 -
302 더블룸 -
303 더블룸 -
304 더블룸 -
305 더블룸 -
306 더블룸 -
307 더블룸 -
308 더블룸 -
309 더블룸 -
401 스위트룸 -
402 스위트룸 -
403 스위트룸 -
404 스위트룸 -
405 스위트룸 -
406 스위트룸 -
407 스위트룸 -
408 스위트룸 -
409 스위트룸 -
----------------------------------------------
-----------------------------------------------------------
어떤 업무를 하시겠습니까?
1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료
-----------------------------------------------------------
선택>> 4 <--- 입력
*********************************************
호텔문을 닫았습니다.
*********************************************
class Room {
private int num; // 방번호
private String type; // 방종류
private String name; // 투숙객 이름
// 생성자
public Room02() {
super();
}
public Room02(int num, String type) {
super();
this.num = num;
this.type = type;
}
// getter, setter
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Room02 [num=" + num + ", type=" + type + ", name=" + name + "]";
}
} // Room 클래스
public class HotelTest02 {
private Map<Integer, Room> hotelMap;
private Scanner scan;
// 생성자
public HotelTest() {
hotelMap = new HashMap<>();
scan = new Scanner(System.in);
// 객실 초기화하기
for (int i = 2; i <= 4; i++) {
String roomType = null;
switch (i) {
case 2 : roomType = "싱글룸"; break;
case 3 : roomType = "더블룸"; break;
case 4 : roomType = "스위트룸"; break;
}
for (int j = 1; j <= 9; j++) {
int roomNum = i * 100 + j;
hotelMap.put(roomNum, new Room(roomNum, roomType));
}
}
} // 생성자 끝
public static void main(String[] args) {
new HotelTest().hotelStart();
} // mian문
public void hotelStart() {
System.out.println();
System.out.println("*********************************************");
System.out.println("\t호텔문을 열었습니다. 어서오십시요.");
System.out.println("*********************************************");
System.out.println();
while (true) {
int choice = displayMenu();
switch (choice) {
case 1: checkIn(); // 체크인
break;
case 2: checkOut(); // 체크아웃
break;
case 3: printRoomState(); // 객실 상채
break;
case 4:
System.out.println("*********************************************");
System.out.println("\t호텔문을 닫았습니다.");
System.out.println("*********************************************");
System.out.println();
return;
default: System.out.println("작업 번호를 잘못 입력했습니다. 다시 입력하세요.");
}
} // while문
} // hotelStart()
// 객실 상태 출력하기
private void printRoomState() {
// 방번호를 오름차순으로 출력하기 위해서 방번호(Map의 key값)만 List에 넣어서 정렬한다.
ArrayList<Integer> roomNumList = new ArrayList<>(hotelMap.keySet());
Collections.sort(roomNumList); // 정렬
System.out.println();
System.out.println("------------------------------------------------------");
System.out.println("현재 객실 상태");
System.out.println("------------------------------------------------------");
System.out.println("방 번호\t방 종류\t투숙객 이름");
System.out.println("------------------------------------------------------");
// List에서 방번호를 하나씩 꺼내와 Map에서 해당 방번호에 짝이되는 Room 객체를 구해서 출력한다.
for (int roomNum : roomNumList) {
Room02 r = hotelMap.get(roomNum);
System.out.print(r.getNum() + "\t");
System.out.print(r.getType() + "\t");
System.out.println(r.getName() == null ? " -" : r.getName());
}
System.out.println("------------------------------------------------------");
} // printRoomState()
// 체크아웃 메서드
private void checkOut() {
System.out.println("------------------------------------------------------");
System.out.println("체크아웃 작업");
System.out.println("------------------------------------------------------");
System.out.println("체크아웃 할 방 번호를 입력하세요.");
System.out.print("방번호 입력 >> ");
int num = scan.nextInt();
// 입력한 방이 존재하는지 여부 검사
if (!hotelMap.containsKey(num)) {
System.out.println(num + "호 객실은 존재하지 않습니다.");
return;
}
// 입력한 방번호 객실에 손님이 없는지 여부 검사
if (hotelMap.get(num).getName() == null) {
System.out.println(num + "호 객실에 체크인 한 손님이 없습니다.");
return;
}
String name = hotelMap.get(num).getName(); // 현재 투숙객 이름 구하기
// 체크아웃 작업은 해당 객실의 투숙객 이름에 null 값을 넣어주면 된다.
hotelMap.get(num).setName(null);
System.out.println(num + "호 객실의 " + name + "님이 체크아웃을 완료했습니다.");
} // checkOut()
// 체크인 메서드
private void checkIn() {
System.out.println();
System.out.println("------------------------------------------------------");
System.out.println("체크인 작업");
System.out.println("------------------------------------------------------");
System.out.println("* 201~209 : 싱글룸");
System.out.println("* 301~309 : 더블룸");
System.out.println("* 401~409 : 스위트룸");
System.out.println("------------------------------------------------------");
System.out.print("방 번호 입력 >> ");
int num = scan.nextInt();
// 입력한 방이 존재하는지 여부 검사
// (Map의 key값이 방번호이므로 해당 방번호가 key값에 존재하는지 여부 검사)
if (!hotelMap.containsKey(num)) {
System.out.println(num + "호 객실은 존재하지 않습니다.");
return;
}
// 입력한 방번호 객실에 손님이 있는지 여부 검사
if (hotelMap.get(num).getName() != null) {
System.out.println(num + "호 객실에 이미 손님이 있습니다.");
return;
}
System.out.println();
System.out.println("누구를 체크인 하시겠습니까?");
System.out.print("이름 입력 >> ");
String name = scan.next();
// 입력받은 투숙객 이름을 해당 객실의 투숙객 명단에 넣는다.
hotelMap.get(num).setName(name);
System.out.println(num +"호 객실에 " + name + "씨의 체크인이 완료되었습니다.");
} // checkIn()
// 메뉴를 출력하고 사용자가 입력한 작업 번호를 번환하는 메서드
private int displayMenu() {
System.out.println();
System.out.println("------------------------------------------------------");
System.out.println("어떤 업무를 하시겠습니까?");
System.out.println("1. 체크인 2. 체크아웃 3. 객실상태 4. 업무종료");
System.out.println("------------------------------------------------------");
System.out.print("선택 >> ");
return scan.nextInt();
} // displayMenu()
}
'Java' 카테고리의 다른 글
[고급자바] Arg, enum(열거형), generic(제네릭) (0) | 2023.03.04 |
---|---|
[고급자바] Collection(Map) (0) | 2023.03.03 |
[고급자바] 문제(Student 클래스, 숫자야구게임, 로또 판매 프로그램) (0) | 2023.03.03 |
[고급자바] equals(), hashcode() (0) | 2023.03.03 |
[고급자바] 정렬(Comparator, Comparable) (0) | 2023.03.03 |