From 5daad96fa1eadd491aa606e57748ce7d23208343 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Sun, 13 Dec 2020 14:21:40 +0900 Subject: [PATCH 01/40] =?UTF-8?q?docs(README):=20docs/README.md=20?= =?UTF-8?q?=EC=97=90=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 103 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..878c476da --- /dev/null +++ b/docs/README.md @@ -0,0 +1,103 @@ +# 미션 - 지하철 노선도 미션 🚇 + +### 💻 기능 구현 목록 + +- 프로그램 시작 시, 사전 등록정보로 역과 노선 초기 설정 +- 메인화면 기능 목록(1, 2, 3, 4, Q)과 입력 안내 문구 출력 +- 원하는 기능 입력 + - `예외` (1, 2, 3, 4, Q) 외에 다른 값을 입력한 경우 + - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 + +#### 1 역관리 +- 역 관리 화면 기능 목록(1, 2, 3, B)과 입력 안내 문구 출력 +- 원하는 기능 입력 + - `예외` (1, 2, 3, B) 외에 다른 값을 입력한 경우 + - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 + - `1 역등록` + - 역 이름 입력 받는 문구 출력 + - 등록할 역 이름 입력 + - `예외` 이미 등록된 역인 경우 + - `예외` 역 이름이 2글자 미만인 경우 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - 등록완료 문구 출력 후 메인화면으로 돌아감 + - `2 역삭제` + - 역 이름 입력 받는 문구 출력 + - 삭제할 역 이름 입력 + - `예외` 등록되지 않은 역인 경우 + - `예외` 노선에 등록된 역인 경우 => 역삭제 불가 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - 삭제완료 문구 출력 후 메인화면으로 돌아감 + - `3 역조회` + - 역 목록 출력 후 메인 화면으로 돌아감 + - `B 돌아가기` + - 메인화면으로 돌아감 + +#### 2 노선관리 +- 노선 관리 화면 기능 목록(1, 2, 3, B)과 입력 안내 문구 출력 +- 원하는 기능 입력 + - `예외` (1, 2, 3, B) 외에 다른 값을 입력한 경우 + - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 + - `1 노선등록` + - 노선 입력 받는 문구 출력 + - 등록할 노선 이름 입력 + - `예외` 이미 등록된 노선일 경우 + - `예외` 노선 이름이 2글자 미만인 경우 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - 등록할 노선의 상행 종점역 입력안내 문구 출력 및 입력 + - `예외` 등록되지 않은 역일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - 등록할 노선의 하행 종점역 입력안내 문구 출력 및 입력 + - `예외` 등록되지 않은 역일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `예외` 상행종점역과 같은 역을 입력한 경우 + - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 + - 등록완료 문구 출력 후 메인화면으로 돌아감 + - `2 노선삭제` + - 노선 입력 받는 문구 출력 + - 삭제할 노선 이름 입력 + - `예외` 등록되지 않은 노선일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - 삭제완료 문구 출력 후 메인화면으로 돌아감 + - `3 노선조회` + - 노선 목록 출력 후 메인화면으로 돌아감 + - `B 돌아가기` + - 메인화면으로 돌아감 + +#### 3 구간관리 +- 구간 관리 화면 기능 목록(1, 2, B)과 입력 안내 문구 출력 +- 원하는 기능 입력 + - `예외` (1, 2, B) 외에 다른 값을 입력한 경우 + - `처리` 에러 문구(`[ERROR]`) 출력 후 다시 입력 + - `1 구간등록` + - 노선 입력 받는 문구 출력 + - 구간등록할 노선 입력 + - `예외` 등록되지 않은 노선일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - 역이름 입력 받는 문구 출력 + - 등록할 역이름 입력 + - `예외` 이미 해당 노선에 존재하는 역일 경우 + - `예외` 등록되지 않은 역일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - 등록할 순서 입력 (순서는 1부터 시작) + - `예외` 숫자가 아닌 값을 입력한 경우 + - `예외` Range밖의 Index값을 입력한 경우 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - 구간등록 완료 문구 출력 후 메인화면으로 돌아감 + - `2 구간삭제` + - 노선 입력 받는 문구 출력 + - 구간삭제할 노선 입력 + - `예외` 등록되지 않은 노선일 경우 + - `예외` 해당 노선에 포함된 역이 2개 이하일 경우 => 구간삭제 불가 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - 삭제할 역이름 입력 + - `예외` 등록되지 않은 역일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - 구간삭제 완료 문구 출력 후 메인화면으로 돌아감 + - `B 돌아가기` 메인화면으로 돌아감 + +#### 4 노선도출력 +- 지하철 노선도 출력 후 메인화면으로 돌아감 + - `[INFO]` (호선, ---, 역) 순으로 저장된 모든 노선출력 + +#### Q 종료 +- 프로그램 종료 \ No newline at end of file From 693dbbbc1ff28f50aa17148225200adec0c1543b Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 17:39:49 +0900 Subject: [PATCH 02/40] =?UTF-8?q?feat(Application,=20Line,=20LineRepositor?= =?UTF-8?q?y):=20=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=A8=20=EC=8B=9C=EC=9E=91?= =?UTF-8?q?=20=EC=8B=9C=20=EC=82=AC=EC=A0=84=EB=93=B1=EB=A1=9D=EB=90=9C=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=EB=A1=9C=20=EC=B4=88=EA=B8=B0=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=ED=95=98=EB=8A=94=20initialize()=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=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/Application.java | 29 ++++++++++++++++++- src/main/java/subway/domain/Line.java | 8 ++++- .../java/subway/domain/LineRepository.java | 4 ++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..24691d464 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,37 @@ package subway; +import subway.domain.Line; +import subway.domain.LineRepository; +import subway.domain.Station; +import subway.domain.StationRepository; + +import java.util.Arrays; +import java.util.List; import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - // TODO: 프로그램 구현 + initialize(); + } + + public static void initialize() { + initializeStation(); + initializeLine(); + } + + public static void initializeStation() { + List names = Arrays.asList("교대역", "강남역", "역삼역", "남부터미널역", "양재역", "양재시민의숲역", "매봉역"); + for (String name : names) + StationRepository.addStation(new Station(name)); + } + + public static void initializeLine() { + Line line2 = new Line("2호선"); + LineRepository.addLine(line2, Arrays.asList("교대역", "강남역", "역삼역")); + Line line3 = new Line("3호선"); + LineRepository.addLine(line3, Arrays.asList("교대역", "남부터미널역", "양재역", "매봉역")); + Line lineSinbundang = new Line("신분당선"); + LineRepository.addLine(lineSinbundang, Arrays.asList("강남역", "양재역", "양재시민의숲역")); } } diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..034a6d152 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,7 +1,11 @@ package subway.domain; +import java.util.ArrayList; +import java.util.List; + public class Line { private String name; + private List stationNames = new ArrayList<>(); public Line(String name) { this.name = name; @@ -11,5 +15,7 @@ public String getName() { return name; } - // 추가 기능 구현 + public void addStation(int index, String name) { + stationNames.add(index-1, name); + } } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 49132ddb6..4a1039b66 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -12,7 +12,9 @@ public static List lines() { return Collections.unmodifiableList(lines); } - public static void addLine(Line line) { + public static void addLine(Line line, List names) { + for (int i = 0; i < names.size(); i++) + line.addStation(i, names.get(i)); lines.add(line); } From faf20961eeb1607069e9a63fc168cd14c540a1ea Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 18:06:41 +0900 Subject: [PATCH 03/40] =?UTF-8?q?fix(LineRepository):=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=8B=9C=EC=97=90=20index=20range=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=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/domain/LineRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 4a1039b66..1828942bb 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -13,8 +13,8 @@ public static List lines() { } public static void addLine(Line line, List names) { - for (int i = 0; i < names.size(); i++) - line.addStation(i, names.get(i)); + for (int i = 1; i <= names.size(); i++) + line.addStation(i, names.get(i-1)); lines.add(line); } From 2dc31605b97f8b613a6403f2f3c63b773e4cb5c7 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 18:09:05 +0900 Subject: [PATCH 04/40] =?UTF-8?q?feat(Application):=20=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=EA=B3=BC=20=EC=9E=85=EB=A0=A5=20=EC=95=88=EB=82=B4=EB=AC=B8?= =?UTF-8?q?=EA=B5=AC=20=EC=B6=9C=EB=A0=A5=20=EB=B0=8F=20=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=9E=85=EB=A0=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/Application.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 24691d464..c4d59aa15 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -13,6 +13,23 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); initialize(); + showMainMenu(); + System.out.println(inputMainFunction(scanner)); + } + + public static void showMainMenu() { + System.out.println("## 메인 화면"); + System.out.println("1. 역 관리"); + System.out.println("2. 노선 관리"); + System.out.println("3. 구간 관리"); + System.out.println("4. 지하철 노선도 출력"); + System.out.println("Q. 종료"); + System.out.println("\n## 원하는 기능을 선택하세요."); + } + + public static int inputMainFunction(Scanner kbd) { + int input = kbd.nextInt(); + return input; } public static void initialize() { From 9407e6f787581a8a87bf3f349021214b1185b98d Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 18:22:06 +0900 Subject: [PATCH 05/40] =?UTF-8?q?feat(Application):=20=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=9E=85=EB=A0=A5=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=EB=A5=BC=20=EC=9C=84=ED=95=B4=20displayError?= =?UTF-8?q?Message=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EB=B0=8F=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index c4d59aa15..5f40382ae 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -10,6 +10,8 @@ import java.util.Scanner; public class Application { + public static final int FUNCTION_INPUT_ERROR = 0; + public static final List mainFunctions = Arrays.asList("1", "2", "3", "4", "Q"); public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); initialize(); @@ -24,14 +26,28 @@ public static void showMainMenu() { System.out.println("3. 구간 관리"); System.out.println("4. 지하철 노선도 출력"); System.out.println("Q. 종료"); - System.out.println("\n## 원하는 기능을 선택하세요."); } - public static int inputMainFunction(Scanner kbd) { - int input = kbd.nextInt(); + public static String inputMainFunction(Scanner kbd) { + String input = "0"; + boolean check = false; + while(!check) { + System.out.println("\n## 원하는 기능을 선택하세요."); + input = kbd.nextLine(); + check = checkMainInput(input); + } return input; } + public static boolean checkMainInput(String input) { + boolean check = true; + if (!mainFunctions.contains(input)) { + displayErrorMessage(FUNCTION_INPUT_ERROR); + check = false; + } + return check; + } + public static void initialize() { initializeStation(); initializeLine(); @@ -51,4 +67,9 @@ public static void initializeLine() { Line lineSinbundang = new Line("신분당선"); LineRepository.addLine(lineSinbundang, Arrays.asList("강남역", "양재역", "양재시민의숲역")); } + + public static void displayErrorMessage(int errorCase) { + if (errorCase == FUNCTION_INPUT_ERROR) + System.out.println("[ERROR] 선택할 수 없는 기능입니다."); + } } From 3b2f3454e6ff9dcca618b31d47de480e3da4e017 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 19:24:42 +0900 Subject: [PATCH 06/40] =?UTF-8?q?feat(Application):=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=ED=95=9C=20=EB=A9=94=EB=89=B4=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=EA=B0=81=20=EC=84=9C=EB=B8=8C=20=EB=A9=94=EB=89=B4=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=9C=EB=A0=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/Application.java | 54 ++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 5f40382ae..cfa9a7bf2 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -12,11 +12,63 @@ public class Application { public static final int FUNCTION_INPUT_ERROR = 0; public static final List mainFunctions = Arrays.asList("1", "2", "3", "4", "Q"); + public static final String STATION_MENU = "1"; + public static final String LINE_MENU = "2"; + public static final String SECTION_MENU = "3"; + public static final String PRINT_LINES = "4"; + public static final String FINISH_PROGRAM = "Q"; + public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); initialize(); showMainMenu(); - System.out.println(inputMainFunction(scanner)); + String input = inputMainFunction(scanner); + goSubMenu(input); + } + + public static void goSubMenu(String input) { + System.out.println(); + if (input.equals(STATION_MENU)) + showStationMenu(); + if (input.equals(LINE_MENU)) + showLineMenu(); + if (input.equals(SECTION_MENU)) + showSectionMenu(); + if (input.equals(PRINT_LINES)) + showPrintLines(); + if (input.equals(FINISH_PROGRAM)) + finishProgram(); + } + + public static void showStationMenu() { + System.out.println("## 역 관리 화면"); + System.out.println("1. 역 등록"); + System.out.println("2. 역 삭제"); + System.out.println("3. 역 조회"); + System.out.println("B. 돌아가기"); + } + + public static void showLineMenu() { + System.out.println("## 노선 관리 화면"); + System.out.println("1. 노선 등록"); + System.out.println("2. 노선 삭제"); + System.out.println("3. 노선 조회"); + System.out.println("B. 돌아가기"); + } + + public static void showSectionMenu() { + System.out.println("## 구간 관리 화면"); + System.out.println("1. 구간 등록"); + System.out.println("2. 구간 삭제"); + System.out.println("B. 돌아가기"); + } + + public static void showPrintLines() { + System.out.println("## 지하철 노선도"); + } + + public static void finishProgram() { + System.out.println("## 프로그램 종료"); } public static void showMainMenu() { From cc25b234b3ad5cb3dcf9a7147a5e8d308fe71d90 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 19:25:40 +0900 Subject: [PATCH 07/40] =?UTF-8?q?feat(Line):=20=EB=85=B8=EC=84=A0=EB=B3=84?= =?UTF-8?q?=20=EB=85=B8=EC=84=A0=EB=8F=84=20=EC=B6=9C=EB=A0=A5=EC=9D=84=20?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20Line=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=EC=97=90=20displayLine=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 034a6d152..25017d1d3 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -15,6 +15,12 @@ public String getName() { return name; } + public void displayLine() { + for (String station : stationNames) + System.out.println("[INFO] " + station); + System.out.println(); + } + public void addStation(int index, String name) { stationNames.add(index-1, name); } From 1571548f64e8538adf6eb2ec52dbb10b59ad6fef Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 19:26:12 +0900 Subject: [PATCH 08/40] =?UTF-8?q?feat(Application):=20=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EB=A9=94=EB=89=B4=204=EB=B2=88=EC=9D=98=20=EB=85=B8=EC=84=A0?= =?UTF-8?q?=EB=8F=84=EC=B6=9C=EB=A0=A5=EC=9D=84=20=ED=95=B4=EC=A3=BC?= =?UTF-8?q?=EB=8A=94=20showPrintLines()=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index cfa9a7bf2..6bc7ce935 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -65,6 +65,11 @@ public static void showSectionMenu() { public static void showPrintLines() { System.out.println("## 지하철 노선도"); + for(Line line : LineRepository.lines()) { + System.out.println("[INFO] " + line.getName()); + System.out.println("[INFO] ---"); + line.displayLine(); + } } public static void finishProgram() { From 62cd4feecebec70b556fed947d23363a49b9310d Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 19:42:55 +0900 Subject: [PATCH 09/40] =?UTF-8?q?feat(Application):=20=EC=97=AD=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=EC=99=80=20=EB=85=B8=EC=84=A0=EA=B4=80=EB=A6=AC=20-?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=9E=85=EB=A0=A5=20=EB=B0=8F=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=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/Application.java | 96 +++++++++++++++++---------- 1 file changed, 61 insertions(+), 35 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 6bc7ce935..8d1620ff7 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -17,13 +17,68 @@ public class Application { public static final String SECTION_MENU = "3"; public static final String PRINT_LINES = "4"; public static final String FINISH_PROGRAM = "Q"; + public static final List subFunctions = Arrays.asList("1", "2", "3", "B"); + public static final String ADD_MENU = "1"; + public static final String DELETE_MENU = "2"; + public static final String SEARCH_MENU = "3"; + public static final String GO_BACK_MENU = "B"; + public static final List sectionFunctions = Arrays.asList("1", "2", "B"); public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); initialize(); showMainMenu(); - String input = inputMainFunction(scanner); - goSubMenu(input); + goSubMenu(inputMainFunction(scanner)); + System.out.println(inputSubFunction(scanner)); + } + + public static void initialize() { + initializeStation(); + initializeLine(); + } + + public static void initializeStation() { + List names = Arrays.asList("교대역", "강남역", "역삼역", "남부터미널역", "양재역", "양재시민의숲역", "매봉역"); + for (String name : names) + StationRepository.addStation(new Station(name)); + } + + public static void initializeLine() { + Line line2 = new Line("2호선"); + LineRepository.addLine(line2, Arrays.asList("교대역", "강남역", "역삼역")); + Line line3 = new Line("3호선"); + LineRepository.addLine(line3, Arrays.asList("교대역", "남부터미널역", "양재역", "매봉역")); + Line lineSinbundang = new Line("신분당선"); + LineRepository.addLine(lineSinbundang, Arrays.asList("강남역", "양재역", "양재시민의숲역")); + } + + public static void showMainMenu() { + System.out.println("## 메인 화면"); + System.out.println("1. 역 관리"); + System.out.println("2. 노선 관리"); + System.out.println("3. 구간 관리"); + System.out.println("4. 지하철 노선도 출력"); + System.out.println("Q. 종료"); + } + + public static String inputMainFunction(Scanner kbd) { + String input = "0"; + boolean check = false; + while(!check) { + System.out.println("\n## 원하는 기능을 선택하세요."); + input = kbd.nextLine(); + check = checkMainInput(input); + } + return input; + } + + public static boolean checkMainInput(String input) { + boolean check = true; + if (!mainFunctions.contains(input)) { + displayErrorMessage(FUNCTION_INPUT_ERROR); + check = false; + } + return check; } public static void goSubMenu(String input) { @@ -76,55 +131,26 @@ public static void finishProgram() { System.out.println("## 프로그램 종료"); } - public static void showMainMenu() { - System.out.println("## 메인 화면"); - System.out.println("1. 역 관리"); - System.out.println("2. 노선 관리"); - System.out.println("3. 구간 관리"); - System.out.println("4. 지하철 노선도 출력"); - System.out.println("Q. 종료"); - } - - public static String inputMainFunction(Scanner kbd) { + public static String inputSubFunction(Scanner kbd) { String input = "0"; boolean check = false; while(!check) { System.out.println("\n## 원하는 기능을 선택하세요."); input = kbd.nextLine(); - check = checkMainInput(input); + check = checkSubInput(input); } return input; } - public static boolean checkMainInput(String input) { + public static boolean checkSubInput(String input) { boolean check = true; - if (!mainFunctions.contains(input)) { + if (!subFunctions.contains(input)) { displayErrorMessage(FUNCTION_INPUT_ERROR); check = false; } return check; } - public static void initialize() { - initializeStation(); - initializeLine(); - } - - public static void initializeStation() { - List names = Arrays.asList("교대역", "강남역", "역삼역", "남부터미널역", "양재역", "양재시민의숲역", "매봉역"); - for (String name : names) - StationRepository.addStation(new Station(name)); - } - - public static void initializeLine() { - Line line2 = new Line("2호선"); - LineRepository.addLine(line2, Arrays.asList("교대역", "강남역", "역삼역")); - Line line3 = new Line("3호선"); - LineRepository.addLine(line3, Arrays.asList("교대역", "남부터미널역", "양재역", "매봉역")); - Line lineSinbundang = new Line("신분당선"); - LineRepository.addLine(lineSinbundang, Arrays.asList("강남역", "양재역", "양재시민의숲역")); - } - public static void displayErrorMessage(int errorCase) { if (errorCase == FUNCTION_INPUT_ERROR) System.out.println("[ERROR] 선택할 수 없는 기능입니다."); From aa8ea53cf507e7331970524bb367efb0a949f3c3 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 19:59:26 +0900 Subject: [PATCH 10/40] =?UTF-8?q?refactor:=20=EB=A9=94=EC=9D=B8=EB=A9=94?= =?UTF-8?q?=EB=89=B4=EC=99=80=20=EC=84=9C=EB=B8=8C=EB=A9=94=EB=89=B4?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5,=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=EB=A5=BC=20=ED=95=9C=20=EB=A9=94=EC=86=8C=EB=93=9C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20(=EC=A4=91=EB=B3=B5=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 64 ++++++++++++--------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 8d1620ff7..3bb4b59ae 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -11,25 +11,24 @@ public class Application { public static final int FUNCTION_INPUT_ERROR = 0; - public static final List mainFunctions = Arrays.asList("1", "2", "3", "4", "Q"); + public static final List MAIN_FUNCTIONS = Arrays.asList("1", "2", "3", "4", "Q"); public static final String STATION_MENU = "1"; public static final String LINE_MENU = "2"; public static final String SECTION_MENU = "3"; public static final String PRINT_LINES = "4"; public static final String FINISH_PROGRAM = "Q"; - public static final List subFunctions = Arrays.asList("1", "2", "3", "B"); + public static final List SUB_FUNCTIONS = Arrays.asList("1", "2", "3", "B"); public static final String ADD_MENU = "1"; public static final String DELETE_MENU = "2"; public static final String SEARCH_MENU = "3"; public static final String GO_BACK_MENU = "B"; - public static final List sectionFunctions = Arrays.asList("1", "2", "B"); + public static final List SECTION_FUNCTIONS = Arrays.asList("1", "2", "B"); public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); initialize(); showMainMenu(); - goSubMenu(inputMainFunction(scanner)); - System.out.println(inputSubFunction(scanner)); + goSubMenu(inputFunction(scanner, MAIN_FUNCTIONS), scanner); } public static void initialize() { @@ -61,40 +60,55 @@ public static void showMainMenu() { System.out.println("Q. 종료"); } - public static String inputMainFunction(Scanner kbd) { + public static String inputFunction(Scanner kbd, List functions) { String input = "0"; boolean check = false; while(!check) { System.out.println("\n## 원하는 기능을 선택하세요."); input = kbd.nextLine(); - check = checkMainInput(input); + check = checkInput(input, functions); } return input; } - public static boolean checkMainInput(String input) { + public static boolean checkInput(String input, List functions) { boolean check = true; - if (!mainFunctions.contains(input)) { + if (!functions.contains(input)) { displayErrorMessage(FUNCTION_INPUT_ERROR); check = false; } return check; } - public static void goSubMenu(String input) { + public static void goSubMenu(String input, Scanner kbd) { System.out.println(); if (input.equals(STATION_MENU)) - showStationMenu(); + manageStation(kbd); if (input.equals(LINE_MENU)) - showLineMenu(); + manageLine(kbd); if (input.equals(SECTION_MENU)) - showSectionMenu(); + manageSection(kbd); if (input.equals(PRINT_LINES)) - showPrintLines(); + displayAllLines(); if (input.equals(FINISH_PROGRAM)) finishProgram(); } + public static void manageStation(Scanner kbd) { + showStationMenu(); + inputFunction(kbd, SUB_FUNCTIONS); + } + + public static void manageLine(Scanner kbd) { + showLineMenu(); + inputFunction(kbd, SUB_FUNCTIONS); + } + + public static void manageSection(Scanner kbd) { + showSectionMenu(); + inputFunction(kbd, SECTION_FUNCTIONS); + } + public static void showStationMenu() { System.out.println("## 역 관리 화면"); System.out.println("1. 역 등록"); @@ -118,7 +132,7 @@ public static void showSectionMenu() { System.out.println("B. 돌아가기"); } - public static void showPrintLines() { + public static void displayAllLines() { System.out.println("## 지하철 노선도"); for(Line line : LineRepository.lines()) { System.out.println("[INFO] " + line.getName()); @@ -131,26 +145,6 @@ public static void finishProgram() { System.out.println("## 프로그램 종료"); } - public static String inputSubFunction(Scanner kbd) { - String input = "0"; - boolean check = false; - while(!check) { - System.out.println("\n## 원하는 기능을 선택하세요."); - input = kbd.nextLine(); - check = checkSubInput(input); - } - return input; - } - - public static boolean checkSubInput(String input) { - boolean check = true; - if (!subFunctions.contains(input)) { - displayErrorMessage(FUNCTION_INPUT_ERROR); - check = false; - } - return check; - } - public static void displayErrorMessage(int errorCase) { if (errorCase == FUNCTION_INPUT_ERROR) System.out.println("[ERROR] 선택할 수 없는 기능입니다."); From 7de82bfc4fadd571b975c995d1d09fc43825737b Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 21:01:34 +0900 Subject: [PATCH 11/40] =?UTF-8?q?feat(StationRepository):=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=EB=90=9C=20=EC=97=AD=EC=9D=B4=20=EC=9E=88=EB=8A=94?= =?UTF-8?q?=EC=A7=80=20=EA=B2=80=EC=82=AC=ED=95=98=EB=8A=94=20isExist=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=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/domain/Station.java | 2 -- src/main/java/subway/domain/StationRepository.java | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..6df2edada 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -10,6 +10,4 @@ public Station(String name) { public String getName() { return name; } - - // 추가 기능 구현 } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index b7245c0f3..d6023571c 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -19,4 +19,8 @@ public static void addStation(Station station) { public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + + public static boolean isExist(String name) { + return stations.stream().map(Station::getName).anyMatch(x -> x.equals(name)); + } } From f09725462de81cac090b14124a6f5cf3c2d88a06 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 21:02:17 +0900 Subject: [PATCH 12/40] =?UTF-8?q?docs(README.md):=20README=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=EC=B2=98=EB=A6=AC=20=EB=B0=A9=EB=B2=95=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 --- docs/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 878c476da..312aa9f5d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -18,14 +18,14 @@ - 등록할 역 이름 입력 - `예외` 이미 등록된 역인 경우 - `예외` 역 이름이 2글자 미만인 경우 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 - 등록완료 문구 출력 후 메인화면으로 돌아감 - `2 역삭제` - 역 이름 입력 받는 문구 출력 - 삭제할 역 이름 입력 - `예외` 등록되지 않은 역인 경우 - `예외` 노선에 등록된 역인 경우 => 역삭제 불가 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 - 삭제완료 문구 출력 후 메인화면으로 돌아감 - `3 역조회` - 역 목록 출력 후 메인 화면으로 돌아감 From 2ab9e9d2cec08756a2cca288b86e7a8145277b43 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 21:03:43 +0900 Subject: [PATCH 13/40] =?UTF-8?q?refactor:=20=EB=A9=94=EC=9D=B8=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EC=9C=BC=EB=A1=9C=20=EB=8F=8C=EC=95=84=EA=B0=80?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=9C=84=ED=95=B4=20startProg?= =?UTF-8?q?ram=EC=9C=BC=EB=A1=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/wrapper/gradle-wrapper.properties | 5 +++-- src/main/java/subway/Application.java | 9 +++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index dcf98e9d0..657667c91 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue Dec 15 20:43:57 KST 2020 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip +zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists \ No newline at end of file diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 3bb4b59ae..3e8427d9d 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -27,8 +27,13 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); initialize(); + startProgram(scanner); + } + + public static void startProgram(Scanner kbd) { showMainMenu(); - goSubMenu(inputFunction(scanner, MAIN_FUNCTIONS), scanner); + String mainInput = inputFunction(kbd, MAIN_FUNCTIONS); + goSubMenu(mainInput, kbd); } public static void initialize() { @@ -149,4 +154,4 @@ public static void displayErrorMessage(int errorCase) { if (errorCase == FUNCTION_INPUT_ERROR) System.out.println("[ERROR] 선택할 수 없는 기능입니다."); } -} +} \ No newline at end of file From 4bbc434a8129e9d249599445e5ecbe87e85d0e55 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 21:04:48 +0900 Subject: [PATCH 14/40] =?UTF-8?q?feat(Application):=20=EC=97=AD=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=EC=99=80=20=EB=85=B8=EC=84=A0=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EB=A5=BC=20=EC=84=A0=ED=83=9D=ED=95=9C=20=EA=B2=BD=EC=9A=B0?= =?UTF-8?q?=EC=9D=98=20=ED=95=98=EC=9C=84=ED=95=AD=EB=AA=A9=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=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/Application.java | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 3e8427d9d..9c96a8008 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -101,12 +101,28 @@ public static void goSubMenu(String input, Scanner kbd) { public static void manageStation(Scanner kbd) { showStationMenu(); - inputFunction(kbd, SUB_FUNCTIONS); + String input = inputFunction(kbd, SUB_FUNCTIONS); + if (input.equals(ADD_MENU)) + addStation(kbd); + if (input.equals(DELETE_MENU)) + deleteStation(kbd); + if (input.equals(SEARCH_MENU)) + searchStation(); + if (input.equals(GO_BACK_MENU)) + startProgram(kbd); } public static void manageLine(Scanner kbd) { showLineMenu(); - inputFunction(kbd, SUB_FUNCTIONS); + String input = inputFunction(kbd, SUB_FUNCTIONS); + if (input.equals(ADD_MENU)) + addLine(kbd); + if (input.equals(DELETE_MENU)) + deleteLine(kbd); + if (input.equals(SEARCH_MENU)) + searchLine(); + if (input.equals(GO_BACK_MENU)) + startProgram(kbd); } public static void manageSection(Scanner kbd) { @@ -153,5 +169,9 @@ public static void finishProgram() { public static void displayErrorMessage(int errorCase) { if (errorCase == FUNCTION_INPUT_ERROR) System.out.println("[ERROR] 선택할 수 없는 기능입니다."); + if (errorCase == SAME_NAME_ERROR) + System.out.println("[ERROR] 이미 등록된 역 이름입니다."); + if (errorCase == NAME_LENGTH_ERROR) + System.out.println("[ERROR] 이름을 2글자 이상 입력해주세요."); } } \ No newline at end of file From 6d592aceaf22908c4cdfb2e6c4ea9ce346c9ba4d Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 21:06:08 +0900 Subject: [PATCH 15/40] =?UTF-8?q?feat(Application):=20=EC=97=AD=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=EC=9D=84=20=EC=9C=84=ED=95=B4=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EC=9E=85=EB=A0=A5=20=EB=B0=8F=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20addStation=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/Application.java | 66 +++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 9c96a8008..fbca2ea90 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -11,6 +11,8 @@ public class Application { public static final int FUNCTION_INPUT_ERROR = 0; + public static final int SAME_NAME_ERROR = 1; + public static final int NAME_LENGTH_ERROR = 2; public static final List MAIN_FUNCTIONS = Arrays.asList("1", "2", "3", "4", "Q"); public static final String STATION_MENU = "1"; public static final String LINE_MENU = "2"; @@ -130,6 +132,70 @@ public static void manageSection(Scanner kbd) { inputFunction(kbd, SECTION_FUNCTIONS); } + public static void addStation(Scanner kbd) { + System.out.println("\n## 등록할 역 이름을 입력하세요."); + String stationName = kbd.nextLine(); + while(checkSameName(stationName) || checkTextLength(stationName)) { + System.out.println("\n## 등록할 역 이름을 입력하세요."); + stationName = kbd.nextLine(); + } + StationRepository.addStation(new Station(stationName)); + System.out.println("\n[INFO] 지하철 역이 등록되었습니다."); + startProgram(kbd); + } + + public static void deleteStation(Scanner kbd) { + System.out.println("## 삭제할 역 이름을 입력하세요."); + String stationName = kbd.nextLine(); + System.out.println("[INFO] 지하철 역이 삭제되었습니다."); + } + + public static void searchStation() { + System.out.println("\n## 역 목록"); + for (Station station : StationRepository.stations()) + System.out.println("[INFO] " + station.getName()); + System.out.println(); + } + + public static void addLine(Scanner kbd) { + System.out.println("## 등록할 노선 이름을 입력하세요."); + String lineName = kbd.nextLine(); + System.out.println("## 등록할 노선의 상행 종점역 이름을 입력하세요."); + String firstStation = kbd.nextLine(); + System.out.println("## 등록할 노선의 하행 종점역 이름을 입력하세요."); + String lastStation = kbd.nextLine(); + System.out.println("[INFO] 지하철 노선이 등록되었습니다."); + } + + public static void deleteLine(Scanner kbd) { + System.out.println("## 삭제할 노선 이름을 입력하세요."); + String stationName = kbd.nextLine(); + System.out.println("[INFO] 지하철 노선이 삭제되었습니다."); + } + + public static void searchLine() { + System.out.println("\n## 노선 목록"); + for (Line line : LineRepository.lines()) + System.out.println("[INFO] " + line.getName()); + System.out.println(); + } + + public static boolean checkSameName(String name) { + if (StationRepository.isExist(name)) { + displayErrorMessage(SAME_NAME_ERROR); + return true; + } + return false; + } + + public static boolean checkTextLength(String name) { + if (name.length() < 2) { + displayErrorMessage(NAME_LENGTH_ERROR); + return true; + } + return false; + } + public static void showStationMenu() { System.out.println("## 역 관리 화면"); System.out.println("1. 역 등록"); From d7aedb237ca894bda0097b156c53e4fe910207d6 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 21:36:46 +0900 Subject: [PATCH 16/40] =?UTF-8?q?feat(Line):=20=ED=95=B4=EB=8B=B9=20?= =?UTF-8?q?=EC=97=AD=EC=9D=B4=20=EB=85=B8=EC=84=A0=EC=97=90=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=EB=90=98=EC=96=B4=EC=9E=88=EB=8A=94=EC=A7=80=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8=ED=95=B4=EC=A3=BC=EB=8A=94=20hasStation=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 25017d1d3..bfb524b1b 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -24,4 +24,8 @@ public void displayLine() { public void addStation(int index, String name) { stationNames.add(index-1, name); } + + public boolean hasStation(String name) { + return stationNames.contains(name); + } } From 0897ffa7c4078b41fb0f4d1df8507a926b103ad5 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 21:37:22 +0900 Subject: [PATCH 17/40] =?UTF-8?q?feat(Application):=20=EC=97=AD=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/Application.java | 75 ++++++++++++++++++++------- 1 file changed, 55 insertions(+), 20 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index fbca2ea90..ca6a4d1d5 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -13,6 +13,8 @@ public class Application { public static final int FUNCTION_INPUT_ERROR = 0; public static final int SAME_NAME_ERROR = 1; public static final int NAME_LENGTH_ERROR = 2; + public static final int NO_SUCH_NAME_ERROR = 3; + public static final int HAS_IN_LINE_ERROR = 4; public static final List MAIN_FUNCTIONS = Arrays.asList("1", "2", "3", "4", "Q"); public static final String STATION_MENU = "1"; public static final String LINE_MENU = "2"; @@ -59,7 +61,7 @@ public static void initializeLine() { } public static void showMainMenu() { - System.out.println("## 메인 화면"); + System.out.println("\n## 메인 화면"); System.out.println("1. 역 관리"); System.out.println("2. 노선 관리"); System.out.println("3. 구간 관리"); @@ -129,25 +131,41 @@ public static void manageLine(Scanner kbd) { public static void manageSection(Scanner kbd) { showSectionMenu(); - inputFunction(kbd, SECTION_FUNCTIONS); + String input = inputFunction(kbd, SECTION_FUNCTIONS); +// if (input.equals(ADD_MENU)) +// addSection(kbd); +// if (input.equals(DELETE_MENU)) +// deleteSection(kbd); + if (input.equals(GO_BACK_MENU)) + startProgram(kbd); } public static void addStation(Scanner kbd) { - System.out.println("\n## 등록할 역 이름을 입력하세요."); - String stationName = kbd.nextLine(); - while(checkSameName(stationName) || checkTextLength(stationName)) { + try { System.out.println("\n## 등록할 역 이름을 입력하세요."); - stationName = kbd.nextLine(); + String stationName = kbd.nextLine(); + checkSameName(stationName); + checkTextLength(stationName); + StationRepository.addStation(new Station(stationName)); + System.out.println("\n[INFO] 지하철 역이 등록되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); } - StationRepository.addStation(new Station(stationName)); - System.out.println("\n[INFO] 지하철 역이 등록되었습니다."); - startProgram(kbd); } public static void deleteStation(Scanner kbd) { - System.out.println("## 삭제할 역 이름을 입력하세요."); - String stationName = kbd.nextLine(); - System.out.println("[INFO] 지하철 역이 삭제되었습니다."); + try { + System.out.println("\n## 삭제할 역 이름을 입력하세요."); + String stationName = kbd.nextLine(); + checkExist(stationName); + checkInLine(stationName); + StationRepository.deleteStation(stationName); + System.out.println("\n[INFO] 지하철 역이 삭제되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } } public static void searchStation() { @@ -158,7 +176,7 @@ public static void searchStation() { } public static void addLine(Scanner kbd) { - System.out.println("## 등록할 노선 이름을 입력하세요."); + System.out.println("\n## 등록할 노선 이름을 입력하세요."); String lineName = kbd.nextLine(); System.out.println("## 등록할 노선의 상행 종점역 이름을 입력하세요."); String firstStation = kbd.nextLine(); @@ -168,7 +186,7 @@ public static void addLine(Scanner kbd) { } public static void deleteLine(Scanner kbd) { - System.out.println("## 삭제할 노선 이름을 입력하세요."); + System.out.println("\n## 삭제할 노선 이름을 입력하세요."); String stationName = kbd.nextLine(); System.out.println("[INFO] 지하철 노선이 삭제되었습니다."); } @@ -180,20 +198,33 @@ public static void searchLine() { System.out.println(); } - public static boolean checkSameName(String name) { + public static void checkSameName(String name) { if (StationRepository.isExist(name)) { displayErrorMessage(SAME_NAME_ERROR); - return true; + throw new IllegalArgumentException(); } - return false; } - public static boolean checkTextLength(String name) { + public static void checkTextLength(String name) { if (name.length() < 2) { displayErrorMessage(NAME_LENGTH_ERROR); - return true; + throw new IllegalArgumentException(); + } + } + + public static void checkExist(String name) { + if (!StationRepository.isExist(name)) { + displayErrorMessage(NO_SUCH_NAME_ERROR); + throw new IllegalArgumentException(); } - return false; + } + + public static void checkInLine(String name) { + for (Line line : LineRepository.lines()) + if (line.hasStation(name)) { + displayErrorMessage(HAS_IN_LINE_ERROR); + throw new IllegalArgumentException(); + } } public static void showStationMenu() { @@ -239,5 +270,9 @@ public static void displayErrorMessage(int errorCase) { System.out.println("[ERROR] 이미 등록된 역 이름입니다."); if (errorCase == NAME_LENGTH_ERROR) System.out.println("[ERROR] 이름을 2글자 이상 입력해주세요."); + if (errorCase == NO_SUCH_NAME_ERROR) + System.out.println("[ERROR] 등록되지 않은 역 이름입니다."); + if (errorCase == HAS_IN_LINE_ERROR) + System.out.println("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); } } \ No newline at end of file From b1cd488ba0a192c506bc73a7b281fe9162072c56 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 21:38:55 +0900 Subject: [PATCH 18/40] =?UTF-8?q?docs(README.md):=20README=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=EC=B2=98=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/README.md b/docs/README.md index 312aa9f5d..c09f3e186 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,20 +12,20 @@ - 역 관리 화면 기능 목록(1, 2, 3, B)과 입력 안내 문구 출력 - 원하는 기능 입력 - `예외` (1, 2, 3, B) 외에 다른 값을 입력한 경우 - - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - `1 역등록` - 역 이름 입력 받는 문구 출력 - 등록할 역 이름 입력 - `예외` 이미 등록된 역인 경우 - `예외` 역 이름이 2글자 미만인 경우 - - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 등록완료 문구 출력 후 메인화면으로 돌아감 - `2 역삭제` - 역 이름 입력 받는 문구 출력 - 삭제할 역 이름 입력 - `예외` 등록되지 않은 역인 경우 - `예외` 노선에 등록된 역인 경우 => 역삭제 불가 - - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 삭제완료 문구 출력 후 메인화면으로 돌아감 - `3 역조회` - 역 목록 출력 후 메인 화면으로 돌아감 @@ -36,27 +36,27 @@ - 노선 관리 화면 기능 목록(1, 2, 3, B)과 입력 안내 문구 출력 - 원하는 기능 입력 - `예외` (1, 2, 3, B) 외에 다른 값을 입력한 경우 - - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - `1 노선등록` - 노선 입력 받는 문구 출력 - 등록할 노선 이름 입력 - `예외` 이미 등록된 노선일 경우 - `예외` 노선 이름이 2글자 미만인 경우 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 등록할 노선의 상행 종점역 입력안내 문구 출력 및 입력 - `예외` 등록되지 않은 역일 경우 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 등록할 노선의 하행 종점역 입력안내 문구 출력 및 입력 - `예외` 등록되지 않은 역일 경우 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - `예외` 상행종점역과 같은 역을 입력한 경우 - - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 등록완료 문구 출력 후 메인화면으로 돌아감 - `2 노선삭제` - 노선 입력 받는 문구 출력 - 삭제할 노선 이름 입력 - `예외` 등록되지 않은 노선일 경우 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 삭제완료 문구 출력 후 메인화면으로 돌아감 - `3 노선조회` - 노선 목록 출력 후 메인화면으로 돌아감 @@ -72,26 +72,26 @@ - 노선 입력 받는 문구 출력 - 구간등록할 노선 입력 - `예외` 등록되지 않은 노선일 경우 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 역이름 입력 받는 문구 출력 - 등록할 역이름 입력 - `예외` 이미 해당 노선에 존재하는 역일 경우 - `예외` 등록되지 않은 역일 경우 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 등록할 순서 입력 (순서는 1부터 시작) - `예외` 숫자가 아닌 값을 입력한 경우 - `예외` Range밖의 Index값을 입력한 경우 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 구간등록 완료 문구 출력 후 메인화면으로 돌아감 - `2 구간삭제` - 노선 입력 받는 문구 출력 - 구간삭제할 노선 입력 - `예외` 등록되지 않은 노선일 경우 - `예외` 해당 노선에 포함된 역이 2개 이하일 경우 => 구간삭제 불가 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 삭제할 역이름 입력 - `예외` 등록되지 않은 역일 경우 - - `처리` 에러 문구([ERROR]) 출력 후 기능 목록 화면으로 돌아감 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 구간삭제 완료 문구 출력 후 메인화면으로 돌아감 - `B 돌아가기` 메인화면으로 돌아감 From 0eb23c11b45c7a8f2a03c1098ab5ddfd44f76924 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 21:45:21 +0900 Subject: [PATCH 19/40] =?UTF-8?q?feat(Application):=20=EC=97=AD=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C,=20=EB=85=B8=EC=84=A0=EC=A1=B0=ED=9A=8C=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 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index ca6a4d1d5..b34469b66 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -99,7 +99,7 @@ public static void goSubMenu(String input, Scanner kbd) { manageSection(kbd); if (input.equals(PRINT_LINES)) displayAllLines(); - if (input.equals(FINISH_PROGRAM)) + if (input.equalsIgnoreCase(FINISH_PROGRAM)) finishProgram(); } @@ -111,8 +111,8 @@ public static void manageStation(Scanner kbd) { if (input.equals(DELETE_MENU)) deleteStation(kbd); if (input.equals(SEARCH_MENU)) - searchStation(); - if (input.equals(GO_BACK_MENU)) + searchStation(kbd); + if (input.equalsIgnoreCase(GO_BACK_MENU)) startProgram(kbd); } @@ -124,8 +124,8 @@ public static void manageLine(Scanner kbd) { if (input.equals(DELETE_MENU)) deleteLine(kbd); if (input.equals(SEARCH_MENU)) - searchLine(); - if (input.equals(GO_BACK_MENU)) + searchLine(kbd); + if (input.equalsIgnoreCase(GO_BACK_MENU)) startProgram(kbd); } @@ -168,11 +168,11 @@ public static void deleteStation(Scanner kbd) { } } - public static void searchStation() { + public static void searchStation(Scanner kbd) { System.out.println("\n## 역 목록"); for (Station station : StationRepository.stations()) System.out.println("[INFO] " + station.getName()); - System.out.println(); + startProgram(kbd); } public static void addLine(Scanner kbd) { @@ -191,11 +191,11 @@ public static void deleteLine(Scanner kbd) { System.out.println("[INFO] 지하철 노선이 삭제되었습니다."); } - public static void searchLine() { + public static void searchLine(Scanner kbd) { System.out.println("\n## 노선 목록"); for (Line line : LineRepository.lines()) System.out.println("[INFO] " + line.getName()); - System.out.println(); + startProgram(kbd); } public static void checkSameName(String name) { From 77420f451cbe2b30a24cc1017daecfc965deaf61 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 21:57:18 +0900 Subject: [PATCH 20/40] =?UTF-8?q?fix(Application):=20=EB=85=B8=EC=84=A0?= =?UTF-8?q?=EB=8F=84=20=EC=B6=9C=EB=A0=A5=20=ED=9B=84=20=EB=8B=A4=EC=8B=9C?= =?UTF-8?q?=20=EB=A9=94=EC=9D=B8=20=ED=99=94=EB=A9=B4=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=8F=8C=EC=95=84=EA=B0=80=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/Application.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index b34469b66..39f3346bc 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -98,7 +98,7 @@ public static void goSubMenu(String input, Scanner kbd) { if (input.equals(SECTION_MENU)) manageSection(kbd); if (input.equals(PRINT_LINES)) - displayAllLines(); + displayAllLines(kbd); if (input.equalsIgnoreCase(FINISH_PROGRAM)) finishProgram(); } @@ -250,13 +250,14 @@ public static void showSectionMenu() { System.out.println("B. 돌아가기"); } - public static void displayAllLines() { + public static void displayAllLines(Scanner kbd) { System.out.println("## 지하철 노선도"); for(Line line : LineRepository.lines()) { System.out.println("[INFO] " + line.getName()); System.out.println("[INFO] ---"); line.displayLine(); } + startProgram(kbd); } public static void finishProgram() { From 97dfff9c137bb9bcbe907222978ed352c5f3d1e6 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 22:12:01 +0900 Subject: [PATCH 21/40] =?UTF-8?q?feat(LineRepository):=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=EB=90=9C=20=EB=85=B8=EC=84=A0=EC=9D=B4=20=EC=9E=88?= =?UTF-8?q?=EB=8A=94=EC=A7=80=20=EA=B2=80=EC=82=AC=ED=95=98=EB=8A=94=20isE?= =?UTF-8?q?xist=20=EB=A9=94=EC=86=8C=EB=93=9C=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/domain/LineRepository.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 1828942bb..c09b1e74f 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -21,4 +21,8 @@ public static void addLine(Line line, List names) { public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + + public static boolean isExist(String name) { + return lines.stream().map(Line::getName).anyMatch(x -> x.equals(name)); + } } From 66d6697ef70b9d47d1d68c21ce8a077a5102734e Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 22:12:18 +0900 Subject: [PATCH 22/40] =?UTF-8?q?feat(Application):=20=EB=85=B8=EC=84=A0?= =?UTF-8?q?=EB=93=B1=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 --- src/main/java/subway/Application.java | 47 ++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 39f3346bc..1d22de8a0 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -11,10 +11,11 @@ public class Application { public static final int FUNCTION_INPUT_ERROR = 0; - public static final int SAME_NAME_ERROR = 1; + public static final int SAME_STATION_ERROR = 1; public static final int NAME_LENGTH_ERROR = 2; public static final int NO_SUCH_NAME_ERROR = 3; public static final int HAS_IN_LINE_ERROR = 4; + public static final int SAME_LINE_ERROR = 5; public static final List MAIN_FUNCTIONS = Arrays.asList("1", "2", "3", "4", "Q"); public static final String STATION_MENU = "1"; public static final String LINE_MENU = "2"; @@ -144,7 +145,7 @@ public static void addStation(Scanner kbd) { try { System.out.println("\n## 등록할 역 이름을 입력하세요."); String stationName = kbd.nextLine(); - checkSameName(stationName); + checkSameStation(stationName); checkTextLength(stationName); StationRepository.addStation(new Station(stationName)); System.out.println("\n[INFO] 지하철 역이 등록되었습니다."); @@ -176,19 +177,38 @@ public static void searchStation(Scanner kbd) { } public static void addLine(Scanner kbd) { + try { + makeNewLine(kbd); + System.out.println("[INFO] 지하철 노선이 등록되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void makeNewLine(Scanner kbd) throws IllegalArgumentException { System.out.println("\n## 등록할 노선 이름을 입력하세요."); String lineName = kbd.nextLine(); + checkSameLine(lineName); + checkTextLength(lineName); System.out.println("## 등록할 노선의 상행 종점역 이름을 입력하세요."); String firstStation = kbd.nextLine(); + checkExist(firstStation); System.out.println("## 등록할 노선의 하행 종점역 이름을 입력하세요."); String lastStation = kbd.nextLine(); - System.out.println("[INFO] 지하철 노선이 등록되었습니다."); + checkExist(lastStation); + Line newLine = new Line(lineName); + LineRepository.addLine(newLine, Arrays.asList(firstStation, lastStation)); } public static void deleteLine(Scanner kbd) { - System.out.println("\n## 삭제할 노선 이름을 입력하세요."); - String stationName = kbd.nextLine(); - System.out.println("[INFO] 지하철 노선이 삭제되었습니다."); + try { + System.out.println("\n## 삭제할 노선 이름을 입력하세요."); + String stationName = kbd.nextLine(); + System.out.println("[INFO] 지하철 노선이 삭제되었습니다."); + } catch (Exception e) { + startProgram(kbd); + } } public static void searchLine(Scanner kbd) { @@ -198,9 +218,16 @@ public static void searchLine(Scanner kbd) { startProgram(kbd); } - public static void checkSameName(String name) { + public static void checkSameStation(String name) { if (StationRepository.isExist(name)) { - displayErrorMessage(SAME_NAME_ERROR); + displayErrorMessage(SAME_STATION_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkSameLine(String name) { + if (LineRepository.isExist(name)) { + displayErrorMessage(SAME_LINE_ERROR); throw new IllegalArgumentException(); } } @@ -267,7 +294,7 @@ public static void finishProgram() { public static void displayErrorMessage(int errorCase) { if (errorCase == FUNCTION_INPUT_ERROR) System.out.println("[ERROR] 선택할 수 없는 기능입니다."); - if (errorCase == SAME_NAME_ERROR) + if (errorCase == SAME_STATION_ERROR) System.out.println("[ERROR] 이미 등록된 역 이름입니다."); if (errorCase == NAME_LENGTH_ERROR) System.out.println("[ERROR] 이름을 2글자 이상 입력해주세요."); @@ -275,5 +302,7 @@ public static void displayErrorMessage(int errorCase) { System.out.println("[ERROR] 등록되지 않은 역 이름입니다."); if (errorCase == HAS_IN_LINE_ERROR) System.out.println("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); + if (errorCase == SAME_LINE_ERROR) + System.out.println("[ERROR] 이미 등록된 노선 이름입니다."); } } \ No newline at end of file From 60cd82295863c81a3954359e32c372235429891e Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 22:19:58 +0900 Subject: [PATCH 23/40] =?UTF-8?q?fix(Application):=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=ED=95=98=EB=A0=A4=EB=8A=94=20=EB=85=B8=EC=84=A0=EC=9D=98=20?= =?UTF-8?q?=EC=83=81=ED=96=89=EA=B3=BC=20=ED=95=98=ED=96=89=EC=9D=B4=20?= =?UTF-8?q?=EA=B0=99=EC=9C=BC=EB=A9=B4=20=EB=93=B1=EB=A1=9D=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=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/Application.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 1d22de8a0..881dc60a8 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -16,6 +16,7 @@ public class Application { public static final int NO_SUCH_NAME_ERROR = 3; public static final int HAS_IN_LINE_ERROR = 4; public static final int SAME_LINE_ERROR = 5; + public static final int SAME_NAME_ERROR = 6; public static final List MAIN_FUNCTIONS = Arrays.asList("1", "2", "3", "4", "Q"); public static final String STATION_MENU = "1"; public static final String LINE_MENU = "2"; @@ -197,6 +198,7 @@ public static void makeNewLine(Scanner kbd) throws IllegalArgumentException { System.out.println("## 등록할 노선의 하행 종점역 이름을 입력하세요."); String lastStation = kbd.nextLine(); checkExist(lastStation); + checkSameName(firstStation, lastStation); Line newLine = new Line(lineName); LineRepository.addLine(newLine, Arrays.asList(firstStation, lastStation)); } @@ -232,6 +234,13 @@ public static void checkSameLine(String name) { } } + public static void checkSameName(String firstName, String lastName) { + if (firstName.equals(lastName)) { + displayErrorMessage(SAME_NAME_ERROR); + throw new IllegalArgumentException(); + } + } + public static void checkTextLength(String name) { if (name.length() < 2) { displayErrorMessage(NAME_LENGTH_ERROR); @@ -304,5 +313,7 @@ public static void displayErrorMessage(int errorCase) { System.out.println("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); if (errorCase == SAME_LINE_ERROR) System.out.println("[ERROR] 이미 등록된 노선 이름입니다."); + if (errorCase == SAME_NAME_ERROR) + System.out.println("[ERROR] 상행역과 하행역은 같을 수 없습니다."); } } \ No newline at end of file From 1d78f6c2e7acf8b2187202905e6f4e9b5da1e718 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 22:25:46 +0900 Subject: [PATCH 24/40] =?UTF-8?q?feat(Application):=20=EB=85=B8=EC=84=A0?= =?UTF-8?q?=20=EC=82=AD=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/Application.java | 36 ++++++++++++++++----------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 881dc60a8..ed4896d7b 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -11,7 +11,7 @@ public class Application { public static final int FUNCTION_INPUT_ERROR = 0; - public static final int SAME_STATION_ERROR = 1; + public static final int ALREADY_EXIST_ERROR = 1; public static final int NAME_LENGTH_ERROR = 2; public static final int NO_SUCH_NAME_ERROR = 3; public static final int HAS_IN_LINE_ERROR = 4; @@ -160,7 +160,7 @@ public static void deleteStation(Scanner kbd) { try { System.out.println("\n## 삭제할 역 이름을 입력하세요."); String stationName = kbd.nextLine(); - checkExist(stationName); + checkExistStation(stationName); checkInLine(stationName); StationRepository.deleteStation(stationName); System.out.println("\n[INFO] 지하철 역이 삭제되었습니다."); @@ -194,10 +194,10 @@ public static void makeNewLine(Scanner kbd) throws IllegalArgumentException { checkTextLength(lineName); System.out.println("## 등록할 노선의 상행 종점역 이름을 입력하세요."); String firstStation = kbd.nextLine(); - checkExist(firstStation); + checkExistStation(firstStation); System.out.println("## 등록할 노선의 하행 종점역 이름을 입력하세요."); String lastStation = kbd.nextLine(); - checkExist(lastStation); + checkExistStation(lastStation); checkSameName(firstStation, lastStation); Line newLine = new Line(lineName); LineRepository.addLine(newLine, Arrays.asList(firstStation, lastStation)); @@ -206,8 +206,11 @@ public static void makeNewLine(Scanner kbd) throws IllegalArgumentException { public static void deleteLine(Scanner kbd) { try { System.out.println("\n## 삭제할 노선 이름을 입력하세요."); - String stationName = kbd.nextLine(); - System.out.println("[INFO] 지하철 노선이 삭제되었습니다."); + String lineName = kbd.nextLine(); + checkExistLine(lineName); + LineRepository.deleteLineByName(lineName); + System.out.println("\n[INFO] 지하철 노선이 삭제되었습니다."); + startProgram(kbd); } catch (Exception e) { startProgram(kbd); } @@ -222,14 +225,14 @@ public static void searchLine(Scanner kbd) { public static void checkSameStation(String name) { if (StationRepository.isExist(name)) { - displayErrorMessage(SAME_STATION_ERROR); + displayErrorMessage(ALREADY_EXIST_ERROR); throw new IllegalArgumentException(); } } public static void checkSameLine(String name) { if (LineRepository.isExist(name)) { - displayErrorMessage(SAME_LINE_ERROR); + displayErrorMessage(ALREADY_EXIST_ERROR); throw new IllegalArgumentException(); } } @@ -248,13 +251,20 @@ public static void checkTextLength(String name) { } } - public static void checkExist(String name) { + public static void checkExistStation(String name) { if (!StationRepository.isExist(name)) { displayErrorMessage(NO_SUCH_NAME_ERROR); throw new IllegalArgumentException(); } } + public static void checkExistLine(String name) { + if (!LineRepository.isExist(name)) { + displayErrorMessage(NO_SUCH_NAME_ERROR); + throw new IllegalArgumentException(); + } + } + public static void checkInLine(String name) { for (Line line : LineRepository.lines()) if (line.hasStation(name)) { @@ -303,16 +313,14 @@ public static void finishProgram() { public static void displayErrorMessage(int errorCase) { if (errorCase == FUNCTION_INPUT_ERROR) System.out.println("[ERROR] 선택할 수 없는 기능입니다."); - if (errorCase == SAME_STATION_ERROR) - System.out.println("[ERROR] 이미 등록된 역 이름입니다."); + if (errorCase == ALREADY_EXIST_ERROR) + System.out.println("[ERROR] 이미 등록된 역/노선 이름입니다."); if (errorCase == NAME_LENGTH_ERROR) System.out.println("[ERROR] 이름을 2글자 이상 입력해주세요."); if (errorCase == NO_SUCH_NAME_ERROR) - System.out.println("[ERROR] 등록되지 않은 역 이름입니다."); + System.out.println("[ERROR] 등록되지 않은 역/노선 이름입니다."); if (errorCase == HAS_IN_LINE_ERROR) System.out.println("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); - if (errorCase == SAME_LINE_ERROR) - System.out.println("[ERROR] 이미 등록된 노선 이름입니다."); if (errorCase == SAME_NAME_ERROR) System.out.println("[ERROR] 상행역과 하행역은 같을 수 없습니다."); } From 9cc22425a50bd5eba95a6a5f381c656d27044690 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 22:57:10 +0900 Subject: [PATCH 25/40] =?UTF-8?q?feat(LineRepository):=20=EA=B5=AC?= =?UTF-8?q?=EA=B0=84=EC=B6=94=EA=B0=80=EB=A5=BC=20=EC=9C=84=ED=95=B4=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EC=9D=B4=EB=A6=84=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EC=9C=BC=EB=A5=B4=20=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A4=EB=8A=94=20getLineByName=EA=B3=BC=20=EB=85=B8?= =?UTF-8?q?=EC=84=A0=EC=97=90=20=EC=97=AD=EC=9D=84=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=98=EB=8A=94=20addStationToLine=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/domain/LineRepository.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index c09b1e74f..ef4c1dfbf 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -25,4 +25,13 @@ public static boolean deleteLineByName(String name) { public static boolean isExist(String name) { return lines.stream().map(Line::getName).anyMatch(x -> x.equals(name)); } + + public static Line getLineByName(String Name) { + return lines.stream().filter(line -> line.getName().equals(Name)).findAny().orElse(null); + } + + public static void addStationToLine(String lineName, String stationName, int index) { + Line line = getLineByName(lineName); + line.addStation(index, stationName); + } } From aed417acfd36aa95160ee02895d3ad3d08782bbf Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 22:57:44 +0900 Subject: [PATCH 26/40] =?UTF-8?q?feat(Line):=20=EA=B5=AC=EA=B0=84=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=8B=9C=20=EB=93=B1=EB=A1=9D=ED=95=A0=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=EC=9D=98=20=EC=97=90=EB=9F=AC=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=B4=20=EB=85=B8=EC=84=A0=EC=9D=98=20?= =?UTF-8?q?=EA=B8=B8=EC=9D=B4=EB=A5=BC=20=EB=B0=9B=EC=95=84=EC=98=A4?= =?UTF-8?q?=EB=8A=94=20getSize=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/domain/Line.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index bfb524b1b..083f364d9 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -28,4 +28,8 @@ public void addStation(int index, String name) { public boolean hasStation(String name) { return stationNames.contains(name); } + + public int getSize() { + return stationNames.size(); + } } From debb42e74e63bbeccef5579cc31eebd6fd9b86e5 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 22:58:03 +0900 Subject: [PATCH 27/40] =?UTF-8?q?feat(Application):=20=EA=B5=AC=EA=B0=84?= =?UTF-8?q?=20=EB=93=B1=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 --- src/main/java/subway/Application.java | 64 ++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 7 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index ed4896d7b..5a2b99b57 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -15,8 +15,9 @@ public class Application { public static final int NAME_LENGTH_ERROR = 2; public static final int NO_SUCH_NAME_ERROR = 3; public static final int HAS_IN_LINE_ERROR = 4; - public static final int SAME_LINE_ERROR = 5; - public static final int SAME_NAME_ERROR = 6; + public static final int SAME_NAME_ERROR = 5; + public static final int HAS_IN_SPECIFIC_LINE_ERROR = 6; + public static final int UNVALID_INDEX_ERROR = 7; public static final List MAIN_FUNCTIONS = Arrays.asList("1", "2", "3", "4", "Q"); public static final String STATION_MENU = "1"; public static final String LINE_MENU = "2"; @@ -134,14 +135,38 @@ public static void manageLine(Scanner kbd) { public static void manageSection(Scanner kbd) { showSectionMenu(); String input = inputFunction(kbd, SECTION_FUNCTIONS); -// if (input.equals(ADD_MENU)) -// addSection(kbd); + if (input.equals(ADD_MENU)) + addSection(kbd); // if (input.equals(DELETE_MENU)) // deleteSection(kbd); if (input.equals(GO_BACK_MENU)) startProgram(kbd); } + public static void addSection(Scanner kbd) { + try { + makeNewSection(kbd); + System.out.println("\n## [INFO] 구간이 등록되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void makeNewSection(Scanner kbd) { + System.out.println("\n## 노선을 입력하세요."); + String lineName = kbd.nextLine(); + checkExistLine(lineName); + System.out.println("\n## 역이름을 입력하세요."); + String stationName = kbd.nextLine(); + checkExistStation(stationName); + Line line = checkInSpecificLine(lineName, stationName); + System.out.println("\n## 순서를 입력하세요."); + String index = kbd.nextLine(); + checkValidIndex(line, index); + LineRepository.addStationToLine(lineName, stationName, Integer.parseInt(index)); + } + public static void addStation(Scanner kbd) { try { System.out.println("\n## 등록할 역 이름을 입력하세요."); @@ -180,7 +205,7 @@ public static void searchStation(Scanner kbd) { public static void addLine(Scanner kbd) { try { makeNewLine(kbd); - System.out.println("[INFO] 지하철 노선이 등록되었습니다."); + System.out.println("\n[INFO] 지하철 노선이 등록되었습니다."); startProgram(kbd); } catch (Exception e) { startProgram(kbd); @@ -192,10 +217,10 @@ public static void makeNewLine(Scanner kbd) throws IllegalArgumentException { String lineName = kbd.nextLine(); checkSameLine(lineName); checkTextLength(lineName); - System.out.println("## 등록할 노선의 상행 종점역 이름을 입력하세요."); + System.out.println("\n## 등록할 노선의 상행 종점역 이름을 입력하세요."); String firstStation = kbd.nextLine(); checkExistStation(firstStation); - System.out.println("## 등록할 노선의 하행 종점역 이름을 입력하세요."); + System.out.println("\n## 등록할 노선의 하행 종점역 이름을 입력하세요."); String lastStation = kbd.nextLine(); checkExistStation(lastStation); checkSameName(firstStation, lastStation); @@ -273,6 +298,27 @@ public static void checkInLine(String name) { } } + public static Line checkInSpecificLine(String lineName, String stationName) { + Line line = LineRepository.getLineByName(lineName); + if (line.hasStation(stationName)) { + displayErrorMessage(HAS_IN_SPECIFIC_LINE_ERROR); + throw new IllegalArgumentException(); + } + return line; + } + + public static void checkValidIndex(Line line, String index) { + try { + int intIndex = Integer.parseInt(index); + int size = line.getSize(); + if (intIndex < 1 || intIndex > size+1) + throw new IndexOutOfBoundsException(); + } catch (Exception e) { + displayErrorMessage(UNVALID_INDEX_ERROR); + throw new IllegalArgumentException(); + } + } + public static void showStationMenu() { System.out.println("## 역 관리 화면"); System.out.println("1. 역 등록"); @@ -323,5 +369,9 @@ public static void displayErrorMessage(int errorCase) { System.out.println("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); if (errorCase == SAME_NAME_ERROR) System.out.println("[ERROR] 상행역과 하행역은 같을 수 없습니다."); + if (errorCase == HAS_IN_SPECIFIC_LINE_ERROR) + System.out.println("[ERROR] 이미 해당 노선에 존재하는 역입니다."); + if (errorCase == UNVALID_INDEX_ERROR) + System.out.println("[ERROR] Range 내의 정수만 입력할 수 있습니다."); } } \ No newline at end of file From 57335f52471a10873cdd0cb07de5c8e97fcf6c5c Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:13:36 +0900 Subject: [PATCH 28/40] =?UTF-8?q?docs(README.md):=20README=EC=97=90=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EC=82=AC=ED=95=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index c09f3e186..a69288be1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -90,7 +90,7 @@ - `예외` 해당 노선에 포함된 역이 2개 이하일 경우 => 구간삭제 불가 - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 삭제할 역이름 입력 - - `예외` 등록되지 않은 역일 경우 + - `예외` 해당 노선에 등록되지 않은 역일 경우 - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 - 구간삭제 완료 문구 출력 후 메인화면으로 돌아감 - `B 돌아가기` 메인화면으로 돌아감 From 01dae783e34d02a689e9568843af1d8561f04a0a Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:19:35 +0900 Subject: [PATCH 29/40] =?UTF-8?q?feat(Line):=20=EA=B5=AC=EA=B0=84=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=EB=A5=BC=20=EC=9C=84=ED=95=B4=20Line=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=20=ED=8A=B9=EC=A0=95=20=EC=97=AD?= =?UTF-8?q?=EC=9D=84=20=EC=82=AD=EC=A0=9C=ED=95=98=EB=8A=94=20deleteStatio?= =?UTF-8?q?n=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/domain/Line.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 083f364d9..46127cf4d 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class Line { private String name; @@ -25,6 +26,10 @@ public void addStation(int index, String name) { stationNames.add(index-1, name); } + public boolean deleteStation(String name) { + return stationNames.removeIf(stationName -> Objects.equals(stationName, name)); + } + public boolean hasStation(String name) { return stationNames.contains(name); } From 2c1bd6dea848e74497c89dcd8eb9d1e058a6e409 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:20:06 +0900 Subject: [PATCH 30/40] =?UTF-8?q?feat(LineRepository):=20=EB=85=B8?= =?UTF-8?q?=EC=84=A0=EC=9D=B4=EB=A6=84=EA=B3=BC=20=EC=97=AD=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EC=9C=BC=EB=A1=9C=20=ED=8A=B9=EC=A0=95=20=EA=B5=AC?= =?UTF-8?q?=EA=B0=84=EC=9D=84=20=EC=82=AD=EC=A0=9C=ED=95=98=EB=8A=94=20del?= =?UTF-8?q?eteStationInLine=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/domain/LineRepository.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index ef4c1dfbf..4c93ec973 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -34,4 +34,9 @@ public static void addStationToLine(String lineName, String stationName, int ind Line line = getLineByName(lineName); line.addStation(index, stationName); } + + public static void deleteStationInLine(String lineName, String stationName) { + Line line = getLineByName(lineName); + line.deleteStation(stationName); + } } From 89c4268c69c13a267355b30509d6bcabb1a18d60 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:20:20 +0900 Subject: [PATCH 31/40] =?UTF-8?q?feat(Application):=20=EA=B5=AC=EA=B0=84?= =?UTF-8?q?=20=EC=82=AD=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/Application.java | 45 +++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 5a2b99b57..a50f2dd13 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -18,6 +18,8 @@ public class Application { public static final int SAME_NAME_ERROR = 5; public static final int HAS_IN_SPECIFIC_LINE_ERROR = 6; public static final int UNVALID_INDEX_ERROR = 7; + public static final int CANT_DELETE_SECTION_ERROR = 8; + public static final int HAS_NOT_IN_SPECIFIC_LINE_ERROR = 9; public static final List MAIN_FUNCTIONS = Arrays.asList("1", "2", "3", "4", "Q"); public static final String STATION_MENU = "1"; public static final String LINE_MENU = "2"; @@ -137,8 +139,8 @@ public static void manageSection(Scanner kbd) { String input = inputFunction(kbd, SECTION_FUNCTIONS); if (input.equals(ADD_MENU)) addSection(kbd); -// if (input.equals(DELETE_MENU)) -// deleteSection(kbd); + if (input.equals(DELETE_MENU)) + deleteSection(kbd); if (input.equals(GO_BACK_MENU)) startProgram(kbd); } @@ -146,7 +148,7 @@ public static void manageSection(Scanner kbd) { public static void addSection(Scanner kbd) { try { makeNewSection(kbd); - System.out.println("\n## [INFO] 구간이 등록되었습니다."); + System.out.println("\n[INFO] 구간이 등록되었습니다."); startProgram(kbd); } catch (Exception e) { startProgram(kbd); @@ -167,6 +169,23 @@ public static void makeNewSection(Scanner kbd) { LineRepository.addStationToLine(lineName, stationName, Integer.parseInt(index)); } + public static void deleteSection(Scanner kbd) { + try { + System.out.println("\n## 삭제할 구간의 노선을 입력하세요."); + String lineName = kbd.nextLine(); + checkExistLine(lineName); + checkValidLine(lineName); + System.out.println("\n## 삭제할 구간의 역을 입력하세요."); + String stationName = kbd.nextLine(); + checkNotInSpecificLine(lineName, stationName); + LineRepository.deleteStationInLine(lineName, stationName); + System.out.println("\n[INFO] 구간이 삭제되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + public static void addStation(Scanner kbd) { try { System.out.println("\n## 등록할 역 이름을 입력하세요."); @@ -307,6 +326,14 @@ public static Line checkInSpecificLine(String lineName, String stationName) { return line; } + public static void checkNotInSpecificLine(String lineName, String stationName) { + Line line = LineRepository.getLineByName(lineName); + if (!line.hasStation(stationName)) { + displayErrorMessage(HAS_NOT_IN_SPECIFIC_LINE_ERROR); + throw new IllegalArgumentException(); + } + } + public static void checkValidIndex(Line line, String index) { try { int intIndex = Integer.parseInt(index); @@ -319,6 +346,14 @@ public static void checkValidIndex(Line line, String index) { } } + public static void checkValidLine(String name) { + Line line = LineRepository.getLineByName(name); + if (line.getSize() < 3) { + displayErrorMessage(CANT_DELETE_SECTION_ERROR); + throw new IllegalArgumentException(); + } + } + public static void showStationMenu() { System.out.println("## 역 관리 화면"); System.out.println("1. 역 등록"); @@ -373,5 +408,9 @@ public static void displayErrorMessage(int errorCase) { System.out.println("[ERROR] 이미 해당 노선에 존재하는 역입니다."); if (errorCase == UNVALID_INDEX_ERROR) System.out.println("[ERROR] Range 내의 정수만 입력할 수 있습니다."); + if (errorCase == CANT_DELETE_SECTION_ERROR) + System.out.println("[ERROR] 역이 2개 이하인 노선의 구간은 삭제할 수 없습니다."); + if (errorCase == HAS_NOT_IN_SPECIFIC_LINE_ERROR) + System.out.println("[ERROR] 해당 노선에 존재하지 않는 역입니다."); } } \ No newline at end of file From 9f28808803643bbf7acf86f8e8ed020951162bdc Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:29:39 +0900 Subject: [PATCH 32/40] =?UTF-8?q?refactor:=20=EC=83=81=EC=88=98=20?= =?UTF-8?q?=EC=9E=90=EB=A3=8C=ED=98=95=EB=93=A4=20Constants=EB=A1=9C=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 110 +++++++++------------ src/main/java/subway/domain/Constants.java | 30 ++++++ 2 files changed, 75 insertions(+), 65 deletions(-) create mode 100644 src/main/java/subway/domain/Constants.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index a50f2dd13..55d6d67b7 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -4,35 +4,15 @@ import subway.domain.LineRepository; import subway.domain.Station; import subway.domain.StationRepository; +import subway.domain.Constants; import java.util.Arrays; import java.util.List; import java.util.Scanner; -public class Application { - public static final int FUNCTION_INPUT_ERROR = 0; - public static final int ALREADY_EXIST_ERROR = 1; - public static final int NAME_LENGTH_ERROR = 2; - public static final int NO_SUCH_NAME_ERROR = 3; - public static final int HAS_IN_LINE_ERROR = 4; - public static final int SAME_NAME_ERROR = 5; - public static final int HAS_IN_SPECIFIC_LINE_ERROR = 6; - public static final int UNVALID_INDEX_ERROR = 7; - public static final int CANT_DELETE_SECTION_ERROR = 8; - public static final int HAS_NOT_IN_SPECIFIC_LINE_ERROR = 9; - public static final List MAIN_FUNCTIONS = Arrays.asList("1", "2", "3", "4", "Q"); - public static final String STATION_MENU = "1"; - public static final String LINE_MENU = "2"; - public static final String SECTION_MENU = "3"; - public static final String PRINT_LINES = "4"; - public static final String FINISH_PROGRAM = "Q"; - public static final List SUB_FUNCTIONS = Arrays.asList("1", "2", "3", "B"); - public static final String ADD_MENU = "1"; - public static final String DELETE_MENU = "2"; - public static final String SEARCH_MENU = "3"; - public static final String GO_BACK_MENU = "B"; - public static final List SECTION_FUNCTIONS = Arrays.asList("1", "2", "B"); + +public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); initialize(); @@ -41,7 +21,7 @@ public static void main(String[] args) { public static void startProgram(Scanner kbd) { showMainMenu(); - String mainInput = inputFunction(kbd, MAIN_FUNCTIONS); + String mainInput = inputFunction(kbd, Constants.MAIN_FUNCTIONS); goSubMenu(mainInput, kbd); } @@ -88,7 +68,7 @@ public static String inputFunction(Scanner kbd, List functions) { public static boolean checkInput(String input, List functions) { boolean check = true; if (!functions.contains(input)) { - displayErrorMessage(FUNCTION_INPUT_ERROR); + displayErrorMessage(Constants.FUNCTION_INPUT_ERROR); check = false; } return check; @@ -96,52 +76,52 @@ public static boolean checkInput(String input, List functions) { public static void goSubMenu(String input, Scanner kbd) { System.out.println(); - if (input.equals(STATION_MENU)) + if (input.equals(Constants.STATION_MENU)) manageStation(kbd); - if (input.equals(LINE_MENU)) + if (input.equals(Constants.LINE_MENU)) manageLine(kbd); - if (input.equals(SECTION_MENU)) + if (input.equals(Constants.SECTION_MENU)) manageSection(kbd); - if (input.equals(PRINT_LINES)) + if (input.equals(Constants.PRINT_LINES)) displayAllLines(kbd); - if (input.equalsIgnoreCase(FINISH_PROGRAM)) + if (input.equalsIgnoreCase(Constants.FINISH_PROGRAM)) finishProgram(); } public static void manageStation(Scanner kbd) { showStationMenu(); - String input = inputFunction(kbd, SUB_FUNCTIONS); - if (input.equals(ADD_MENU)) + String input = inputFunction(kbd, Constants.SUB_FUNCTIONS); + if (input.equals(Constants.ADD_MENU)) addStation(kbd); - if (input.equals(DELETE_MENU)) + if (input.equals(Constants.DELETE_MENU)) deleteStation(kbd); - if (input.equals(SEARCH_MENU)) + if (input.equals(Constants.SEARCH_MENU)) searchStation(kbd); - if (input.equalsIgnoreCase(GO_BACK_MENU)) + if (input.equalsIgnoreCase(Constants.GO_BACK_MENU)) startProgram(kbd); } public static void manageLine(Scanner kbd) { showLineMenu(); - String input = inputFunction(kbd, SUB_FUNCTIONS); - if (input.equals(ADD_MENU)) + String input = inputFunction(kbd, Constants.SUB_FUNCTIONS); + if (input.equals(Constants.ADD_MENU)) addLine(kbd); - if (input.equals(DELETE_MENU)) + if (input.equals(Constants.DELETE_MENU)) deleteLine(kbd); - if (input.equals(SEARCH_MENU)) + if (input.equals(Constants.SEARCH_MENU)) searchLine(kbd); - if (input.equalsIgnoreCase(GO_BACK_MENU)) + if (input.equalsIgnoreCase(Constants.GO_BACK_MENU)) startProgram(kbd); } public static void manageSection(Scanner kbd) { showSectionMenu(); - String input = inputFunction(kbd, SECTION_FUNCTIONS); - if (input.equals(ADD_MENU)) + String input = inputFunction(kbd, Constants.SECTION_FUNCTIONS); + if (input.equals(Constants.ADD_MENU)) addSection(kbd); - if (input.equals(DELETE_MENU)) + if (input.equals(Constants.DELETE_MENU)) deleteSection(kbd); - if (input.equals(GO_BACK_MENU)) + if (input.equals(Constants.GO_BACK_MENU)) startProgram(kbd); } @@ -269,42 +249,42 @@ public static void searchLine(Scanner kbd) { public static void checkSameStation(String name) { if (StationRepository.isExist(name)) { - displayErrorMessage(ALREADY_EXIST_ERROR); + displayErrorMessage(Constants.ALREADY_EXIST_ERROR); throw new IllegalArgumentException(); } } public static void checkSameLine(String name) { if (LineRepository.isExist(name)) { - displayErrorMessage(ALREADY_EXIST_ERROR); + displayErrorMessage(Constants.ALREADY_EXIST_ERROR); throw new IllegalArgumentException(); } } public static void checkSameName(String firstName, String lastName) { if (firstName.equals(lastName)) { - displayErrorMessage(SAME_NAME_ERROR); + displayErrorMessage(Constants.SAME_NAME_ERROR); throw new IllegalArgumentException(); } } public static void checkTextLength(String name) { if (name.length() < 2) { - displayErrorMessage(NAME_LENGTH_ERROR); + displayErrorMessage(Constants.NAME_LENGTH_ERROR); throw new IllegalArgumentException(); } } public static void checkExistStation(String name) { if (!StationRepository.isExist(name)) { - displayErrorMessage(NO_SUCH_NAME_ERROR); + displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); throw new IllegalArgumentException(); } } public static void checkExistLine(String name) { if (!LineRepository.isExist(name)) { - displayErrorMessage(NO_SUCH_NAME_ERROR); + displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); throw new IllegalArgumentException(); } } @@ -312,7 +292,7 @@ public static void checkExistLine(String name) { public static void checkInLine(String name) { for (Line line : LineRepository.lines()) if (line.hasStation(name)) { - displayErrorMessage(HAS_IN_LINE_ERROR); + displayErrorMessage(Constants.HAS_IN_LINE_ERROR); throw new IllegalArgumentException(); } } @@ -320,7 +300,7 @@ public static void checkInLine(String name) { public static Line checkInSpecificLine(String lineName, String stationName) { Line line = LineRepository.getLineByName(lineName); if (line.hasStation(stationName)) { - displayErrorMessage(HAS_IN_SPECIFIC_LINE_ERROR); + displayErrorMessage(Constants.HAS_IN_SPECIFIC_LINE_ERROR); throw new IllegalArgumentException(); } return line; @@ -329,7 +309,7 @@ public static Line checkInSpecificLine(String lineName, String stationName) { public static void checkNotInSpecificLine(String lineName, String stationName) { Line line = LineRepository.getLineByName(lineName); if (!line.hasStation(stationName)) { - displayErrorMessage(HAS_NOT_IN_SPECIFIC_LINE_ERROR); + displayErrorMessage(Constants.HAS_NOT_IN_SPECIFIC_LINE_ERROR); throw new IllegalArgumentException(); } } @@ -341,7 +321,7 @@ public static void checkValidIndex(Line line, String index) { if (intIndex < 1 || intIndex > size+1) throw new IndexOutOfBoundsException(); } catch (Exception e) { - displayErrorMessage(UNVALID_INDEX_ERROR); + displayErrorMessage(Constants.UNVALID_INDEX_ERROR); throw new IllegalArgumentException(); } } @@ -349,7 +329,7 @@ public static void checkValidIndex(Line line, String index) { public static void checkValidLine(String name) { Line line = LineRepository.getLineByName(name); if (line.getSize() < 3) { - displayErrorMessage(CANT_DELETE_SECTION_ERROR); + displayErrorMessage(Constants.CANT_DELETE_SECTION_ERROR); throw new IllegalArgumentException(); } } @@ -392,25 +372,25 @@ public static void finishProgram() { } public static void displayErrorMessage(int errorCase) { - if (errorCase == FUNCTION_INPUT_ERROR) + if (errorCase == Constants.FUNCTION_INPUT_ERROR) System.out.println("[ERROR] 선택할 수 없는 기능입니다."); - if (errorCase == ALREADY_EXIST_ERROR) + if (errorCase == Constants.ALREADY_EXIST_ERROR) System.out.println("[ERROR] 이미 등록된 역/노선 이름입니다."); - if (errorCase == NAME_LENGTH_ERROR) + if (errorCase == Constants.NAME_LENGTH_ERROR) System.out.println("[ERROR] 이름을 2글자 이상 입력해주세요."); - if (errorCase == NO_SUCH_NAME_ERROR) + if (errorCase == Constants.NO_SUCH_NAME_ERROR) System.out.println("[ERROR] 등록되지 않은 역/노선 이름입니다."); - if (errorCase == HAS_IN_LINE_ERROR) + if (errorCase == Constants.HAS_IN_LINE_ERROR) System.out.println("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); - if (errorCase == SAME_NAME_ERROR) + if (errorCase == Constants.SAME_NAME_ERROR) System.out.println("[ERROR] 상행역과 하행역은 같을 수 없습니다."); - if (errorCase == HAS_IN_SPECIFIC_LINE_ERROR) + if (errorCase == Constants.HAS_IN_SPECIFIC_LINE_ERROR) System.out.println("[ERROR] 이미 해당 노선에 존재하는 역입니다."); - if (errorCase == UNVALID_INDEX_ERROR) + if (errorCase == Constants.UNVALID_INDEX_ERROR) System.out.println("[ERROR] Range 내의 정수만 입력할 수 있습니다."); - if (errorCase == CANT_DELETE_SECTION_ERROR) + if (errorCase == Constants.CANT_DELETE_SECTION_ERROR) System.out.println("[ERROR] 역이 2개 이하인 노선의 구간은 삭제할 수 없습니다."); - if (errorCase == HAS_NOT_IN_SPECIFIC_LINE_ERROR) + if (errorCase == Constants.HAS_NOT_IN_SPECIFIC_LINE_ERROR) System.out.println("[ERROR] 해당 노선에 존재하지 않는 역입니다."); } } \ No newline at end of file diff --git a/src/main/java/subway/domain/Constants.java b/src/main/java/subway/domain/Constants.java new file mode 100644 index 000000000..1bd614df8 --- /dev/null +++ b/src/main/java/subway/domain/Constants.java @@ -0,0 +1,30 @@ +package subway.domain; + +import java.util.Arrays; +import java.util.List; + +public class Constants { + public static final int FUNCTION_INPUT_ERROR = 0; + public static final int ALREADY_EXIST_ERROR = 1; + public static final int NAME_LENGTH_ERROR = 2; + public static final int NO_SUCH_NAME_ERROR = 3; + public static final int HAS_IN_LINE_ERROR = 4; + public static final int SAME_NAME_ERROR = 5; + public static final int HAS_IN_SPECIFIC_LINE_ERROR = 6; + public static final int UNVALID_INDEX_ERROR = 7; + public static final int CANT_DELETE_SECTION_ERROR = 8; + public static final int HAS_NOT_IN_SPECIFIC_LINE_ERROR = 9; + + public static final List MAIN_FUNCTIONS = Arrays.asList("1", "2", "3", "4", "Q"); + public static final String STATION_MENU = "1"; + public static final String LINE_MENU = "2"; + public static final String SECTION_MENU = "3"; + public static final String PRINT_LINES = "4"; + public static final String FINISH_PROGRAM = "Q"; + public static final List SUB_FUNCTIONS = Arrays.asList("1", "2", "3", "B"); + public static final String ADD_MENU = "1"; + public static final String DELETE_MENU = "2"; + public static final String SEARCH_MENU = "3"; + public static final String GO_BACK_MENU = "B"; + public static final List SECTION_FUNCTIONS = Arrays.asList("1", "2", "B"); +} From ce0e4c704dac8fb554a3a8f7eaa789946282815f Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:42:37 +0900 Subject: [PATCH 33/40] =?UTF-8?q?refactor:=20=EC=97=90=EB=9F=AC=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EC=B6=9C=EB=A0=A5=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 25 +----------------- src/main/java/subway/domain/ErrorMessage.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 24 deletions(-) create mode 100644 src/main/java/subway/domain/ErrorMessage.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 55d6d67b7..9cb51be79 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.Scanner; - +import static subway.domain.ErrorMessage.displayErrorMessage; public class Application { public static void main(String[] args) { @@ -370,27 +370,4 @@ public static void displayAllLines(Scanner kbd) { public static void finishProgram() { System.out.println("## 프로그램 종료"); } - - public static void displayErrorMessage(int errorCase) { - if (errorCase == Constants.FUNCTION_INPUT_ERROR) - System.out.println("[ERROR] 선택할 수 없는 기능입니다."); - if (errorCase == Constants.ALREADY_EXIST_ERROR) - System.out.println("[ERROR] 이미 등록된 역/노선 이름입니다."); - if (errorCase == Constants.NAME_LENGTH_ERROR) - System.out.println("[ERROR] 이름을 2글자 이상 입력해주세요."); - if (errorCase == Constants.NO_SUCH_NAME_ERROR) - System.out.println("[ERROR] 등록되지 않은 역/노선 이름입니다."); - if (errorCase == Constants.HAS_IN_LINE_ERROR) - System.out.println("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); - if (errorCase == Constants.SAME_NAME_ERROR) - System.out.println("[ERROR] 상행역과 하행역은 같을 수 없습니다."); - if (errorCase == Constants.HAS_IN_SPECIFIC_LINE_ERROR) - System.out.println("[ERROR] 이미 해당 노선에 존재하는 역입니다."); - if (errorCase == Constants.UNVALID_INDEX_ERROR) - System.out.println("[ERROR] Range 내의 정수만 입력할 수 있습니다."); - if (errorCase == Constants.CANT_DELETE_SECTION_ERROR) - System.out.println("[ERROR] 역이 2개 이하인 노선의 구간은 삭제할 수 없습니다."); - if (errorCase == Constants.HAS_NOT_IN_SPECIFIC_LINE_ERROR) - System.out.println("[ERROR] 해당 노선에 존재하지 않는 역입니다."); - } } \ No newline at end of file diff --git a/src/main/java/subway/domain/ErrorMessage.java b/src/main/java/subway/domain/ErrorMessage.java new file mode 100644 index 000000000..f16f8e641 --- /dev/null +++ b/src/main/java/subway/domain/ErrorMessage.java @@ -0,0 +1,26 @@ +package subway.domain; + +public class ErrorMessage { + public static void displayErrorMessage(int errorCase) { + if (errorCase == Constants.FUNCTION_INPUT_ERROR) + System.out.println("[ERROR] 선택할 수 없는 기능입니다."); + if (errorCase == Constants.ALREADY_EXIST_ERROR) + System.out.println("[ERROR] 이미 등록된 역/노선 이름입니다."); + if (errorCase == Constants.NAME_LENGTH_ERROR) + System.out.println("[ERROR] 이름을 2글자 이상 입력해주세요."); + if (errorCase == Constants.NO_SUCH_NAME_ERROR) + System.out.println("[ERROR] 등록되지 않은 역/노선 이름입니다."); + if (errorCase == Constants.HAS_IN_LINE_ERROR) + System.out.println("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); + if (errorCase == Constants.SAME_NAME_ERROR) + System.out.println("[ERROR] 상행역과 하행역은 같을 수 없습니다."); + if (errorCase == Constants.HAS_IN_SPECIFIC_LINE_ERROR) + System.out.println("[ERROR] 이미 해당 노선에 존재하는 역입니다."); + if (errorCase == Constants.UNVALID_INDEX_ERROR) + System.out.println("[ERROR] Range 내의 정수만 입력할 수 있습니다."); + if (errorCase == Constants.CANT_DELETE_SECTION_ERROR) + System.out.println("[ERROR] 역이 2개 이하인 노선의 구간은 삭제할 수 없습니다."); + if (errorCase == Constants.HAS_NOT_IN_SPECIFIC_LINE_ERROR) + System.out.println("[ERROR] 해당 노선에 존재하지 않는 역입니다."); + } +} From b4c6fc18d66a55940954fc78186c92f22b7c0a33 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:45:29 +0900 Subject: [PATCH 34/40] =?UTF-8?q?refactor:=20View=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 72 +++++++-------------------- src/main/java/subway/domain/View.java | 35 +++++++++++++ 2 files changed, 52 insertions(+), 55 deletions(-) create mode 100644 src/main/java/subway/domain/View.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 9cb51be79..20c9aaafe 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,17 +1,11 @@ package subway; -import subway.domain.Line; -import subway.domain.LineRepository; -import subway.domain.Station; -import subway.domain.StationRepository; -import subway.domain.Constants; +import subway.domain.*; import java.util.Arrays; import java.util.List; import java.util.Scanner; -import static subway.domain.ErrorMessage.displayErrorMessage; - public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); @@ -20,7 +14,7 @@ public static void main(String[] args) { } public static void startProgram(Scanner kbd) { - showMainMenu(); + View.showMainMenu(); String mainInput = inputFunction(kbd, Constants.MAIN_FUNCTIONS); goSubMenu(mainInput, kbd); } @@ -45,15 +39,6 @@ public static void initializeLine() { LineRepository.addLine(lineSinbundang, Arrays.asList("강남역", "양재역", "양재시민의숲역")); } - public static void showMainMenu() { - System.out.println("\n## 메인 화면"); - System.out.println("1. 역 관리"); - System.out.println("2. 노선 관리"); - System.out.println("3. 구간 관리"); - System.out.println("4. 지하철 노선도 출력"); - System.out.println("Q. 종료"); - } - public static String inputFunction(Scanner kbd, List functions) { String input = "0"; boolean check = false; @@ -68,7 +53,7 @@ public static String inputFunction(Scanner kbd, List functions) { public static boolean checkInput(String input, List functions) { boolean check = true; if (!functions.contains(input)) { - displayErrorMessage(Constants.FUNCTION_INPUT_ERROR); + ErrorMessage.displayErrorMessage(Constants.FUNCTION_INPUT_ERROR); check = false; } return check; @@ -89,7 +74,7 @@ public static void goSubMenu(String input, Scanner kbd) { } public static void manageStation(Scanner kbd) { - showStationMenu(); + View.showStationMenu(); String input = inputFunction(kbd, Constants.SUB_FUNCTIONS); if (input.equals(Constants.ADD_MENU)) addStation(kbd); @@ -102,7 +87,7 @@ public static void manageStation(Scanner kbd) { } public static void manageLine(Scanner kbd) { - showLineMenu(); + View.showLineMenu(); String input = inputFunction(kbd, Constants.SUB_FUNCTIONS); if (input.equals(Constants.ADD_MENU)) addLine(kbd); @@ -115,7 +100,7 @@ public static void manageLine(Scanner kbd) { } public static void manageSection(Scanner kbd) { - showSectionMenu(); + View.showSectionMenu(); String input = inputFunction(kbd, Constants.SECTION_FUNCTIONS); if (input.equals(Constants.ADD_MENU)) addSection(kbd); @@ -249,42 +234,42 @@ public static void searchLine(Scanner kbd) { public static void checkSameStation(String name) { if (StationRepository.isExist(name)) { - displayErrorMessage(Constants.ALREADY_EXIST_ERROR); + ErrorMessage.displayErrorMessage(Constants.ALREADY_EXIST_ERROR); throw new IllegalArgumentException(); } } public static void checkSameLine(String name) { if (LineRepository.isExist(name)) { - displayErrorMessage(Constants.ALREADY_EXIST_ERROR); + ErrorMessage.displayErrorMessage(Constants.ALREADY_EXIST_ERROR); throw new IllegalArgumentException(); } } public static void checkSameName(String firstName, String lastName) { if (firstName.equals(lastName)) { - displayErrorMessage(Constants.SAME_NAME_ERROR); + ErrorMessage.displayErrorMessage(Constants.SAME_NAME_ERROR); throw new IllegalArgumentException(); } } public static void checkTextLength(String name) { if (name.length() < 2) { - displayErrorMessage(Constants.NAME_LENGTH_ERROR); + ErrorMessage.displayErrorMessage(Constants.NAME_LENGTH_ERROR); throw new IllegalArgumentException(); } } public static void checkExistStation(String name) { if (!StationRepository.isExist(name)) { - displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); + ErrorMessage.displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); throw new IllegalArgumentException(); } } public static void checkExistLine(String name) { if (!LineRepository.isExist(name)) { - displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); + ErrorMessage.displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); throw new IllegalArgumentException(); } } @@ -292,7 +277,7 @@ public static void checkExistLine(String name) { public static void checkInLine(String name) { for (Line line : LineRepository.lines()) if (line.hasStation(name)) { - displayErrorMessage(Constants.HAS_IN_LINE_ERROR); + ErrorMessage.displayErrorMessage(Constants.HAS_IN_LINE_ERROR); throw new IllegalArgumentException(); } } @@ -300,7 +285,7 @@ public static void checkInLine(String name) { public static Line checkInSpecificLine(String lineName, String stationName) { Line line = LineRepository.getLineByName(lineName); if (line.hasStation(stationName)) { - displayErrorMessage(Constants.HAS_IN_SPECIFIC_LINE_ERROR); + ErrorMessage.displayErrorMessage(Constants.HAS_IN_SPECIFIC_LINE_ERROR); throw new IllegalArgumentException(); } return line; @@ -309,7 +294,7 @@ public static Line checkInSpecificLine(String lineName, String stationName) { public static void checkNotInSpecificLine(String lineName, String stationName) { Line line = LineRepository.getLineByName(lineName); if (!line.hasStation(stationName)) { - displayErrorMessage(Constants.HAS_NOT_IN_SPECIFIC_LINE_ERROR); + ErrorMessage.displayErrorMessage(Constants.HAS_NOT_IN_SPECIFIC_LINE_ERROR); throw new IllegalArgumentException(); } } @@ -321,7 +306,7 @@ public static void checkValidIndex(Line line, String index) { if (intIndex < 1 || intIndex > size+1) throw new IndexOutOfBoundsException(); } catch (Exception e) { - displayErrorMessage(Constants.UNVALID_INDEX_ERROR); + ErrorMessage.displayErrorMessage(Constants.UNVALID_INDEX_ERROR); throw new IllegalArgumentException(); } } @@ -329,34 +314,11 @@ public static void checkValidIndex(Line line, String index) { public static void checkValidLine(String name) { Line line = LineRepository.getLineByName(name); if (line.getSize() < 3) { - displayErrorMessage(Constants.CANT_DELETE_SECTION_ERROR); + ErrorMessage.displayErrorMessage(Constants.CANT_DELETE_SECTION_ERROR); throw new IllegalArgumentException(); } } - public static void showStationMenu() { - System.out.println("## 역 관리 화면"); - System.out.println("1. 역 등록"); - System.out.println("2. 역 삭제"); - System.out.println("3. 역 조회"); - System.out.println("B. 돌아가기"); - } - - public static void showLineMenu() { - System.out.println("## 노선 관리 화면"); - System.out.println("1. 노선 등록"); - System.out.println("2. 노선 삭제"); - System.out.println("3. 노선 조회"); - System.out.println("B. 돌아가기"); - } - - public static void showSectionMenu() { - System.out.println("## 구간 관리 화면"); - System.out.println("1. 구간 등록"); - System.out.println("2. 구간 삭제"); - System.out.println("B. 돌아가기"); - } - public static void displayAllLines(Scanner kbd) { System.out.println("## 지하철 노선도"); for(Line line : LineRepository.lines()) { diff --git a/src/main/java/subway/domain/View.java b/src/main/java/subway/domain/View.java new file mode 100644 index 000000000..56da973fa --- /dev/null +++ b/src/main/java/subway/domain/View.java @@ -0,0 +1,35 @@ +package subway.domain; + +public class View { + public static void showMainMenu() { + System.out.println("\n## 메인 화면"); + System.out.println("1. 역 관리"); + System.out.println("2. 노선 관리"); + System.out.println("3. 구간 관리"); + System.out.println("4. 지하철 노선도 출력"); + System.out.println("Q. 종료"); + } + + public static void showStationMenu() { + System.out.println("## 역 관리 화면"); + System.out.println("1. 역 등록"); + System.out.println("2. 역 삭제"); + System.out.println("3. 역 조회"); + System.out.println("B. 돌아가기"); + } + + public static void showLineMenu() { + System.out.println("## 노선 관리 화면"); + System.out.println("1. 노선 등록"); + System.out.println("2. 노선 삭제"); + System.out.println("3. 노선 조회"); + System.out.println("B. 돌아가기"); + } + + public static void showSectionMenu() { + System.out.println("## 구간 관리 화면"); + System.out.println("1. 구간 등록"); + System.out.println("2. 구간 삭제"); + System.out.println("B. 돌아가기"); + } +} From a9628c66953b592b262d69872718032c0c419663 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:48:21 +0900 Subject: [PATCH 35/40] =?UTF-8?q?refactor:=20Errors=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 121 ++++-------------------- src/main/java/subway/domain/Errors.java | 90 ++++++++++++++++++ 2 files changed, 107 insertions(+), 104 deletions(-) create mode 100644 src/main/java/subway/domain/Errors.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 20c9aaafe..eb68bfcb2 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -123,14 +123,14 @@ public static void addSection(Scanner kbd) { public static void makeNewSection(Scanner kbd) { System.out.println("\n## 노선을 입력하세요."); String lineName = kbd.nextLine(); - checkExistLine(lineName); + Errors.checkExistLine(lineName); System.out.println("\n## 역이름을 입력하세요."); String stationName = kbd.nextLine(); - checkExistStation(stationName); - Line line = checkInSpecificLine(lineName, stationName); + Errors.checkExistStation(stationName); + Line line = Errors.checkInSpecificLine(lineName, stationName); System.out.println("\n## 순서를 입력하세요."); String index = kbd.nextLine(); - checkValidIndex(line, index); + Errors.checkValidIndex(line, index); LineRepository.addStationToLine(lineName, stationName, Integer.parseInt(index)); } @@ -138,11 +138,11 @@ public static void deleteSection(Scanner kbd) { try { System.out.println("\n## 삭제할 구간의 노선을 입력하세요."); String lineName = kbd.nextLine(); - checkExistLine(lineName); - checkValidLine(lineName); + Errors.checkExistLine(lineName); + Errors.checkValidLine(lineName); System.out.println("\n## 삭제할 구간의 역을 입력하세요."); String stationName = kbd.nextLine(); - checkNotInSpecificLine(lineName, stationName); + Errors.checkNotInSpecificLine(lineName, stationName); LineRepository.deleteStationInLine(lineName, stationName); System.out.println("\n[INFO] 구간이 삭제되었습니다."); startProgram(kbd); @@ -155,8 +155,8 @@ public static void addStation(Scanner kbd) { try { System.out.println("\n## 등록할 역 이름을 입력하세요."); String stationName = kbd.nextLine(); - checkSameStation(stationName); - checkTextLength(stationName); + Errors.checkSameStation(stationName); + Errors.checkTextLength(stationName); StationRepository.addStation(new Station(stationName)); System.out.println("\n[INFO] 지하철 역이 등록되었습니다."); startProgram(kbd); @@ -169,8 +169,8 @@ public static void deleteStation(Scanner kbd) { try { System.out.println("\n## 삭제할 역 이름을 입력하세요."); String stationName = kbd.nextLine(); - checkExistStation(stationName); - checkInLine(stationName); + Errors.checkExistStation(stationName); + Errors.checkInLine(stationName); StationRepository.deleteStation(stationName); System.out.println("\n[INFO] 지하철 역이 삭제되었습니다."); startProgram(kbd); @@ -199,15 +199,15 @@ public static void addLine(Scanner kbd) { public static void makeNewLine(Scanner kbd) throws IllegalArgumentException { System.out.println("\n## 등록할 노선 이름을 입력하세요."); String lineName = kbd.nextLine(); - checkSameLine(lineName); - checkTextLength(lineName); + Errors.checkSameLine(lineName); + Errors.checkTextLength(lineName); System.out.println("\n## 등록할 노선의 상행 종점역 이름을 입력하세요."); String firstStation = kbd.nextLine(); - checkExistStation(firstStation); + Errors.checkExistStation(firstStation); System.out.println("\n## 등록할 노선의 하행 종점역 이름을 입력하세요."); String lastStation = kbd.nextLine(); - checkExistStation(lastStation); - checkSameName(firstStation, lastStation); + Errors.checkExistStation(lastStation); + Errors.checkSameName(firstStation, lastStation); Line newLine = new Line(lineName); LineRepository.addLine(newLine, Arrays.asList(firstStation, lastStation)); } @@ -216,7 +216,7 @@ public static void deleteLine(Scanner kbd) { try { System.out.println("\n## 삭제할 노선 이름을 입력하세요."); String lineName = kbd.nextLine(); - checkExistLine(lineName); + Errors.checkExistLine(lineName); LineRepository.deleteLineByName(lineName); System.out.println("\n[INFO] 지하철 노선이 삭제되었습니다."); startProgram(kbd); @@ -232,93 +232,6 @@ public static void searchLine(Scanner kbd) { startProgram(kbd); } - public static void checkSameStation(String name) { - if (StationRepository.isExist(name)) { - ErrorMessage.displayErrorMessage(Constants.ALREADY_EXIST_ERROR); - throw new IllegalArgumentException(); - } - } - - public static void checkSameLine(String name) { - if (LineRepository.isExist(name)) { - ErrorMessage.displayErrorMessage(Constants.ALREADY_EXIST_ERROR); - throw new IllegalArgumentException(); - } - } - - public static void checkSameName(String firstName, String lastName) { - if (firstName.equals(lastName)) { - ErrorMessage.displayErrorMessage(Constants.SAME_NAME_ERROR); - throw new IllegalArgumentException(); - } - } - - public static void checkTextLength(String name) { - if (name.length() < 2) { - ErrorMessage.displayErrorMessage(Constants.NAME_LENGTH_ERROR); - throw new IllegalArgumentException(); - } - } - - public static void checkExistStation(String name) { - if (!StationRepository.isExist(name)) { - ErrorMessage.displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); - throw new IllegalArgumentException(); - } - } - - public static void checkExistLine(String name) { - if (!LineRepository.isExist(name)) { - ErrorMessage.displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); - throw new IllegalArgumentException(); - } - } - - public static void checkInLine(String name) { - for (Line line : LineRepository.lines()) - if (line.hasStation(name)) { - ErrorMessage.displayErrorMessage(Constants.HAS_IN_LINE_ERROR); - throw new IllegalArgumentException(); - } - } - - public static Line checkInSpecificLine(String lineName, String stationName) { - Line line = LineRepository.getLineByName(lineName); - if (line.hasStation(stationName)) { - ErrorMessage.displayErrorMessage(Constants.HAS_IN_SPECIFIC_LINE_ERROR); - throw new IllegalArgumentException(); - } - return line; - } - - public static void checkNotInSpecificLine(String lineName, String stationName) { - Line line = LineRepository.getLineByName(lineName); - if (!line.hasStation(stationName)) { - ErrorMessage.displayErrorMessage(Constants.HAS_NOT_IN_SPECIFIC_LINE_ERROR); - throw new IllegalArgumentException(); - } - } - - public static void checkValidIndex(Line line, String index) { - try { - int intIndex = Integer.parseInt(index); - int size = line.getSize(); - if (intIndex < 1 || intIndex > size+1) - throw new IndexOutOfBoundsException(); - } catch (Exception e) { - ErrorMessage.displayErrorMessage(Constants.UNVALID_INDEX_ERROR); - throw new IllegalArgumentException(); - } - } - - public static void checkValidLine(String name) { - Line line = LineRepository.getLineByName(name); - if (line.getSize() < 3) { - ErrorMessage.displayErrorMessage(Constants.CANT_DELETE_SECTION_ERROR); - throw new IllegalArgumentException(); - } - } - public static void displayAllLines(Scanner kbd) { System.out.println("## 지하철 노선도"); for(Line line : LineRepository.lines()) { diff --git a/src/main/java/subway/domain/Errors.java b/src/main/java/subway/domain/Errors.java new file mode 100644 index 000000000..29dea0a9b --- /dev/null +++ b/src/main/java/subway/domain/Errors.java @@ -0,0 +1,90 @@ +package subway.domain; + +public class Errors { + public static void checkSameStation(String name) { + if (StationRepository.isExist(name)) { + ErrorMessage.displayErrorMessage(Constants.ALREADY_EXIST_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkSameLine(String name) { + if (LineRepository.isExist(name)) { + ErrorMessage.displayErrorMessage(Constants.ALREADY_EXIST_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkSameName(String firstName, String lastName) { + if (firstName.equals(lastName)) { + ErrorMessage.displayErrorMessage(Constants.SAME_NAME_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkTextLength(String name) { + if (name.length() < 2) { + ErrorMessage.displayErrorMessage(Constants.NAME_LENGTH_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkExistStation(String name) { + if (!StationRepository.isExist(name)) { + ErrorMessage.displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkExistLine(String name) { + if (!LineRepository.isExist(name)) { + ErrorMessage.displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkInLine(String name) { + for (Line line : LineRepository.lines()) + if (line.hasStation(name)) { + ErrorMessage.displayErrorMessage(Constants.HAS_IN_LINE_ERROR); + throw new IllegalArgumentException(); + } + } + + public static Line checkInSpecificLine(String lineName, String stationName) { + Line line = LineRepository.getLineByName(lineName); + if (line.hasStation(stationName)) { + ErrorMessage.displayErrorMessage(Constants.HAS_IN_SPECIFIC_LINE_ERROR); + throw new IllegalArgumentException(); + } + return line; + } + + public static void checkNotInSpecificLine(String lineName, String stationName) { + Line line = LineRepository.getLineByName(lineName); + if (!line.hasStation(stationName)) { + ErrorMessage.displayErrorMessage(Constants.HAS_NOT_IN_SPECIFIC_LINE_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkValidIndex(Line line, String index) { + try { + int intIndex = Integer.parseInt(index); + int size = line.getSize(); + if (intIndex < 1 || intIndex > size+1) + throw new IndexOutOfBoundsException(); + } catch (Exception e) { + ErrorMessage.displayErrorMessage(Constants.UNVALID_INDEX_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkValidLine(String name) { + Line line = LineRepository.getLineByName(name); + if (line.getSize() < 3) { + ErrorMessage.displayErrorMessage(Constants.CANT_DELETE_SECTION_ERROR); + throw new IllegalArgumentException(); + } + } +} From d984f3ccc1d041742f594074e2ad9022152c3e36 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:50:33 +0900 Subject: [PATCH 36/40] =?UTF-8?q?refactor:=20Init=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 45 ++----------------------- src/main/java/subway/domain/Errors.java | 11 ++++++ src/main/java/subway/domain/Init.java | 26 ++++++++++++++ src/main/java/subway/domain/View.java | 13 +++++++ 4 files changed, 53 insertions(+), 42 deletions(-) create mode 100644 src/main/java/subway/domain/Init.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index eb68bfcb2..7c61fb757 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -9,7 +9,7 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - initialize(); + Init.initialize(); startProgram(scanner); } @@ -19,46 +19,17 @@ public static void startProgram(Scanner kbd) { goSubMenu(mainInput, kbd); } - public static void initialize() { - initializeStation(); - initializeLine(); - } - - public static void initializeStation() { - List names = Arrays.asList("교대역", "강남역", "역삼역", "남부터미널역", "양재역", "양재시민의숲역", "매봉역"); - for (String name : names) - StationRepository.addStation(new Station(name)); - } - - public static void initializeLine() { - Line line2 = new Line("2호선"); - LineRepository.addLine(line2, Arrays.asList("교대역", "강남역", "역삼역")); - Line line3 = new Line("3호선"); - LineRepository.addLine(line3, Arrays.asList("교대역", "남부터미널역", "양재역", "매봉역")); - Line lineSinbundang = new Line("신분당선"); - LineRepository.addLine(lineSinbundang, Arrays.asList("강남역", "양재역", "양재시민의숲역")); - } - public static String inputFunction(Scanner kbd, List functions) { String input = "0"; boolean check = false; while(!check) { System.out.println("\n## 원하는 기능을 선택하세요."); input = kbd.nextLine(); - check = checkInput(input, functions); + check = Errors.checkInput(input, functions); } return input; } - public static boolean checkInput(String input, List functions) { - boolean check = true; - if (!functions.contains(input)) { - ErrorMessage.displayErrorMessage(Constants.FUNCTION_INPUT_ERROR); - check = false; - } - return check; - } - public static void goSubMenu(String input, Scanner kbd) { System.out.println(); if (input.equals(Constants.STATION_MENU)) @@ -68,7 +39,7 @@ public static void goSubMenu(String input, Scanner kbd) { if (input.equals(Constants.SECTION_MENU)) manageSection(kbd); if (input.equals(Constants.PRINT_LINES)) - displayAllLines(kbd); + View.displayAllLines(kbd); if (input.equalsIgnoreCase(Constants.FINISH_PROGRAM)) finishProgram(); } @@ -232,16 +203,6 @@ public static void searchLine(Scanner kbd) { startProgram(kbd); } - public static void displayAllLines(Scanner kbd) { - System.out.println("## 지하철 노선도"); - for(Line line : LineRepository.lines()) { - System.out.println("[INFO] " + line.getName()); - System.out.println("[INFO] ---"); - line.displayLine(); - } - startProgram(kbd); - } - public static void finishProgram() { System.out.println("## 프로그램 종료"); } diff --git a/src/main/java/subway/domain/Errors.java b/src/main/java/subway/domain/Errors.java index 29dea0a9b..59d415b23 100644 --- a/src/main/java/subway/domain/Errors.java +++ b/src/main/java/subway/domain/Errors.java @@ -1,6 +1,17 @@ package subway.domain; +import java.util.List; + public class Errors { + public static boolean checkInput(String input, List functions) { + boolean check = true; + if (!functions.contains(input)) { + ErrorMessage.displayErrorMessage(Constants.FUNCTION_INPUT_ERROR); + check = false; + } + return check; + } + public static void checkSameStation(String name) { if (StationRepository.isExist(name)) { ErrorMessage.displayErrorMessage(Constants.ALREADY_EXIST_ERROR); diff --git a/src/main/java/subway/domain/Init.java b/src/main/java/subway/domain/Init.java new file mode 100644 index 000000000..9580f486c --- /dev/null +++ b/src/main/java/subway/domain/Init.java @@ -0,0 +1,26 @@ +package subway.domain; + +import java.util.Arrays; +import java.util.List; + +public class Init { + public static void initialize() { + initializeStation(); + initializeLine(); + } + + public static void initializeStation() { + List names = Arrays.asList("교대역", "강남역", "역삼역", "남부터미널역", "양재역", "양재시민의숲역", "매봉역"); + for (String name : names) + StationRepository.addStation(new Station(name)); + } + + public static void initializeLine() { + Line line2 = new Line("2호선"); + LineRepository.addLine(line2, Arrays.asList("교대역", "강남역", "역삼역")); + Line line3 = new Line("3호선"); + LineRepository.addLine(line3, Arrays.asList("교대역", "남부터미널역", "양재역", "매봉역")); + Line lineSinbundang = new Line("신분당선"); + LineRepository.addLine(lineSinbundang, Arrays.asList("강남역", "양재역", "양재시민의숲역")); + } +} diff --git a/src/main/java/subway/domain/View.java b/src/main/java/subway/domain/View.java index 56da973fa..ca4a6cc8d 100644 --- a/src/main/java/subway/domain/View.java +++ b/src/main/java/subway/domain/View.java @@ -1,5 +1,8 @@ package subway.domain; +import java.util.Scanner; +import static subway.Application.startProgram; + public class View { public static void showMainMenu() { System.out.println("\n## 메인 화면"); @@ -32,4 +35,14 @@ public static void showSectionMenu() { System.out.println("2. 구간 삭제"); System.out.println("B. 돌아가기"); } + + public static void displayAllLines(Scanner kbd) { + System.out.println("## 지하철 노선도"); + for(Line line : LineRepository.lines()) { + System.out.println("[INFO] " + line.getName()); + System.out.println("[INFO] ---"); + line.displayLine(); + } + startProgram(kbd); + } } From 2e7511bd794a102322c7fcd141f04cdb52cda743 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:52:09 +0900 Subject: [PATCH 37/40] =?UTF-8?q?refactor:=20InputView=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 19 ++++--------------- src/main/java/subway/domain/InputView.java | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 15 deletions(-) create mode 100644 src/main/java/subway/domain/InputView.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 7c61fb757..113b51042 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -15,21 +15,10 @@ public static void main(String[] args) { public static void startProgram(Scanner kbd) { View.showMainMenu(); - String mainInput = inputFunction(kbd, Constants.MAIN_FUNCTIONS); + String mainInput = InputView.inputFunction(kbd, Constants.MAIN_FUNCTIONS); goSubMenu(mainInput, kbd); } - public static String inputFunction(Scanner kbd, List functions) { - String input = "0"; - boolean check = false; - while(!check) { - System.out.println("\n## 원하는 기능을 선택하세요."); - input = kbd.nextLine(); - check = Errors.checkInput(input, functions); - } - return input; - } - public static void goSubMenu(String input, Scanner kbd) { System.out.println(); if (input.equals(Constants.STATION_MENU)) @@ -46,7 +35,7 @@ public static void goSubMenu(String input, Scanner kbd) { public static void manageStation(Scanner kbd) { View.showStationMenu(); - String input = inputFunction(kbd, Constants.SUB_FUNCTIONS); + String input = InputView.inputFunction(kbd, Constants.SUB_FUNCTIONS); if (input.equals(Constants.ADD_MENU)) addStation(kbd); if (input.equals(Constants.DELETE_MENU)) @@ -59,7 +48,7 @@ public static void manageStation(Scanner kbd) { public static void manageLine(Scanner kbd) { View.showLineMenu(); - String input = inputFunction(kbd, Constants.SUB_FUNCTIONS); + String input = InputView.inputFunction(kbd, Constants.SUB_FUNCTIONS); if (input.equals(Constants.ADD_MENU)) addLine(kbd); if (input.equals(Constants.DELETE_MENU)) @@ -72,7 +61,7 @@ public static void manageLine(Scanner kbd) { public static void manageSection(Scanner kbd) { View.showSectionMenu(); - String input = inputFunction(kbd, Constants.SECTION_FUNCTIONS); + String input = InputView.inputFunction(kbd, Constants.SECTION_FUNCTIONS); if (input.equals(Constants.ADD_MENU)) addSection(kbd); if (input.equals(Constants.DELETE_MENU)) diff --git a/src/main/java/subway/domain/InputView.java b/src/main/java/subway/domain/InputView.java new file mode 100644 index 000000000..5b1ffd0db --- /dev/null +++ b/src/main/java/subway/domain/InputView.java @@ -0,0 +1,17 @@ +package subway.domain; + +import java.util.List; +import java.util.Scanner; + +public class InputView { + public static String inputFunction(Scanner kbd, List functions) { + String input = "0"; + boolean check = false; + while(!check) { + System.out.println("\n## 원하는 기능을 선택하세요."); + input = kbd.nextLine(); + check = Errors.checkInput(input, functions); + } + return input; + } +} From 2f931630ec83c109022a062b99263a73b1932d84 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:54:32 +0900 Subject: [PATCH 38/40] =?UTF-8?q?refactor:=20SectionManage=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 55 +---------------- .../java/subway/domain/SectionManage.java | 59 +++++++++++++++++++ 2 files changed, 60 insertions(+), 54 deletions(-) create mode 100644 src/main/java/subway/domain/SectionManage.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 113b51042..5a99fa3b2 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -3,7 +3,6 @@ import subway.domain.*; import java.util.Arrays; -import java.util.List; import java.util.Scanner; public class Application { @@ -26,7 +25,7 @@ public static void goSubMenu(String input, Scanner kbd) { if (input.equals(Constants.LINE_MENU)) manageLine(kbd); if (input.equals(Constants.SECTION_MENU)) - manageSection(kbd); + SectionManage.manageSection(kbd); if (input.equals(Constants.PRINT_LINES)) View.displayAllLines(kbd); if (input.equalsIgnoreCase(Constants.FINISH_PROGRAM)) @@ -59,58 +58,6 @@ public static void manageLine(Scanner kbd) { startProgram(kbd); } - public static void manageSection(Scanner kbd) { - View.showSectionMenu(); - String input = InputView.inputFunction(kbd, Constants.SECTION_FUNCTIONS); - if (input.equals(Constants.ADD_MENU)) - addSection(kbd); - if (input.equals(Constants.DELETE_MENU)) - deleteSection(kbd); - if (input.equals(Constants.GO_BACK_MENU)) - startProgram(kbd); - } - - public static void addSection(Scanner kbd) { - try { - makeNewSection(kbd); - System.out.println("\n[INFO] 구간이 등록되었습니다."); - startProgram(kbd); - } catch (Exception e) { - startProgram(kbd); - } - } - - public static void makeNewSection(Scanner kbd) { - System.out.println("\n## 노선을 입력하세요."); - String lineName = kbd.nextLine(); - Errors.checkExistLine(lineName); - System.out.println("\n## 역이름을 입력하세요."); - String stationName = kbd.nextLine(); - Errors.checkExistStation(stationName); - Line line = Errors.checkInSpecificLine(lineName, stationName); - System.out.println("\n## 순서를 입력하세요."); - String index = kbd.nextLine(); - Errors.checkValidIndex(line, index); - LineRepository.addStationToLine(lineName, stationName, Integer.parseInt(index)); - } - - public static void deleteSection(Scanner kbd) { - try { - System.out.println("\n## 삭제할 구간의 노선을 입력하세요."); - String lineName = kbd.nextLine(); - Errors.checkExistLine(lineName); - Errors.checkValidLine(lineName); - System.out.println("\n## 삭제할 구간의 역을 입력하세요."); - String stationName = kbd.nextLine(); - Errors.checkNotInSpecificLine(lineName, stationName); - LineRepository.deleteStationInLine(lineName, stationName); - System.out.println("\n[INFO] 구간이 삭제되었습니다."); - startProgram(kbd); - } catch (Exception e) { - startProgram(kbd); - } - } - public static void addStation(Scanner kbd) { try { System.out.println("\n## 등록할 역 이름을 입력하세요."); diff --git a/src/main/java/subway/domain/SectionManage.java b/src/main/java/subway/domain/SectionManage.java new file mode 100644 index 000000000..eafff4c6a --- /dev/null +++ b/src/main/java/subway/domain/SectionManage.java @@ -0,0 +1,59 @@ +package subway.domain; + +import java.util.Scanner; + +import static subway.Application.startProgram; + +public class SectionManage { + public static void manageSection(Scanner kbd) { + View.showSectionMenu(); + String input = InputView.inputFunction(kbd, Constants.SECTION_FUNCTIONS); + if (input.equals(Constants.ADD_MENU)) + addSection(kbd); + if (input.equals(Constants.DELETE_MENU)) + deleteSection(kbd); + if (input.equals(Constants.GO_BACK_MENU)) + startProgram(kbd); + } + + public static void addSection(Scanner kbd) { + try { + makeNewSection(kbd); + System.out.println("\n[INFO] 구간이 등록되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void makeNewSection(Scanner kbd) { + System.out.println("\n## 노선을 입력하세요."); + String lineName = kbd.nextLine(); + Errors.checkExistLine(lineName); + System.out.println("\n## 역이름을 입력하세요."); + String stationName = kbd.nextLine(); + Errors.checkExistStation(stationName); + Line line = Errors.checkInSpecificLine(lineName, stationName); + System.out.println("\n## 순서를 입력하세요."); + String index = kbd.nextLine(); + Errors.checkValidIndex(line, index); + LineRepository.addStationToLine(lineName, stationName, Integer.parseInt(index)); + } + + public static void deleteSection(Scanner kbd) { + try { + System.out.println("\n## 삭제할 구간의 노선을 입력하세요."); + String lineName = kbd.nextLine(); + Errors.checkExistLine(lineName); + Errors.checkValidLine(lineName); + System.out.println("\n## 삭제할 구간의 역을 입력하세요."); + String stationName = kbd.nextLine(); + Errors.checkNotInSpecificLine(lineName, stationName); + LineRepository.deleteStationInLine(lineName, stationName); + System.out.println("\n[INFO] 구간이 삭제되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } +} From 729d0373ed2b6b8e8f905f21e1c326a802d28e63 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:55:43 +0900 Subject: [PATCH 39/40] =?UTF-8?q?refactor:=20StationManage=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 50 +---------------- .../java/subway/domain/StationManage.java | 55 +++++++++++++++++++ 2 files changed, 56 insertions(+), 49 deletions(-) create mode 100644 src/main/java/subway/domain/StationManage.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 5a99fa3b2..931a998f3 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -21,7 +21,7 @@ public static void startProgram(Scanner kbd) { public static void goSubMenu(String input, Scanner kbd) { System.out.println(); if (input.equals(Constants.STATION_MENU)) - manageStation(kbd); + StationManage.manageStation(kbd); if (input.equals(Constants.LINE_MENU)) manageLine(kbd); if (input.equals(Constants.SECTION_MENU)) @@ -32,19 +32,6 @@ public static void goSubMenu(String input, Scanner kbd) { finishProgram(); } - public static void manageStation(Scanner kbd) { - View.showStationMenu(); - String input = InputView.inputFunction(kbd, Constants.SUB_FUNCTIONS); - if (input.equals(Constants.ADD_MENU)) - addStation(kbd); - if (input.equals(Constants.DELETE_MENU)) - deleteStation(kbd); - if (input.equals(Constants.SEARCH_MENU)) - searchStation(kbd); - if (input.equalsIgnoreCase(Constants.GO_BACK_MENU)) - startProgram(kbd); - } - public static void manageLine(Scanner kbd) { View.showLineMenu(); String input = InputView.inputFunction(kbd, Constants.SUB_FUNCTIONS); @@ -58,41 +45,6 @@ public static void manageLine(Scanner kbd) { startProgram(kbd); } - public static void addStation(Scanner kbd) { - try { - System.out.println("\n## 등록할 역 이름을 입력하세요."); - String stationName = kbd.nextLine(); - Errors.checkSameStation(stationName); - Errors.checkTextLength(stationName); - StationRepository.addStation(new Station(stationName)); - System.out.println("\n[INFO] 지하철 역이 등록되었습니다."); - startProgram(kbd); - } catch (Exception e) { - startProgram(kbd); - } - } - - public static void deleteStation(Scanner kbd) { - try { - System.out.println("\n## 삭제할 역 이름을 입력하세요."); - String stationName = kbd.nextLine(); - Errors.checkExistStation(stationName); - Errors.checkInLine(stationName); - StationRepository.deleteStation(stationName); - System.out.println("\n[INFO] 지하철 역이 삭제되었습니다."); - startProgram(kbd); - } catch (Exception e) { - startProgram(kbd); - } - } - - public static void searchStation(Scanner kbd) { - System.out.println("\n## 역 목록"); - for (Station station : StationRepository.stations()) - System.out.println("[INFO] " + station.getName()); - startProgram(kbd); - } - public static void addLine(Scanner kbd) { try { makeNewLine(kbd); diff --git a/src/main/java/subway/domain/StationManage.java b/src/main/java/subway/domain/StationManage.java new file mode 100644 index 000000000..f9db42d6b --- /dev/null +++ b/src/main/java/subway/domain/StationManage.java @@ -0,0 +1,55 @@ +package subway.domain; + +import java.util.Scanner; + +import static subway.Application.startProgram; + +public class StationManage { + public static void manageStation(Scanner kbd) { + View.showStationMenu(); + String input = InputView.inputFunction(kbd, Constants.SUB_FUNCTIONS); + if (input.equals(Constants.ADD_MENU)) + addStation(kbd); + if (input.equals(Constants.DELETE_MENU)) + deleteStation(kbd); + if (input.equals(Constants.SEARCH_MENU)) + searchStation(kbd); + if (input.equalsIgnoreCase(Constants.GO_BACK_MENU)) + startProgram(kbd); + } + + public static void addStation(Scanner kbd) { + try { + System.out.println("\n## 등록할 역 이름을 입력하세요."); + String stationName = kbd.nextLine(); + Errors.checkSameStation(stationName); + Errors.checkTextLength(stationName); + StationRepository.addStation(new Station(stationName)); + System.out.println("\n[INFO] 지하철 역이 등록되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void deleteStation(Scanner kbd) { + try { + System.out.println("\n## 삭제할 역 이름을 입력하세요."); + String stationName = kbd.nextLine(); + Errors.checkExistStation(stationName); + Errors.checkInLine(stationName); + StationRepository.deleteStation(stationName); + System.out.println("\n[INFO] 지하철 역이 삭제되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void searchStation(Scanner kbd) { + System.out.println("\n## 역 목록"); + for (Station station : StationRepository.stations()) + System.out.println("[INFO] " + station.getName()); + startProgram(kbd); + } +} From 1378fc9588021fdbabdd0a84a4bda778f9adf1b9 Mon Sep 17 00:00:00 2001 From: xrabcde Date: Tue, 15 Dec 2020 23:56:33 +0900 Subject: [PATCH 40/40] =?UTF-8?q?refactor:=20LineManage=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 62 +------------------ src/main/java/subway/domain/LineManage.java | 67 +++++++++++++++++++++ 2 files changed, 68 insertions(+), 61 deletions(-) create mode 100644 src/main/java/subway/domain/LineManage.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 931a998f3..d14c04b14 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -2,7 +2,6 @@ import subway.domain.*; -import java.util.Arrays; import java.util.Scanner; public class Application { @@ -23,7 +22,7 @@ public static void goSubMenu(String input, Scanner kbd) { if (input.equals(Constants.STATION_MENU)) StationManage.manageStation(kbd); if (input.equals(Constants.LINE_MENU)) - manageLine(kbd); + LineManage.manageLine(kbd); if (input.equals(Constants.SECTION_MENU)) SectionManage.manageSection(kbd); if (input.equals(Constants.PRINT_LINES)) @@ -32,65 +31,6 @@ public static void goSubMenu(String input, Scanner kbd) { finishProgram(); } - public static void manageLine(Scanner kbd) { - View.showLineMenu(); - String input = InputView.inputFunction(kbd, Constants.SUB_FUNCTIONS); - if (input.equals(Constants.ADD_MENU)) - addLine(kbd); - if (input.equals(Constants.DELETE_MENU)) - deleteLine(kbd); - if (input.equals(Constants.SEARCH_MENU)) - searchLine(kbd); - if (input.equalsIgnoreCase(Constants.GO_BACK_MENU)) - startProgram(kbd); - } - - public static void addLine(Scanner kbd) { - try { - makeNewLine(kbd); - System.out.println("\n[INFO] 지하철 노선이 등록되었습니다."); - startProgram(kbd); - } catch (Exception e) { - startProgram(kbd); - } - } - - public static void makeNewLine(Scanner kbd) throws IllegalArgumentException { - System.out.println("\n## 등록할 노선 이름을 입력하세요."); - String lineName = kbd.nextLine(); - Errors.checkSameLine(lineName); - Errors.checkTextLength(lineName); - System.out.println("\n## 등록할 노선의 상행 종점역 이름을 입력하세요."); - String firstStation = kbd.nextLine(); - Errors.checkExistStation(firstStation); - System.out.println("\n## 등록할 노선의 하행 종점역 이름을 입력하세요."); - String lastStation = kbd.nextLine(); - Errors.checkExistStation(lastStation); - Errors.checkSameName(firstStation, lastStation); - Line newLine = new Line(lineName); - LineRepository.addLine(newLine, Arrays.asList(firstStation, lastStation)); - } - - public static void deleteLine(Scanner kbd) { - try { - System.out.println("\n## 삭제할 노선 이름을 입력하세요."); - String lineName = kbd.nextLine(); - Errors.checkExistLine(lineName); - LineRepository.deleteLineByName(lineName); - System.out.println("\n[INFO] 지하철 노선이 삭제되었습니다."); - startProgram(kbd); - } catch (Exception e) { - startProgram(kbd); - } - } - - public static void searchLine(Scanner kbd) { - System.out.println("\n## 노선 목록"); - for (Line line : LineRepository.lines()) - System.out.println("[INFO] " + line.getName()); - startProgram(kbd); - } - public static void finishProgram() { System.out.println("## 프로그램 종료"); } diff --git a/src/main/java/subway/domain/LineManage.java b/src/main/java/subway/domain/LineManage.java new file mode 100644 index 000000000..73753187d --- /dev/null +++ b/src/main/java/subway/domain/LineManage.java @@ -0,0 +1,67 @@ +package subway.domain; + +import java.util.Arrays; +import java.util.Scanner; + +import static subway.Application.startProgram; + +public class LineManage { + public static void manageLine(Scanner kbd) { + View.showLineMenu(); + String input = InputView.inputFunction(kbd, Constants.SUB_FUNCTIONS); + if (input.equals(Constants.ADD_MENU)) + addLine(kbd); + if (input.equals(Constants.DELETE_MENU)) + deleteLine(kbd); + if (input.equals(Constants.SEARCH_MENU)) + searchLine(kbd); + if (input.equalsIgnoreCase(Constants.GO_BACK_MENU)) + startProgram(kbd); + } + + public static void addLine(Scanner kbd) { + try { + makeNewLine(kbd); + System.out.println("\n[INFO] 지하철 노선이 등록되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void makeNewLine(Scanner kbd) throws IllegalArgumentException { + System.out.println("\n## 등록할 노선 이름을 입력하세요."); + String lineName = kbd.nextLine(); + Errors.checkSameLine(lineName); + Errors.checkTextLength(lineName); + System.out.println("\n## 등록할 노선의 상행 종점역 이름을 입력하세요."); + String firstStation = kbd.nextLine(); + Errors.checkExistStation(firstStation); + System.out.println("\n## 등록할 노선의 하행 종점역 이름을 입력하세요."); + String lastStation = kbd.nextLine(); + Errors.checkExistStation(lastStation); + Errors.checkSameName(firstStation, lastStation); + Line newLine = new Line(lineName); + LineRepository.addLine(newLine, Arrays.asList(firstStation, lastStation)); + } + + public static void deleteLine(Scanner kbd) { + try { + System.out.println("\n## 삭제할 노선 이름을 입력하세요."); + String lineName = kbd.nextLine(); + Errors.checkExistLine(lineName); + LineRepository.deleteLineByName(lineName); + System.out.println("\n[INFO] 지하철 노선이 삭제되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void searchLine(Scanner kbd) { + System.out.println("\n## 노선 목록"); + for (Line line : LineRepository.lines()) + System.out.println("[INFO] " + line.getName()); + startProgram(kbd); + } +}