전체 코드
main()
public class Main {
public static void main(String[] args) throws IOException {
// 10*4 좌석, 조회/예약/예약취소/예약 확인/종료
// 각 좌석은 [좌석번호, "", ""], 예약한 경우 [좌석번호, 예약자, 예약자_비밀번호]
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Map<Integer, String[]> map = new HashMap<>();
for(int i=1; i<=40; i++){
map.put(i, new String[]{"", ""});
}
System.out.println("좌석 예약 프로그램을 시작합니다.");
while(true){
System.out.println("원하는 작업을 선택해주세요. (1) 조회 / (2) 예약 / (3) 예약 확인 / (4) 예약 취소 / (0) 프로그램 종료");
String answer = br.readLine();
if(answer.equals("0")) break;
else if(answer.equals("1")){
checkSeats(map);
}
else if(answer.equals("2")){
reserve(map, br);
}
else if(answer.equals("3")){
mySeat(map, br);
}
else if(answer.equals("4")){
cancel(map, br);
}
else System.out.println("올바른 숫자를 입력해주세요.");
}
System.out.println("좌석 예약 프로그램이 종료되었습니다.");
br.close();
}
mySeat() - 예약 확인
private static void mySeat(Map<Integer, String[]> map, BufferedReader br) throws IOException {
while(true){
System.out.print("예약자 성명 : ");
String name = br.readLine();
List<Integer> list = new ArrayList<>();
for(int i=1; i<=map.size(); i++){
if(map.get(i)[0].equals(name)) list.add(i);
}
if(list.isEmpty()) System.out.println("예약하신 좌석이 존재하지 않습니다.");
else {
System.out.println("예약하신 좌석 번호는 " + list + " 번 입니다.");
break;
}
}
}
cancel() - 취소
private static void cancel(Map<Integer, String[]> map, BufferedReader br) throws IOException {
System.out.println("예약을 취소할 좌석 번호를 입력해주세요.");
while(true){
System.out.print("좌석 번호 : ");
int seat = Integer.parseInt(br.readLine());
if(seat < 1 || seat > 40) System.out.println("유효하지 않은 좌석입니다.");
else if(map.get(seat)[0].equals("")) System.out.println("예약되지 않은 좌석입니다.");
else {
System.out.println("예약자 성명과 비밀번호를 입력해주세요.");
while(true){
System.out.print("예약자 성명 : ");
String name = br.readLine();
if(!map.get(seat)[0].equals(name)) System.out.println("예약자 성명이 일치하지 않습니다.");
else {
while(true){
System.out.print("비밀번호 : ");
String pw = br.readLine();
if(!map.get(seat)[1].equals(pw)) System.out.println("비밀번호가 일치하지 않습니다.");
else break;
}
break;
}
}
map.get(seat)[0] = "";
map.get(seat)[1] = "";
System.out.println("좌석 예약이 취소되었습니다.");
break;
}
}
}
reserve() - 예약
private static void reserve(Map<Integer, String[]> map, BufferedReader br) throws IOException {
checkSeats(map);
while(true){
System.out.println("예약할 좌석을 선택해주세요. (1 ~ 40)");
int seat = Integer.parseInt(br.readLine());
if(seat < 1 || seat > 40) System.out.println("유효하지 않은 좌석입니다.");
else if(!map.get(seat)[0].equals("")) System.out.println("이미 예약되어 있는 좌석입니다.");
else {
System.out.println("<< " + seat + " 번 좌석 예매 >>");
System.out.print("예약자 성명 : ");
String name = br.readLine();
System.out.print("비밀번호 : ");
String pw = br.readLine();
map.get(seat)[0] = name;
map.get(seat)[1] = pw;
System.out.println("예약이 완료되었습니다.");
break;
}
}
}
checkSeats() - 조회
private static void checkSeats(Map<Integer, String[]> map) {
System.out.println("□ : 예약 가능한 좌석 / ■ : 이미 예약된 좌석");
for(int i=1; i<=map.size(); i++){
if(map.get(i)[0].equals("")) System.out.print("□ ");
else System.out.print("■ ");
if(i % 10 == 0) System.out.println();
}
}
실행 화면
조회 -> 종료
예약 -> 예약 확인 -> 예약 취소
다중 예약 -> 조회 -> 예약 확인
예약 취소
예약 가능한 좌석 체크(존재하지 않는 좌석 / 중복 예약)
예약 취소 시 좌석 번호, 예약자 성명, 비밀번호 검증
이번 프로그램도 나름대로 간단했다. 예약자 성명이나 비밀번호 입력 시 몇 자 이상이어야 하거나, 영문 또는 숫자로 구성되도록 하는 등 입력 받는 값을 따로 검증하는 로직을 추가하지는 않았다. 이전의 토이 프로젝트에서 여러 번 구현했기 때문에 또 같은 로직을 추가하는 것은 복붙이나 다름 없다고 판단했고, 프로그램의 실행 흐름에 있어 중요한 부분은 아니라고 생각했다. 다음 번엔 GUI를 도입하여 비슷한 프로그램을 만들어보고 싶다.
'프로젝트 & TIL > 자바 토이 프로젝트' 카테고리의 다른 글
자바 토이 프로젝트 4 - 회원가입 & 로그인 프로그램 (0) | 2023.05.08 |
---|---|
자바 토이 프로젝트 3 - 로또 번호 생성 프로그램 (0) | 2023.05.08 |
자바 토이 프로젝트 2 - 구구단 게임 (0) | 2023.05.07 |
자바 토이 프로젝트 1 - 가위 바위 보 게임 (0) | 2023.05.06 |