From 794f927fc4ab589681779b96a67cf6377854090e Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Mon, 14 Dec 2020 21:59:03 +0900 Subject: [PATCH 01/60] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/README.md b/README.md index 450e7753a..b297bbd49 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,38 @@ # 지하철 노선도 미션 - 지하철 역과 노선을 관리하는 지하철 노선도 기능을 구현한다. +## 구현할 기능 목록 +* 데이터 초기 값 설정 기능 +* 메인 메뉴를 출력한다. +* 원하는 메뉴를 입력 받는다. +* 선택할 수 없는 기능인지 검증한다. +* 지하철 역을 등록한다. +* 지하철 역 이름이 중복 되는지 검증한다. +* 지하철 역 이름이 2글자 이상인지 검증한다. +* 지하철 역을 삭제한다. +* 지하철 역 목록을 출력한다. +* 삭제 시 노선에 등록된 지하철인지 검증한다. ( 노선에 등록 된 역은 삭제 불가) +* 지하철 노선을 등록한다. +* 노선 이름이 중복 되는지 검증한다. +* 노선 이름이 2글자 이상인지 검증한다. +* 노선 상행 종점역을 등록한다. +* 노선 하행 종점역을 등록한다, +* 노선의 목록을 출력한다. +* 노선에 역을 추가한다. +* 같은 노선에 중복 된 역이 등록 되는지 검증한다. +* 노선의 상행 종점역 보다 앞에 역 등록을 하는지 검증한다. +* 노선의 하행 종점역 보다 뒤에 역 등록을 하는지 검증한다. +* 노선에 등록 된 역을 제거한다. +* 노선에서 제거 된 역이 종점인지 검증한다. +* 종점이 제거 될 경우 마지막 노선이 종점이 된다. +* 노선에 포함 된 역이 2개 이하인지 검증한다. +* 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 출력한다. +
## 🚀 기능 요구사항 +
+더보기 ### 초기 설정 - 프로그램 시작 시 역, 노선 등 필요한 정보를 미리 셋팅할 수 있다. @@ -397,6 +426,7 @@ B. 돌아가기 ### 프로그래밍 요구사항 - Application - Application 클래스를 활용해 구현해야 한다. - Application의 패키지 구조는 변경하지 않는다. +- 주석을 참고하여 구현할 수 있으며 주석대로 구현하지 않아도 되고 삭제해도 무관하다. ```java public class Application { public static void main(String[] args) { @@ -453,6 +483,8 @@ public class StationRepository { } ``` +
+
## 📈 진행 요구사항 From 86724c91db2f3af8a440d4630c00ad88543a3402 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Mon, 14 Dec 2020 22:09:20 +0900 Subject: [PATCH 02/60] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 3 ++ src/main/java/subway/Subway.java | 11 +++++++ src/main/java/subway/view/MainMenu.java | 39 +++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 src/main/java/subway/Subway.java create mode 100644 src/main/java/subway/view/MainMenu.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..1b06382f4 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -6,5 +6,8 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 + Subway subway = new Subway(); + subway.run(scanner); + } } diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java new file mode 100644 index 000000000..40ebc1cf8 --- /dev/null +++ b/src/main/java/subway/Subway.java @@ -0,0 +1,11 @@ +package subway; + +import subway.view.MainMenu; +import java.util.Scanner; + +public class Subway { + + public void run(Scanner scanner) { + MainMenu.printMenu(); + } +} diff --git a/src/main/java/subway/view/MainMenu.java b/src/main/java/subway/view/MainMenu.java new file mode 100644 index 000000000..a5bce30a3 --- /dev/null +++ b/src/main/java/subway/view/MainMenu.java @@ -0,0 +1,39 @@ +package subway.view; + +import java.util.Arrays; +import java.util.Scanner; +import java.util.function.Consumer; + +public enum MainMenu { + STATION_MENU("1", "1. 역 관리", StationMenu::printMenu), + LINE_MENU("2", "2. 노선 관리", LineMenu::printMenu), + SECTION_MENU("3", "3. 구간 관리", SectionMenu::printMenu), + ROUTE_MAP_MENU("4", "4. 지하철 노선도 출력", RouteMapMenu::printMenu), + EXIT("5", "5. 종료", MainMenu::exitGame); + + private String number; + private String name; + private Consumer selectMenu; + private static boolean gameExit = true; + + MainMenu(String number, String name, Consumer selectMenu) { + this.number = number; + this.name = name; + this.selectMenu = selectMenu; + } + + private static void exitGame(Scanner scanner) { + gameExit = false; + } + + public static void printMenu() { + System.out.println("## 메인 화면"); + Arrays.stream(MainMenu.values()) + .forEach(System.out::println); + System.out.println(); + } + + public boolean isExit() { + return gameExit; + } +} From b3b54041c232edecacfd3b00612ec0518ffcb6ec Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Mon, 14 Dec 2020 22:11:39 +0900 Subject: [PATCH 03/60] =?UTF-8?q?feat:=20=EC=9B=90=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EB=A9=94=EB=89=B4=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EB=B0=9B=EB=8A=94=20=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/subway/Subway.java | 20 ++++++++++++++++++- src/main/java/subway/view/Input.java | 12 ++++++++++++ src/main/java/subway/view/MainMenu.java | 26 ++++++++++++++++++++----- src/main/java/subway/view/Output.java | 14 +++++++++++++ 4 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 src/main/java/subway/view/Input.java create mode 100644 src/main/java/subway/view/Output.java diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java index 40ebc1cf8..e142dcb09 100644 --- a/src/main/java/subway/Subway.java +++ b/src/main/java/subway/Subway.java @@ -1,11 +1,29 @@ package subway; +import subway.view.Input; import subway.view.MainMenu; +import subway.view.Output; + import java.util.Scanner; public class Subway { public void run(Scanner scanner) { - MainMenu.printMenu(); + MainMenu menu; + do { + MainMenu.printMenu(); + menu = chooseMenu(scanner); + menu.execute(scanner); + Output.printNewLine(); + } while(menu.isExit()); + } + + private MainMenu chooseMenu(Scanner scanner) { + try { + return MainMenu.getMainMenuType(Input.choose(scanner)); + } catch (IllegalArgumentException e) { + Output.print(e.getMessage()); + return chooseMenu(scanner); + } } } diff --git a/src/main/java/subway/view/Input.java b/src/main/java/subway/view/Input.java new file mode 100644 index 000000000..3a5aba328 --- /dev/null +++ b/src/main/java/subway/view/Input.java @@ -0,0 +1,12 @@ +package subway.view; + +import java.util.Scanner; + +public class Input { + private static final String CHOOSE_FUNCTION_MESSAGE = "## 원하는 기능을 선택하세요."; + + public static String choose(Scanner scanner) { + System.out.println(CHOOSE_FUNCTION_MESSAGE); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/view/MainMenu.java b/src/main/java/subway/view/MainMenu.java index a5bce30a3..c3cf53cf9 100644 --- a/src/main/java/subway/view/MainMenu.java +++ b/src/main/java/subway/view/MainMenu.java @@ -22,15 +22,31 @@ public enum MainMenu { this.selectMenu = selectMenu; } - private static void exitGame(Scanner scanner) { - gameExit = false; - } - public static void printMenu() { System.out.println("## 메인 화면"); Arrays.stream(MainMenu.values()) .forEach(System.out::println); - System.out.println(); + Output.printNewLine(); + } + + public static MainMenu getMainMenuType(String selectMenu) { + return Arrays.stream(MainMenu.values()) + .filter(mainMenu -> mainMenu.number.equals(selectMenu)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("[ERROR] 선택할 수 없는 기능입니다.")); + } + + private static void exitGame(Scanner scanner) { + gameExit = false; + } + + @Override + public String toString() { + return name; + } + + public void execute(Scanner scanner) { + selectMenu.accept(scanner); } public boolean isExit() { diff --git a/src/main/java/subway/view/Output.java b/src/main/java/subway/view/Output.java new file mode 100644 index 000000000..829717448 --- /dev/null +++ b/src/main/java/subway/view/Output.java @@ -0,0 +1,14 @@ +package subway.view; + +public class Output { + + public static void print(String message) { + printNewLine(); + System.out.println(message); + printNewLine(); + } + + public static void printNewLine() { + System.out.println(); + } +} From 9113a809aaf0d640e468e90490b082a9ef8c5fce Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Mon, 14 Dec 2020 22:15:06 +0900 Subject: [PATCH 04/60] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b297bbd49..4c6124967 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,9 @@ ## 구현할 기능 목록 * 데이터 초기 값 설정 기능 * 메인 메뉴를 출력한다. -* 원하는 메뉴를 입력 받는다. -* 선택할 수 없는 기능인지 검증한다. +* 원하는 메인 메뉴를 입력 받는다. + * 선택할 수 없는 메뉴인지 검증한다. +* 지하철 역 메뉴를 출력한다. * 지하철 역을 등록한다. * 지하철 역 이름이 중복 되는지 검증한다. * 지하철 역 이름이 2글자 이상인지 검증한다. From 1d49f1e27c4c19e3fc8854a2ccba7635d23566bc Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Mon, 14 Dec 2020 22:17:35 +0900 Subject: [PATCH 05/60] =?UTF-8?q?fix:=20=EB=A9=94=EC=9D=B8=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20=EC=A2=85=EB=A3=8C=20=EA=B0=92=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/view/MainMenu.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/subway/view/MainMenu.java b/src/main/java/subway/view/MainMenu.java index c3cf53cf9..37faf210b 100644 --- a/src/main/java/subway/view/MainMenu.java +++ b/src/main/java/subway/view/MainMenu.java @@ -9,7 +9,7 @@ public enum MainMenu { LINE_MENU("2", "2. 노선 관리", LineMenu::printMenu), SECTION_MENU("3", "3. 구간 관리", SectionMenu::printMenu), ROUTE_MAP_MENU("4", "4. 지하철 노선도 출력", RouteMapMenu::printMenu), - EXIT("5", "5. 종료", MainMenu::exitGame); + EXIT("Q", "Q. 종료", MainMenu::exitGame); private String number; private String name; From 04e850b4ae594790a0bce40c9fb2f97d29c9aa5a Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Mon, 14 Dec 2020 23:41:18 +0900 Subject: [PATCH 06/60] =?UTF-8?q?refactor:=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 3 +-- src/main/java/subway/SubwayMap.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 src/main/java/subway/SubwayMap.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 1b06382f4..47c9184e7 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -6,8 +6,7 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 - Subway subway = new Subway(); + SubwayMap subway = new SubwayMap(); subway.run(scanner); - } } diff --git a/src/main/java/subway/SubwayMap.java b/src/main/java/subway/SubwayMap.java new file mode 100644 index 000000000..93a72341f --- /dev/null +++ b/src/main/java/subway/SubwayMap.java @@ -0,0 +1,12 @@ +package subway; + +import subway.manager.MainManager; +import java.util.Scanner; + +public class SubwayMap { + + public void run(Scanner scanner) { + MainManager mainManager = new MainManager(); + mainManager.run(scanner); + } +} From 93829a42dc33ff0c8d7e43fb513833b4db5341f5 Mon Sep 17 00:00:00 2001 From: JuHyuk-Lee <63298320+JuHyuk-Lee@users.noreply.github.com> Date: Mon, 14 Dec 2020 23:42:44 +0900 Subject: [PATCH 07/60] =?UTF-8?q?refactor:=20=EB=B3=80=EA=B2=BD=EB=90=9C?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Subway.java | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 src/main/java/subway/Subway.java diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java deleted file mode 100644 index e142dcb09..000000000 --- a/src/main/java/subway/Subway.java +++ /dev/null @@ -1,29 +0,0 @@ -package subway; - -import subway.view.Input; -import subway.view.MainMenu; -import subway.view.Output; - -import java.util.Scanner; - -public class Subway { - - public void run(Scanner scanner) { - MainMenu menu; - do { - MainMenu.printMenu(); - menu = chooseMenu(scanner); - menu.execute(scanner); - Output.printNewLine(); - } while(menu.isExit()); - } - - private MainMenu chooseMenu(Scanner scanner) { - try { - return MainMenu.getMainMenuType(Input.choose(scanner)); - } catch (IllegalArgumentException e) { - Output.print(e.getMessage()); - return chooseMenu(scanner); - } - } -} From f3ebe73f020be85458349c5b43890fa2f2ade086 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 00:18:55 +0900 Subject: [PATCH 08/60] =?UTF-8?q?refactor:=20SubwayMap=EC=99=80=20Menu?= =?UTF-8?q?=EC=9D=98=20=EC=A4=91=EA=B0=84=EC=97=AD=ED=95=A0=20Manager=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=EB=93=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/SubwayMap.java | 3 +- src/main/java/subway/manager/MainManager.java | 31 +++++++++++++++++++ src/main/java/subway/view/MainMenu.java | 23 ++++++++------ 3 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 src/main/java/subway/manager/MainManager.java diff --git a/src/main/java/subway/SubwayMap.java b/src/main/java/subway/SubwayMap.java index 93a72341f..cfc3cb395 100644 --- a/src/main/java/subway/SubwayMap.java +++ b/src/main/java/subway/SubwayMap.java @@ -6,7 +6,6 @@ public class SubwayMap { public void run(Scanner scanner) { - MainManager mainManager = new MainManager(); - mainManager.run(scanner); + MainManager.run(scanner); } } diff --git a/src/main/java/subway/manager/MainManager.java b/src/main/java/subway/manager/MainManager.java new file mode 100644 index 000000000..bd7e604fb --- /dev/null +++ b/src/main/java/subway/manager/MainManager.java @@ -0,0 +1,31 @@ +package subway.manager; + +import subway.view.Input; +import subway.view.MainMenu; +import subway.view.Output; + +import java.util.Scanner; + +public class MainManager { + + private MainManager() {} + + public static void run(Scanner scanner) { + MainMenu mainMenu; + do { + Output.printNewLine(); + MainMenu.printMenu(); + mainMenu = chooseMenu(scanner); + mainMenu.execute(scanner); + } while (mainMenu.isExit()); + } + + private static MainMenu chooseMenu(Scanner scanner) { + try { + return MainMenu.getMainMenuType(Input.choose(scanner)); + } catch (IllegalArgumentException e) { + Output.print(e.getMessage()); + return chooseMenu(scanner); + } + } +} diff --git a/src/main/java/subway/view/MainMenu.java b/src/main/java/subway/view/MainMenu.java index 37faf210b..b3d8304c8 100644 --- a/src/main/java/subway/view/MainMenu.java +++ b/src/main/java/subway/view/MainMenu.java @@ -1,25 +1,28 @@ package subway.view; +import subway.manager.LineManager; +import subway.manager.RouteMapManager; +import subway.manager.StationManager; import java.util.Arrays; import java.util.Scanner; import java.util.function.Consumer; public enum MainMenu { - STATION_MENU("1", "1. 역 관리", StationMenu::printMenu), - LINE_MENU("2", "2. 노선 관리", LineMenu::printMenu), - SECTION_MENU("3", "3. 구간 관리", SectionMenu::printMenu), - ROUTE_MAP_MENU("4", "4. 지하철 노선도 출력", RouteMapMenu::printMenu), - EXIT("Q", "Q. 종료", MainMenu::exitGame); + STATION_MENU("1", "1. 역 관리", StationManager::run), + LINE_MENU("2", "2. 노선 관리", LineManager::run), + SECTION_MENU("3", "3. 구간 관리", StationManager::run), + ROUTE_MAP_MENU("4", "4. 지하철 노선도 출력", RouteMapManager::run), + EXIT("Q", "Q. 종료", (scanner) -> exitGame()); private String number; private String name; - private Consumer selectMenu; + private Consumer nextAction; private static boolean gameExit = true; - MainMenu(String number, String name, Consumer selectMenu) { + MainMenu(String number, String name, Consumer nextAction) { this.number = number; this.name = name; - this.selectMenu = selectMenu; + this.nextAction = nextAction; } public static void printMenu() { @@ -36,7 +39,7 @@ public static MainMenu getMainMenuType(String selectMenu) { .orElseThrow(() -> new IllegalArgumentException("[ERROR] 선택할 수 없는 기능입니다.")); } - private static void exitGame(Scanner scanner) { + private static void exitGame() { gameExit = false; } @@ -46,7 +49,7 @@ public String toString() { } public void execute(Scanner scanner) { - selectMenu.accept(scanner); + nextAction.accept(scanner); } public boolean isExit() { From 151d5accbb52992a7b5d8d88768424499ba2c493 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 01:05:39 +0900 Subject: [PATCH 09/60] =?UTF-8?q?style:=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/view/MainMenu.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/subway/view/MainMenu.java b/src/main/java/subway/view/MainMenu.java index b3d8304c8..381d38024 100644 --- a/src/main/java/subway/view/MainMenu.java +++ b/src/main/java/subway/view/MainMenu.java @@ -43,11 +43,6 @@ private static void exitGame() { gameExit = false; } - @Override - public String toString() { - return name; - } - public void execute(Scanner scanner) { nextAction.accept(scanner); } @@ -55,4 +50,9 @@ public void execute(Scanner scanner) { public boolean isExit() { return gameExit; } + + @Override + public String toString() { + return name; + } } From 3829085b529aed90cdc0e9d79af0f58f518fa8d0 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 01:07:32 +0900 Subject: [PATCH 10/60] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EB=A9=94=EB=89=B4=20=EC=B6=9C=EB=A0=A5=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 --- .../java/subway/controller/IController.java | 12 ++++++ .../subway/controller/StationController.java | 30 +++++++++++++++ .../java/subway/manager/StationManager.java | 14 +++++++ src/main/java/subway/view/StationMenu.java | 37 +++++++++++++++++++ 4 files changed, 93 insertions(+) create mode 100644 src/main/java/subway/controller/IController.java create mode 100644 src/main/java/subway/controller/StationController.java create mode 100644 src/main/java/subway/manager/StationManager.java create mode 100644 src/main/java/subway/view/StationMenu.java diff --git a/src/main/java/subway/controller/IController.java b/src/main/java/subway/controller/IController.java new file mode 100644 index 000000000..0de4c5ee5 --- /dev/null +++ b/src/main/java/subway/controller/IController.java @@ -0,0 +1,12 @@ +package subway.controller; + +import java.util.List; + +public interface IController { + + void save(); + + void remove(); + + List getList(); +} diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java new file mode 100644 index 000000000..8821f801a --- /dev/null +++ b/src/main/java/subway/controller/StationController.java @@ -0,0 +1,30 @@ +package subway.controller; + +import subway.domain.Station; +import java.util.List; + +public class StationController implements IController{ + + private StationController() {} + + @Override + public void save() { + } + + @Override + public void remove() { + } + + @Override + public List getList() { + return null; + } + + public static StationController getInstance() { + return LazyHolder.INSTANCE; + } + + private static class LazyHolder { + private static final StationController INSTANCE = new StationController(); + } +} diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java new file mode 100644 index 000000000..2486ff46a --- /dev/null +++ b/src/main/java/subway/manager/StationManager.java @@ -0,0 +1,14 @@ +package subway.manager; + +import subway.view.Output; +import subway.view.StationMenu; + +import java.util.Scanner; + +public class StationManager{ + + public static void run(Scanner scanner) { + Output.printNewLine(); + StationMenu.printMenu(scanner); + } +} diff --git a/src/main/java/subway/view/StationMenu.java b/src/main/java/subway/view/StationMenu.java new file mode 100644 index 000000000..ef354a325 --- /dev/null +++ b/src/main/java/subway/view/StationMenu.java @@ -0,0 +1,37 @@ +package subway.view; + +import subway.controller.StationController; + +import java.util.Arrays; +import java.util.Scanner; +import java.util.function.Consumer; + +public enum StationMenu { + ADD("1", "1. 역 등록", StationController::save), + REMOVE("2", "2. 역 삭제", StationController::remove), + MANAGEMENT("3", "3. 역 관리", StationController::getList), + BACK("B", "B. 돌아가기", (StationController -> {})); + + private String number; + private String name; + private Consumer nextAction; + private static boolean gameExit = true; + + StationMenu(String number, String name, Consumer nextAction) { + this.number = number; + this.name = name; + this.nextAction = nextAction; + } + + public static void printMenu(Scanner scanner) { + System.out.println("## 역 관리 화면"); + Arrays.stream(StationMenu.values()) + .forEach(System.out::println); + Output.printNewLine(); + } + + @Override + public String toString() { + return name; + } +} From c50dfc3fbed7a8c637b199a0c2d7e4a4be9c90f6 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 01:09:57 +0900 Subject: [PATCH 11/60] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4c6124967..c0e4e2a14 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ * 원하는 메인 메뉴를 입력 받는다. * 선택할 수 없는 메뉴인지 검증한다. * 지하철 역 메뉴를 출력한다. +* 지하철 역 메뉴를 입력 받는다. + * 선택할 수 없는 메뉴인지 검증한다. * 지하철 역을 등록한다. * 지하철 역 이름이 중복 되는지 검증한다. * 지하철 역 이름이 2글자 이상인지 검증한다. From ba0855f2f76d3b7f3c35e9ba921b1429142b67b9 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 01:10:19 +0900 Subject: [PATCH 12/60] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EB=A9=94=EB=89=B4=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/StationManager.java | 16 ++++++++++++++-- src/main/java/subway/view/StationMenu.java | 12 +++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java index 2486ff46a..4b54a8cc8 100644 --- a/src/main/java/subway/manager/StationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -1,14 +1,26 @@ package subway.manager; +import subway.controller.StationController; +import subway.view.Input; import subway.view.Output; import subway.view.StationMenu; - import java.util.Scanner; -public class StationManager{ +public class StationManager { public static void run(Scanner scanner) { Output.printNewLine(); StationMenu.printMenu(scanner); + StationMenu stationMenu = chooseMenu(scanner); + stationMenu.execute(StationController.getInstance()); + } + + private static StationMenu chooseMenu(Scanner scanner) { + try { + return StationMenu.getStationMenuType(Input.choose(scanner)); + } catch (IllegalArgumentException e) { + Output.print(e.getMessage()); + return chooseMenu(scanner); + } } } diff --git a/src/main/java/subway/view/StationMenu.java b/src/main/java/subway/view/StationMenu.java index ef354a325..5ebae53a6 100644 --- a/src/main/java/subway/view/StationMenu.java +++ b/src/main/java/subway/view/StationMenu.java @@ -1,7 +1,6 @@ package subway.view; import subway.controller.StationController; - import java.util.Arrays; import java.util.Scanner; import java.util.function.Consumer; @@ -30,6 +29,17 @@ public static void printMenu(Scanner scanner) { Output.printNewLine(); } + public static StationMenu getStationMenuType(String selectMenu) { + return Arrays.stream(StationMenu.values()) + .filter(stationMenu -> stationMenu.number.equals(selectMenu)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("[ERROR] 선택할 수 없는 기능입니다.")); + } + + public void execute(StationController stationController) { + nextAction.accept(stationController); + } + @Override public String toString() { return name; From ad5f929192365faf9ac70fde8096385611415dbf Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 01:17:15 +0900 Subject: [PATCH 13/60] =?UTF-8?q?refactor:=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/MainManager.java | 6 +++--- src/main/java/subway/manager/StationManager.java | 2 +- src/main/java/subway/{view => manager/menu}/MainMenu.java | 3 ++- .../java/subway/{view => manager/menu}/StationMenu.java | 3 ++- 4 files changed, 8 insertions(+), 6 deletions(-) rename src/main/java/subway/{view => manager/menu}/MainMenu.java (96%) rename src/main/java/subway/{view => manager/menu}/StationMenu.java (96%) diff --git a/src/main/java/subway/manager/MainManager.java b/src/main/java/subway/manager/MainManager.java index bd7e604fb..f9eec2b1f 100644 --- a/src/main/java/subway/manager/MainManager.java +++ b/src/main/java/subway/manager/MainManager.java @@ -1,14 +1,14 @@ package subway.manager; import subway.view.Input; -import subway.view.MainMenu; +import subway.manager.menu.MainMenu; import subway.view.Output; - import java.util.Scanner; public class MainManager { - private MainManager() {} + private MainManager() { + } public static void run(Scanner scanner) { MainMenu mainMenu; diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java index 4b54a8cc8..7aecb2212 100644 --- a/src/main/java/subway/manager/StationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -3,7 +3,7 @@ import subway.controller.StationController; import subway.view.Input; import subway.view.Output; -import subway.view.StationMenu; +import subway.manager.menu.StationMenu; import java.util.Scanner; public class StationManager { diff --git a/src/main/java/subway/view/MainMenu.java b/src/main/java/subway/manager/menu/MainMenu.java similarity index 96% rename from src/main/java/subway/view/MainMenu.java rename to src/main/java/subway/manager/menu/MainMenu.java index 381d38024..1bc4e25f3 100644 --- a/src/main/java/subway/view/MainMenu.java +++ b/src/main/java/subway/manager/menu/MainMenu.java @@ -1,8 +1,9 @@ -package subway.view; +package subway.manager.menu; import subway.manager.LineManager; import subway.manager.RouteMapManager; import subway.manager.StationManager; +import subway.view.Output; import java.util.Arrays; import java.util.Scanner; import java.util.function.Consumer; diff --git a/src/main/java/subway/view/StationMenu.java b/src/main/java/subway/manager/menu/StationMenu.java similarity index 96% rename from src/main/java/subway/view/StationMenu.java rename to src/main/java/subway/manager/menu/StationMenu.java index 5ebae53a6..e5cd6627c 100644 --- a/src/main/java/subway/view/StationMenu.java +++ b/src/main/java/subway/manager/menu/StationMenu.java @@ -1,6 +1,7 @@ -package subway.view; +package subway.manager.menu; import subway.controller.StationController; +import subway.view.Output; import java.util.Arrays; import java.util.Scanner; import java.util.function.Consumer; From 9277228640765e2aedb9a56dc997273512d8ec34 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 01:25:07 +0900 Subject: [PATCH 14/60] =?UTF-8?q?refactor:=20Input=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/MainManager.java | 2 +- src/main/java/subway/manager/StationManager.java | 2 +- src/main/java/subway/view/Input.java | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/subway/manager/MainManager.java b/src/main/java/subway/manager/MainManager.java index f9eec2b1f..5980c9f3a 100644 --- a/src/main/java/subway/manager/MainManager.java +++ b/src/main/java/subway/manager/MainManager.java @@ -22,7 +22,7 @@ public static void run(Scanner scanner) { private static MainMenu chooseMenu(Scanner scanner) { try { - return MainMenu.getMainMenuType(Input.choose(scanner)); + return MainMenu.getMainMenuType(Input.input(scanner, Input.CHOOSE_FUNCTION_MESSAGE)); } catch (IllegalArgumentException e) { Output.print(e.getMessage()); return chooseMenu(scanner); diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java index 7aecb2212..0af576173 100644 --- a/src/main/java/subway/manager/StationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -17,7 +17,7 @@ public static void run(Scanner scanner) { private static StationMenu chooseMenu(Scanner scanner) { try { - return StationMenu.getStationMenuType(Input.choose(scanner)); + return StationMenu.getStationMenuType(Input.input(scanner,Input.CHOOSE_FUNCTION_MESSAGE)); } catch (IllegalArgumentException e) { Output.print(e.getMessage()); return chooseMenu(scanner); diff --git a/src/main/java/subway/view/Input.java b/src/main/java/subway/view/Input.java index 3a5aba328..79ef4c9ff 100644 --- a/src/main/java/subway/view/Input.java +++ b/src/main/java/subway/view/Input.java @@ -3,10 +3,11 @@ import java.util.Scanner; public class Input { - private static final String CHOOSE_FUNCTION_MESSAGE = "## 원하는 기능을 선택하세요."; + public static final String CHOOSE_FUNCTION_MESSAGE = "## 원하는 기능을 선택하세요."; + public static final String PLEASE_INPUT_STATION_MESSAGE = "## 등록할 역 이름을 입력하세요."; - public static String choose(Scanner scanner) { - System.out.println(CHOOSE_FUNCTION_MESSAGE); + public static String input(Scanner scanner, String message) { + System.out.println(message); return scanner.nextLine(); } } From 6a4e39f4776b7587ca3efd538e00a78f96fc9fc0 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 01:31:35 +0900 Subject: [PATCH 15/60] =?UTF-8?q?refactor:=20=EA=B8=B0=EB=B3=B8=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/view/Input.java | 3 +++ src/main/java/subway/view/Output.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/subway/view/Input.java b/src/main/java/subway/view/Input.java index 79ef4c9ff..101118368 100644 --- a/src/main/java/subway/view/Input.java +++ b/src/main/java/subway/view/Input.java @@ -6,6 +6,9 @@ public class Input { public static final String CHOOSE_FUNCTION_MESSAGE = "## 원하는 기능을 선택하세요."; public static final String PLEASE_INPUT_STATION_MESSAGE = "## 등록할 역 이름을 입력하세요."; + private Input() { + } + public static String input(Scanner scanner, String message) { System.out.println(message); return scanner.nextLine(); diff --git a/src/main/java/subway/view/Output.java b/src/main/java/subway/view/Output.java index 829717448..9407ee129 100644 --- a/src/main/java/subway/view/Output.java +++ b/src/main/java/subway/view/Output.java @@ -2,6 +2,9 @@ public class Output { + private Output() { + } + public static void print(String message) { printNewLine(); System.out.println(message); From 99bc9e1c455b308f86ac9163bfd100c28a060e99 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 02:02:33 +0900 Subject: [PATCH 16/60] =?UTF-8?q?refactor:=20Scanner=EB=A5=BC=20Input?= =?UTF-8?q?=EB=A7=8C=20=EA=B0=80=EC=A7=80=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/SubwayMap.java | 9 ++++++++- src/main/java/subway/manager/MainManager.java | 12 ++++++------ src/main/java/subway/manager/StationManager.java | 12 ++++++------ src/main/java/subway/manager/menu/MainMenu.java | 10 +++++----- src/main/java/subway/manager/menu/StationMenu.java | 5 +++-- src/main/java/subway/view/Input.java | 9 +++++++-- 6 files changed, 35 insertions(+), 22 deletions(-) diff --git a/src/main/java/subway/SubwayMap.java b/src/main/java/subway/SubwayMap.java index cfc3cb395..42a710eeb 100644 --- a/src/main/java/subway/SubwayMap.java +++ b/src/main/java/subway/SubwayMap.java @@ -1,11 +1,18 @@ package subway; import subway.manager.MainManager; +import subway.view.Input; + import java.util.Scanner; public class SubwayMap { public void run(Scanner scanner) { - MainManager.run(scanner); + init(scanner); + MainManager.run(); + } + + private void init(Scanner scanner) { + Input.init(scanner); } } diff --git a/src/main/java/subway/manager/MainManager.java b/src/main/java/subway/manager/MainManager.java index 5980c9f3a..d2e468ff9 100644 --- a/src/main/java/subway/manager/MainManager.java +++ b/src/main/java/subway/manager/MainManager.java @@ -10,22 +10,22 @@ public class MainManager { private MainManager() { } - public static void run(Scanner scanner) { + public static void run() { MainMenu mainMenu; do { Output.printNewLine(); MainMenu.printMenu(); - mainMenu = chooseMenu(scanner); - mainMenu.execute(scanner); + mainMenu = chooseMenu(); + mainMenu.execute(); } while (mainMenu.isExit()); } - private static MainMenu chooseMenu(Scanner scanner) { + private static MainMenu chooseMenu() { try { - return MainMenu.getMainMenuType(Input.input(scanner, Input.CHOOSE_FUNCTION_MESSAGE)); + return MainMenu.getMainMenuType(Input.input(Input.CHOOSE_FUNCTION_MESSAGE)); } catch (IllegalArgumentException e) { Output.print(e.getMessage()); - return chooseMenu(scanner); + return chooseMenu(); } } } diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java index 0af576173..a7e4989cf 100644 --- a/src/main/java/subway/manager/StationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -8,19 +8,19 @@ public class StationManager { - public static void run(Scanner scanner) { + public static void run() { Output.printNewLine(); - StationMenu.printMenu(scanner); - StationMenu stationMenu = chooseMenu(scanner); + StationMenu.printMenu(); + StationMenu stationMenu = chooseMenu(); stationMenu.execute(StationController.getInstance()); } - private static StationMenu chooseMenu(Scanner scanner) { + private static StationMenu chooseMenu() { try { - return StationMenu.getStationMenuType(Input.input(scanner,Input.CHOOSE_FUNCTION_MESSAGE)); + return StationMenu.getStationMenuType(Input.input(Input.CHOOSE_FUNCTION_MESSAGE)); } catch (IllegalArgumentException e) { Output.print(e.getMessage()); - return chooseMenu(scanner); + return chooseMenu(); } } } diff --git a/src/main/java/subway/manager/menu/MainMenu.java b/src/main/java/subway/manager/menu/MainMenu.java index 1bc4e25f3..58cb3cc16 100644 --- a/src/main/java/subway/manager/menu/MainMenu.java +++ b/src/main/java/subway/manager/menu/MainMenu.java @@ -13,14 +13,14 @@ public enum MainMenu { LINE_MENU("2", "2. 노선 관리", LineManager::run), SECTION_MENU("3", "3. 구간 관리", StationManager::run), ROUTE_MAP_MENU("4", "4. 지하철 노선도 출력", RouteMapManager::run), - EXIT("Q", "Q. 종료", (scanner) -> exitGame()); + EXIT("Q", "Q. 종료", MainMenu::exitGame); private String number; private String name; - private Consumer nextAction; + private Runnable nextAction; private static boolean gameExit = true; - MainMenu(String number, String name, Consumer nextAction) { + MainMenu(String number, String name, Runnable nextAction) { this.number = number; this.name = name; this.nextAction = nextAction; @@ -44,8 +44,8 @@ private static void exitGame() { gameExit = false; } - public void execute(Scanner scanner) { - nextAction.accept(scanner); + public void execute() { + nextAction.run(); } public boolean isExit() { diff --git a/src/main/java/subway/manager/menu/StationMenu.java b/src/main/java/subway/manager/menu/StationMenu.java index e5cd6627c..463a6615c 100644 --- a/src/main/java/subway/manager/menu/StationMenu.java +++ b/src/main/java/subway/manager/menu/StationMenu.java @@ -4,13 +4,14 @@ import subway.view.Output; import java.util.Arrays; import java.util.Scanner; +import java.util.function.BiConsumer; import java.util.function.Consumer; public enum StationMenu { ADD("1", "1. 역 등록", StationController::save), REMOVE("2", "2. 역 삭제", StationController::remove), MANAGEMENT("3", "3. 역 관리", StationController::getList), - BACK("B", "B. 돌아가기", (StationController -> {})); + BACK("B", "B. 돌아가기", ((StationController) -> {})); private String number; private String name; @@ -23,7 +24,7 @@ public enum StationMenu { this.nextAction = nextAction; } - public static void printMenu(Scanner scanner) { + public static void printMenu() { System.out.println("## 역 관리 화면"); Arrays.stream(StationMenu.values()) .forEach(System.out::println); diff --git a/src/main/java/subway/view/Input.java b/src/main/java/subway/view/Input.java index 101118368..ad96bca60 100644 --- a/src/main/java/subway/view/Input.java +++ b/src/main/java/subway/view/Input.java @@ -3,14 +3,19 @@ import java.util.Scanner; public class Input { + private static Scanner scanner; public static final String CHOOSE_FUNCTION_MESSAGE = "## 원하는 기능을 선택하세요."; public static final String PLEASE_INPUT_STATION_MESSAGE = "## 등록할 역 이름을 입력하세요."; private Input() { } - public static String input(Scanner scanner, String message) { + public static void init(Scanner scanner) { + Input.scanner = scanner; + } + + public static String input( String message) { System.out.println(message); - return scanner.nextLine(); + return Input.scanner.nextLine(); } } From 3f11a92a8e69f5c5cd7de408ee6da77d145bea32 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 02:49:29 +0900 Subject: [PATCH 17/60] =?UTF-8?q?refactor:=20scanner=201=EB=B2=88=EB=A7=8C?= =?UTF-8?q?=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EB=90=98=EB=8F=84=EB=A1=9D=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/subway/view/Input.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/view/Input.java b/src/main/java/subway/view/Input.java index ad96bca60..afd443c73 100644 --- a/src/main/java/subway/view/Input.java +++ b/src/main/java/subway/view/Input.java @@ -11,7 +11,9 @@ private Input() { } public static void init(Scanner scanner) { - Input.scanner = scanner; + if (Input.scanner == null){ + Input.scanner = scanner; + } } public static String input( String message) { From 236ddefa7965a27de7bda4720f8a3d2543912397 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 02:50:07 +0900 Subject: [PATCH 18/60] =?UTF-8?q?refactor:=20=EB=92=A4=EB=A1=9C=EA=B0=80?= =?UTF-8?q?=EA=B8=B0=20=EC=9E=85=EB=A0=A5=EC=A0=84=EA=B9=8C=EC=A7=80=20?= =?UTF-8?q?=EB=B0=98=EB=B3=B5=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/StationManager.java | 12 +++++++----- src/main/java/subway/manager/menu/StationMenu.java | 12 ++++++++++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java index a7e4989cf..a366d45d8 100644 --- a/src/main/java/subway/manager/StationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -4,15 +4,17 @@ import subway.view.Input; import subway.view.Output; import subway.manager.menu.StationMenu; -import java.util.Scanner; public class StationManager { public static void run() { - Output.printNewLine(); - StationMenu.printMenu(); - StationMenu stationMenu = chooseMenu(); - stationMenu.execute(StationController.getInstance()); + StationMenu stationMenu; + do { + Output.printNewLine(); + StationMenu.printMenu(); + stationMenu = chooseMenu(); + stationMenu.execute(StationController.getInstance()); + } while (stationMenu.isBack()); } private static StationMenu chooseMenu() { diff --git a/src/main/java/subway/manager/menu/StationMenu.java b/src/main/java/subway/manager/menu/StationMenu.java index 463a6615c..bd23a5e6b 100644 --- a/src/main/java/subway/manager/menu/StationMenu.java +++ b/src/main/java/subway/manager/menu/StationMenu.java @@ -11,12 +11,12 @@ public enum StationMenu { ADD("1", "1. 역 등록", StationController::save), REMOVE("2", "2. 역 삭제", StationController::remove), MANAGEMENT("3", "3. 역 관리", StationController::getList), - BACK("B", "B. 돌아가기", ((StationController) -> {})); + BACK("B", "B. 돌아가기", (StationController) -> goBack()); private String number; private String name; private Consumer nextAction; - private static boolean gameExit = true; + private static boolean back = true; StationMenu(String number, String name, Consumer nextAction) { this.number = number; @@ -42,6 +42,14 @@ public void execute(StationController stationController) { nextAction.accept(stationController); } + private static void goBack() { + back = false; + } + + public boolean isBack() { + return back; + } + @Override public String toString() { return name; From fa95dc0f066653b878faee59164c09c9e47caf45 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 02:51:01 +0900 Subject: [PATCH 19/60] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EC=A0=80=EC=9E=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/controller/StationController.java | 10 ++++++++++ src/main/java/subway/service/StationService.java | 11 +++++++++++ 2 files changed, 21 insertions(+) create mode 100644 src/main/java/subway/service/StationService.java diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 8821f801a..55d41aa69 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -1,6 +1,9 @@ package subway.controller; import subway.domain.Station; +import subway.service.StationService; +import subway.view.Input; +import subway.view.Output; import java.util.List; public class StationController implements IController{ @@ -9,6 +12,13 @@ private StationController() {} @Override public void save() { + try { + Output.printNewLine(); + StationService.save(new Station(Input.input(Input.PLEASE_INPUT_STATION_MESSAGE))); + } catch (IllegalArgumentException e) { + Output.printNewLine(); + System.out.println(e.getMessage()); + } } @Override diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java new file mode 100644 index 000000000..5b9e55558 --- /dev/null +++ b/src/main/java/subway/service/StationService.java @@ -0,0 +1,11 @@ +package subway.service; + +import subway.domain.Station; +import subway.domain.StationRepository; + +public class StationService { + + public static void save(Station station) { + StationRepository.addStation(station); + } +} From ace323a22b6fddf37490923f07a35a669d3992c2 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 02:52:07 +0900 Subject: [PATCH 20/60] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c0e4e2a14..80e464ad4 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ * 지하철 역 메뉴를 입력 받는다. * 선택할 수 없는 메뉴인지 검증한다. * 지하철 역을 등록한다. -* 지하철 역 이름이 중복 되는지 검증한다. -* 지하철 역 이름이 2글자 이상인지 검증한다. + * 지하철 역 이름이 중복 되는지 검증한다. + * 지하철 역 이름이 2글자 이상인지 검증한다. * 지하철 역을 삭제한다. * 지하철 역 목록을 출력한다. * 삭제 시 노선에 등록된 지하철인지 검증한다. ( 노선에 등록 된 역은 삭제 불가) From 91d4057f903747861e31926b984b1df95ba8ed96 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 02:52:54 +0900 Subject: [PATCH 21/60] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0?= =?UTF-8?q?=EC=97=AD=20=EB=93=B1=EB=A1=9D=20=EC=8B=9C=20=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/domain/StationRepository.java | 7 +++++++ .../subway/exception/NameLengthException.java | 9 +++++++++ .../java/subway/service/StationService.java | 17 +++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 src/main/java/subway/exception/NameLengthException.java diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index b7245c0f3..678875394 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.Optional; public class StationRepository { private static final List stations = new ArrayList<>(); @@ -19,4 +20,10 @@ public static void addStation(Station station) { public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + + public static Optional findByName(String name) { + return stations().stream() + .filter(station -> station.getName().equals(name)) + .findFirst(); + } } diff --git a/src/main/java/subway/exception/NameLengthException.java b/src/main/java/subway/exception/NameLengthException.java new file mode 100644 index 000000000..9d720e0e5 --- /dev/null +++ b/src/main/java/subway/exception/NameLengthException.java @@ -0,0 +1,9 @@ +package subway.exception; + +public class NameLengthException extends IllegalArgumentException{ + private static final String message = "[ERROR] 이름은 2글자 이상입니다."; + + public NameLengthException() { + super(message); + } +} diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 5b9e55558..7adb0efdc 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -2,10 +2,27 @@ import subway.domain.Station; import subway.domain.StationRepository; +import subway.exception.NameLengthException; +import subway.exception.StationNameDuplicateException; public class StationService { + private static final int MIN_NAME_LENGTH = 2; public static void save(Station station) { + validateNameLength(station.getName()); + validateDuplicateName(station.getName()); StationRepository.addStation(station); } + + private static void validateNameLength(String name) { + if(name.length() < MIN_NAME_LENGTH) { + throw new NameLengthException(); + } + } + + private static void validateDuplicateName(String name) { + if(StationRepository.findByName(name).isPresent()) { + throw new StationNameDuplicateException(); + } + } } From d4906197465cb3855518c6ae3ea6564dbc7b3202 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:04:02 +0900 Subject: [PATCH 22/60] =?UTF-8?q?fix:=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/menu/StationMenu.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/subway/manager/menu/StationMenu.java b/src/main/java/subway/manager/menu/StationMenu.java index bd23a5e6b..94a55c684 100644 --- a/src/main/java/subway/manager/menu/StationMenu.java +++ b/src/main/java/subway/manager/menu/StationMenu.java @@ -10,7 +10,7 @@ public enum StationMenu { ADD("1", "1. 역 등록", StationController::save), REMOVE("2", "2. 역 삭제", StationController::remove), - MANAGEMENT("3", "3. 역 관리", StationController::getList), + MANAGEMENT("3", "3. 역 조회", StationController::getList), BACK("B", "B. 돌아가기", (StationController) -> goBack()); private String number; From 10fef5f5776bf469e142e59657a80576e12622f8 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:05:01 +0900 Subject: [PATCH 23/60] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/StationController.java | 7 +++++++ src/main/java/subway/service/StationService.java | 8 ++++++++ src/main/java/subway/view/Input.java | 1 + 3 files changed, 16 insertions(+) diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 55d41aa69..adc887afa 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -23,6 +23,13 @@ public void save() { @Override public void remove() { + try{ + Output.printNewLine(); + StationService.remove(Input.input(Input.PLEASE_INPUT_REMOVE_STATION_NAME)); + } catch (IllegalArgumentException e) { + Output.printNewLine(); + System.out.println(e.getMessage()); + } } @Override diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 7adb0efdc..7a20044bf 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -4,6 +4,7 @@ import subway.domain.StationRepository; import subway.exception.NameLengthException; import subway.exception.StationNameDuplicateException; +import subway.exception.StationNameNotFoundException; public class StationService { private static final int MIN_NAME_LENGTH = 2; @@ -14,6 +15,13 @@ public static void save(Station station) { StationRepository.addStation(station); } + public static void remove(String name) { + validateNameLength(name); + StationRepository.deleteStation( + StationRepository.findByName(name) + .orElseThrow(StationNameNotFoundException::new).getName()); + } + private static void validateNameLength(String name) { if(name.length() < MIN_NAME_LENGTH) { throw new NameLengthException(); diff --git a/src/main/java/subway/view/Input.java b/src/main/java/subway/view/Input.java index afd443c73..8a8da1086 100644 --- a/src/main/java/subway/view/Input.java +++ b/src/main/java/subway/view/Input.java @@ -6,6 +6,7 @@ public class Input { private static Scanner scanner; public static final String CHOOSE_FUNCTION_MESSAGE = "## 원하는 기능을 선택하세요."; public static final String PLEASE_INPUT_STATION_MESSAGE = "## 등록할 역 이름을 입력하세요."; + public static final String PLEASE_INPUT_REMOVE_STATION_NAME = "## 삭제할 역 이름을 입력하세요."; private Input() { } From 38e493eb0e36a7b5ecab9b15d6d0f0867fae7ac5 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:13:48 +0900 Subject: [PATCH 24/60] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/IController.java | 2 +- src/main/java/subway/controller/StationController.java | 5 +++-- src/main/java/subway/domain/Station.java | 5 +++++ src/main/java/subway/service/StationService.java | 5 +++++ src/main/java/subway/view/Output.java | 8 ++++++++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/controller/IController.java b/src/main/java/subway/controller/IController.java index 0de4c5ee5..7c354e74d 100644 --- a/src/main/java/subway/controller/IController.java +++ b/src/main/java/subway/controller/IController.java @@ -8,5 +8,5 @@ public interface IController { void remove(); - List getList(); + void getList(); } diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index adc887afa..b3517478f 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -33,8 +33,9 @@ public void remove() { } @Override - public List getList() { - return null; + public void getList() { + Output.printNewLine(); + Output.printByList(StationService.getAllStations()); } public static StationController getInstance() { diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..6e930d807 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -12,4 +12,9 @@ public String getName() { } // 추가 기능 구현 + + @Override + public String toString() { + return name; + } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 7a20044bf..6fd6a0574 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -5,6 +5,7 @@ import subway.exception.NameLengthException; import subway.exception.StationNameDuplicateException; import subway.exception.StationNameNotFoundException; +import java.util.List; public class StationService { private static final int MIN_NAME_LENGTH = 2; @@ -33,4 +34,8 @@ private static void validateDuplicateName(String name) { throw new StationNameDuplicateException(); } } + + public static List getAllStations() { + return StationRepository.stations(); + } } diff --git a/src/main/java/subway/view/Output.java b/src/main/java/subway/view/Output.java index 9407ee129..9f7ca4b03 100644 --- a/src/main/java/subway/view/Output.java +++ b/src/main/java/subway/view/Output.java @@ -1,7 +1,11 @@ package subway.view; +import java.util.List; + public class Output { + private static final String INFO_MESSAGE = "[INFO] %s\n"; + private Output() { } @@ -11,6 +15,10 @@ public static void print(String message) { printNewLine(); } + public static void printByList(List list) { + list.forEach(obj -> System.out.printf(INFO_MESSAGE, obj)); + } + public static void printNewLine() { System.out.println(); } From 49b76cb6e73df7d24e342875fda7168f65fc3d66 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:15:17 +0900 Subject: [PATCH 25/60] =?UTF-8?q?style:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import=EB=AC=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/IController.java | 2 -- src/main/java/subway/controller/StationController.java | 1 - 2 files changed, 3 deletions(-) diff --git a/src/main/java/subway/controller/IController.java b/src/main/java/subway/controller/IController.java index 7c354e74d..b7dc9256d 100644 --- a/src/main/java/subway/controller/IController.java +++ b/src/main/java/subway/controller/IController.java @@ -1,7 +1,5 @@ package subway.controller; -import java.util.List; - public interface IController { void save(); diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index b3517478f..58bab819c 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -4,7 +4,6 @@ import subway.service.StationService; import subway.view.Input; import subway.view.Output; -import java.util.List; public class StationController implements IController{ From 463f2138af7013c01fbef45fcaaf4b7302692ca1 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:17:11 +0900 Subject: [PATCH 26/60] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 80e464ad4..860f7f015 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ ## 구현할 기능 목록 * 데이터 초기 값 설정 기능 + * 지하철 역 초기값 설정 기능 + * 노선 초기값 설정 기능 * 메인 메뉴를 출력한다. * 원하는 메인 메뉴를 입력 받는다. * 선택할 수 없는 메뉴인지 검증한다. From b72b111c2062fa34a26cf996258d4e0dd578b35c Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:26:14 +0900 Subject: [PATCH 27/60] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EC=B4=88=EA=B8=B0=EA=B0=92=20=EB=93=B1=EB=A1=9D=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/subway/SubwayMap.java | 11 ++++++++++- src/main/java/subway/utils/InitStation.java | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/utils/InitStation.java diff --git a/src/main/java/subway/SubwayMap.java b/src/main/java/subway/SubwayMap.java index 42a710eeb..02cb601dd 100644 --- a/src/main/java/subway/SubwayMap.java +++ b/src/main/java/subway/SubwayMap.java @@ -1,8 +1,11 @@ package subway; +import subway.domain.Station; +import subway.domain.StationRepository; import subway.manager.MainManager; +import subway.utils.InitStation; import subway.view.Input; - +import java.util.Arrays; import java.util.Scanner; public class SubwayMap { @@ -14,5 +17,11 @@ public void run(Scanner scanner) { private void init(Scanner scanner) { Input.init(scanner); + initStation(); + } + + private void initStation() { + Arrays.stream(InitStation.values()) + .forEach(station -> StationRepository.addStation(new Station(station.name()))); } } diff --git a/src/main/java/subway/utils/InitStation.java b/src/main/java/subway/utils/InitStation.java new file mode 100644 index 000000000..b29e2a2d7 --- /dev/null +++ b/src/main/java/subway/utils/InitStation.java @@ -0,0 +1,5 @@ +package subway.utils; + +public enum InitStation { + 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역 +} From 781498a249eb74b12ef75deca8d1e219deb219a0 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:36:02 +0900 Subject: [PATCH 28/60] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 860f7f015..b67b0d298 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ * 지하철 역을 삭제한다. * 지하철 역 목록을 출력한다. * 삭제 시 노선에 등록된 지하철인지 검증한다. ( 노선에 등록 된 역은 삭제 불가) +* 원하는 노션 메뉴를 입력 받는다. + * 선택할 수 없는 메뉴인지 검증한다. * 지하철 노선을 등록한다. * 노선 이름이 중복 되는지 검증한다. * 노선 이름이 2글자 이상인지 검증한다. From 1cb49982b3293f631099079b986f57cbe555ead5 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:37:47 +0900 Subject: [PATCH 29/60] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b67b0d298..4b1cda0f5 100644 --- a/README.md +++ b/README.md @@ -15,22 +15,23 @@ * 지하철 역 이름이 중복 되는지 검증한다. * 지하철 역 이름이 2글자 이상인지 검증한다. * 지하철 역을 삭제한다. + * 노선에 등록된 지하철인지 검증한다. ( 노선에 등록 된 역은 삭제 불가) * 지하철 역 목록을 출력한다. -* 삭제 시 노선에 등록된 지하철인지 검증한다. ( 노선에 등록 된 역은 삭제 불가) +* 노선 메뉴를 출력한다. * 원하는 노션 메뉴를 입력 받는다. * 선택할 수 없는 메뉴인지 검증한다. * 지하철 노선을 등록한다. -* 노선 이름이 중복 되는지 검증한다. -* 노선 이름이 2글자 이상인지 검증한다. + * 노선 이름이 중복 되는지 검증한다. + * 노선 이름이 2글자 이상인지 검증한다. * 노선 상행 종점역을 등록한다. * 노선 하행 종점역을 등록한다, * 노선의 목록을 출력한다. * 노선에 역을 추가한다. -* 같은 노선에 중복 된 역이 등록 되는지 검증한다. -* 노선의 상행 종점역 보다 앞에 역 등록을 하는지 검증한다. -* 노선의 하행 종점역 보다 뒤에 역 등록을 하는지 검증한다. + * 같은 노선에 중복 된 역이 등록 되는지 검증한다. + * 노선의 상행 종점역 보다 앞에 역 등록을 하는지 검증한다. + * 노선의 하행 종점역 보다 뒤에 역 등록을 하는지 검증한다. * 노선에 등록 된 역을 제거한다. -* 노선에서 제거 된 역이 종점인지 검증한다. + * 노선에서 제거 된 역이 종점인지 검증한다. * 종점이 제거 될 경우 마지막 노선이 종점이 된다. * 노선에 포함 된 역이 2개 이하인지 검증한다. * 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 출력한다. From 82492dc824aae6a06d51c2284953da2d8a2a2284 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:38:38 +0900 Subject: [PATCH 30/60] =?UTF-8?q?feat:=20Exception=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/exception/StationNameDuplicateException.java | 9 +++++++++ .../subway/exception/StationNameNotFoundException.java | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/main/java/subway/exception/StationNameDuplicateException.java create mode 100644 src/main/java/subway/exception/StationNameNotFoundException.java diff --git a/src/main/java/subway/exception/StationNameDuplicateException.java b/src/main/java/subway/exception/StationNameDuplicateException.java new file mode 100644 index 000000000..a6982389b --- /dev/null +++ b/src/main/java/subway/exception/StationNameDuplicateException.java @@ -0,0 +1,9 @@ +package subway.exception; + +public class StationNameDuplicateException extends IllegalArgumentException{ + private static final String message = "[ERROR] 이미 등록된 역 이름입니다."; + + public StationNameDuplicateException() { + super(message); + } +} diff --git a/src/main/java/subway/exception/StationNameNotFoundException.java b/src/main/java/subway/exception/StationNameNotFoundException.java new file mode 100644 index 000000000..cdfe069c8 --- /dev/null +++ b/src/main/java/subway/exception/StationNameNotFoundException.java @@ -0,0 +1,9 @@ +package subway.exception; + +public class StationNameNotFoundException extends IllegalArgumentException{ + private static final String message = "[ERROR] 등록 되어 있지 않은 역입니다."; + + public StationNameNotFoundException() { + super(message); + } +} From 30697999eec2022ad9ef51be7511307b81822206 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:39:48 +0900 Subject: [PATCH 31/60] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/controller/LineController.java | 19 ++++++++ src/main/java/subway/manager/LineManager.java | 12 +++++ .../java/subway/manager/menu/LineMenu.java | 44 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 src/main/java/subway/controller/LineController.java create mode 100644 src/main/java/subway/manager/LineManager.java create mode 100644 src/main/java/subway/manager/menu/LineMenu.java diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java new file mode 100644 index 000000000..01fd2dd93 --- /dev/null +++ b/src/main/java/subway/controller/LineController.java @@ -0,0 +1,19 @@ +package subway.controller; + +public class LineController implements IController{ + + @Override + public void save() { + + } + + @Override + public void remove() { + + } + + @Override + public void getList() { + + } +} diff --git a/src/main/java/subway/manager/LineManager.java b/src/main/java/subway/manager/LineManager.java new file mode 100644 index 000000000..5142b1542 --- /dev/null +++ b/src/main/java/subway/manager/LineManager.java @@ -0,0 +1,12 @@ +package subway.manager; + +import subway.manager.menu.LineMenu; +import subway.view.Output; + +public class LineManager{ + + public static void run() { + Output.printNewLine(); + LineMenu.printMenu(); + } +} diff --git a/src/main/java/subway/manager/menu/LineMenu.java b/src/main/java/subway/manager/menu/LineMenu.java new file mode 100644 index 000000000..385b6d981 --- /dev/null +++ b/src/main/java/subway/manager/menu/LineMenu.java @@ -0,0 +1,44 @@ +package subway.manager.menu; + +import subway.controller.LineController; +import subway.view.Output; +import java.util.Arrays; +import java.util.function.Consumer; + +public enum LineMenu { + ADD("1", "1. 노선 등록", LineController::save), + REMOVE("2", "2. 노선 삭제", LineController::remove), + MANAGEMENT("3", "3. 노선 조회", LineController::getList), + BACK("B", "B. 돌아가기", (LineController) -> goBack()); + + private String number; + private String name; + private Consumer nextAction; + private static boolean back = true; + + LineMenu(String number, String name, Consumer nextAction) { + this.number = number; + this.name = name; + this.nextAction = nextAction; + } + + public static void printMenu() { + System.out.println("## 노선 관리 화면"); + Arrays.stream(StationMenu.values()) + .forEach(System.out::println); + Output.printNewLine(); + } + + private static void goBack() { + back = false; + } + + public boolean isBack() { + return back; + } + + @Override + public String toString() { + return name; + } +} From 13606c1a8963238933ebbcfc883b69eeb240d9f3 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 03:45:33 +0900 Subject: [PATCH 32/60] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20=EC=84=A0=ED=83=9D=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/controller/LineController.java | 8 ++++++++ src/main/java/subway/manager/LineManager.java | 20 +++++++++++++++++-- .../java/subway/manager/menu/LineMenu.java | 13 +++++++++++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index 01fd2dd93..fdcb61045 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -16,4 +16,12 @@ public void remove() { public void getList() { } + + public static LineController getInstance() { + return LineController.LazyHolder.INSTANCE; + } + + private static class LazyHolder { + private static final LineController INSTANCE = new LineController(); + } } diff --git a/src/main/java/subway/manager/LineManager.java b/src/main/java/subway/manager/LineManager.java index 5142b1542..c4a3f00f6 100644 --- a/src/main/java/subway/manager/LineManager.java +++ b/src/main/java/subway/manager/LineManager.java @@ -1,12 +1,28 @@ package subway.manager; +import subway.controller.LineController; import subway.manager.menu.LineMenu; +import subway.view.Input; import subway.view.Output; public class LineManager{ public static void run() { - Output.printNewLine(); - LineMenu.printMenu(); + LineMenu lineMenu; + do { + Output.printNewLine(); + LineMenu.printMenu(); + lineMenu = chooseMenu(); + lineMenu.execute(LineController.getInstance()); + } while (lineMenu.isBack()); + } + + private static LineMenu chooseMenu() { + try { + return LineMenu.getLineMenuType(Input.input(Input.CHOOSE_FUNCTION_MESSAGE)); + } catch (IllegalArgumentException e) { + Output.print(e.getMessage()); + return chooseMenu(); + } } } diff --git a/src/main/java/subway/manager/menu/LineMenu.java b/src/main/java/subway/manager/menu/LineMenu.java index 385b6d981..6aac052d8 100644 --- a/src/main/java/subway/manager/menu/LineMenu.java +++ b/src/main/java/subway/manager/menu/LineMenu.java @@ -24,11 +24,22 @@ public enum LineMenu { public static void printMenu() { System.out.println("## 노선 관리 화면"); - Arrays.stream(StationMenu.values()) + Arrays.stream(LineMenu.values()) .forEach(System.out::println); Output.printNewLine(); } + public static LineMenu getLineMenuType(String selectMenu) { + return Arrays.stream(LineMenu.values()) + .filter(lineMenu -> lineMenu.number.equals(selectMenu)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("[ERROR] 선택할 수 없는 기능입니다.")); + } + + public void execute(LineController lineController) { + nextAction.accept(lineController); + } + private static void goBack() { back = false; } From 6c15613c302ef50af2ac36bdcacf71e7bf34bcac Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 19:50:08 +0900 Subject: [PATCH 33/60] =?UTF-8?q?fix:=20=ED=95=A8=EC=88=98=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/menu/LineMenu.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/subway/manager/menu/LineMenu.java b/src/main/java/subway/manager/menu/LineMenu.java index 6aac052d8..68604b87c 100644 --- a/src/main/java/subway/manager/menu/LineMenu.java +++ b/src/main/java/subway/manager/menu/LineMenu.java @@ -9,7 +9,7 @@ public enum LineMenu { ADD("1", "1. 노선 등록", LineController::save), REMOVE("2", "2. 노선 삭제", LineController::remove), MANAGEMENT("3", "3. 노선 조회", LineController::getList), - BACK("B", "B. 돌아가기", (LineController) -> goBack()); + BACK("B", "B. 돌아가기", (LineController) -> LineMenu.goBack()); private String number; private String name; From c16d2235099408d673856fe275f88d0e19c66d7a Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:09:22 +0900 Subject: [PATCH 34/60] =?UTF-8?q?feat:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4b1cda0f5..b019ed4c9 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,11 @@ * 지하철 노선을 등록한다. * 노선 이름이 중복 되는지 검증한다. * 노선 이름이 2글자 이상인지 검증한다. -* 노선 상행 종점역을 등록한다. -* 노선 하행 종점역을 등록한다, +* 노선 종점역을 초기화 한다. + * 노선 상행 종점역을 등록한다. + * 노선 하행 종점역을 등록한다. + * 하행과 상행 종점에 등록된 역이 있는지 검증한다. + * 노선 하행과 상행 종점이 같은지 검증한다. * 노선의 목록을 출력한다. * 노선에 역을 추가한다. * 같은 노선에 중복 된 역이 등록 되는지 검증한다. From a088003d38dc965f379ab7f785e865ae4f4ab5a5 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:12:59 +0900 Subject: [PATCH 35/60] =?UTF-8?q?refactor:=20=EA=B3=B5=EB=B0=B1=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EB=8B=B4=EB=8B=B9=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/LineManager.java | 3 +-- src/main/java/subway/manager/MainManager.java | 2 -- src/main/java/subway/manager/StationManager.java | 1 - src/main/java/subway/manager/menu/LineMenu.java | 7 ++++--- src/main/java/subway/manager/menu/MainMenu.java | 8 +++----- src/main/java/subway/manager/menu/StationMenu.java | 8 +++----- src/main/java/subway/view/Input.java | 5 +++-- 7 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/main/java/subway/manager/LineManager.java b/src/main/java/subway/manager/LineManager.java index c4a3f00f6..d362e53a3 100644 --- a/src/main/java/subway/manager/LineManager.java +++ b/src/main/java/subway/manager/LineManager.java @@ -5,12 +5,11 @@ import subway.view.Input; import subway.view.Output; -public class LineManager{ +public class LineManager { public static void run() { LineMenu lineMenu; do { - Output.printNewLine(); LineMenu.printMenu(); lineMenu = chooseMenu(); lineMenu.execute(LineController.getInstance()); diff --git a/src/main/java/subway/manager/MainManager.java b/src/main/java/subway/manager/MainManager.java index d2e468ff9..14cca3e24 100644 --- a/src/main/java/subway/manager/MainManager.java +++ b/src/main/java/subway/manager/MainManager.java @@ -3,7 +3,6 @@ import subway.view.Input; import subway.manager.menu.MainMenu; import subway.view.Output; -import java.util.Scanner; public class MainManager { @@ -13,7 +12,6 @@ private MainManager() { public static void run() { MainMenu mainMenu; do { - Output.printNewLine(); MainMenu.printMenu(); mainMenu = chooseMenu(); mainMenu.execute(); diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java index a366d45d8..d5975fa5e 100644 --- a/src/main/java/subway/manager/StationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -10,7 +10,6 @@ public class StationManager { public static void run() { StationMenu stationMenu; do { - Output.printNewLine(); StationMenu.printMenu(); stationMenu = chooseMenu(); stationMenu.execute(StationController.getInstance()); diff --git a/src/main/java/subway/manager/menu/LineMenu.java b/src/main/java/subway/manager/menu/LineMenu.java index 68604b87c..001903747 100644 --- a/src/main/java/subway/manager/menu/LineMenu.java +++ b/src/main/java/subway/manager/menu/LineMenu.java @@ -11,10 +11,12 @@ public enum LineMenu { MANAGEMENT("3", "3. 노선 조회", LineController::getList), BACK("B", "B. 돌아가기", (LineController) -> LineMenu.goBack()); + private static final String menu = "## 노선 관리 화면"; + private static boolean back = true; private String number; private String name; private Consumer nextAction; - private static boolean back = true; + LineMenu(String number, String name, Consumer nextAction) { this.number = number; @@ -23,10 +25,9 @@ public enum LineMenu { } public static void printMenu() { - System.out.println("## 노선 관리 화면"); + Output.print(menu); Arrays.stream(LineMenu.values()) .forEach(System.out::println); - Output.printNewLine(); } public static LineMenu getLineMenuType(String selectMenu) { diff --git a/src/main/java/subway/manager/menu/MainMenu.java b/src/main/java/subway/manager/menu/MainMenu.java index 58cb3cc16..b3fc0ba32 100644 --- a/src/main/java/subway/manager/menu/MainMenu.java +++ b/src/main/java/subway/manager/menu/MainMenu.java @@ -5,8 +5,6 @@ import subway.manager.StationManager; import subway.view.Output; import java.util.Arrays; -import java.util.Scanner; -import java.util.function.Consumer; public enum MainMenu { STATION_MENU("1", "1. 역 관리", StationManager::run), @@ -15,10 +13,11 @@ public enum MainMenu { ROUTE_MAP_MENU("4", "4. 지하철 노선도 출력", RouteMapManager::run), EXIT("Q", "Q. 종료", MainMenu::exitGame); + private static final String menu = "## 메인 화면"; + private static boolean gameExit = true; private String number; private String name; private Runnable nextAction; - private static boolean gameExit = true; MainMenu(String number, String name, Runnable nextAction) { this.number = number; @@ -27,10 +26,9 @@ public enum MainMenu { } public static void printMenu() { - System.out.println("## 메인 화면"); + Output.print(menu); Arrays.stream(MainMenu.values()) .forEach(System.out::println); - Output.printNewLine(); } public static MainMenu getMainMenuType(String selectMenu) { diff --git a/src/main/java/subway/manager/menu/StationMenu.java b/src/main/java/subway/manager/menu/StationMenu.java index 94a55c684..75e87e179 100644 --- a/src/main/java/subway/manager/menu/StationMenu.java +++ b/src/main/java/subway/manager/menu/StationMenu.java @@ -3,8 +3,6 @@ import subway.controller.StationController; import subway.view.Output; import java.util.Arrays; -import java.util.Scanner; -import java.util.function.BiConsumer; import java.util.function.Consumer; public enum StationMenu { @@ -13,10 +11,11 @@ public enum StationMenu { MANAGEMENT("3", "3. 역 조회", StationController::getList), BACK("B", "B. 돌아가기", (StationController) -> goBack()); + private static final String menu = "## 역 관리 화면"; + private static boolean back = true; private String number; private String name; private Consumer nextAction; - private static boolean back = true; StationMenu(String number, String name, Consumer nextAction) { this.number = number; @@ -25,10 +24,9 @@ public enum StationMenu { } public static void printMenu() { - System.out.println("## 역 관리 화면"); + Output.print(menu); Arrays.stream(StationMenu.values()) .forEach(System.out::println); - Output.printNewLine(); } public static StationMenu getStationMenuType(String selectMenu) { diff --git a/src/main/java/subway/view/Input.java b/src/main/java/subway/view/Input.java index 8a8da1086..311b75046 100644 --- a/src/main/java/subway/view/Input.java +++ b/src/main/java/subway/view/Input.java @@ -12,12 +12,13 @@ private Input() { } public static void init(Scanner scanner) { - if (Input.scanner == null){ + if (Input.scanner == null) { Input.scanner = scanner; } } - public static String input( String message) { + public static String input(String message) { + Output.printNewLine(); System.out.println(message); return Input.scanner.nextLine(); } From 8db8064706206d5a2d5d4d06d04c00b39b5916cd Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:14:11 +0900 Subject: [PATCH 36/60] =?UTF-8?q?refactor:=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/service/StationService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 6fd6a0574..97d2e6fc0 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -18,9 +18,12 @@ public static void save(Station station) { public static void remove(String name) { validateNameLength(name); - StationRepository.deleteStation( - StationRepository.findByName(name) - .orElseThrow(StationNameNotFoundException::new).getName()); + StationRepository.deleteStation(isExists(name).getName()); + } + + public static Station isExists(String name) { + return StationRepository.findByName(name) + .orElseThrow(StationNameNotFoundException::new); } private static void validateNameLength(String name) { From 95931dfe452075b236247b869671c5e7f98f3c51 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:14:45 +0900 Subject: [PATCH 37/60] =?UTF-8?q?feat:=20equals=20&=20hashCode=20=EC=98=A4?= =?UTF-8?q?=EB=B2=84=EB=9D=BC=EC=9D=B4=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Station.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index 6e930d807..bc2dac960 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -17,4 +17,19 @@ public String getName() { public String toString() { return name; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Station station = (Station) o; + + return name != null ? name.equals(station.name) : station.name == null; + } + + @Override + public int hashCode() { + return name != null ? name.hashCode() : 0; + } } From b57ff827fb56a5550d31e384803a32e2f786bb07 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:16:21 +0900 Subject: [PATCH 38/60] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EA=B3=B5=EB=B0=B1=20=EB=9D=BC=EC=9D=B8=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/StationController.java | 1 - src/main/java/subway/view/Output.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 58bab819c..20ae34013 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -12,7 +12,6 @@ private StationController() {} @Override public void save() { try { - Output.printNewLine(); StationService.save(new Station(Input.input(Input.PLEASE_INPUT_STATION_MESSAGE))); } catch (IllegalArgumentException e) { Output.printNewLine(); diff --git a/src/main/java/subway/view/Output.java b/src/main/java/subway/view/Output.java index 9f7ca4b03..7b4594f1b 100644 --- a/src/main/java/subway/view/Output.java +++ b/src/main/java/subway/view/Output.java @@ -12,7 +12,6 @@ private Output() { public static void print(String message) { printNewLine(); System.out.println(message); - printNewLine(); } public static void printByList(List list) { From f0c5037597482be765c5f457cab8466bf3e12ba7 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:17:02 +0900 Subject: [PATCH 39/60] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=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 --- .../subway/controller/LineController.java | 14 +++++++-- src/main/java/subway/domain/Line.java | 20 +++++++++++++ .../java/subway/domain/LineRepository.java | 7 +++++ .../exception/LineNameDuplicateException.java | 9 ++++++ src/main/java/subway/service/LineService.java | 29 +++++++++++++++++++ src/main/java/subway/view/Input.java | 3 ++ 6 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 src/main/java/subway/exception/LineNameDuplicateException.java create mode 100644 src/main/java/subway/service/LineService.java diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index fdcb61045..6482063a5 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -1,10 +1,20 @@ package subway.controller; -public class LineController implements IController{ +import subway.domain.Line; +import subway.service.LineService; +import subway.view.Input; +import subway.view.Output; + +public class LineController implements IController { @Override public void save() { - + try { + LineService.save(new Line(Input.input(Input.PLEASE_INPUT_LINE_MESSAGE))); + } catch (IllegalArgumentException e) { + Output.printNewLine(); + System.out.println(e.getMessage()); + } } @Override diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..c41b0d91a 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,7 +1,13 @@ package subway.domain; +import subway.exception.TerminalNamesOverlapException; +import subway.service.StationService; +import subway.view.Input; + public class Line { private String name; + private Station upwardTerminalStation; + private Station downTerminalStation; public Line(String name) { this.name = name; @@ -12,4 +18,18 @@ public String getName() { } // 추가 기능 구현 + public void initTerminalStations() { + Station upwardTerminalStation = StationService.isExists( + Input.input(Input.PLEASE_INPUT_UPWARD_TERMINAL_STATION_MESSAGE)); + + Station downTerminalStation = StationService.isExists( + Input.input(Input.PLEASE_INPUT_DOWN_TERMINAL_STATION_MESSAGE)); + + if (upwardTerminalStation.equals(downTerminalStation)) { + throw new TerminalNamesOverlapException(); + } + + this.upwardTerminalStation = upwardTerminalStation; + this.downTerminalStation = downTerminalStation; + } } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 49132ddb6..6eedfee98 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.Optional; public class LineRepository { private static final List lines = new ArrayList<>(); @@ -19,4 +20,10 @@ public static void addLine(Line line) { public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + + public static Optional findByName(String name) { + return lines().stream() + .filter(line -> line.getName().equals(name)) + .findFirst(); + } } diff --git a/src/main/java/subway/exception/LineNameDuplicateException.java b/src/main/java/subway/exception/LineNameDuplicateException.java new file mode 100644 index 000000000..9ba3ec58e --- /dev/null +++ b/src/main/java/subway/exception/LineNameDuplicateException.java @@ -0,0 +1,9 @@ +package subway.exception; + +public class LineNameDuplicateException extends IllegalArgumentException { + private static final String message = "[ERROR] 이미 등록된 노선 이름입니다."; + + public LineNameDuplicateException() { + super(message); + } +} diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java new file mode 100644 index 000000000..2eb8320f0 --- /dev/null +++ b/src/main/java/subway/service/LineService.java @@ -0,0 +1,29 @@ +package subway.service; + +import subway.domain.Line; +import subway.domain.LineRepository; +import subway.exception.LineNameDuplicateException; +import subway.exception.NameLengthException; + +public class LineService { + private static final int MIN_NAME_LENGTH = 2; + + public static void save(Line line) { + validateNameLength(line.getName()); + validateDuplicateName(line.getName()); + line.initTerminalStations(); + LineRepository.addLine(line); + } + + private static void validateNameLength(String name) { + if (name.length() < MIN_NAME_LENGTH) { + throw new NameLengthException(); + } + } + + private static void validateDuplicateName(String name) { + if (LineRepository.findByName(name).isPresent()) { + throw new LineNameDuplicateException(); + } + } +} diff --git a/src/main/java/subway/view/Input.java b/src/main/java/subway/view/Input.java index 311b75046..ad33aa86b 100644 --- a/src/main/java/subway/view/Input.java +++ b/src/main/java/subway/view/Input.java @@ -7,6 +7,9 @@ public class Input { public static final String CHOOSE_FUNCTION_MESSAGE = "## 원하는 기능을 선택하세요."; public static final String PLEASE_INPUT_STATION_MESSAGE = "## 등록할 역 이름을 입력하세요."; public static final String PLEASE_INPUT_REMOVE_STATION_NAME = "## 삭제할 역 이름을 입력하세요."; + public static final String PLEASE_INPUT_LINE_MESSAGE = "## 등록할 노선 이름을 입력하세요."; + public static final String PLEASE_INPUT_UPWARD_TERMINAL_STATION_MESSAGE = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; + public static final String PLEASE_INPUT_DOWN_TERMINAL_STATION_MESSAGE = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; private Input() { } From 3bcac4aaed7e9f11b83d574fe1033194e4c9030f Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:24:28 +0900 Subject: [PATCH 40/60] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index b019ed4c9..0bdf54640 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ * 지하철 역 이름이 중복 되는지 검증한다. * 지하철 역 이름이 2글자 이상인지 검증한다. * 지하철 역을 삭제한다. + * 등록된 지하철 역인지 확인한다. * 노선에 등록된 지하철인지 검증한다. ( 노선에 등록 된 역은 삭제 불가) * 지하철 역 목록을 출력한다. * 노선 메뉴를 출력한다. @@ -33,6 +34,8 @@ * 같은 노선에 중복 된 역이 등록 되는지 검증한다. * 노선의 상행 종점역 보다 앞에 역 등록을 하는지 검증한다. * 노선의 하행 종점역 보다 뒤에 역 등록을 하는지 검증한다. +* 노선을 제거한다. + * 등록 된 노선인지 확인한다. * 노선에 등록 된 역을 제거한다. * 노선에서 제거 된 역이 종점인지 검증한다. * 종점이 제거 될 경우 마지막 노선이 종점이 된다. From 9ae124308924a117bb2ca39216fb15acf76f4d82 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:25:10 +0900 Subject: [PATCH 41/60] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=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/subway/controller/LineController.java | 8 +++++++- .../subway/exception/LineNameNotFoundException.java | 9 +++++++++ src/main/java/subway/service/LineService.java | 11 +++++++++++ src/main/java/subway/view/Input.java | 1 + 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/exception/LineNameNotFoundException.java diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index 6482063a5..fa583413e 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -2,6 +2,7 @@ import subway.domain.Line; import subway.service.LineService; +import subway.service.StationService; import subway.view.Input; import subway.view.Output; @@ -19,7 +20,12 @@ public void save() { @Override public void remove() { - + try{ + LineService.remove(Input.input(Input.PLEASE_INPUT_REMOVE_LINE_NAME)); + } catch (IllegalArgumentException e) { + Output.printNewLine(); + System.out.println(e.getMessage()); + } } @Override diff --git a/src/main/java/subway/exception/LineNameNotFoundException.java b/src/main/java/subway/exception/LineNameNotFoundException.java new file mode 100644 index 000000000..544414ca8 --- /dev/null +++ b/src/main/java/subway/exception/LineNameNotFoundException.java @@ -0,0 +1,9 @@ +package subway.exception; + +public class LineNameNotFoundException extends IllegalArgumentException{ + private static final String message = "[ERROR] 등록 되어 있지 않은 노선입니다."; + + public LineNameNotFoundException() { + super(message); + } +} diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 2eb8320f0..a0a436e0b 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -3,6 +3,7 @@ import subway.domain.Line; import subway.domain.LineRepository; import subway.exception.LineNameDuplicateException; +import subway.exception.LineNameNotFoundException; import subway.exception.NameLengthException; public class LineService { @@ -15,6 +16,16 @@ public static void save(Line line) { LineRepository.addLine(line); } + public static void remove(String name) { + validateNameLength(name); + LineRepository.deleteLineByName(isExists(name).getName()); + } + + public static Line isExists(String name) { + return LineRepository.findByName(name) + .orElseThrow(LineNameNotFoundException::new); + } + private static void validateNameLength(String name) { if (name.length() < MIN_NAME_LENGTH) { throw new NameLengthException(); diff --git a/src/main/java/subway/view/Input.java b/src/main/java/subway/view/Input.java index ad33aa86b..6e6b45094 100644 --- a/src/main/java/subway/view/Input.java +++ b/src/main/java/subway/view/Input.java @@ -10,6 +10,7 @@ public class Input { public static final String PLEASE_INPUT_LINE_MESSAGE = "## 등록할 노선 이름을 입력하세요."; public static final String PLEASE_INPUT_UPWARD_TERMINAL_STATION_MESSAGE = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; public static final String PLEASE_INPUT_DOWN_TERMINAL_STATION_MESSAGE = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; + public static final String PLEASE_INPUT_REMOVE_LINE_NAME = "## 삭제할 노션 이름을 입력하세요."; private Input() { } From eea2d1c866f0894fafbb06b68a9f8b60460d6c08 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:27:02 +0900 Subject: [PATCH 42/60] =?UTF-8?q?refactor:=20=EA=B3=B5=EB=B0=B1=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B8=20=EC=B6=9C=EB=A0=A5=20=EB=8B=B4=EB=8B=B9=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/StationController.java | 1 - src/main/java/subway/view/Output.java | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 20ae34013..fa0aa7b85 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -32,7 +32,6 @@ public void remove() { @Override public void getList() { - Output.printNewLine(); Output.printByList(StationService.getAllStations()); } diff --git a/src/main/java/subway/view/Output.java b/src/main/java/subway/view/Output.java index 7b4594f1b..87a9dddb8 100644 --- a/src/main/java/subway/view/Output.java +++ b/src/main/java/subway/view/Output.java @@ -15,6 +15,7 @@ public static void print(String message) { } public static void printByList(List list) { + printNewLine(); list.forEach(obj -> System.out.printf(INFO_MESSAGE, obj)); } From 18f09d70e72a520401cbd5c5b364a8267182094a Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:39:39 +0900 Subject: [PATCH 43/60] =?UTF-8?q?refactor:=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/LineController.java | 6 +++--- src/main/java/subway/controller/StationController.java | 1 + src/main/java/subway/view/Output.java | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index fa583413e..8552e5073 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -2,7 +2,6 @@ import subway.domain.Line; import subway.service.LineService; -import subway.service.StationService; import subway.view.Input; import subway.view.Output; @@ -20,7 +19,7 @@ public void save() { @Override public void remove() { - try{ + try { LineService.remove(Input.input(Input.PLEASE_INPUT_REMOVE_LINE_NAME)); } catch (IllegalArgumentException e) { Output.printNewLine(); @@ -30,7 +29,8 @@ public void remove() { @Override public void getList() { - + Output.print(Output.LINE_LIST); + Output.printByList(LineService.getAllLines()); } public static LineController getInstance() { diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index fa0aa7b85..318a8b139 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -32,6 +32,7 @@ public void remove() { @Override public void getList() { + Output.print(Output.STATION_LIST); Output.printByList(StationService.getAllStations()); } diff --git a/src/main/java/subway/view/Output.java b/src/main/java/subway/view/Output.java index 87a9dddb8..dedec4908 100644 --- a/src/main/java/subway/view/Output.java +++ b/src/main/java/subway/view/Output.java @@ -5,6 +5,8 @@ public class Output { private static final String INFO_MESSAGE = "[INFO] %s\n"; + public static final String STATION_LIST = "## 역 목록"; + public static final String LINE_LIST = "## 역 노선"; private Output() { } @@ -15,7 +17,6 @@ public static void print(String message) { } public static void printByList(List list) { - printNewLine(); list.forEach(obj -> System.out.printf(INFO_MESSAGE, obj)); } From 686542e0830e59278010f3bcd936f34c5f8c1330 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:54:00 +0900 Subject: [PATCH 44/60] =?UTF-8?q?refactor:=20manager=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=20=EC=B6=9C=EB=A0=A5=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/LineManager.java | 6 ++---- src/main/java/subway/manager/MainManager.java | 6 ++---- src/main/java/subway/manager/StationManager.java | 6 ++---- src/main/java/subway/manager/menu/LineMenu.java | 6 +++++- src/main/java/subway/manager/menu/MainMenu.java | 2 +- src/main/java/subway/manager/menu/StationMenu.java | 2 +- 6 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/main/java/subway/manager/LineManager.java b/src/main/java/subway/manager/LineManager.java index d362e53a3..783d10862 100644 --- a/src/main/java/subway/manager/LineManager.java +++ b/src/main/java/subway/manager/LineManager.java @@ -8,12 +8,10 @@ public class LineManager { public static void run() { - LineMenu lineMenu; do { LineMenu.printMenu(); - lineMenu = chooseMenu(); - lineMenu.execute(LineController.getInstance()); - } while (lineMenu.isBack()); + chooseMenu().execute(LineController.getInstance()); + } while (LineMenu.isBack()); } private static LineMenu chooseMenu() { diff --git a/src/main/java/subway/manager/MainManager.java b/src/main/java/subway/manager/MainManager.java index 14cca3e24..5972515da 100644 --- a/src/main/java/subway/manager/MainManager.java +++ b/src/main/java/subway/manager/MainManager.java @@ -10,12 +10,10 @@ private MainManager() { } public static void run() { - MainMenu mainMenu; do { MainMenu.printMenu(); - mainMenu = chooseMenu(); - mainMenu.execute(); - } while (mainMenu.isExit()); + chooseMenu().execute(); + } while (MainMenu.isExit()); } private static MainMenu chooseMenu() { diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java index d5975fa5e..1ed266d8f 100644 --- a/src/main/java/subway/manager/StationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -8,12 +8,10 @@ public class StationManager { public static void run() { - StationMenu stationMenu; do { StationMenu.printMenu(); - stationMenu = chooseMenu(); - stationMenu.execute(StationController.getInstance()); - } while (stationMenu.isBack()); + chooseMenu().execute(StationController.getInstance()); + } while (StationMenu.isBack()); } private static StationMenu chooseMenu() { diff --git a/src/main/java/subway/manager/menu/LineMenu.java b/src/main/java/subway/manager/menu/LineMenu.java index 001903747..d24cca1a5 100644 --- a/src/main/java/subway/manager/menu/LineMenu.java +++ b/src/main/java/subway/manager/menu/LineMenu.java @@ -41,11 +41,15 @@ public void execute(LineController lineController) { nextAction.accept(lineController); } + public static void initMenuStatus() { + back = true; + } + private static void goBack() { back = false; } - public boolean isBack() { + public static boolean isBack() { return back; } diff --git a/src/main/java/subway/manager/menu/MainMenu.java b/src/main/java/subway/manager/menu/MainMenu.java index b3fc0ba32..fd7f4aaf7 100644 --- a/src/main/java/subway/manager/menu/MainMenu.java +++ b/src/main/java/subway/manager/menu/MainMenu.java @@ -46,7 +46,7 @@ public void execute() { nextAction.run(); } - public boolean isExit() { + public static boolean isExit() { return gameExit; } diff --git a/src/main/java/subway/manager/menu/StationMenu.java b/src/main/java/subway/manager/menu/StationMenu.java index 75e87e179..751dc6929 100644 --- a/src/main/java/subway/manager/menu/StationMenu.java +++ b/src/main/java/subway/manager/menu/StationMenu.java @@ -44,7 +44,7 @@ private static void goBack() { back = false; } - public boolean isBack() { + public static boolean isBack() { return back; } From 5924bed8e70989085494c2acee87e90fa0897ea6 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:57:53 +0900 Subject: [PATCH 45/60] =?UTF-8?q?refactor:=20=EB=B3=80=EC=88=98=EB=AA=85,?= =?UTF-8?q?=20=ED=95=A8=EC=88=98=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/LineManager.java | 2 +- src/main/java/subway/manager/StationManager.java | 2 +- src/main/java/subway/manager/menu/LineMenu.java | 14 +++++++------- src/main/java/subway/manager/menu/StationMenu.java | 12 ++++++------ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/subway/manager/LineManager.java b/src/main/java/subway/manager/LineManager.java index 783d10862..3b8c509ee 100644 --- a/src/main/java/subway/manager/LineManager.java +++ b/src/main/java/subway/manager/LineManager.java @@ -11,7 +11,7 @@ public static void run() { do { LineMenu.printMenu(); chooseMenu().execute(LineController.getInstance()); - } while (LineMenu.isBack()); + } while (LineMenu.isRestart()); } private static LineMenu chooseMenu() { diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java index 1ed266d8f..dbf3a8342 100644 --- a/src/main/java/subway/manager/StationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -11,7 +11,7 @@ public static void run() { do { StationMenu.printMenu(); chooseMenu().execute(StationController.getInstance()); - } while (StationMenu.isBack()); + } while (StationMenu.isRestart()); } private static StationMenu chooseMenu() { diff --git a/src/main/java/subway/manager/menu/LineMenu.java b/src/main/java/subway/manager/menu/LineMenu.java index d24cca1a5..a537ac42c 100644 --- a/src/main/java/subway/manager/menu/LineMenu.java +++ b/src/main/java/subway/manager/menu/LineMenu.java @@ -9,10 +9,10 @@ public enum LineMenu { ADD("1", "1. 노선 등록", LineController::save), REMOVE("2", "2. 노선 삭제", LineController::remove), MANAGEMENT("3", "3. 노선 조회", LineController::getList), - BACK("B", "B. 돌아가기", (LineController) -> LineMenu.goBack()); + BACK("B", "B. 돌아가기", (LineController) -> LineMenu.goBackMenu()); private static final String menu = "## 노선 관리 화면"; - private static boolean back = true; + private static boolean restart = true; private String number; private String name; private Consumer nextAction; @@ -42,15 +42,15 @@ public void execute(LineController lineController) { } public static void initMenuStatus() { - back = true; + restart = true; } - private static void goBack() { - back = false; + private static void goBackMenu() { + restart = false; } - public static boolean isBack() { - return back; + public static boolean isRestart() { + return restart; } @Override diff --git a/src/main/java/subway/manager/menu/StationMenu.java b/src/main/java/subway/manager/menu/StationMenu.java index 751dc6929..7de0b10a1 100644 --- a/src/main/java/subway/manager/menu/StationMenu.java +++ b/src/main/java/subway/manager/menu/StationMenu.java @@ -9,10 +9,10 @@ public enum StationMenu { ADD("1", "1. 역 등록", StationController::save), REMOVE("2", "2. 역 삭제", StationController::remove), MANAGEMENT("3", "3. 역 조회", StationController::getList), - BACK("B", "B. 돌아가기", (StationController) -> goBack()); + BACK("B", "B. 돌아가기", (StationController) -> goBackMenu()); private static final String menu = "## 역 관리 화면"; - private static boolean back = true; + private static boolean restart = true; private String number; private String name; private Consumer nextAction; @@ -40,12 +40,12 @@ public void execute(StationController stationController) { nextAction.accept(stationController); } - private static void goBack() { - back = false; + private static void goBackMenu() { + restart = false; } - public static boolean isBack() { - return back; + public static boolean isRestart() { + return restart; } @Override From cabf2c482f9236856610becd01ca8e2bdf4eb2fc Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 21:58:23 +0900 Subject: [PATCH 46/60] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 5 +++++ src/main/java/subway/service/LineService.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index c41b0d91a..1826a5182 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -32,4 +32,9 @@ public void initTerminalStations() { this.upwardTerminalStation = upwardTerminalStation; this.downTerminalStation = downTerminalStation; } + + @Override + public String toString() { + return name; + } } diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index a0a436e0b..66fd79aaa 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -5,6 +5,7 @@ import subway.exception.LineNameDuplicateException; import subway.exception.LineNameNotFoundException; import subway.exception.NameLengthException; +import java.util.List; public class LineService { private static final int MIN_NAME_LENGTH = 2; @@ -37,4 +38,8 @@ private static void validateDuplicateName(String name) { throw new LineNameDuplicateException(); } } + + public static List getAllLines() { + return LineRepository.lines(); + } } From a790fc160c00fb9d7b858fe3d44da42364f8d2a4 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:01:43 +0900 Subject: [PATCH 47/60] =?UTF-8?q?fix:=20=ED=95=9C=EB=B2=88=20=EB=92=A4?= =?UTF-8?q?=EB=A1=9C=20=EA=B0=84=20=EB=A9=94=EB=89=B4=20=EB=8B=A4=EC=8B=9C?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9=20=EC=8B=9C=20=EB=B0=98=EB=B3=B5=20?= =?UTF-8?q?=EC=95=88=EB=90=98=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/LineManager.java | 1 + src/main/java/subway/manager/StationManager.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/subway/manager/LineManager.java b/src/main/java/subway/manager/LineManager.java index 3b8c509ee..c7fc6b952 100644 --- a/src/main/java/subway/manager/LineManager.java +++ b/src/main/java/subway/manager/LineManager.java @@ -9,6 +9,7 @@ public class LineManager { public static void run() { do { + LineMenu.initMenuStatus(); LineMenu.printMenu(); chooseMenu().execute(LineController.getInstance()); } while (LineMenu.isRestart()); diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java index dbf3a8342..12f3135b7 100644 --- a/src/main/java/subway/manager/StationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -9,6 +9,7 @@ public class StationManager { public static void run() { do { + StationMenu.initMenuStatus(); StationMenu.printMenu(); chooseMenu().execute(StationController.getInstance()); } while (StationMenu.isRestart()); From 76a975341a28e8f8caec20e3f57e3267c736f91b Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:04:00 +0900 Subject: [PATCH 48/60] =?UTF-8?q?fix:=20=EA=B5=AC=EA=B0=84=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=ED=98=B8=EC=B6=9C=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/menu/MainMenu.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/manager/menu/MainMenu.java b/src/main/java/subway/manager/menu/MainMenu.java index fd7f4aaf7..5a80ad541 100644 --- a/src/main/java/subway/manager/menu/MainMenu.java +++ b/src/main/java/subway/manager/menu/MainMenu.java @@ -2,6 +2,7 @@ import subway.manager.LineManager; import subway.manager.RouteMapManager; +import subway.manager.SectionManager; import subway.manager.StationManager; import subway.view.Output; import java.util.Arrays; @@ -9,7 +10,7 @@ public enum MainMenu { STATION_MENU("1", "1. 역 관리", StationManager::run), LINE_MENU("2", "2. 노선 관리", LineManager::run), - SECTION_MENU("3", "3. 구간 관리", StationManager::run), + SECTION_MENU("3", "3. 구간 관리", SectionManager::run), ROUTE_MAP_MENU("4", "4. 지하철 노선도 출력", RouteMapManager::run), EXIT("Q", "Q. 종료", MainMenu::exitGame); From ed1aff9ad9c7bcf5fb82ca14e7abe787f4c2c1c1 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:08:44 +0900 Subject: [PATCH 49/60] =?UTF-8?q?refactor:=20=EC=9D=B8=ED=84=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/IController.java | 10 ---------- src/main/java/subway/controller/LineController.java | 5 +---- src/main/java/subway/controller/StationController.java | 5 +---- 3 files changed, 2 insertions(+), 18 deletions(-) delete mode 100644 src/main/java/subway/controller/IController.java diff --git a/src/main/java/subway/controller/IController.java b/src/main/java/subway/controller/IController.java deleted file mode 100644 index b7dc9256d..000000000 --- a/src/main/java/subway/controller/IController.java +++ /dev/null @@ -1,10 +0,0 @@ -package subway.controller; - -public interface IController { - - void save(); - - void remove(); - - void getList(); -} diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index 8552e5073..3d2ea97d1 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -5,9 +5,8 @@ import subway.view.Input; import subway.view.Output; -public class LineController implements IController { +public class LineController { - @Override public void save() { try { LineService.save(new Line(Input.input(Input.PLEASE_INPUT_LINE_MESSAGE))); @@ -17,7 +16,6 @@ public void save() { } } - @Override public void remove() { try { LineService.remove(Input.input(Input.PLEASE_INPUT_REMOVE_LINE_NAME)); @@ -27,7 +25,6 @@ public void remove() { } } - @Override public void getList() { Output.print(Output.LINE_LIST); Output.printByList(LineService.getAllLines()); diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 318a8b139..7fa71893f 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -5,11 +5,10 @@ import subway.view.Input; import subway.view.Output; -public class StationController implements IController{ +public class StationController { private StationController() {} - @Override public void save() { try { StationService.save(new Station(Input.input(Input.PLEASE_INPUT_STATION_MESSAGE))); @@ -19,7 +18,6 @@ public void save() { } } - @Override public void remove() { try{ Output.printNewLine(); @@ -30,7 +28,6 @@ public void remove() { } } - @Override public void getList() { Output.print(Output.STATION_LIST); Output.printByList(StationService.getAllStations()); From c71d1a499cbcf4e80241498352bf8bbdb010584f Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:10:22 +0900 Subject: [PATCH 50/60] =?UTF-8?q?feat:=20=EB=A9=94=EB=89=B4=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/manager/menu/StationMenu.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/subway/manager/menu/StationMenu.java b/src/main/java/subway/manager/menu/StationMenu.java index 7de0b10a1..50b133f9a 100644 --- a/src/main/java/subway/manager/menu/StationMenu.java +++ b/src/main/java/subway/manager/menu/StationMenu.java @@ -40,6 +40,10 @@ public void execute(StationController stationController) { nextAction.accept(stationController); } + public static void initMenuStatus() { + restart = true; + } + private static void goBackMenu() { restart = false; } From 2bea1653794adb27fc5952468a6f9d9fe4a946d6 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:16:45 +0900 Subject: [PATCH 51/60] =?UTF-8?q?refactor:=20=EA=B8=B0=EB=B3=B8=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/LineController.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index 3d2ea97d1..9147f795a 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -7,6 +7,9 @@ public class LineController { + private LineController() { + } + public void save() { try { LineService.save(new Line(Input.input(Input.PLEASE_INPUT_LINE_MESSAGE))); From a49496f145f82c4438edd4184fd7426dd7636bdd Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:17:28 +0900 Subject: [PATCH 52/60] =?UTF-8?q?style:=20=EC=BD=94=EB=94=A9=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/StationController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 7fa71893f..1ee038b93 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -7,7 +7,8 @@ public class StationController { - private StationController() {} + private StationController() { + } public void save() { try { From 03b6a551d9b066b41420082872887b0eb1f9f8a7 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:18:06 +0900 Subject: [PATCH 53/60] =?UTF-8?q?feat:=20=EC=97=90=EB=9F=AC=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/exception/TerminalNamesOverlapException.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/subway/exception/TerminalNamesOverlapException.java diff --git a/src/main/java/subway/exception/TerminalNamesOverlapException.java b/src/main/java/subway/exception/TerminalNamesOverlapException.java new file mode 100644 index 000000000..1556735d0 --- /dev/null +++ b/src/main/java/subway/exception/TerminalNamesOverlapException.java @@ -0,0 +1,9 @@ +package subway.exception; + +public class TerminalNamesOverlapException extends IllegalArgumentException { + private static final String message = "[ERROR] 하행 종점과 상행 종점이 같은 역입니다."; + + public TerminalNamesOverlapException() { + super(message); + } +} From 3b8ed7cb53898bf7a88a04ab31aaa5bd9ec34042 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:18:39 +0900 Subject: [PATCH 54/60] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B0=84=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=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 --- .../subway/controller/SectionController.java | 21 ++++++++ .../java/subway/manager/SectionManager.java | 14 ++++++ .../java/subway/manager/menu/SectionMenu.java | 48 +++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 src/main/java/subway/controller/SectionController.java create mode 100644 src/main/java/subway/manager/SectionManager.java create mode 100644 src/main/java/subway/manager/menu/SectionMenu.java diff --git a/src/main/java/subway/controller/SectionController.java b/src/main/java/subway/controller/SectionController.java new file mode 100644 index 000000000..121fe4143 --- /dev/null +++ b/src/main/java/subway/controller/SectionController.java @@ -0,0 +1,21 @@ +package subway.controller; + +public class SectionController { + + private SectionController () { + } + + public void save() { + } + + public void remove() { + } + + public static SectionController getInstance() { + return SectionController.LazyHolder.INSTANCE; + } + + private static class LazyHolder { + private static final SectionController INSTANCE = new SectionController(); + } +} diff --git a/src/main/java/subway/manager/SectionManager.java b/src/main/java/subway/manager/SectionManager.java new file mode 100644 index 000000000..51a8b65b3 --- /dev/null +++ b/src/main/java/subway/manager/SectionManager.java @@ -0,0 +1,14 @@ +package subway.manager; + +import subway.manager.menu.LineMenu; +import subway.manager.menu.SectionMenu; + +public class SectionManager{ + + public static void run() { + do { + SectionMenu.initMenuStatus(); + SectionMenu.printMenu(); + } while (LineMenu.isRestart()); + } +} diff --git a/src/main/java/subway/manager/menu/SectionMenu.java b/src/main/java/subway/manager/menu/SectionMenu.java new file mode 100644 index 000000000..be2b5b351 --- /dev/null +++ b/src/main/java/subway/manager/menu/SectionMenu.java @@ -0,0 +1,48 @@ +package subway.manager.menu; + +import subway.controller.SectionController; +import subway.view.Output; + +import java.util.Arrays; +import java.util.function.Consumer; + +public enum SectionMenu { + ADD("1", "1. 구간 등록", SectionController::save), + REMOVE("2", "2. 구간 삭제", SectionController::remove), + BACK("B", "B. 돌아가기", (sectionController) -> SectionMenu.goBackMenu()); + + private static final String menu = "## 구간 관리 화면"; + private static boolean restart = true; + private String number; + private String name; + private Consumer nextAction; + + SectionMenu(String number, String name, Consumer nextAction) { + this.number = number; + this.name = name; + this.nextAction = nextAction; + } + + public static void printMenu() { + Output.print(menu); + Arrays.stream(SectionMenu.values()) + .forEach(System.out::println); + } + + public static void initMenuStatus() { + restart = true; + } + + private static void goBackMenu() { + restart = false; + } + + public static boolean isRestart() { + return restart; + } + + @Override + public String toString() { + return name; + } +} From ce1a43d5815e6f88f7c94ef2da3b3cf4a76e1af4 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:24:26 +0900 Subject: [PATCH 55/60] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0bdf54640..891d8c162 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ * 지하철 역 이름이 2글자 이상인지 검증한다. * 지하철 역을 삭제한다. * 등록된 지하철 역인지 확인한다. - * 노선에 등록된 지하철인지 검증한다. ( 노선에 등록 된 역은 삭제 불가) * 지하철 역 목록을 출력한다. * 노선 메뉴를 출력한다. * 원하는 노션 메뉴를 입력 받는다. @@ -38,8 +37,20 @@ * 등록 된 노선인지 확인한다. * 노선에 등록 된 역을 제거한다. * 노선에서 제거 된 역이 종점인지 검증한다. -* 종점이 제거 될 경우 마지막 노선이 종점이 된다. -* 노선에 포함 된 역이 2개 이하인지 검증한다. +* 구간 메뉴를 출력한다. +* 원하는 메인 메뉴를 입력 받는다. + * 선택할 수 없는 메뉴인지 검증한다. + + +* 구간을 등록한다. + * 노선에 등록 된 지하철 역 보다 큰 숫자인지 검증 + * 음수 입력 검증 +* 구간을 삭제한다. + * 노선에 포함 된 역이 2개 이하인지 검증한다. + * 노선에 등록 된 역의 범위를 확인한다. +* 노선 초기값 설정 기능 +* 노선에 등록된 지하철인지 검증한다. ( 노선에 등록 된 역은 삭제 불가) +* 종점이 제거 될 경우 마지막 노선이 종점이 된다. * 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 출력한다.
From a064a564536d00abda96c18d1b0edf1b18bc8676 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:29:40 +0900 Subject: [PATCH 56/60] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B0=84=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20=EC=84=A0=ED=83=9D=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/manager/SectionManager.java | 17 +++++++++++++++-- .../java/subway/manager/menu/SectionMenu.java | 12 +++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/manager/SectionManager.java b/src/main/java/subway/manager/SectionManager.java index 51a8b65b3..1ff935b6d 100644 --- a/src/main/java/subway/manager/SectionManager.java +++ b/src/main/java/subway/manager/SectionManager.java @@ -1,14 +1,27 @@ package subway.manager; +import subway.controller.SectionController; import subway.manager.menu.LineMenu; import subway.manager.menu.SectionMenu; +import subway.view.Input; +import subway.view.Output; -public class SectionManager{ +public class SectionManager { public static void run() { do { SectionMenu.initMenuStatus(); SectionMenu.printMenu(); - } while (LineMenu.isRestart()); + chooseMenu().execute(SectionController.getInstance()); + } while (SectionMenu.isRestart()); + } + + private static SectionMenu chooseMenu() { + try { + return SectionMenu.getSectionMenuType(Input.input(Input.CHOOSE_FUNCTION_MESSAGE)); + } catch (IllegalArgumentException e) { + Output.print(e.getMessage()); + return chooseMenu(); + } } } diff --git a/src/main/java/subway/manager/menu/SectionMenu.java b/src/main/java/subway/manager/menu/SectionMenu.java index be2b5b351..6361cac34 100644 --- a/src/main/java/subway/manager/menu/SectionMenu.java +++ b/src/main/java/subway/manager/menu/SectionMenu.java @@ -2,7 +2,6 @@ import subway.controller.SectionController; import subway.view.Output; - import java.util.Arrays; import java.util.function.Consumer; @@ -29,6 +28,17 @@ public static void printMenu() { .forEach(System.out::println); } + public static SectionMenu getSectionMenuType(String selectMenu) { + return Arrays.stream(SectionMenu.values()) + .filter(SectionMenu -> SectionMenu.number.equals(selectMenu)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("[ERROR] 선택할 수 없는 기능입니다.")); + } + + public void execute(SectionController sectionController) { + nextAction.accept(sectionController); + } + public static void initMenuStatus() { restart = true; } From b3057e31082217f208883f09e1711fe3a489d791 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:36:44 +0900 Subject: [PATCH 57/60] =?UTF-8?q?refactor:=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EB=A9=94=EC=84=B8=EC=A7=80=20=EC=83=81=EC=88=98=EB=AA=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/LineController.java | 2 +- .../java/subway/controller/StationController.java | 2 +- src/main/java/subway/domain/Line.java | 4 ++-- src/main/java/subway/manager/LineManager.java | 2 +- src/main/java/subway/manager/MainManager.java | 2 +- src/main/java/subway/manager/SectionManager.java | 2 +- src/main/java/subway/manager/StationManager.java | 2 +- src/main/java/subway/view/Input.java | 11 ++++++----- 8 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index 9147f795a..a5ae052c3 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -12,7 +12,7 @@ private LineController() { public void save() { try { - LineService.save(new Line(Input.input(Input.PLEASE_INPUT_LINE_MESSAGE))); + LineService.save(new Line(Input.input(Input.PLEASE_INPUT_LINE_NAME))); } catch (IllegalArgumentException e) { Output.printNewLine(); System.out.println(e.getMessage()); diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 1ee038b93..9514cba95 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -12,7 +12,7 @@ private StationController() { public void save() { try { - StationService.save(new Station(Input.input(Input.PLEASE_INPUT_STATION_MESSAGE))); + StationService.save(new Station(Input.input(Input.PLEASE_INPUT_STATION_NAME))); } catch (IllegalArgumentException e) { Output.printNewLine(); System.out.println(e.getMessage()); diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 1826a5182..e3b19daec 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -20,10 +20,10 @@ public String getName() { // 추가 기능 구현 public void initTerminalStations() { Station upwardTerminalStation = StationService.isExists( - Input.input(Input.PLEASE_INPUT_UPWARD_TERMINAL_STATION_MESSAGE)); + Input.input(Input.PLEASE_INPUT_UPWARD_TERMINAL_STATION_NAME)); Station downTerminalStation = StationService.isExists( - Input.input(Input.PLEASE_INPUT_DOWN_TERMINAL_STATION_MESSAGE)); + Input.input(Input.PLEASE_INPUT_DOWN_TERMINAL_STATION_NAME)); if (upwardTerminalStation.equals(downTerminalStation)) { throw new TerminalNamesOverlapException(); diff --git a/src/main/java/subway/manager/LineManager.java b/src/main/java/subway/manager/LineManager.java index c7fc6b952..23cc62e0a 100644 --- a/src/main/java/subway/manager/LineManager.java +++ b/src/main/java/subway/manager/LineManager.java @@ -17,7 +17,7 @@ public static void run() { private static LineMenu chooseMenu() { try { - return LineMenu.getLineMenuType(Input.input(Input.CHOOSE_FUNCTION_MESSAGE)); + return LineMenu.getLineMenuType(Input.input(Input.CHOOSE_FUNCTION)); } catch (IllegalArgumentException e) { Output.print(e.getMessage()); return chooseMenu(); diff --git a/src/main/java/subway/manager/MainManager.java b/src/main/java/subway/manager/MainManager.java index 5972515da..5b16a3908 100644 --- a/src/main/java/subway/manager/MainManager.java +++ b/src/main/java/subway/manager/MainManager.java @@ -18,7 +18,7 @@ public static void run() { private static MainMenu chooseMenu() { try { - return MainMenu.getMainMenuType(Input.input(Input.CHOOSE_FUNCTION_MESSAGE)); + return MainMenu.getMainMenuType(Input.input(Input.CHOOSE_FUNCTION)); } catch (IllegalArgumentException e) { Output.print(e.getMessage()); return chooseMenu(); diff --git a/src/main/java/subway/manager/SectionManager.java b/src/main/java/subway/manager/SectionManager.java index 1ff935b6d..4b59593f6 100644 --- a/src/main/java/subway/manager/SectionManager.java +++ b/src/main/java/subway/manager/SectionManager.java @@ -18,7 +18,7 @@ public static void run() { private static SectionMenu chooseMenu() { try { - return SectionMenu.getSectionMenuType(Input.input(Input.CHOOSE_FUNCTION_MESSAGE)); + return SectionMenu.getSectionMenuType(Input.input(Input.CHOOSE_FUNCTION)); } catch (IllegalArgumentException e) { Output.print(e.getMessage()); return chooseMenu(); diff --git a/src/main/java/subway/manager/StationManager.java b/src/main/java/subway/manager/StationManager.java index 12f3135b7..994789902 100644 --- a/src/main/java/subway/manager/StationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -17,7 +17,7 @@ public static void run() { private static StationMenu chooseMenu() { try { - return StationMenu.getStationMenuType(Input.input(Input.CHOOSE_FUNCTION_MESSAGE)); + return StationMenu.getStationMenuType(Input.input(Input.CHOOSE_FUNCTION)); } catch (IllegalArgumentException e) { Output.print(e.getMessage()); return chooseMenu(); diff --git a/src/main/java/subway/view/Input.java b/src/main/java/subway/view/Input.java index 6e6b45094..f90f47ae3 100644 --- a/src/main/java/subway/view/Input.java +++ b/src/main/java/subway/view/Input.java @@ -4,12 +4,13 @@ public class Input { private static Scanner scanner; - public static final String CHOOSE_FUNCTION_MESSAGE = "## 원하는 기능을 선택하세요."; - public static final String PLEASE_INPUT_STATION_MESSAGE = "## 등록할 역 이름을 입력하세요."; + + public static final String CHOOSE_FUNCTION = "## 원하는 기능을 선택하세요."; + public static final String PLEASE_INPUT_STATION_NAME = "## 등록할 역 이름을 입력하세요."; public static final String PLEASE_INPUT_REMOVE_STATION_NAME = "## 삭제할 역 이름을 입력하세요."; - public static final String PLEASE_INPUT_LINE_MESSAGE = "## 등록할 노선 이름을 입력하세요."; - public static final String PLEASE_INPUT_UPWARD_TERMINAL_STATION_MESSAGE = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; - public static final String PLEASE_INPUT_DOWN_TERMINAL_STATION_MESSAGE = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; + public static final String PLEASE_INPUT_LINE_NAME = "## 등록할 노선 이름을 입력하세요."; + public static final String PLEASE_INPUT_UPWARD_TERMINAL_STATION_NAME = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; + public static final String PLEASE_INPUT_DOWN_TERMINAL_STATION_NAME = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; public static final String PLEASE_INPUT_REMOVE_LINE_NAME = "## 삭제할 노션 이름을 입력하세요."; private Input() { From 3162b3b475f66d958c8f327fd330ec76c9604ac9 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 22:45:54 +0900 Subject: [PATCH 58/60] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0?= =?UTF-8?q?=EC=97=AD=20=EC=B4=88=EA=B8=B0=20=EC=84=A4=EC=A0=95=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 --- src/main/java/subway/SubwayMap.java | 13 +++++++++++-- src/main/java/subway/utils/InitLine.java | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 src/main/java/subway/utils/InitLine.java diff --git a/src/main/java/subway/SubwayMap.java b/src/main/java/subway/SubwayMap.java index 02cb601dd..a8fa2c849 100644 --- a/src/main/java/subway/SubwayMap.java +++ b/src/main/java/subway/SubwayMap.java @@ -1,8 +1,11 @@ package subway; +import subway.domain.Line; +import subway.domain.LineRepository; import subway.domain.Station; import subway.domain.StationRepository; import subway.manager.MainManager; +import subway.utils.InitLine; import subway.utils.InitStation; import subway.view.Input; import java.util.Arrays; @@ -17,11 +20,17 @@ public void run(Scanner scanner) { private void init(Scanner scanner) { Input.init(scanner); - initStation(); + initStations(); + initLines(); } - private void initStation() { + private void initStations() { Arrays.stream(InitStation.values()) .forEach(station -> StationRepository.addStation(new Station(station.name()))); } + + private void initLines() { + Arrays.stream(InitLine.values()) + .forEach(line -> LineRepository.addLine(new Line(line.getName()))); + } } diff --git a/src/main/java/subway/utils/InitLine.java b/src/main/java/subway/utils/InitLine.java new file mode 100644 index 000000000..3ddf5458a --- /dev/null +++ b/src/main/java/subway/utils/InitLine.java @@ -0,0 +1,15 @@ +package subway.utils; + +public enum InitLine { + LINE2("2호선"), LINE3("3호선"), SINBUNDANG("신분당선"); + + private String name; + + InitLine(String name){ + this.name = name; + } + + public String getName() { + return name; + } +} From 485571d754c4e5f8fe8a87d3ad133508250d6c3e Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 23:08:07 +0900 Subject: [PATCH 59/60] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 891d8c162..7445305b1 100644 --- a/README.md +++ b/README.md @@ -41,14 +41,13 @@ * 원하는 메인 메뉴를 입력 받는다. * 선택할 수 없는 메뉴인지 검증한다. - +## 미구현 기능 목록 * 구간을 등록한다. * 노선에 등록 된 지하철 역 보다 큰 숫자인지 검증 * 음수 입력 검증 * 구간을 삭제한다. * 노선에 포함 된 역이 2개 이하인지 검증한다. * 노선에 등록 된 역의 범위를 확인한다. -* 노선 초기값 설정 기능 * 노선에 등록된 지하철인지 검증한다. ( 노선에 등록 된 역은 삭제 불가) * 종점이 제거 될 경우 마지막 노선이 종점이 된다. * 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 출력한다. From 07fac93e16010ebda35b23d9f22d343f544c94b5 Mon Sep 17 00:00:00 2001 From: LeeJuHyuk Date: Tue, 15 Dec 2020 23:20:16 +0900 Subject: [PATCH 60/60] =?UTF-8?q?style:=20=EC=9E=90=EB=B0=94=20=EC=BD=94?= =?UTF-8?q?=EB=94=A9=20=EC=BB=A8=EB=B2=A4=EC=85=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/StationController.java | 2 +- src/main/java/subway/exception/LineNameNotFoundException.java | 2 +- src/main/java/subway/exception/NameLengthException.java | 2 +- .../java/subway/exception/StationNameNotFoundException.java | 2 +- src/main/java/subway/service/StationService.java | 4 ++-- src/main/java/subway/utils/InitLine.java | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 9514cba95..60523fd74 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -20,7 +20,7 @@ public void save() { } public void remove() { - try{ + try { Output.printNewLine(); StationService.remove(Input.input(Input.PLEASE_INPUT_REMOVE_STATION_NAME)); } catch (IllegalArgumentException e) { diff --git a/src/main/java/subway/exception/LineNameNotFoundException.java b/src/main/java/subway/exception/LineNameNotFoundException.java index 544414ca8..35a36eeba 100644 --- a/src/main/java/subway/exception/LineNameNotFoundException.java +++ b/src/main/java/subway/exception/LineNameNotFoundException.java @@ -1,6 +1,6 @@ package subway.exception; -public class LineNameNotFoundException extends IllegalArgumentException{ +public class LineNameNotFoundException extends IllegalArgumentException { private static final String message = "[ERROR] 등록 되어 있지 않은 노선입니다."; public LineNameNotFoundException() { diff --git a/src/main/java/subway/exception/NameLengthException.java b/src/main/java/subway/exception/NameLengthException.java index 9d720e0e5..cfa94241f 100644 --- a/src/main/java/subway/exception/NameLengthException.java +++ b/src/main/java/subway/exception/NameLengthException.java @@ -1,6 +1,6 @@ package subway.exception; -public class NameLengthException extends IllegalArgumentException{ +public class NameLengthException extends IllegalArgumentException { private static final String message = "[ERROR] 이름은 2글자 이상입니다."; public NameLengthException() { diff --git a/src/main/java/subway/exception/StationNameNotFoundException.java b/src/main/java/subway/exception/StationNameNotFoundException.java index cdfe069c8..ccd96ba06 100644 --- a/src/main/java/subway/exception/StationNameNotFoundException.java +++ b/src/main/java/subway/exception/StationNameNotFoundException.java @@ -1,6 +1,6 @@ package subway.exception; -public class StationNameNotFoundException extends IllegalArgumentException{ +public class StationNameNotFoundException extends IllegalArgumentException { private static final String message = "[ERROR] 등록 되어 있지 않은 역입니다."; public StationNameNotFoundException() { diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 97d2e6fc0..aac66d08e 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -27,13 +27,13 @@ public static Station isExists(String name) { } private static void validateNameLength(String name) { - if(name.length() < MIN_NAME_LENGTH) { + if (name.length() < MIN_NAME_LENGTH) { throw new NameLengthException(); } } private static void validateDuplicateName(String name) { - if(StationRepository.findByName(name).isPresent()) { + if (StationRepository.findByName(name).isPresent()) { throw new StationNameDuplicateException(); } } diff --git a/src/main/java/subway/utils/InitLine.java b/src/main/java/subway/utils/InitLine.java index 3ddf5458a..e18734654 100644 --- a/src/main/java/subway/utils/InitLine.java +++ b/src/main/java/subway/utils/InitLine.java @@ -5,7 +5,7 @@ public enum InitLine { private String name; - InitLine(String name){ + InitLine(String name) { this.name = name; }