From e42e6c3d87bac619b70b1833340fbed403a9f265 Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 14:26:55 +0900 Subject: [PATCH 01/18] =?UTF-8?q?docs=20:=20README.md(=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84=20=EB=AA=A9=EB=A1=9D)=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=201.=20=EC=B5=9C=EC=B4=88=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index e69de29b..3d6b8e44 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,23 @@ +## 오프라인 코딩 테스트 - 영화예매 + +## 기능 구현 목록 +1. [예약]예약할 영화를 입력하면 예매 가능한 목록을 출력해주는 기능 + * [예외처리] 상영목록에 없는 영화를 선택한 경우 + +1. [예약]예약할 시간표를 묻는 기능 + * [예외처리] 선택한 영화가 기존에 예매한 영화와 시간들과 1시간 이내가 아닌 경우 + * [예외처리] 상영 시작 시간이 이미 지난 영화를 선택하는 경우 + +1. [예약]예약할 인원을 묻는 기능 + * [예외처리] 예약 가능한 인원을 초과하였을 때 + +1. [예약]추가 예매 여부를 묻는 기능 + * 추가예매를 안 할 경우 -> 예매한 목록을 보여 줌 + * 추가예매를 할 경우 -> 1번으로 돌아감 + +1. [결제]포인트 사용 금액을 입력받는 기능 + * [예외처리] 입력한 포인트가 0 미만인 경우 + * [예외처리] 입력한 포인트가 결제 금액을 넘을 경우 + +1. [결제]신용카드, 현금 여부를 묻는 기능 + * [예외처리] 1,2번이 아닌 다른 번호를 입력한 경우 \ No newline at end of file From 21598c53efa76d8e048ffe3ffea9b465b3a89dca Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 15:02:14 +0900 Subject: [PATCH 02/18] =?UTF-8?q?feat=20:=20=EC=98=88=EB=A7=A4=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=9C=20=EB=AA=A9=EB=A1=9D=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EB=B0=8F=20=EC=98=88=EB=A7=A4=ED=95=A0=20=EC=98=81=ED=99=94=20?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=201.=20=EC=A1=B4?= =?UTF-8?q?=EC=9E=AC=ED=95=98=EB=8A=94=20=EC=98=81=ED=99=94=EC=9D=B8?= =?UTF-8?q?=EC=A7=80=20=EA=B2=80=EC=A6=9D=EB=A5=BC=20=EC=9C=84=ED=95=B4=20?= =?UTF-8?q?MovieRepository=20,Moive=20=EA=B0=9D=EC=B2=B4=EC=97=90=20contai?= =?UTF-8?q?ns=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2. MovieReservation 객체 생성 - 예매 정보 및 가능한 예매인지 검증해주는 객체 3. InpurtView 및 OutputView 일부 수정 4. README.md 예외처리 추가 --- README.md | 3 ++- src/main/java/domain/Movie.java | 7 ++++++- src/main/java/domain/MovieRepository.java | 6 ++++++ src/main/java/reservation/MovieReservation.java | 17 +++++++++++++++++ src/main/java/view/InputView.java | 11 +++++++++-- src/main/java/view/OutputView.java | 1 + 6 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 src/main/java/reservation/MovieReservation.java diff --git a/README.md b/README.md index 3d6b8e44..2b00061c 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ ## 오프라인 코딩 테스트 - 영화예매 ## 기능 구현 목록 -1. [예약]예약할 영화를 입력하면 예매 가능한 목록을 출력해주는 기능 +1. [예약]예매 가능한 목록을 출력해주고 예매할 영화를 입력해주는 기능 * [예외처리] 상영목록에 없는 영화를 선택한 경우 + * [예외처리] 숫자가 아닌 수를 입력한 경우 1. [예약]예약할 시간표를 묻는 기능 * [예외처리] 선택한 영화가 기존에 예매한 영화와 시간들과 1시간 이내가 아닌 경우 diff --git a/src/main/java/domain/Movie.java b/src/main/java/domain/Movie.java index c7999816..73f346e9 100644 --- a/src/main/java/domain/Movie.java +++ b/src/main/java/domain/Movie.java @@ -12,7 +12,7 @@ public class Movie { private List playSchedules = new ArrayList<>(); - public Movie(int id, String name, int price) { + Movie(int id, String name, int price) { this.id = id; this.name = name; this.price = price; @@ -22,6 +22,10 @@ void addPlaySchedule(PlaySchedule playSchedule) { playSchedules.add(playSchedule); } + boolean contains(int movieId) { + return this.id == movieId; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -31,4 +35,5 @@ public String toString() { return id + " - " + name + ", " + price + "원" + NEW_LINE + sb.toString(); } + } diff --git a/src/main/java/domain/MovieRepository.java b/src/main/java/domain/MovieRepository.java index a1b5729b..58c39ba8 100644 --- a/src/main/java/domain/MovieRepository.java +++ b/src/main/java/domain/MovieRepository.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import static utils.DateTimeUtils.createDateTime; @@ -42,4 +43,9 @@ public class MovieRepository { public static List getMovies() { return movies; } + + public static boolean contain(int movieId) { + return movies.stream() + .anyMatch(movie -> movie.contains(movieId)); + } } diff --git a/src/main/java/reservation/MovieReservation.java b/src/main/java/reservation/MovieReservation.java new file mode 100644 index 00000000..46d31845 --- /dev/null +++ b/src/main/java/reservation/MovieReservation.java @@ -0,0 +1,17 @@ +package reservation; + +import domain.Movie; +import domain.MovieRepository; + +import java.util.ArrayList; + +public class MovieReservation { + private ArrayList reservation = new ArrayList<>(); + + public static int checkExistList(int movieId) { + if (!MovieRepository.contain(movieId)) { + throw new IllegalArgumentException(); + } + return movieId; + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 8a3afabd..daa6b34f 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,12 +1,19 @@ package view; +import reservation.MovieReservation; + import java.util.Scanner; public class InputView { private static final Scanner scanner = new Scanner(System.in); public static int inputMovieId() { - System.out.println("## 예약할 영화를 선택하세요."); - return scanner.nextInt(); + try { + System.out.println("## 예약할 영화를 선택하세요."); + return MovieReservation.checkExistList(Integer.parseInt(scanner.nextLine().trim())); + } catch (IllegalArgumentException e) { + System.out.println("올바르지 않은 입력입니다."); + return inputMovieId(); + } } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index e07558c8..34d63ab3 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -6,6 +6,7 @@ public class OutputView { public static void printMovies(List movies) { + System.out.println("##상영 영화 목록"); for (Movie movie : movies) { System.out.println(movie); } From 3af1ce310af321502612786a9c7e5954b4386858 Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 16:09:33 +0900 Subject: [PATCH 03/18] =?UTF-8?q?feat=20:=20=EC=98=88=EC=95=BD=ED=95=A0=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=ED=91=9C=EB=A5=BC=20=EB=AC=BB=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++-- src/main/java/MovieApplication.java | 12 +++++++--- src/main/java/domain/Movie.java | 9 +++++++- src/main/java/domain/MovieRepository.java | 7 ++++++ src/main/java/domain/PlaySchedule.java | 4 ++++ src/main/java/domain/ReservationMovie.java | 23 +++++++++++++++++++ .../java/reservation/MovieReservation.java | 13 ++++++++++- src/main/java/view/InputView.java | 13 +++++++++++ src/main/java/view/OutputView.java | 8 +++++++ 9 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 src/main/java/domain/ReservationMovie.java diff --git a/README.md b/README.md index 2b00061c..905b17f4 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,14 @@ * [예외처리] 상영목록에 없는 영화를 선택한 경우 * [예외처리] 숫자가 아닌 수를 입력한 경우 -1. [예약]예약할 시간표를 묻는 기능 - * [예외처리] 선택한 영화가 기존에 예매한 영화와 시간들과 1시간 이내가 아닌 경우 +1. [예약]예약할 시간표를 묻는 기능경우 + * [예외처리] 선택한 영화가 기존에 예매한 영화와 시간들과 1시간 이내가 아닌 * [예외처리] 상영 시작 시간이 이미 지난 영화를 선택하는 경우 + * [예외처리] 스케줄에 없는 번호를 입력하였을 때 (O) 1. [예약]예약할 인원을 묻는 기능 * [예외처리] 예약 가능한 인원을 초과하였을 때 + * 해당 스케줄의 예약 인원 감소 시킴 1. [예약]추가 예매 여부를 묻는 기능 * 추가예매를 안 할 경우 -> 예매한 목록을 보여 줌 diff --git a/src/main/java/MovieApplication.java b/src/main/java/MovieApplication.java index 448a7eda..a55173e8 100644 --- a/src/main/java/MovieApplication.java +++ b/src/main/java/MovieApplication.java @@ -1,5 +1,7 @@ import domain.Movie; import domain.MovieRepository; +import domain.PlaySchedule; +import reservation.MovieReservation; import view.InputView; import view.OutputView; @@ -8,10 +10,14 @@ public class MovieApplication { public static void main(String[] args) { List movies = MovieRepository.getMovies(); - OutputView.printMovies(movies); + MovieReservation reservations = new MovieReservation(); + PlaySchedule schedule; + OutputView.printMovies(movies); int movieId = InputView.inputMovieId(); - - // TODO 구현 진행 + Movie selectedMovie = OutputView.printPlaySchedule(movieId); + do{ + schedule = InputView.inputPlaySchedule(selectedMovie); + } while(!reservations.checkVaildSchedule(schedule)); } } diff --git a/src/main/java/domain/Movie.java b/src/main/java/domain/Movie.java index 73f346e9..e7e45812 100644 --- a/src/main/java/domain/Movie.java +++ b/src/main/java/domain/Movie.java @@ -26,6 +26,14 @@ boolean contains(int movieId) { return this.id == movieId; } + public PlaySchedule checkVaildSchedule(int scheduleId) { + try{ + return playSchedules.get(scheduleId-1); + }catch (IndexOutOfBoundsException e){ + throw new IllegalArgumentException(); + } + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -35,5 +43,4 @@ public String toString() { return id + " - " + name + ", " + price + "원" + NEW_LINE + sb.toString(); } - } diff --git a/src/main/java/domain/MovieRepository.java b/src/main/java/domain/MovieRepository.java index 58c39ba8..19559a8c 100644 --- a/src/main/java/domain/MovieRepository.java +++ b/src/main/java/domain/MovieRepository.java @@ -44,6 +44,13 @@ public static List getMovies() { return movies; } + public static Movie getPlaySchedule(int movieId) { + return movies.stream() + .filter(movie -> movie.contains(movieId)) + .findFirst() + .get(); + } + public static boolean contain(int movieId) { return movies.stream() .anyMatch(movie -> movie.contains(movieId)); diff --git a/src/main/java/domain/PlaySchedule.java b/src/main/java/domain/PlaySchedule.java index e85e6b8c..122bc952 100644 --- a/src/main/java/domain/PlaySchedule.java +++ b/src/main/java/domain/PlaySchedule.java @@ -13,6 +13,10 @@ public PlaySchedule(LocalDateTime startDateTime, int capacity) { this.capacity = capacity; } + public LocalDateTime getStartDateTime(){ + return startDateTime; + } + @Override public String toString() { return "시작시간: " + format(startDateTime) + " 예약가능인원: " + capacity + "\n"; diff --git a/src/main/java/domain/ReservationMovie.java b/src/main/java/domain/ReservationMovie.java new file mode 100644 index 00000000..ddae901b --- /dev/null +++ b/src/main/java/domain/ReservationMovie.java @@ -0,0 +1,23 @@ +package domain; + + +import utils.DateTimeUtils; + +public class ReservationMovie { + private final int id; + private final String name; + private final int price; + private final PlaySchedule schedule; + + ReservationMovie(int id, String name, int price, PlaySchedule schedule) { + this.id = id; + this.name = name; + this.price = price; + this.schedule = schedule; + } + + public boolean checkTime(PlaySchedule schedule) { + return DateTimeUtils.isOneHourWithinRange(this.schedule.getStartDateTime(), + schedule.getStartDateTime()); + } +} diff --git a/src/main/java/reservation/MovieReservation.java b/src/main/java/reservation/MovieReservation.java index 46d31845..dd0b1a28 100644 --- a/src/main/java/reservation/MovieReservation.java +++ b/src/main/java/reservation/MovieReservation.java @@ -2,11 +2,13 @@ import domain.Movie; import domain.MovieRepository; +import domain.PlaySchedule; +import domain.ReservationMovie; import java.util.ArrayList; public class MovieReservation { - private ArrayList reservation = new ArrayList<>(); + private ArrayList reservations = new ArrayList<>(); public static int checkExistList(int movieId) { if (!MovieRepository.contain(movieId)) { @@ -14,4 +16,13 @@ public static int checkExistList(int movieId) { } return movieId; } + + public static PlaySchedule checkExistSchedule(Movie selectedMovie, int ScheduleId) { + return selectedMovie.checkVaildSchedule(ScheduleId); + } + + public boolean checkVaildSchedule(PlaySchedule schedule) { + return reservations.stream() + .allMatch(reservation -> reservation.checkTime(schedule)); + } } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index daa6b34f..bf541642 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,5 +1,7 @@ package view; +import domain.Movie; +import domain.PlaySchedule; import reservation.MovieReservation; import java.util.Scanner; @@ -16,4 +18,15 @@ public static int inputMovieId() { return inputMovieId(); } } + + public static PlaySchedule inputPlaySchedule(Movie selectedMovie) { + try { + System.out.println("예약할 시간표를 선택하세요.(첫번째 상영 시간이 1번)"); + return MovieReservation.checkExistSchedule(selectedMovie, + Integer.parseInt(scanner.nextLine().trim())); + } catch (IllegalArgumentException e) { + System.out.println("올바르지 않은 입력입니다."); + return inputPlaySchedule(selectedMovie); + } + } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 34d63ab3..a2a75f96 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,6 +1,8 @@ package view; import domain.Movie; +import domain.MovieRepository; +import domain.PlaySchedule; import java.util.List; @@ -11,4 +13,10 @@ public static void printMovies(List movies) { System.out.println(movie); } } + + public static Movie printPlaySchedule(int movieId) { + Movie selectedMovie = MovieRepository.getPlaySchedule(movieId); + System.out.println(selectedMovie); + return selectedMovie; + } } From f9cafb5e5d978638a614e2941c431a3dd32aee85 Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 16:18:39 +0900 Subject: [PATCH 04/18] =?UTF-8?q?feat=20:=20=EC=98=88=EC=95=BD=ED=95=A0=20?= =?UTF-8?q?=EC=9D=B8=EC=9B=90=EC=9D=84=20=EB=AC=BB=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++++- src/main/java/MovieApplication.java | 3 +++ src/main/java/domain/PlaySchedule.java | 13 ++++++++++++- src/main/java/view/InputView.java | 10 ++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 905b17f4..3f7fb82f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,10 @@ 1. [예약]예약할 인원을 묻는 기능 * [예외처리] 예약 가능한 인원을 초과하였을 때 - * 해당 스케줄의 예약 인원 감소 시킴 + * [예외처리] 예약 인원이 0명 이하일 때 + +1. [예약]예약 목록에 추가 기능 + * 해당 스케줄 예매 인원 감소 1. [예약]추가 예매 여부를 묻는 기능 * 추가예매를 안 할 경우 -> 예매한 목록을 보여 줌 diff --git a/src/main/java/MovieApplication.java b/src/main/java/MovieApplication.java index a55173e8..3f2e3a5f 100644 --- a/src/main/java/MovieApplication.java +++ b/src/main/java/MovieApplication.java @@ -1,6 +1,7 @@ import domain.Movie; import domain.MovieRepository; import domain.PlaySchedule; +import jdk.internal.util.xml.impl.Input; import reservation.MovieReservation; import view.InputView; import view.OutputView; @@ -12,6 +13,7 @@ public static void main(String[] args) { List movies = MovieRepository.getMovies(); MovieReservation reservations = new MovieReservation(); PlaySchedule schedule; + int reservePeopleNum; OutputView.printMovies(movies); int movieId = InputView.inputMovieId(); @@ -19,5 +21,6 @@ public static void main(String[] args) { do{ schedule = InputView.inputPlaySchedule(selectedMovie); } while(!reservations.checkVaildSchedule(schedule)); + reservePeopleNum = InputView.inputReservationPeople(schedule); } } diff --git a/src/main/java/domain/PlaySchedule.java b/src/main/java/domain/PlaySchedule.java index 122bc952..16aab954 100644 --- a/src/main/java/domain/PlaySchedule.java +++ b/src/main/java/domain/PlaySchedule.java @@ -5,6 +5,7 @@ import static utils.DateTimeUtils.format; public class PlaySchedule { + private static final int MIN_RESERVATION_NUM = 0; private final LocalDateTime startDateTime; private int capacity; @@ -13,12 +14,22 @@ public PlaySchedule(LocalDateTime startDateTime, int capacity) { this.capacity = capacity; } - public LocalDateTime getStartDateTime(){ + public LocalDateTime getStartDateTime() { return startDateTime; } + public int checkValidReservation(int reservePeopleNum) { + if ((this.capacity >= reservePeopleNum) && + (reservePeopleNum > MIN_RESERVATION_NUM)) { + return reservePeopleNum; + } + throw new IllegalArgumentException(); + } + @Override public String toString() { return "시작시간: " + format(startDateTime) + " 예약가능인원: " + capacity + "\n"; } + + } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index bf541642..b68deb10 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -29,4 +29,14 @@ public static PlaySchedule inputPlaySchedule(Movie selectedMovie) { return inputPlaySchedule(selectedMovie); } } + + public static int inputReservationPeople(PlaySchedule schedule) { + try { + System.out.println("## 예약할 인원을 입력하세요."); + return schedule.checkValidReservation(Integer.parseInt(scanner.nextLine().trim())); + } catch (IllegalArgumentException e) { + System.out.println("올바르지 않은 입력입니다."); + return inputReservationPeople(schedule); + } + } } From 87dc3a54c6b5d493f3a1829ee52fc82e58ea540c Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 16:49:27 +0900 Subject: [PATCH 05/18] =?UTF-8?q?feat=20:=20=EC=98=88=EC=95=BD=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=EC=97=90=20=EC=B6=94=EA=B0=80=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/MovieApplication.java | 16 ++++++------ src/main/java/domain/Movie.java | 12 +++++++++ src/main/java/domain/ReservationMovie.java | 12 +++++++-- src/main/java/domain/ReservationSchedule.java | 25 +++++++++++++++++++ .../java/reservation/MovieReservation.java | 18 +++++++++---- .../java/reservation/ReservationMain.java | 21 ++++++++++++++++ src/main/java/view/InputView.java | 20 +++++++++++++++ 7 files changed, 108 insertions(+), 16 deletions(-) create mode 100644 src/main/java/domain/ReservationSchedule.java create mode 100644 src/main/java/reservation/ReservationMain.java diff --git a/src/main/java/MovieApplication.java b/src/main/java/MovieApplication.java index 3f2e3a5f..d5a08655 100644 --- a/src/main/java/MovieApplication.java +++ b/src/main/java/MovieApplication.java @@ -1,8 +1,10 @@ import domain.Movie; import domain.MovieRepository; import domain.PlaySchedule; +import domain.ReservationMovie; import jdk.internal.util.xml.impl.Input; import reservation.MovieReservation; +import reservation.ReservationMain; import view.InputView; import view.OutputView; @@ -12,15 +14,11 @@ public class MovieApplication { public static void main(String[] args) { List movies = MovieRepository.getMovies(); MovieReservation reservations = new MovieReservation(); - PlaySchedule schedule; - int reservePeopleNum; - - OutputView.printMovies(movies); - int movieId = InputView.inputMovieId(); - Movie selectedMovie = OutputView.printPlaySchedule(movieId); do{ - schedule = InputView.inputPlaySchedule(selectedMovie); - } while(!reservations.checkVaildSchedule(schedule)); - reservePeopleNum = InputView.inputReservationPeople(schedule); + OutputView.printMovies(movies); + ReservationMain.reservationRun(reservations); + reservations.printResult(); + } while(InputView.InputContinueReservation()); + } } diff --git a/src/main/java/domain/Movie.java b/src/main/java/domain/Movie.java index e7e45812..0d80cfd1 100644 --- a/src/main/java/domain/Movie.java +++ b/src/main/java/domain/Movie.java @@ -18,6 +18,18 @@ public class Movie { this.price = price; } + public int getId(){ + return id; + } + + public String getName(){ + return name; + } + + public int getPrice() { + return price; + } + void addPlaySchedule(PlaySchedule playSchedule) { playSchedules.add(playSchedule); } diff --git a/src/main/java/domain/ReservationMovie.java b/src/main/java/domain/ReservationMovie.java index ddae901b..2cdc9086 100644 --- a/src/main/java/domain/ReservationMovie.java +++ b/src/main/java/domain/ReservationMovie.java @@ -7,9 +7,9 @@ public class ReservationMovie { private final int id; private final String name; private final int price; - private final PlaySchedule schedule; + private final ReservationSchedule schedule; - ReservationMovie(int id, String name, int price, PlaySchedule schedule) { + public ReservationMovie(int id, String name, int price, ReservationSchedule schedule) { this.id = id; this.name = name; this.price = price; @@ -20,4 +20,12 @@ public boolean checkTime(PlaySchedule schedule) { return DateTimeUtils.isOneHourWithinRange(this.schedule.getStartDateTime(), schedule.getStartDateTime()); } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(schedule); + return id + " - " + name + ", " + price + "원" + "\n" + + sb.toString(); + } } diff --git a/src/main/java/domain/ReservationSchedule.java b/src/main/java/domain/ReservationSchedule.java new file mode 100644 index 00000000..59a89f3e --- /dev/null +++ b/src/main/java/domain/ReservationSchedule.java @@ -0,0 +1,25 @@ +package domain; + +import java.time.LocalDateTime; + +import static utils.DateTimeUtils.format; + +public class ReservationSchedule { + private final LocalDateTime startDateTime; + private int capacity; + + public ReservationSchedule(LocalDateTime startDateTime, int capacity) { + this.startDateTime = startDateTime; + this.capacity = capacity; + } + + LocalDateTime getStartDateTime() { + return startDateTime; + } + + @Override + public String toString() { + return "시작시간: " + format(startDateTime) + "\n예약 인원 : " + capacity + "\n"; + } + +} diff --git a/src/main/java/reservation/MovieReservation.java b/src/main/java/reservation/MovieReservation.java index dd0b1a28..cff4ac63 100644 --- a/src/main/java/reservation/MovieReservation.java +++ b/src/main/java/reservation/MovieReservation.java @@ -1,9 +1,6 @@ package reservation; -import domain.Movie; -import domain.MovieRepository; -import domain.PlaySchedule; -import domain.ReservationMovie; +import domain.*; import java.util.ArrayList; @@ -21,8 +18,19 @@ public static PlaySchedule checkExistSchedule(Movie selectedMovie, int ScheduleI return selectedMovie.checkVaildSchedule(ScheduleId); } - public boolean checkVaildSchedule(PlaySchedule schedule) { + boolean checkVaildSchedule(PlaySchedule schedule) { return reservations.stream() .allMatch(reservation -> reservation.checkTime(schedule)); } + + void insertRervation(Movie selectedMovie, PlaySchedule schedule, int reservePeopleNum) { + reservations.add(new ReservationMovie(selectedMovie.getId(), selectedMovie.getName(), selectedMovie.getPrice(), + new ReservationSchedule(schedule.getStartDateTime(), reservePeopleNum))); + } + + public void printResult(){ + for(ReservationMovie reservationMovie : reservations){ + System.out.println(reservationMovie); + } + } } diff --git a/src/main/java/reservation/ReservationMain.java b/src/main/java/reservation/ReservationMain.java new file mode 100644 index 00000000..bc93ea5c --- /dev/null +++ b/src/main/java/reservation/ReservationMain.java @@ -0,0 +1,21 @@ +package reservation; + +import domain.Movie; +import domain.PlaySchedule; +import view.InputView; +import view.OutputView; + +public class ReservationMain { + public static MovieReservation reservationRun(MovieReservation reservations) { + PlaySchedule schedule; + int reservePeopleNum; + int movieId = InputView.inputMovieId(); + Movie selectedMovie = OutputView.printPlaySchedule(movieId); + do { + schedule = InputView.inputPlaySchedule(selectedMovie); + } while (!reservations.checkVaildSchedule(schedule)); + reservePeopleNum = InputView.inputReservationPeople(schedule); + reservations.insertRervation(selectedMovie, schedule, reservePeopleNum); + return reservations; + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index b68deb10..ad3321e9 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -39,4 +39,24 @@ public static int inputReservationPeople(PlaySchedule schedule) { return inputReservationPeople(schedule); } } + + public static boolean InputContinueReservation() { + try { + System.out.println("## 예약을 종료하고 결제를 진행하려면 1번, 추가 예약을 진행하려면 2번"); + return chekcContinue(Integer.parseInt(scanner.nextLine().trim())); + } catch (IllegalArgumentException e) { + System.out.println("올바르지 않은 입력입니다."); + return InputContinueReservation(); + } + } + + private static boolean chekcContinue(int userInput){ + if(userInput == 1){ + return false; + } + if(userInput == 2){ + return true; + } + throw new IllegalArgumentException(); + } } From 1a74942299b906220425d8e8b09af33764173183 Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 16:53:22 +0900 Subject: [PATCH 06/18] =?UTF-8?q?refactor=20:=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EC=98=88=EB=A7=A4=20=EC=8B=9C=EA=B0=84=EA=B3=BC=201=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=EC=9D=B4=EC=83=81=20=EC=B0=A8=EC=9D=B4=EB=82=A0=20?= =?UTF-8?q?=EB=95=8C=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/reservation/MovieReservation.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/reservation/MovieReservation.java b/src/main/java/reservation/MovieReservation.java index cff4ac63..8cf6f707 100644 --- a/src/main/java/reservation/MovieReservation.java +++ b/src/main/java/reservation/MovieReservation.java @@ -19,8 +19,12 @@ public static PlaySchedule checkExistSchedule(Movie selectedMovie, int ScheduleI } boolean checkVaildSchedule(PlaySchedule schedule) { - return reservations.stream() - .allMatch(reservation -> reservation.checkTime(schedule)); + if (!reservations.stream() + .allMatch(reservation -> reservation.checkTime(schedule))) { + System.out.println("기존 예매 목록과 한시간 이상 차이가 납니다."); + return false; + } + return true; } void insertRervation(Movie selectedMovie, PlaySchedule schedule, int reservePeopleNum) { @@ -28,8 +32,8 @@ void insertRervation(Movie selectedMovie, PlaySchedule schedule, int reservePeop new ReservationSchedule(schedule.getStartDateTime(), reservePeopleNum))); } - public void printResult(){ - for(ReservationMovie reservationMovie : reservations){ + public void printResult() { + for (ReservationMovie reservationMovie : reservations) { System.out.println(reservationMovie); } } From 0ce81faa7828fee827a36c78a9bf312d6521da45 Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 17:02:53 +0900 Subject: [PATCH 07/18] =?UTF-8?q?feat=20:=20=EC=98=88=EC=95=BD=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=20=ED=9B=84=20capacity=20=EA=B0=90=EC=86=8C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/MovieApplication.java | 1 - src/main/java/domain/Movie.java | 14 +++++++++----- src/main/java/domain/MovieRepository.java | 4 ++++ src/main/java/domain/PlaySchedule.java | 4 ++++ src/main/java/reservation/ReservationMain.java | 2 ++ 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/main/java/MovieApplication.java b/src/main/java/MovieApplication.java index d5a08655..d90eddc5 100644 --- a/src/main/java/MovieApplication.java +++ b/src/main/java/MovieApplication.java @@ -19,6 +19,5 @@ public static void main(String[] args) { ReservationMain.reservationRun(reservations); reservations.printResult(); } while(InputView.InputContinueReservation()); - } } diff --git a/src/main/java/domain/Movie.java b/src/main/java/domain/Movie.java index 0d80cfd1..8af102ee 100644 --- a/src/main/java/domain/Movie.java +++ b/src/main/java/domain/Movie.java @@ -18,11 +18,11 @@ public class Movie { this.price = price; } - public int getId(){ + public int getId() { return id; } - public String getName(){ + public String getName() { return name; } @@ -39,9 +39,9 @@ boolean contains(int movieId) { } public PlaySchedule checkVaildSchedule(int scheduleId) { - try{ - return playSchedules.get(scheduleId-1); - }catch (IndexOutOfBoundsException e){ + try { + return playSchedules.get(scheduleId - 1); + } catch (IndexOutOfBoundsException e) { throw new IllegalArgumentException(); } } @@ -55,4 +55,8 @@ public String toString() { return id + " - " + name + ", " + price + "원" + NEW_LINE + sb.toString(); } + + void reduceCapacity(PlaySchedule schedule, int reservePeopleNum) { + playSchedules.get(playSchedules.indexOf(schedule)).reduce(reservePeopleNum); + } } diff --git a/src/main/java/domain/MovieRepository.java b/src/main/java/domain/MovieRepository.java index 19559a8c..5e916c8e 100644 --- a/src/main/java/domain/MovieRepository.java +++ b/src/main/java/domain/MovieRepository.java @@ -55,4 +55,8 @@ public static boolean contain(int movieId) { return movies.stream() .anyMatch(movie -> movie.contains(movieId)); } + + public static void reduceCapacity(Movie selectedMovie, PlaySchedule schedule, int reservePeopleNum) { + selectedMovie.reduceCapacity(schedule,reservePeopleNum); + } } diff --git a/src/main/java/domain/PlaySchedule.java b/src/main/java/domain/PlaySchedule.java index 16aab954..7fb09882 100644 --- a/src/main/java/domain/PlaySchedule.java +++ b/src/main/java/domain/PlaySchedule.java @@ -26,6 +26,10 @@ public int checkValidReservation(int reservePeopleNum) { throw new IllegalArgumentException(); } + void reduce(int peopleNum){ + capacity -= peopleNum; + } + @Override public String toString() { return "시작시간: " + format(startDateTime) + " 예약가능인원: " + capacity + "\n"; diff --git a/src/main/java/reservation/ReservationMain.java b/src/main/java/reservation/ReservationMain.java index bc93ea5c..a8f97dc5 100644 --- a/src/main/java/reservation/ReservationMain.java +++ b/src/main/java/reservation/ReservationMain.java @@ -1,6 +1,7 @@ package reservation; import domain.Movie; +import domain.MovieRepository; import domain.PlaySchedule; import view.InputView; import view.OutputView; @@ -16,6 +17,7 @@ public static MovieReservation reservationRun(MovieReservation reservations) { } while (!reservations.checkVaildSchedule(schedule)); reservePeopleNum = InputView.inputReservationPeople(schedule); reservations.insertRervation(selectedMovie, schedule, reservePeopleNum); + MovieRepository.reduceCapacity(selectedMovie,schedule,reservePeopleNum); return reservations; } } From 856ae95ff65c517f9f59d983f6eb75a209ceec03 Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 17:23:20 +0900 Subject: [PATCH 08/18] =?UTF-8?q?refactor=20:=20=EC=98=88=EB=A7=A4=20?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=20=EC=9D=B8=EC=9B=90=200=EB=AA=85=EC=9D=BC?= =?UTF-8?q?=20=EB=95=8C=20=EC=8A=A4=EC=BC=80=EC=A4=84=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- src/main/java/domain/Movie.java | 4 +++- src/main/java/domain/PlaySchedule.java | 6 +++++- src/main/java/view/InputView.java | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3f7fb82f..a81cd056 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,14 @@ * [예외처리] 예약 인원이 0명 이하일 때 1. [예약]예약 목록에 추가 기능 - * 해당 스케줄 예매 인원 감소 + * 해당 스케줄 예매 인원 감소 -> 0명이면 스케줄 삭제 1. [예약]추가 예매 여부를 묻는 기능 * 추가예매를 안 할 경우 -> 예매한 목록을 보여 줌 * 추가예매를 할 경우 -> 1번으로 돌아감 +1. [예약]같은 영화를 다시 예매 했을 때 합치는 기능 + 1. [결제]포인트 사용 금액을 입력받는 기능 * [예외처리] 입력한 포인트가 0 미만인 경우 * [예외처리] 입력한 포인트가 결제 금액을 넘을 경우 diff --git a/src/main/java/domain/Movie.java b/src/main/java/domain/Movie.java index 8af102ee..179b0b73 100644 --- a/src/main/java/domain/Movie.java +++ b/src/main/java/domain/Movie.java @@ -57,6 +57,8 @@ public String toString() { } void reduceCapacity(PlaySchedule schedule, int reservePeopleNum) { - playSchedules.get(playSchedules.indexOf(schedule)).reduce(reservePeopleNum); + if (playSchedules.get(playSchedules.indexOf(schedule)).reduce(reservePeopleNum)) { + playSchedules.remove(playSchedules.indexOf(schedule)); + } } } diff --git a/src/main/java/domain/PlaySchedule.java b/src/main/java/domain/PlaySchedule.java index 7fb09882..1672cb9f 100644 --- a/src/main/java/domain/PlaySchedule.java +++ b/src/main/java/domain/PlaySchedule.java @@ -26,8 +26,12 @@ public int checkValidReservation(int reservePeopleNum) { throw new IllegalArgumentException(); } - void reduce(int peopleNum){ + boolean reduce(int peopleNum){ capacity -= peopleNum; + if(capacity == 0){ + return true; + } + return false; } @Override diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index ad3321e9..29624c65 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -21,7 +21,7 @@ public static int inputMovieId() { public static PlaySchedule inputPlaySchedule(Movie selectedMovie) { try { - System.out.println("예약할 시간표를 선택하세요.(첫번째 상영 시간이 1번)"); + System.out.println("##예약할 시간표를 선택하세요.(첫번째 상영 시간이 1번)"); return MovieReservation.checkExistSchedule(selectedMovie, Integer.parseInt(scanner.nextLine().trim())); } catch (IllegalArgumentException e) { From a00aea3d12dbfefbad735240dff00180503d3b8e Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 17:33:17 +0900 Subject: [PATCH 09/18] =?UTF-8?q?refactor=20:=20ReservationCreator=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/MovieApplication.java | 2 +- .../java/reservation/ReservationCreater.java | 24 +++++++++++++++++++ .../java/reservation/ReservationMain.java | 12 ++++------ 3 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 src/main/java/reservation/ReservationCreater.java diff --git a/src/main/java/MovieApplication.java b/src/main/java/MovieApplication.java index d90eddc5..99e55bbd 100644 --- a/src/main/java/MovieApplication.java +++ b/src/main/java/MovieApplication.java @@ -17,7 +17,7 @@ public static void main(String[] args) { do{ OutputView.printMovies(movies); ReservationMain.reservationRun(reservations); - reservations.printResult(); } while(InputView.InputContinueReservation()); + reservations.printResult(); } } diff --git a/src/main/java/reservation/ReservationCreater.java b/src/main/java/reservation/ReservationCreater.java new file mode 100644 index 00000000..7121fcd8 --- /dev/null +++ b/src/main/java/reservation/ReservationCreater.java @@ -0,0 +1,24 @@ +package reservation; + +import domain.Movie; +import domain.PlaySchedule; +import view.InputView; +import view.OutputView; + +class ReservationCreater { + static Movie inputMovie(int movieId) { + return OutputView.printPlaySchedule(movieId); + } + + static PlaySchedule inputSchedule(MovieReservation reservations, Movie selectedMovie) { + PlaySchedule schedule; + do { + schedule = InputView.inputPlaySchedule(selectedMovie); + } while (!reservations.checkVaildSchedule(schedule)); + return schedule; + } + + static int inputReserveNum(PlaySchedule schedule) { + return InputView.inputReservationPeople(schedule); + } +} diff --git a/src/main/java/reservation/ReservationMain.java b/src/main/java/reservation/ReservationMain.java index a8f97dc5..e10f2692 100644 --- a/src/main/java/reservation/ReservationMain.java +++ b/src/main/java/reservation/ReservationMain.java @@ -8,16 +8,14 @@ public class ReservationMain { public static MovieReservation reservationRun(MovieReservation reservations) { - PlaySchedule schedule; int reservePeopleNum; int movieId = InputView.inputMovieId(); - Movie selectedMovie = OutputView.printPlaySchedule(movieId); - do { - schedule = InputView.inputPlaySchedule(selectedMovie); - } while (!reservations.checkVaildSchedule(schedule)); - reservePeopleNum = InputView.inputReservationPeople(schedule); + + Movie selectedMovie = ReservationCreater.inputMovie(movieId); + PlaySchedule schedule = ReservationCreater.inputSchedule(reservations, selectedMovie); + reservePeopleNum = ReservationCreater.inputReserveNum(schedule); reservations.insertRervation(selectedMovie, schedule, reservePeopleNum); - MovieRepository.reduceCapacity(selectedMovie,schedule,reservePeopleNum); + MovieRepository.reduceCapacity(selectedMovie, schedule, reservePeopleNum); return reservations; } } From 16290457f15c7bdd2b5f5661195c404e775626ad Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 17:34:34 +0900 Subject: [PATCH 10/18] =?UTF-8?q?refactor=20:=20=EC=98=A4=ED=83=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/reservation/MovieReservation.java | 2 +- src/main/java/reservation/ReservationMain.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/reservation/MovieReservation.java b/src/main/java/reservation/MovieReservation.java index 8cf6f707..c56bdc4b 100644 --- a/src/main/java/reservation/MovieReservation.java +++ b/src/main/java/reservation/MovieReservation.java @@ -27,7 +27,7 @@ boolean checkVaildSchedule(PlaySchedule schedule) { return true; } - void insertRervation(Movie selectedMovie, PlaySchedule schedule, int reservePeopleNum) { + void insertReserrvation(Movie selectedMovie, PlaySchedule schedule, int reservePeopleNum) { reservations.add(new ReservationMovie(selectedMovie.getId(), selectedMovie.getName(), selectedMovie.getPrice(), new ReservationSchedule(schedule.getStartDateTime(), reservePeopleNum))); } diff --git a/src/main/java/reservation/ReservationMain.java b/src/main/java/reservation/ReservationMain.java index e10f2692..ef307d90 100644 --- a/src/main/java/reservation/ReservationMain.java +++ b/src/main/java/reservation/ReservationMain.java @@ -4,7 +4,6 @@ import domain.MovieRepository; import domain.PlaySchedule; import view.InputView; -import view.OutputView; public class ReservationMain { public static MovieReservation reservationRun(MovieReservation reservations) { @@ -14,7 +13,7 @@ public static MovieReservation reservationRun(MovieReservation reservations) { Movie selectedMovie = ReservationCreater.inputMovie(movieId); PlaySchedule schedule = ReservationCreater.inputSchedule(reservations, selectedMovie); reservePeopleNum = ReservationCreater.inputReserveNum(schedule); - reservations.insertRervation(selectedMovie, schedule, reservePeopleNum); + reservations.insertReserrvation(selectedMovie, schedule, reservePeopleNum); MovieRepository.reduceCapacity(selectedMovie, schedule, reservePeopleNum); return reservations; } From 4b2c391c78da80caef31d4477c0a9961f30c595b Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 17:39:58 +0900 Subject: [PATCH 11/18] =?UTF-8?q?refactor=20:=20Movie,=20PlaySchedule=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=EB=A5=BC=20=EC=83=81=EC=86=8D=20=EB=B0=9B?= =?UTF-8?q?=EB=8A=94=20=EA=B0=9D=EC=B2=B4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/PlaySchedule.java | 8 ++++++-- src/main/java/domain/ReservationMovie.java | 11 +++-------- src/main/java/domain/ReservationSchedule.java | 13 +++---------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/main/java/domain/PlaySchedule.java b/src/main/java/domain/PlaySchedule.java index 1672cb9f..3fe03abc 100644 --- a/src/main/java/domain/PlaySchedule.java +++ b/src/main/java/domain/PlaySchedule.java @@ -18,6 +18,10 @@ public LocalDateTime getStartDateTime() { return startDateTime; } + public int getCapacity() { + return capacity; + } + public int checkValidReservation(int reservePeopleNum) { if ((this.capacity >= reservePeopleNum) && (reservePeopleNum > MIN_RESERVATION_NUM)) { @@ -26,9 +30,9 @@ public int checkValidReservation(int reservePeopleNum) { throw new IllegalArgumentException(); } - boolean reduce(int peopleNum){ + boolean reduce(int peopleNum) { capacity -= peopleNum; - if(capacity == 0){ + if (capacity == 0) { return true; } return false; diff --git a/src/main/java/domain/ReservationMovie.java b/src/main/java/domain/ReservationMovie.java index 2cdc9086..30b46f41 100644 --- a/src/main/java/domain/ReservationMovie.java +++ b/src/main/java/domain/ReservationMovie.java @@ -3,16 +3,11 @@ import utils.DateTimeUtils; -public class ReservationMovie { - private final int id; - private final String name; - private final int price; +public class ReservationMovie extends Movie{ private final ReservationSchedule schedule; public ReservationMovie(int id, String name, int price, ReservationSchedule schedule) { - this.id = id; - this.name = name; - this.price = price; + super(id,name,price); this.schedule = schedule; } @@ -25,7 +20,7 @@ public boolean checkTime(PlaySchedule schedule) { public String toString() { StringBuilder sb = new StringBuilder(); sb.append(schedule); - return id + " - " + name + ", " + price + "원" + "\n" + return super.getId() + " - " + super.getName() + ", " + super.getPrice() + "원" + "\n" + sb.toString(); } } diff --git a/src/main/java/domain/ReservationSchedule.java b/src/main/java/domain/ReservationSchedule.java index 59a89f3e..9fe73789 100644 --- a/src/main/java/domain/ReservationSchedule.java +++ b/src/main/java/domain/ReservationSchedule.java @@ -4,22 +4,15 @@ import static utils.DateTimeUtils.format; -public class ReservationSchedule { - private final LocalDateTime startDateTime; - private int capacity; +public class ReservationSchedule extends PlaySchedule { public ReservationSchedule(LocalDateTime startDateTime, int capacity) { - this.startDateTime = startDateTime; - this.capacity = capacity; - } - - LocalDateTime getStartDateTime() { - return startDateTime; + super(startDateTime, capacity); } @Override public String toString() { - return "시작시간: " + format(startDateTime) + "\n예약 인원 : " + capacity + "\n"; + return "시작시간: " + format(super.getStartDateTime()) + "\n예약 인원 : " + super.getCapacity() + "\n"; } } From d8fee8e8cda6614e750e245b336a763de187bef4 Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 17:54:18 +0900 Subject: [PATCH 12/18] =?UTF-8?q?feat=20:=20=EA=B8=88=EC=95=A1,=20?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=9E=85=EB=A0=A5=EB=B0=9B?= =?UTF-8?q?=EB=8A=94=20=EA=B0=9D=EC=B2=B4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/MovieApplication.java | 3 +++ src/main/java/domain/ReservationMovie.java | 4 ++++ src/main/java/domain/ResultPay.java | 20 +++++++++++++++++++ src/main/java/payment/PaymentMain.java | 16 +++++++++++++++ .../java/reservation/MovieReservation.java | 8 ++++++++ src/main/java/view/InputView.java | 11 ++++++++++ src/main/java/view/OutputView.java | 4 ++++ 7 files changed, 66 insertions(+) create mode 100644 src/main/java/domain/ResultPay.java create mode 100644 src/main/java/payment/PaymentMain.java diff --git a/src/main/java/MovieApplication.java b/src/main/java/MovieApplication.java index 99e55bbd..7713b007 100644 --- a/src/main/java/MovieApplication.java +++ b/src/main/java/MovieApplication.java @@ -3,6 +3,7 @@ import domain.PlaySchedule; import domain.ReservationMovie; import jdk.internal.util.xml.impl.Input; +import payment.PaymentMain; import reservation.MovieReservation; import reservation.ReservationMain; import view.InputView; @@ -14,10 +15,12 @@ public class MovieApplication { public static void main(String[] args) { List movies = MovieRepository.getMovies(); MovieReservation reservations = new MovieReservation(); + do{ OutputView.printMovies(movies); ReservationMain.reservationRun(reservations); } while(InputView.InputContinueReservation()); reservations.printResult(); + PaymentMain.paymentrun(reservations); } } diff --git a/src/main/java/domain/ReservationMovie.java b/src/main/java/domain/ReservationMovie.java index 30b46f41..77da753c 100644 --- a/src/main/java/domain/ReservationMovie.java +++ b/src/main/java/domain/ReservationMovie.java @@ -16,6 +16,10 @@ public boolean checkTime(PlaySchedule schedule) { schedule.getStartDateTime()); } + public int getCapacity(){ + return schedule.getCapacity(); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/src/main/java/domain/ResultPay.java b/src/main/java/domain/ResultPay.java new file mode 100644 index 00000000..79478b8f --- /dev/null +++ b/src/main/java/domain/ResultPay.java @@ -0,0 +1,20 @@ +package domain; + +public class ResultPay { + private static final int MIN_POINT = 0; + int pay; + int point; + + public ResultPay(int pay, int point) { + this.pay = pay; + this.point = point; + } + + public static int checkPoint(int point) { + if (point < MIN_POINT) { + throw new IllegalArgumentException(); + } + return point; + } + +} diff --git a/src/main/java/payment/PaymentMain.java b/src/main/java/payment/PaymentMain.java new file mode 100644 index 00000000..c36643b0 --- /dev/null +++ b/src/main/java/payment/PaymentMain.java @@ -0,0 +1,16 @@ +package payment; + +import domain.ResultPay; +import reservation.MovieReservation; +import view.InputView; +import view.OutputView; + +public class PaymentMain { + public static void paymentrun(MovieReservation reservations){ + OutputView.PaymentStart(); + ResultPay resultPay; + int point = InputView.InputPoint(); + int pay = reservations.getPay(); + resultPay = new ResultPay(pay,point); + } +} diff --git a/src/main/java/reservation/MovieReservation.java b/src/main/java/reservation/MovieReservation.java index c56bdc4b..53022290 100644 --- a/src/main/java/reservation/MovieReservation.java +++ b/src/main/java/reservation/MovieReservation.java @@ -37,4 +37,12 @@ public void printResult() { System.out.println(reservationMovie); } } + + public int getPay() { + int pay = 0; + for (ReservationMovie reservationMovie : reservations) { + pay += reservationMovie.getPrice() * reservationMovie.getCapacity(); + } + return pay; + } } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 29624c65..32e5c778 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -2,6 +2,7 @@ import domain.Movie; import domain.PlaySchedule; +import domain.ResultPay; import reservation.MovieReservation; import java.util.Scanner; @@ -59,4 +60,14 @@ private static boolean chekcContinue(int userInput){ } throw new IllegalArgumentException(); } + + public static int InputPoint() { + try { + System.out.println("## 포인트 사용 금액을 입력하세요, 포인트가 없으면 0 입력"); + return ResultPay.checkPoint(Integer.parseInt(scanner.nextLine().trim())); + } catch (IllegalArgumentException e) { + System.out.println("올바르지 않은 입력입니다."); + return InputPoint(); + } + } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index a2a75f96..215e5121 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -19,4 +19,8 @@ public static Movie printPlaySchedule(int movieId) { System.out.println(selectedMovie); return selectedMovie; } + + public static void PaymentStart(){ + System.out.println("결제를 진행합니다."); + } } From 927917c856c7e8f94ddba287f38ca23c14acb105 Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 18:04:08 +0900 Subject: [PATCH 13/18] =?UTF-8?q?feat=20:=20=EA=B2=B0=EC=A0=9C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84=201.=20=ED=8F=AC=EC=9D=B8?= =?UTF-8?q?=ED=8A=B8,=20=EC=B9=B4=EB=93=9C,=20=ED=98=84=EA=B8=88=20?= =?UTF-8?q?=EB=A7=8C=ED=81=BC=20=EC=B0=A8=EA=B0=90=20=ED=9B=84=20=EA=B2=B0?= =?UTF-8?q?=EC=A0=9C=20=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/ResultPay.java | 26 ++++++++++++++++++++++++-- src/main/java/payment/PaymentMain.java | 6 ++++-- src/main/java/view/InputView.java | 10 ++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/main/java/domain/ResultPay.java b/src/main/java/domain/ResultPay.java index 79478b8f..964ac812 100644 --- a/src/main/java/domain/ResultPay.java +++ b/src/main/java/domain/ResultPay.java @@ -1,13 +1,24 @@ package domain; public class ResultPay { + private static final int CARD = 1; + private static final int MONEY = 2; + private static final double CARD_RATIO = 0.95; + private static final double MONEY_RATIO = 0.98; private static final int MIN_POINT = 0; int pay; int point; + int paymentMethod; - public ResultPay(int pay, int point) { - this.pay = pay; + public ResultPay(int pay, int point, int paymentMethod) { + this.paymentMethod = paymentMethod; this.point = point; + if (paymentMethod == CARD) { + this.pay = (int) (pay * CARD_RATIO) - point; + } + if (paymentMethod == MONEY) { + this.pay = (int) (pay * MONEY_RATIO) - point; + } } public static int checkPoint(int point) { @@ -17,4 +28,15 @@ public static int checkPoint(int point) { return point; } + public static int checkPaymentMethod(int paymentMethod) { + if (paymentMethod == CARD || paymentMethod == MONEY) { + return paymentMethod; + } + throw new IllegalArgumentException(); + } + + public void printResult() { + System.out.println("최종 결제 금액은 " + pay + "입니다."); + System.out.println("예매를 완료했습니다. 즐거운 영화 관람되세요."); + } } diff --git a/src/main/java/payment/PaymentMain.java b/src/main/java/payment/PaymentMain.java index c36643b0..ea1bdd84 100644 --- a/src/main/java/payment/PaymentMain.java +++ b/src/main/java/payment/PaymentMain.java @@ -6,11 +6,13 @@ import view.OutputView; public class PaymentMain { - public static void paymentrun(MovieReservation reservations){ + public static void paymentrun(MovieReservation reservations) { OutputView.PaymentStart(); ResultPay resultPay; int point = InputView.InputPoint(); int pay = reservations.getPay(); - resultPay = new ResultPay(pay,point); + int paymentMethod = InputView.selectPaymentMethod(); + resultPay = new ResultPay(pay, point, paymentMethod); + resultPay.printResult(); } } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 32e5c778..2898e243 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -70,4 +70,14 @@ public static int InputPoint() { return InputPoint(); } } + + public static int selectPaymentMethod() { + try { + System.out.println("## 신용카드는 1번, 현금은 2번"); + return ResultPay.checkPaymentMethod(Integer.parseInt(scanner.nextLine().trim())); + } catch (IllegalArgumentException e) { + System.out.println("올바르지 않은 입력입니다."); + return InputPoint(); + } + } } From e79f547242fed7b4bfb6fea6062f7d6bcc12680b Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 18:06:23 +0900 Subject: [PATCH 14/18] =?UTF-8?q?docs=20:=20TO-DO=20LIST=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a81cd056..69163b64 100644 --- a/README.md +++ b/README.md @@ -28,4 +28,7 @@ * [예외처리] 입력한 포인트가 결제 금액을 넘을 경우 1. [결제]신용카드, 현금 여부를 묻는 기능 - * [예외처리] 1,2번이 아닌 다른 번호를 입력한 경우 \ No newline at end of file + * [예외처리] 1,2번이 아닌 다른 번호를 입력한 경우 + +[TO_DO_LIST] +1, 한시간 이내의 영화가 없을 경우 뒤로가기 \ No newline at end of file From c765c75c62c9e81fb39f322bcf5474df8e4af48a Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 18:08:51 +0900 Subject: [PATCH 15/18] =?UTF-8?q?refactor=20:=20=EC=98=A4=ED=83=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/InputView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 2898e243..9c60f709 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -44,14 +44,14 @@ public static int inputReservationPeople(PlaySchedule schedule) { public static boolean InputContinueReservation() { try { System.out.println("## 예약을 종료하고 결제를 진행하려면 1번, 추가 예약을 진행하려면 2번"); - return chekcContinue(Integer.parseInt(scanner.nextLine().trim())); + return checkContinue(Integer.parseInt(scanner.nextLine().trim())); } catch (IllegalArgumentException e) { System.out.println("올바르지 않은 입력입니다."); return InputContinueReservation(); } } - private static boolean chekcContinue(int userInput){ + private static boolean checkContinue(int userInput){ if(userInput == 1){ return false; } From 0c0d0e32d89be095367cb520ef570e36f770cdda Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 18:11:02 +0900 Subject: [PATCH 16/18] =?UTF-8?q?refactor=20:=20=ED=8F=AC=EC=9D=B8?= =?UTF-8?q?=ED=8A=B8=EA=B0=80=EA=B2=B0=EC=A0=9C=EA=B8=88=EC=95=A1=20?= =?UTF-8?q?=EC=9D=B4=EC=83=81=EC=9D=BC=EB=95=8C=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/ResultPay.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/domain/ResultPay.java b/src/main/java/domain/ResultPay.java index 964ac812..57bfe931 100644 --- a/src/main/java/domain/ResultPay.java +++ b/src/main/java/domain/ResultPay.java @@ -19,6 +19,9 @@ public ResultPay(int pay, int point, int paymentMethod) { if (paymentMethod == MONEY) { this.pay = (int) (pay * MONEY_RATIO) - point; } + if(pay < 0){ + this.pay = 0; + } } public static int checkPoint(int point) { From 5b19b738c8f571b227191dd75bb9c4c035d30641 Mon Sep 17 00:00:00 2001 From: Sunho Van Date: Tue, 16 Apr 2019 18:11:46 +0900 Subject: [PATCH 17/18] =?UTF-8?q?refactor=20:=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/ResultPay.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/domain/ResultPay.java b/src/main/java/domain/ResultPay.java index 57bfe931..b891b825 100644 --- a/src/main/java/domain/ResultPay.java +++ b/src/main/java/domain/ResultPay.java @@ -19,7 +19,7 @@ public ResultPay(int pay, int point, int paymentMethod) { if (paymentMethod == MONEY) { this.pay = (int) (pay * MONEY_RATIO) - point; } - if(pay < 0){ + if(this.pay < 0){ this.pay = 0; } } From d1ab6439a529fd957ec7b06085f0cfdeed9187cf Mon Sep 17 00:00:00 2001 From: SunHo Van Date: Tue, 16 Apr 2019 20:25:29 +0900 Subject: [PATCH 18/18] =?UTF-8?q?refactor=20:=20import=20=EC=A0=9C?= =?UTF-8?q?=EC=99=B8=201.=20=EB=B6=88=ED=95=84=EC=9A=94=20import=20?= =?UTF-8?q?=EC=A0=9C=EC=99=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/MovieApplication.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/MovieApplication.java b/src/main/java/MovieApplication.java index 7713b007..47ca8622 100644 --- a/src/main/java/MovieApplication.java +++ b/src/main/java/MovieApplication.java @@ -1,8 +1,5 @@ import domain.Movie; import domain.MovieRepository; -import domain.PlaySchedule; -import domain.ReservationMovie; -import jdk.internal.util.xml.impl.Input; import payment.PaymentMain; import reservation.MovieReservation; import reservation.ReservationMain;