From 7cf949c903f2bacb667ff1db23792e2183915cb8 Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:07:39 +0900 Subject: [PATCH 01/15] =?UTF-8?q?docs(README.md):=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=ED=95=A0=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 9 +++++++++ README.md | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..4177ad037 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log + +이 프로젝트의 주목할만한 변화들은 모두 이곳에 기입합니다. +작성 기준은 [AngularJS Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 를 따르도록 합니다. + +--- +# 지하철 프로젝트 + +docs(README.md): 구현할 기능 목록 추가 \ No newline at end of file diff --git a/README.md b/README.md index 00410ae50..bc75861e9 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,26 @@
+## 구현할 기능 목록 + - 메뉴 순환 기능 + - 메뉴 유효 입력 확인 기능 + - 메뉴 선택 기능 + + - 역 추가 + - 역 삭제 + - 역 출력 + + - 노선 추가 + - 노선 삭제 + - 노선 출력 + + - 구간 추가 + - 구간 삭제 + + - 지하철 노선도 출력 + + - 초기 역과 노선 등록 기능 + ## 🚀 기능 요구사항 ### 초기 설정 From 723651ab84240f38c564c79125d966d79fa9949b Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:12:41 +0900 Subject: [PATCH 02/15] =?UTF-8?q?feat(Menu.java):=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=88=9C=ED=99=98=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ README.md | 2 +- src/main/java/subway/controller/Menu.java | 40 +++++++++++++++++++++++ src/main/java/subway/view/Error.java | 8 +++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/controller/Menu.java create mode 100644 src/main/java/subway/view/Error.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 4177ad037..75d723840 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,4 +6,6 @@ --- # 지하철 프로젝트 +feat(Menu.java): 메뉴 순환 기능 추가 + docs(README.md): 구현할 기능 목록 추가 \ No newline at end of file diff --git a/README.md b/README.md index bc75861e9..dd85a6b1f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@
## 구현할 기능 목록 - - 메뉴 순환 기능 + - ~~메뉴 순환 기능~~ - 메뉴 유효 입력 확인 기능 - 메뉴 선택 기능 diff --git a/src/main/java/subway/controller/Menu.java b/src/main/java/subway/controller/Menu.java new file mode 100644 index 000000000..954bd9d37 --- /dev/null +++ b/src/main/java/subway/controller/Menu.java @@ -0,0 +1,40 @@ +package subway.controller; + +import subway.view.Error; + +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +public abstract class Menu { + protected static final String MENU_ONE = "1"; + protected static final String MENU_TWO = "2"; + protected static final String MENU_THREE = "3"; + protected static final String MENU_BACK = "B"; + protected static final List PRIMARY_FUNCTIONS = Arrays + .asList(MENU_ONE, MENU_TWO, MENU_THREE, MENU_BACK); + + protected Scanner scanner; + + public Menu(Scanner scanner) { + this.scanner = scanner; + } + + public void run() { + do { + info(); + } while (managing(scanner.nextLine())); + } + + protected abstract void info(); + + // 유효 입력 여과 + protected boolean managing(String choice) { + if (PRIMARY_FUNCTIONS.contains(choice)) { + return false; + } + Error.noFunction(); + return true; + } + +} diff --git a/src/main/java/subway/view/Error.java b/src/main/java/subway/view/Error.java new file mode 100644 index 000000000..8b804aa8b --- /dev/null +++ b/src/main/java/subway/view/Error.java @@ -0,0 +1,8 @@ +package subway.view; + +public class Error { + public static boolean noFunction() { + System.out.println("\n[ERROR] 선택할 수 없는 기능입니다.\n"); + return false; + } +} From cccbb166ae1fbf15af3ae2eaeb6b6c21817bced4 Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:14:05 +0900 Subject: [PATCH 03/15] =?UTF-8?q?feat(Menu.java):=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=ED=99=95=EC=9D=B8=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ README.md | 2 +- src/main/java/subway/controller/Menu.java | 27 ++++++++++++++++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75d723840..0d1964229 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(Menu.java): 메뉴 입력 확인 기능 추가 + feat(Menu.java): 메뉴 순환 기능 추가 docs(README.md): 구현할 기능 목록 추가 \ No newline at end of file diff --git a/README.md b/README.md index dd85a6b1f..6c24ff61e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## 구현할 기능 목록 - ~~메뉴 순환 기능~~ - - 메뉴 유효 입력 확인 기능 + - ~~메뉴 유효 입력 확인 기능~~ - 메뉴 선택 기능 - 역 추가 diff --git a/src/main/java/subway/controller/Menu.java b/src/main/java/subway/controller/Menu.java index 954bd9d37..f6b464c21 100644 --- a/src/main/java/subway/controller/Menu.java +++ b/src/main/java/subway/controller/Menu.java @@ -31,10 +31,35 @@ public void run() { // 유효 입력 여과 protected boolean managing(String choice) { if (PRIMARY_FUNCTIONS.contains(choice)) { - return false; + return executeFunction(choice); } Error.noFunction(); return true; } + // true -> 반복, false -> 종료 + protected boolean executeFunction(String choice) { + if (choice.equals(MENU_ONE)) { + return !functionOne(); + } + if (choice.equals(MENU_TWO)) { + return !functionTwo(); + } + if (choice.equals(MENU_THREE)) { + return !functionThree(); + } + return false; + } + + protected boolean functionOne() { + return false; + } + + protected boolean functionTwo() { + return false; + } + + protected boolean functionThree() { + return false; + } } From b0d18eae8df5651ee13a2fd4a0cd9dcf243fc3c3 Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:19:33 +0900 Subject: [PATCH 04/15] =?UTF-8?q?feat(StationMenu.java):=20=EC=97=AD=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 + README.md | 4 +- .../java/subway/controller/StationMenu.java | 36 ++++++++++++++ src/main/java/subway/domain/Station.java | 17 ++++++- .../java/subway/domain/StationManager.java | 49 +++++++++++++++++++ src/main/java/subway/view/Error.java | 9 ++++ 6 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 src/main/java/subway/controller/StationMenu.java create mode 100644 src/main/java/subway/domain/StationManager.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d1964229..1826977cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(StationMenu.java): 역 추가 기능 추가 + feat(Menu.java): 메뉴 입력 확인 기능 추가 feat(Menu.java): 메뉴 순환 기능 추가 diff --git a/README.md b/README.md index 6c24ff61e..8f6415f5c 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ ## 구현할 기능 목록 - ~~메뉴 순환 기능~~ - ~~메뉴 유효 입력 확인 기능~~ - - 메뉴 선택 기능 + - ~~메뉴 선택 기능~~ - - 역 추가 + - ~~역 추가~~ - 역 삭제 - 역 출력 diff --git a/src/main/java/subway/controller/StationMenu.java b/src/main/java/subway/controller/StationMenu.java new file mode 100644 index 000000000..09d2fa76c --- /dev/null +++ b/src/main/java/subway/controller/StationMenu.java @@ -0,0 +1,36 @@ +package subway.controller; + +import subway.domain.StationManager; +import subway.view.PrintInfo; +import subway.view.Error; + +import java.util.Scanner; + +public class StationMenu extends Menu { + public StationMenu(Scanner scanner) { + super(scanner); + } + + @Override + protected void info() { + PrintInfo.manageStation(); + } + + @Override + protected boolean functionOne() { + return addStation(); + } + + private boolean addStation() { + PrintInfo.inputAddStationName(); + String stationName = scanner.nextLine(); + if (!StationManager.validNameLength(stationName)) { + return Error.nameLength(); + } + if (!StationManager.addStation(stationName)) { + return Error.alreadyExist(); + } + PrintInfo.addStationSuccess(); + return true; + } +} diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..a31866070 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,15 +1,30 @@ package subway.domain; +import java.util.ArrayList; +import java.util.List; + public class Station { private String name; + private List lines; public Station(String name) { this.name = name; + this.lines = new ArrayList<>(); } public String getName() { return name; } - // 추가 기능 구현 + public void addBelongingLine(Line line) { + lines.add(line); + } + + public void deleteBelongingLine(Line line) { + lines.remove(line); + } + + public List getBelongingLines() { + return lines; + } } diff --git a/src/main/java/subway/domain/StationManager.java b/src/main/java/subway/domain/StationManager.java new file mode 100644 index 000000000..3453e2280 --- /dev/null +++ b/src/main/java/subway/domain/StationManager.java @@ -0,0 +1,49 @@ +package subway.domain; + + +import java.util.List; + +public class StationManager { + public static final int MIN_NAME_LENGTH = 2; + + public static boolean validNameLength(String name) { + return name.length() >= MIN_NAME_LENGTH; + } + + public static boolean containsName(String name) { + return StationRepository.stations().stream().anyMatch(station -> station.getName().equals(name)); + } + + public static boolean addStation(String name) { + if (!validNameLength(name) || containsName(name)) { + return false; + } + StationRepository.addStation(new Station(name)); + return true; + } + + public static Station getByName(String name) { + for (Station station : StationRepository.stations()) { + if (station.getName().equals(name)) { + return station; + } + } + return null; + } + + public static boolean deleteStationByName(String name) { + if (!containsName(name) || isBelongsToAnyLine(name)) { + return false; + } + StationRepository.deleteStation(name); + return true; + } + + private static boolean isBelongsToAnyLine(String name) { + return getByName(name).getBelongingLines().size() > 0; + } + + public static List allStations() { + return StationRepository.stations(); + } +} diff --git a/src/main/java/subway/view/Error.java b/src/main/java/subway/view/Error.java index 8b804aa8b..0773164e0 100644 --- a/src/main/java/subway/view/Error.java +++ b/src/main/java/subway/view/Error.java @@ -5,4 +5,13 @@ public static boolean noFunction() { System.out.println("\n[ERROR] 선택할 수 없는 기능입니다.\n"); return false; } + + public static boolean alreadyExist() { + System.out.println("\n[ERROR] 이미 등록된 이름입니다.\n"); + return false; + } + public static boolean nameLength() { + System.out.println("\n[ERROR] 이름은 2자 이상만 가능합니다.\n"); + return false; + } } From a606c565b60e7851e9c93a3488bab826f35e3719 Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:21:52 +0900 Subject: [PATCH 05/15] =?UTF-8?q?feat(StationMenu.java):=20=EC=97=AD=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ README.md | 2 +- .../java/subway/controller/StationMenu.java | 13 ++++++++++ src/main/java/subway/view/Error.java | 26 +++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1826977cd..5ea064121 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(StationMenu.java): 역 삭제 기능 추가 + feat(StationMenu.java): 역 추가 기능 추가 feat(Menu.java): 메뉴 입력 확인 기능 추가 diff --git a/README.md b/README.md index 8f6415f5c..df29f581b 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ - ~~메뉴 선택 기능~~ - ~~역 추가~~ - - 역 삭제 + - ~~역 삭제~~ - 역 출력 - 노선 추가 diff --git a/src/main/java/subway/controller/StationMenu.java b/src/main/java/subway/controller/StationMenu.java index 09d2fa76c..61462f72c 100644 --- a/src/main/java/subway/controller/StationMenu.java +++ b/src/main/java/subway/controller/StationMenu.java @@ -33,4 +33,17 @@ private boolean addStation() { PrintInfo.addStationSuccess(); return true; } + + private boolean deleteStation() { + PrintInfo.inputDeleteStationName(); + String stationName = scanner.nextLine(); + if (!StationManager.containsName(stationName)) { + return Error.notExist(); + } + if (!StationManager.deleteStationByName(stationName)) { + return Error.stationHasLine(); + } + PrintInfo.deleteStationSuccess(); + return true; + } } diff --git a/src/main/java/subway/view/Error.java b/src/main/java/subway/view/Error.java index 0773164e0..829eeec4e 100644 --- a/src/main/java/subway/view/Error.java +++ b/src/main/java/subway/view/Error.java @@ -10,8 +10,34 @@ public static boolean alreadyExist() { System.out.println("\n[ERROR] 이미 등록된 이름입니다.\n"); return false; } + + public static boolean notExist() { + System.out.println("\n[ERROR] 존재하지 않는 이름입니다.\n"); + return false; + } + + public static boolean stationHasLine() { + System.out.println("\n[ERROR] 노선에 등록되어있어 삭제할 수 없습니다.\n"); + return true; + } + + public static boolean createLine() { + System.out.println("\n[ERROR] 노선 생성 불가\n"); + return false; + } + public static boolean nameLength() { System.out.println("\n[ERROR] 이름은 2자 이상만 가능합니다.\n"); return false; } + + public static boolean indexOutOfRange() { + System.out.println("\n[ERROR] 범위를 벗어난 순서입니다.\n"); + return false; + } + + public static boolean numberOnly() { + System.out.println("\n[ERROR] 숫자만 가능합니다.\n"); + return false; + } } From 9ef9302c025de187da590929ad3fce33450c1264 Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:23:43 +0900 Subject: [PATCH 06/15] =?UTF-8?q?feat(StationMenu.java):=20=EC=97=AD=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 + README.md | 2 +- .../java/subway/controller/StationMenu.java | 16 +++++ src/main/java/subway/view/PrintInfo.java | 61 +++++++++++++++++++ 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/view/PrintInfo.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ea064121..0bdd80da9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(StationMenu.java): 역 출력 기능 추가 + feat(StationMenu.java): 역 삭제 기능 추가 feat(StationMenu.java): 역 추가 기능 추가 diff --git a/README.md b/README.md index df29f581b..3f6391638 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ - ~~역 추가~~ - ~~역 삭제~~ - - 역 출력 + - ~~역 출력~~ - 노선 추가 - 노선 삭제 diff --git a/src/main/java/subway/controller/StationMenu.java b/src/main/java/subway/controller/StationMenu.java index 61462f72c..ce3999a18 100644 --- a/src/main/java/subway/controller/StationMenu.java +++ b/src/main/java/subway/controller/StationMenu.java @@ -5,6 +5,7 @@ import subway.view.Error; import java.util.Scanner; +import java.util.stream.Collectors; public class StationMenu extends Menu { public StationMenu(Scanner scanner) { @@ -21,6 +22,21 @@ protected boolean functionOne() { return addStation(); } + @Override + protected boolean functionTwo() { + return deleteStation(); + } + + @Override + protected boolean functionThree() { + return printStations(); + } + + private boolean printStations() { + PrintInfo.stations(StationManager.allStations().stream().map(station -> station.getName()).collect(Collectors.toList())); + return true; + } + private boolean addStation() { PrintInfo.inputAddStationName(); String stationName = scanner.nextLine(); diff --git a/src/main/java/subway/view/PrintInfo.java b/src/main/java/subway/view/PrintInfo.java new file mode 100644 index 000000000..f56dc2a2a --- /dev/null +++ b/src/main/java/subway/view/PrintInfo.java @@ -0,0 +1,61 @@ +package subway.view; + +import java.util.List; + +public class PrintInfo { + public static void mainMenu() { + System.out.println( + "## 메인 화면\n" + + "1. 역 관리\n" + + "2. 노선 관리\n" + + "3. 구간 관리\n" + + "4. 지하철 노선도 출력\n" + + "Q. 종료\n" + + "\n" + + "## 원하는 기능을 선택하세요."); + } + + + + public static void manageStation() { + System.out.println( + "## 역 관리 화면\n" + + "1. 역 등록\n" + + "2. 역 삭제\n" + + "3. 역 조회\n" + + "B. 돌아가기\n" + + "\n" + + "## 원하는 기능을 선택하세요."); + } + + public static void inputAddStationName() { + System.out.println("\n" + + "## 등록할 역 이름을 입력하세요."); + } + + public static void addStationSuccess() { + System.out.println("\n" + + "[INFO] 지하철 역이 등록되었습니다.\n"); + } + + public static void inputDeleteStationName() { + System.out.println("\n" + + "## 삭제할 역 이름을 입력하세요."); + } + + public static void deleteStationSuccess() { + System.out.println("\n" + + "[INFO] 지하철 역이 삭제되었습니다.\n"); + } + + public static void stations(List list) { + System.out.println("\n" + + "## 역 목록"); + printList(list); + } + + public static void printList(List list) { + list.forEach(item -> System.out.println("[INFO] " + item)); + System.out.println(); + } +} From e3c9da38f1912c2b03185e91a8289688552c7d41 Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:26:25 +0900 Subject: [PATCH 07/15] =?UTF-8?q?feat(LineMenu.java):=20=EB=85=B8=EC=84=A0?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 + README.md | 2 +- src/main/java/subway/controller/LineMenu.java | 61 ++++++++++++++ src/main/java/subway/domain/Line.java | 28 ++++++- src/main/java/subway/domain/LineManager.java | 79 +++++++++++++++++++ src/main/java/subway/view/PrintInfo.java | 33 ++++++++ 6 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 src/main/java/subway/controller/LineMenu.java create mode 100644 src/main/java/subway/domain/LineManager.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bdd80da9..95222f50f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(LineMenu.java): 노선 추가 기능 추가 + feat(StationMenu.java): 역 출력 기능 추가 feat(StationMenu.java): 역 삭제 기능 추가 diff --git a/README.md b/README.md index 3f6391638..0807ff0de 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ - ~~역 삭제~~ - ~~역 출력~~ - - 노선 추가 + - ~~노선 추가~~ - 노선 삭제 - 노선 출력 diff --git a/src/main/java/subway/controller/LineMenu.java b/src/main/java/subway/controller/LineMenu.java new file mode 100644 index 000000000..40a59f832 --- /dev/null +++ b/src/main/java/subway/controller/LineMenu.java @@ -0,0 +1,61 @@ +package subway.controller; + +import subway.domain.LineManager; +import subway.domain.StationManager; +import subway.view.PrintInfo; +import subway.view.Error; + +import java.util.Scanner; + +public class LineMenu extends Menu { + public LineMenu(Scanner scanner) { + super(scanner); + } + + @Override + protected void info() { + PrintInfo.manageLine(); + } + + @Override + protected boolean functionOne() { + return addLine(); + } + + private boolean addLine() { + PrintInfo.inputAddLineName(); + String line = scanner.nextLine(); + if (LineManager.anyMatchLineName(line)) { + return Error.alreadyExist(); + } + return setFromAndTo(line); + } + + private boolean setFromAndTo(String line) { + PrintInfo.inputAddLineStartStation(); + String from = scanner.nextLine(); + if (!StationManager.containsName(from)) { + return Error.notExist(); + } + return setTo(line, from); + } + + private boolean setTo(String line, String from) { + PrintInfo.inputAddLineEndStation(); + String to = scanner.nextLine(); + if (!StationManager.containsName(to)) { + return Error.notExist(); + } + return createLine(line, from, to); + } + + private boolean createLine(String line, String from, String to) { + try { + LineManager.addLine(line, StationManager.getByName(from), StationManager.getByName(to)); + } catch (Exception e) { + return Error.createLine(); + } + PrintInfo.addLineSuccess(); + return true; + } +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..1279a04c7 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 stations = new ArrayList<>(); public Line(String name) { this.name = name; @@ -11,5 +15,27 @@ public String getName() { return name; } - // 추가 기능 구현 + public void addSubStationAt(int index, Station station) { + if ((index < 0) || (stations.size() < index) || station == null) { + return; + } + stations.add(index, station); + } + + public void addSubStation(Station station) { + if (station == null) { + return; + } + stations.add(station); + } + + public void deleteSubStation(Station station) { + if (station != null) { + stations.remove(station); + } + } + + public List getSubStations() { + return stations; + } } diff --git a/src/main/java/subway/domain/LineManager.java b/src/main/java/subway/domain/LineManager.java new file mode 100644 index 000000000..e7dbbafa2 --- /dev/null +++ b/src/main/java/subway/domain/LineManager.java @@ -0,0 +1,79 @@ +package subway.domain; + +import java.util.Arrays; +import java.util.List; + +public class LineManager { + public static void initLine(String name, String[] stations) { + Line line = new Line(name); + Arrays.asList(stations).forEach(station -> line.addSubStation(StationManager.getByName(station))); + LineRepository.addLine(line); + } + + public static boolean anyMatchLineName(String name) { + return LineRepository.lines().stream().anyMatch(line -> line.getName().equals(name)); + } + + public static void addLine(String name, Station from, Station to) { + Line line = new Line(name); + line.addSubStation(from); + line.addSubStation(to); + LineRepository.addLine(line); + } + + public static Line getLineByName(String name) { + for (Line line : LineRepository.lines()) { + if (line.getName().equals(name)) { + return line; + } + } + return null; + } + + public static boolean deleteLineByName(String name) { + Line target = getLineByName(name); + if (target == null) { + return false; + } + deleteLineFromStations(target); + LineRepository.deleteLineByName(name); + return true; + } + + private static void deleteLineFromStations(Line line) { + for (Station station : line.getSubStations()) { + station.deleteBelongingLine(line); + } + } + + public static List allLines() { + return LineRepository.lines(); + } + + public static boolean addSectionInLine(String lineName, String stationName, int index) { + Line line = LineManager.getLineByName(lineName); + Station station = StationManager.getByName(stationName); + if ((line == null) || (station == null)) { + return false; + } + line.addSubStationAt(index, station); + return true; + } + + public static boolean hasStation(String lineName, String stationName) { + Line line = LineManager.getLineByName(lineName); + if (line == null) { + return false; + } + return line.getSubStations().stream().anyMatch(station -> station.getName().equals(stationName)); + } + + public static boolean deleteSectionInLine(String lineName, String stationName) { + Line line = LineManager.getLineByName(lineName); + if ((line == null) || line.getSubStations().stream().noneMatch(station -> station.getName().equals(stationName))) { + return false; + } + line.deleteSubStation(StationManager.getByName(stationName)); + return true; + } +} diff --git a/src/main/java/subway/view/PrintInfo.java b/src/main/java/subway/view/PrintInfo.java index f56dc2a2a..f09c1eb70 100644 --- a/src/main/java/subway/view/PrintInfo.java +++ b/src/main/java/subway/view/PrintInfo.java @@ -54,6 +54,39 @@ public static void stations(List list) { printList(list); } + + + public static void manageLine() { + System.out.println( + "## 노선 관리 화면\n" + + "1. 노선 등록\n" + + "2. 노선 삭제\n" + + "3. 노선 조회\n" + + "B. 돌아가기\n" + + "\n" + + "## 원하는 기능을 선택하세요."); + } + + public static void inputAddLineName() { + System.out.println("\n" + + "## 등록할 노선 이름을 입력하세요."); + } + + public static void inputAddLineStartStation() { + System.out.println("\n" + + "## 등록할 노선의 상행 종점역 이름을 입력하세요."); + } + + public static void inputAddLineEndStation() { + System.out.println("\n" + + "## 등록할 노선의 하행 종점역 이름을 입력하세요."); + } + + public static void addLineSuccess() { + System.out.println("\n" + + "[INFO] 지하철 노선이 등록되었습니다.\n"); + } + public static void printList(List list) { list.forEach(item -> System.out.println("[INFO] " + item)); System.out.println(); From 4653a62964b6f3707f852ea93000fffad8bd1c42 Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:27:41 +0900 Subject: [PATCH 08/15] =?UTF-8?q?feat(LineMenu.java):=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=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ README.md | 2 +- src/main/java/subway/controller/LineMenu.java | 15 +++++++++++++++ src/main/java/subway/view/PrintInfo.java | 10 ++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95222f50f..fbb30e1e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(LineMenu.java): 노선 삭제 기능 추가 + feat(LineMenu.java): 노선 추가 기능 추가 feat(StationMenu.java): 역 출력 기능 추가 diff --git a/README.md b/README.md index 0807ff0de..70852cad2 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - ~~역 출력~~ - ~~노선 추가~~ - - 노선 삭제 + - ~~노선 삭제~~ - 노선 출력 - 구간 추가 diff --git a/src/main/java/subway/controller/LineMenu.java b/src/main/java/subway/controller/LineMenu.java index 40a59f832..de6c42810 100644 --- a/src/main/java/subway/controller/LineMenu.java +++ b/src/main/java/subway/controller/LineMenu.java @@ -6,6 +6,7 @@ import subway.view.Error; import java.util.Scanner; +import java.util.stream.Collectors; public class LineMenu extends Menu { public LineMenu(Scanner scanner) { @@ -22,6 +23,20 @@ protected boolean functionOne() { return addLine(); } + @Override + protected boolean functionTwo() { + return deleteLine(); + } + + private boolean deleteLine() { + PrintInfo.inputDeleteLineName(); + if (!LineManager.deleteLineByName(scanner.nextLine())) { + return Error.notExist(); + } + PrintInfo.deleteLineSuccess(); + return true; + } + private boolean addLine() { PrintInfo.inputAddLineName(); String line = scanner.nextLine(); diff --git a/src/main/java/subway/view/PrintInfo.java b/src/main/java/subway/view/PrintInfo.java index f09c1eb70..faf4fbe6f 100644 --- a/src/main/java/subway/view/PrintInfo.java +++ b/src/main/java/subway/view/PrintInfo.java @@ -87,6 +87,16 @@ public static void addLineSuccess() { "[INFO] 지하철 노선이 등록되었습니다.\n"); } + public static void inputDeleteLineName() { + System.out.println("\n" + + "## 삭제할 노선 이름을 입력하세요."); + } + + public static void deleteLineSuccess() { + System.out.println("\n" + + "[INFO] 지하철 노선이 삭제되었습니다.\n"); + } + public static void printList(List list) { list.forEach(item -> System.out.println("[INFO] " + item)); System.out.println(); From 97ab332f44390578c41b9dec161acb9393671ff8 Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:28:45 +0900 Subject: [PATCH 09/15] =?UTF-8?q?feat(LineMenu.java):=20=EB=85=B8=EC=84=A0?= =?UTF-8?q?=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ README.md | 2 +- src/main/java/subway/controller/LineMenu.java | 10 ++++++++++ src/main/java/subway/view/PrintInfo.java | 6 ++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbb30e1e9..5048f2a36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(LineMenu.java): 노선 출력 기능 추가 + feat(LineMenu.java): 노선 삭제 기능 추가 feat(LineMenu.java): 노선 추가 기능 추가 diff --git a/README.md b/README.md index 70852cad2..3455c9784 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ - ~~노선 추가~~ - ~~노선 삭제~~ - - 노선 출력 + - ~~노선 출력~~ - 구간 추가 - 구간 삭제 diff --git a/src/main/java/subway/controller/LineMenu.java b/src/main/java/subway/controller/LineMenu.java index de6c42810..0c8a0bc01 100644 --- a/src/main/java/subway/controller/LineMenu.java +++ b/src/main/java/subway/controller/LineMenu.java @@ -28,6 +28,11 @@ protected boolean functionTwo() { return deleteLine(); } + @Override + protected boolean functionThree() { + return printLines(); + } + private boolean deleteLine() { PrintInfo.inputDeleteLineName(); if (!LineManager.deleteLineByName(scanner.nextLine())) { @@ -37,6 +42,11 @@ private boolean deleteLine() { return true; } + private boolean printLines() { + PrintInfo.allLines(LineManager.allLines().stream().map(line -> line.getName()).collect(Collectors.toList())); + return true; + } + private boolean addLine() { PrintInfo.inputAddLineName(); String line = scanner.nextLine(); diff --git a/src/main/java/subway/view/PrintInfo.java b/src/main/java/subway/view/PrintInfo.java index faf4fbe6f..438ce5278 100644 --- a/src/main/java/subway/view/PrintInfo.java +++ b/src/main/java/subway/view/PrintInfo.java @@ -97,6 +97,12 @@ public static void deleteLineSuccess() { "[INFO] 지하철 노선이 삭제되었습니다.\n"); } + public static void allLines(List list) { + System.out.println("\n" + + "## 노선 목록"); + printList(list); + } + public static void printList(List list) { list.forEach(item -> System.out.println("[INFO] " + item)); System.out.println(); From c6470ac5062af8c18e52ebdba193894ed1a00e1d Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:31:02 +0900 Subject: [PATCH 10/15] =?UTF-8?q?feat(SectionMenu.java):=20=EA=B5=AC?= =?UTF-8?q?=EA=B0=84=20=EC=B6=94=EA=B0=80=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 + README.md | 2 +- .../java/subway/controller/SectionMenu.java | 60 +++++++++++++++++++ src/main/java/subway/view/PrintInfo.java | 32 ++++++++++ 4 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/controller/SectionMenu.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 5048f2a36..62ddca944 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(SectionMenu.java): 구간 추가 기능 추가 + feat(LineMenu.java): 노선 출력 기능 추가 feat(LineMenu.java): 노선 삭제 기능 추가 diff --git a/README.md b/README.md index 3455c9784..1e81f29a8 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ - ~~노선 삭제~~ - ~~노선 출력~~ - - 구간 추가 + - ~~구간 추가~~ - 구간 삭제 - 지하철 노선도 출력 diff --git a/src/main/java/subway/controller/SectionMenu.java b/src/main/java/subway/controller/SectionMenu.java new file mode 100644 index 000000000..55621a56c --- /dev/null +++ b/src/main/java/subway/controller/SectionMenu.java @@ -0,0 +1,60 @@ +package subway.controller; + +import subway.domain.LineManager; +import subway.domain.StationManager; +import subway.view.PrintInfo; +import subway.view.Error; + +import java.util.Scanner; + +public class SectionMenu extends Menu { + public SectionMenu(Scanner scanner) { + super(scanner); + } + + @Override + protected void info() { + PrintInfo.manageSection(); + } + + @Override + protected boolean functionOne() { + return addSection(); + } + + private boolean addSection() { + PrintInfo.inputAddSectionLineName(); + String lineName = scanner.nextLine(); + if (!LineManager.anyMatchLineName(lineName)) { + return Error.notExist(); + } + return checkLineHasStation(lineName); + } + + private boolean checkLineHasStation(String lineName) { + PrintInfo.inputAddSectionStationName(); + String stationName = scanner.nextLine(); + if (StationManager.getByName(stationName) == null) { + return Error.notExist(); + } + if (LineManager.hasStation(lineName, stationName)) { + return Error.alreadyExist(); + } + return inputSectionIndex(lineName, stationName); + } + + private boolean inputSectionIndex(String lineName, String stationName) { + PrintInfo.inputAddSectionIndex(); + String indexInput = scanner.nextLine(); + if (!indexInput.chars().allMatch(Character::isDigit)) { + return Error.numberOnly(); + } + int index = Integer.parseInt(indexInput) - 1; + if ((index < 0) || (LineManager.getLineByName(lineName).getSubStations().size() < index)) { + return Error.indexOutOfRange(); + } + LineManager.addSectionInLine(lineName, stationName, index); + PrintInfo.addSectionSuccess(); + return true; + } +} diff --git a/src/main/java/subway/view/PrintInfo.java b/src/main/java/subway/view/PrintInfo.java index 438ce5278..e52dad871 100644 --- a/src/main/java/subway/view/PrintInfo.java +++ b/src/main/java/subway/view/PrintInfo.java @@ -103,6 +103,38 @@ public static void allLines(List list) { printList(list); } + + + public static void manageSection() { + System.out.println( + "## 구간 관리 화면\n" + + "1. 구간 등록\n" + + "2. 구간 삭제\n" + + "B. 돌아가기\n" + + "\n" + + "## 원하는 기능을 선택하세요."); + } + + public static void inputAddSectionLineName() { + System.out.println("\n" + + "## 노선을 입력하세요."); + } + + public static void inputAddSectionStationName() { + System.out.println("\n" + + "## 역이름을 입력하세요."); + } + + public static void inputAddSectionIndex() { + System.out.println("\n" + + "## 순서를 입력하세요."); + } + + public static void addSectionSuccess() { + System.out.println("\n" + + "[INFO] 구간이 등록되었습니다.\n"); + } + public static void printList(List list) { list.forEach(item -> System.out.println("[INFO] " + item)); System.out.println(); From 75b46776f0c4783ab76f8eaadfe718fe3b161c8a Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:32:10 +0900 Subject: [PATCH 11/15] =?UTF-8?q?feat(SectionMenu.java):=20=EA=B5=AC?= =?UTF-8?q?=EA=B0=84=20=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ README.md | 2 +- .../java/subway/controller/SectionMenu.java | 32 +++++++++++++++++++ src/main/java/subway/view/PrintInfo.java | 15 +++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62ddca944..8e751e63e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(SectionMenu.java): 구간 삭제 기능 추가 + feat(SectionMenu.java): 구간 추가 기능 추가 feat(LineMenu.java): 노선 출력 기능 추가 diff --git a/README.md b/README.md index 1e81f29a8..bb0c3bd29 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ - ~~노선 출력~~ - ~~구간 추가~~ - - 구간 삭제 + - ~~구간 삭제~~ - 지하철 노선도 출력 diff --git a/src/main/java/subway/controller/SectionMenu.java b/src/main/java/subway/controller/SectionMenu.java index 55621a56c..f678a171a 100644 --- a/src/main/java/subway/controller/SectionMenu.java +++ b/src/main/java/subway/controller/SectionMenu.java @@ -22,6 +22,16 @@ protected boolean functionOne() { return addSection(); } + @Override + protected boolean functionTwo() { + return deleteSection(); + } + + @Override + protected boolean functionThree() { + return noFunctionThree(); + } + private boolean addSection() { PrintInfo.inputAddSectionLineName(); String lineName = scanner.nextLine(); @@ -57,4 +67,26 @@ private boolean inputSectionIndex(String lineName, String stationName) { PrintInfo.addSectionSuccess(); return true; } + + private boolean deleteSection() { + PrintInfo.inputDeleteSectionLineName(); + String lineName = scanner.nextLine(); + if (!LineManager.anyMatchLineName(lineName)) { + return Error.notExist(); + } + PrintInfo.inputDeleteSectionStationName(); + String stationName = scanner.nextLine(); + if (StationManager.getByName(stationName) == null) { + return Error.notExist(); + } + if (!LineManager.deleteSectionInLine(lineName, stationName)) { + return Error.stationHasLine(); + } + PrintInfo.deleteSectionSuccess(); + return true; + } + + private boolean noFunctionThree() { + return !Error.noFunction(); + } } diff --git a/src/main/java/subway/view/PrintInfo.java b/src/main/java/subway/view/PrintInfo.java index e52dad871..c4fab4746 100644 --- a/src/main/java/subway/view/PrintInfo.java +++ b/src/main/java/subway/view/PrintInfo.java @@ -135,6 +135,21 @@ public static void addSectionSuccess() { "[INFO] 구간이 등록되었습니다.\n"); } + public static void inputDeleteSectionLineName() { + System.out.println("\n" + + "## 삭제할 구간의 노선을 입력하세요."); + } + + public static void inputDeleteSectionStationName() { + System.out.println("\n" + + "## 삭제할 구간의 역을 입력하세요."); + } + + public static void deleteSectionSuccess() { + System.out.println("\n" + + "[INFO] 구간이 삭제되었습니다.\n"); + } + public static void printList(List list) { list.forEach(item -> System.out.println("[INFO] " + item)); System.out.println(); From b248c8441dcf06c359c31d2af8828fa99ec500ca Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:33:55 +0900 Subject: [PATCH 12/15] =?UTF-8?q?feat(MainMenu.java):=20=EC=A7=80=ED=95=98?= =?UTF-8?q?=EC=B2=A0=20=EB=85=B8=EC=84=A0=EB=8F=84=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 + README.md | 2 +- src/main/java/subway/controller/MainMenu.java | 73 +++++++++++++++++++ src/main/java/subway/view/PrintInfo.java | 10 +++ 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/controller/MainMenu.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e751e63e..0a3cf2a22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(MainMenu.java): 지하철 노선도 출력 기능 추가 + feat(SectionMenu.java): 구간 삭제 기능 추가 feat(SectionMenu.java): 구간 추가 기능 추가 diff --git a/README.md b/README.md index bb0c3bd29..16c4db87d 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ - ~~구간 추가~~ - ~~구간 삭제~~ - - 지하철 노선도 출력 + - ~~지하철 노선도 출력~~ - 초기 역과 노선 등록 기능 diff --git a/src/main/java/subway/controller/MainMenu.java b/src/main/java/subway/controller/MainMenu.java new file mode 100644 index 000000000..cb60e6eb0 --- /dev/null +++ b/src/main/java/subway/controller/MainMenu.java @@ -0,0 +1,73 @@ +package subway.controller; + +import subway.domain.LineManager; +import subway.domain.StationManager; +import subway.view.PrintInfo; +import subway.view.Error; + +import java.util.Arrays; +import java.util.Scanner; +import java.util.stream.Collectors; + +public class MainMenu extends Menu{ + private static final String MENU_FOUR = "4"; + private static final String MENU_QUIT = "Q"; + private final StationMenu stationMenu; + private final LineMenu lineMenu; + private final SectionMenu sectionMenu; + + public MainMenu(Scanner scanner) { + super(scanner); + stationMenu = new StationMenu(scanner); + lineMenu = new LineMenu(scanner); + sectionMenu = new SectionMenu(scanner); + } + + @Override + protected void info() { + PrintInfo.mainMenu(); + } + + @Override + protected boolean managing(String choice) { + if (PRIMARY_FUNCTIONS.contains(choice)) { + executeFunction(choice); + return true; + } + if (choice.equals(MENU_FOUR)) { + printSubwayMap(); + return true; + } + if (choice.equals(MENU_QUIT)) { + return false; + } + Error.noFunction(); + return true; + } + + @Override + protected boolean functionOne() { + stationMenu.run(); + return true; + } + + @Override + protected boolean functionTwo() { + lineMenu.run(); + return true; + } + + @Override + protected boolean functionThree() { + sectionMenu.run(); + return true; + } + + private void printSubwayMap() { + PrintInfo.subwayMapTitle(); + LineManager.allLines().forEach(line -> { + PrintInfo.subwayMapLine(line.getName()); + PrintInfo.printList(line.getSubStations().stream().map(station -> station.getName()).collect(Collectors.toList())); + }); + } +} diff --git a/src/main/java/subway/view/PrintInfo.java b/src/main/java/subway/view/PrintInfo.java index c4fab4746..51fe283cd 100644 --- a/src/main/java/subway/view/PrintInfo.java +++ b/src/main/java/subway/view/PrintInfo.java @@ -150,6 +150,16 @@ public static void deleteSectionSuccess() { "[INFO] 구간이 삭제되었습니다.\n"); } + + + public static void subwayMapTitle() { + System.out.println("\n## 지하철 노선도"); + } + + public static void subwayMapLine(String lineName) { + System.out.println("[INFO] " + lineName + "\n[INFO] ---"); + } + public static void printList(List list) { list.forEach(item -> System.out.println("[INFO] " + item)); System.out.println(); From 20712f3908421da40a6349611b92b5df9687070c Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Tue, 15 Dec 2020 23:35:44 +0900 Subject: [PATCH 13/15] =?UTF-8?q?feat(MainMenu.java):=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=20=EC=97=AD=EA=B3=BC=20=EB=85=B8=EC=84=A0=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ README.md | 2 +- src/main/java/subway/Application.java | 14 +++++++++++++- src/main/java/subway/controller/MainMenu.java | 8 ++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a3cf2a22..54e72b8a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ --- # 지하철 프로젝트 +feat(MainMenu.java): 초기 역과 노선 등록 기능 추가 + feat(MainMenu.java): 지하철 노선도 출력 기능 추가 feat(SectionMenu.java): 구간 삭제 기능 추가 diff --git a/README.md b/README.md index 16c4db87d..5046bba2a 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ - ~~지하철 노선도 출력~~ - - 초기 역과 노선 등록 기능 + - ~~초기 역과 노선 등록 기능~~ ## 🚀 기능 요구사항 diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..0fc7370f5 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,22 @@ package subway; +import subway.controller.MainMenu; + import java.util.Scanner; public class Application { + public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 + + MainMenu mainMenu = new MainMenu(scanner); + + mainMenu.initPrimaryStation(new String[]{"교대역", "강남역", "역삼역", "남부터미널역", "양재역", "양재시민의숲역", "매봉역"}); + mainMenu.initPrimaryLine("2호선", new String[]{"교대역", "강남역", "역삼역"}); + mainMenu.initPrimaryLine("3호선", new String[]{"교대역", "남부터미널역", "양재역", "매봉역"}); + mainMenu.initPrimaryLine("신분당선", new String[]{"강남역", "양재역", "양재시민의숲역"}); + + mainMenu.run(); } -} +} \ No newline at end of file diff --git a/src/main/java/subway/controller/MainMenu.java b/src/main/java/subway/controller/MainMenu.java index cb60e6eb0..35bcb3890 100644 --- a/src/main/java/subway/controller/MainMenu.java +++ b/src/main/java/subway/controller/MainMenu.java @@ -23,6 +23,14 @@ public MainMenu(Scanner scanner) { sectionMenu = new SectionMenu(scanner); } + public void initPrimaryStation(String[] stations) { + Arrays.asList(stations).forEach(StationManager::addStation); + } + + public void initPrimaryLine(String lineName, String[] stations) { + LineManager.initLine(lineName, stations); + } + @Override protected void info() { PrintInfo.mainMenu(); From 7d08cc622c06b3bbe761427e28e80113fd126df0 Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Thu, 17 Dec 2020 23:30:28 +0900 Subject: [PATCH 14/15] =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 10 -- src/main/java/subway/controller/LineMenu.java | 86 --------- src/main/java/subway/controller/MainMenu.java | 81 --------- src/main/java/subway/controller/Menu.java | 65 ------- .../java/subway/controller/SectionMenu.java | 92 ---------- .../java/subway/controller/StationMenu.java | 65 ------- src/main/java/subway/domain/Line.java | 28 --- src/main/java/subway/domain/LineManager.java | 79 --------- src/main/java/subway/domain/Station.java | 17 -- .../java/subway/domain/StationManager.java | 49 ----- src/main/java/subway/view/Error.java | 43 ----- src/main/java/subway/view/PrintInfo.java | 167 ------------------ 12 files changed, 782 deletions(-) delete mode 100644 src/main/java/subway/controller/LineMenu.java delete mode 100644 src/main/java/subway/controller/MainMenu.java delete mode 100644 src/main/java/subway/controller/Menu.java delete mode 100644 src/main/java/subway/controller/SectionMenu.java delete mode 100644 src/main/java/subway/controller/StationMenu.java delete mode 100644 src/main/java/subway/domain/LineManager.java delete mode 100644 src/main/java/subway/domain/StationManager.java delete mode 100644 src/main/java/subway/view/Error.java delete mode 100644 src/main/java/subway/view/PrintInfo.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0fc7370f5..053ccdd86 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,7 +1,5 @@ package subway; -import subway.controller.MainMenu; - import java.util.Scanner; public class Application { @@ -10,13 +8,5 @@ public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 - MainMenu mainMenu = new MainMenu(scanner); - - mainMenu.initPrimaryStation(new String[]{"교대역", "강남역", "역삼역", "남부터미널역", "양재역", "양재시민의숲역", "매봉역"}); - mainMenu.initPrimaryLine("2호선", new String[]{"교대역", "강남역", "역삼역"}); - mainMenu.initPrimaryLine("3호선", new String[]{"교대역", "남부터미널역", "양재역", "매봉역"}); - mainMenu.initPrimaryLine("신분당선", new String[]{"강남역", "양재역", "양재시민의숲역"}); - - mainMenu.run(); } } \ No newline at end of file diff --git a/src/main/java/subway/controller/LineMenu.java b/src/main/java/subway/controller/LineMenu.java deleted file mode 100644 index 0c8a0bc01..000000000 --- a/src/main/java/subway/controller/LineMenu.java +++ /dev/null @@ -1,86 +0,0 @@ -package subway.controller; - -import subway.domain.LineManager; -import subway.domain.StationManager; -import subway.view.PrintInfo; -import subway.view.Error; - -import java.util.Scanner; -import java.util.stream.Collectors; - -public class LineMenu extends Menu { - public LineMenu(Scanner scanner) { - super(scanner); - } - - @Override - protected void info() { - PrintInfo.manageLine(); - } - - @Override - protected boolean functionOne() { - return addLine(); - } - - @Override - protected boolean functionTwo() { - return deleteLine(); - } - - @Override - protected boolean functionThree() { - return printLines(); - } - - private boolean deleteLine() { - PrintInfo.inputDeleteLineName(); - if (!LineManager.deleteLineByName(scanner.nextLine())) { - return Error.notExist(); - } - PrintInfo.deleteLineSuccess(); - return true; - } - - private boolean printLines() { - PrintInfo.allLines(LineManager.allLines().stream().map(line -> line.getName()).collect(Collectors.toList())); - return true; - } - - private boolean addLine() { - PrintInfo.inputAddLineName(); - String line = scanner.nextLine(); - if (LineManager.anyMatchLineName(line)) { - return Error.alreadyExist(); - } - return setFromAndTo(line); - } - - private boolean setFromAndTo(String line) { - PrintInfo.inputAddLineStartStation(); - String from = scanner.nextLine(); - if (!StationManager.containsName(from)) { - return Error.notExist(); - } - return setTo(line, from); - } - - private boolean setTo(String line, String from) { - PrintInfo.inputAddLineEndStation(); - String to = scanner.nextLine(); - if (!StationManager.containsName(to)) { - return Error.notExist(); - } - return createLine(line, from, to); - } - - private boolean createLine(String line, String from, String to) { - try { - LineManager.addLine(line, StationManager.getByName(from), StationManager.getByName(to)); - } catch (Exception e) { - return Error.createLine(); - } - PrintInfo.addLineSuccess(); - return true; - } -} diff --git a/src/main/java/subway/controller/MainMenu.java b/src/main/java/subway/controller/MainMenu.java deleted file mode 100644 index 35bcb3890..000000000 --- a/src/main/java/subway/controller/MainMenu.java +++ /dev/null @@ -1,81 +0,0 @@ -package subway.controller; - -import subway.domain.LineManager; -import subway.domain.StationManager; -import subway.view.PrintInfo; -import subway.view.Error; - -import java.util.Arrays; -import java.util.Scanner; -import java.util.stream.Collectors; - -public class MainMenu extends Menu{ - private static final String MENU_FOUR = "4"; - private static final String MENU_QUIT = "Q"; - private final StationMenu stationMenu; - private final LineMenu lineMenu; - private final SectionMenu sectionMenu; - - public MainMenu(Scanner scanner) { - super(scanner); - stationMenu = new StationMenu(scanner); - lineMenu = new LineMenu(scanner); - sectionMenu = new SectionMenu(scanner); - } - - public void initPrimaryStation(String[] stations) { - Arrays.asList(stations).forEach(StationManager::addStation); - } - - public void initPrimaryLine(String lineName, String[] stations) { - LineManager.initLine(lineName, stations); - } - - @Override - protected void info() { - PrintInfo.mainMenu(); - } - - @Override - protected boolean managing(String choice) { - if (PRIMARY_FUNCTIONS.contains(choice)) { - executeFunction(choice); - return true; - } - if (choice.equals(MENU_FOUR)) { - printSubwayMap(); - return true; - } - if (choice.equals(MENU_QUIT)) { - return false; - } - Error.noFunction(); - return true; - } - - @Override - protected boolean functionOne() { - stationMenu.run(); - return true; - } - - @Override - protected boolean functionTwo() { - lineMenu.run(); - return true; - } - - @Override - protected boolean functionThree() { - sectionMenu.run(); - return true; - } - - private void printSubwayMap() { - PrintInfo.subwayMapTitle(); - LineManager.allLines().forEach(line -> { - PrintInfo.subwayMapLine(line.getName()); - PrintInfo.printList(line.getSubStations().stream().map(station -> station.getName()).collect(Collectors.toList())); - }); - } -} diff --git a/src/main/java/subway/controller/Menu.java b/src/main/java/subway/controller/Menu.java deleted file mode 100644 index f6b464c21..000000000 --- a/src/main/java/subway/controller/Menu.java +++ /dev/null @@ -1,65 +0,0 @@ -package subway.controller; - -import subway.view.Error; - -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; - -public abstract class Menu { - protected static final String MENU_ONE = "1"; - protected static final String MENU_TWO = "2"; - protected static final String MENU_THREE = "3"; - protected static final String MENU_BACK = "B"; - protected static final List PRIMARY_FUNCTIONS = Arrays - .asList(MENU_ONE, MENU_TWO, MENU_THREE, MENU_BACK); - - protected Scanner scanner; - - public Menu(Scanner scanner) { - this.scanner = scanner; - } - - public void run() { - do { - info(); - } while (managing(scanner.nextLine())); - } - - protected abstract void info(); - - // 유효 입력 여과 - protected boolean managing(String choice) { - if (PRIMARY_FUNCTIONS.contains(choice)) { - return executeFunction(choice); - } - Error.noFunction(); - return true; - } - - // true -> 반복, false -> 종료 - protected boolean executeFunction(String choice) { - if (choice.equals(MENU_ONE)) { - return !functionOne(); - } - if (choice.equals(MENU_TWO)) { - return !functionTwo(); - } - if (choice.equals(MENU_THREE)) { - return !functionThree(); - } - return false; - } - - protected boolean functionOne() { - return false; - } - - protected boolean functionTwo() { - return false; - } - - protected boolean functionThree() { - return false; - } -} diff --git a/src/main/java/subway/controller/SectionMenu.java b/src/main/java/subway/controller/SectionMenu.java deleted file mode 100644 index f678a171a..000000000 --- a/src/main/java/subway/controller/SectionMenu.java +++ /dev/null @@ -1,92 +0,0 @@ -package subway.controller; - -import subway.domain.LineManager; -import subway.domain.StationManager; -import subway.view.PrintInfo; -import subway.view.Error; - -import java.util.Scanner; - -public class SectionMenu extends Menu { - public SectionMenu(Scanner scanner) { - super(scanner); - } - - @Override - protected void info() { - PrintInfo.manageSection(); - } - - @Override - protected boolean functionOne() { - return addSection(); - } - - @Override - protected boolean functionTwo() { - return deleteSection(); - } - - @Override - protected boolean functionThree() { - return noFunctionThree(); - } - - private boolean addSection() { - PrintInfo.inputAddSectionLineName(); - String lineName = scanner.nextLine(); - if (!LineManager.anyMatchLineName(lineName)) { - return Error.notExist(); - } - return checkLineHasStation(lineName); - } - - private boolean checkLineHasStation(String lineName) { - PrintInfo.inputAddSectionStationName(); - String stationName = scanner.nextLine(); - if (StationManager.getByName(stationName) == null) { - return Error.notExist(); - } - if (LineManager.hasStation(lineName, stationName)) { - return Error.alreadyExist(); - } - return inputSectionIndex(lineName, stationName); - } - - private boolean inputSectionIndex(String lineName, String stationName) { - PrintInfo.inputAddSectionIndex(); - String indexInput = scanner.nextLine(); - if (!indexInput.chars().allMatch(Character::isDigit)) { - return Error.numberOnly(); - } - int index = Integer.parseInt(indexInput) - 1; - if ((index < 0) || (LineManager.getLineByName(lineName).getSubStations().size() < index)) { - return Error.indexOutOfRange(); - } - LineManager.addSectionInLine(lineName, stationName, index); - PrintInfo.addSectionSuccess(); - return true; - } - - private boolean deleteSection() { - PrintInfo.inputDeleteSectionLineName(); - String lineName = scanner.nextLine(); - if (!LineManager.anyMatchLineName(lineName)) { - return Error.notExist(); - } - PrintInfo.inputDeleteSectionStationName(); - String stationName = scanner.nextLine(); - if (StationManager.getByName(stationName) == null) { - return Error.notExist(); - } - if (!LineManager.deleteSectionInLine(lineName, stationName)) { - return Error.stationHasLine(); - } - PrintInfo.deleteSectionSuccess(); - return true; - } - - private boolean noFunctionThree() { - return !Error.noFunction(); - } -} diff --git a/src/main/java/subway/controller/StationMenu.java b/src/main/java/subway/controller/StationMenu.java deleted file mode 100644 index ce3999a18..000000000 --- a/src/main/java/subway/controller/StationMenu.java +++ /dev/null @@ -1,65 +0,0 @@ -package subway.controller; - -import subway.domain.StationManager; -import subway.view.PrintInfo; -import subway.view.Error; - -import java.util.Scanner; -import java.util.stream.Collectors; - -public class StationMenu extends Menu { - public StationMenu(Scanner scanner) { - super(scanner); - } - - @Override - protected void info() { - PrintInfo.manageStation(); - } - - @Override - protected boolean functionOne() { - return addStation(); - } - - @Override - protected boolean functionTwo() { - return deleteStation(); - } - - @Override - protected boolean functionThree() { - return printStations(); - } - - private boolean printStations() { - PrintInfo.stations(StationManager.allStations().stream().map(station -> station.getName()).collect(Collectors.toList())); - return true; - } - - private boolean addStation() { - PrintInfo.inputAddStationName(); - String stationName = scanner.nextLine(); - if (!StationManager.validNameLength(stationName)) { - return Error.nameLength(); - } - if (!StationManager.addStation(stationName)) { - return Error.alreadyExist(); - } - PrintInfo.addStationSuccess(); - return true; - } - - private boolean deleteStation() { - PrintInfo.inputDeleteStationName(); - String stationName = scanner.nextLine(); - if (!StationManager.containsName(stationName)) { - return Error.notExist(); - } - if (!StationManager.deleteStationByName(stationName)) { - return Error.stationHasLine(); - } - PrintInfo.deleteStationSuccess(); - return true; - } -} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 1279a04c7..fffcd30fb 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,11 +1,7 @@ package subway.domain; -import java.util.ArrayList; -import java.util.List; - public class Line { private String name; - private List stations = new ArrayList<>(); public Line(String name) { this.name = name; @@ -14,28 +10,4 @@ public Line(String name) { public String getName() { return name; } - - public void addSubStationAt(int index, Station station) { - if ((index < 0) || (stations.size() < index) || station == null) { - return; - } - stations.add(index, station); - } - - public void addSubStation(Station station) { - if (station == null) { - return; - } - stations.add(station); - } - - public void deleteSubStation(Station station) { - if (station != null) { - stations.remove(station); - } - } - - public List getSubStations() { - return stations; - } } diff --git a/src/main/java/subway/domain/LineManager.java b/src/main/java/subway/domain/LineManager.java deleted file mode 100644 index e7dbbafa2..000000000 --- a/src/main/java/subway/domain/LineManager.java +++ /dev/null @@ -1,79 +0,0 @@ -package subway.domain; - -import java.util.Arrays; -import java.util.List; - -public class LineManager { - public static void initLine(String name, String[] stations) { - Line line = new Line(name); - Arrays.asList(stations).forEach(station -> line.addSubStation(StationManager.getByName(station))); - LineRepository.addLine(line); - } - - public static boolean anyMatchLineName(String name) { - return LineRepository.lines().stream().anyMatch(line -> line.getName().equals(name)); - } - - public static void addLine(String name, Station from, Station to) { - Line line = new Line(name); - line.addSubStation(from); - line.addSubStation(to); - LineRepository.addLine(line); - } - - public static Line getLineByName(String name) { - for (Line line : LineRepository.lines()) { - if (line.getName().equals(name)) { - return line; - } - } - return null; - } - - public static boolean deleteLineByName(String name) { - Line target = getLineByName(name); - if (target == null) { - return false; - } - deleteLineFromStations(target); - LineRepository.deleteLineByName(name); - return true; - } - - private static void deleteLineFromStations(Line line) { - for (Station station : line.getSubStations()) { - station.deleteBelongingLine(line); - } - } - - public static List allLines() { - return LineRepository.lines(); - } - - public static boolean addSectionInLine(String lineName, String stationName, int index) { - Line line = LineManager.getLineByName(lineName); - Station station = StationManager.getByName(stationName); - if ((line == null) || (station == null)) { - return false; - } - line.addSubStationAt(index, station); - return true; - } - - public static boolean hasStation(String lineName, String stationName) { - Line line = LineManager.getLineByName(lineName); - if (line == null) { - return false; - } - return line.getSubStations().stream().anyMatch(station -> station.getName().equals(stationName)); - } - - public static boolean deleteSectionInLine(String lineName, String stationName) { - Line line = LineManager.getLineByName(lineName); - if ((line == null) || line.getSubStations().stream().noneMatch(station -> station.getName().equals(stationName))) { - return false; - } - line.deleteSubStation(StationManager.getByName(stationName)); - return true; - } -} diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index a31866070..6df2edada 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,30 +1,13 @@ package subway.domain; -import java.util.ArrayList; -import java.util.List; - public class Station { private String name; - private List lines; public Station(String name) { this.name = name; - this.lines = new ArrayList<>(); } public String getName() { return name; } - - public void addBelongingLine(Line line) { - lines.add(line); - } - - public void deleteBelongingLine(Line line) { - lines.remove(line); - } - - public List getBelongingLines() { - return lines; - } } diff --git a/src/main/java/subway/domain/StationManager.java b/src/main/java/subway/domain/StationManager.java deleted file mode 100644 index 3453e2280..000000000 --- a/src/main/java/subway/domain/StationManager.java +++ /dev/null @@ -1,49 +0,0 @@ -package subway.domain; - - -import java.util.List; - -public class StationManager { - public static final int MIN_NAME_LENGTH = 2; - - public static boolean validNameLength(String name) { - return name.length() >= MIN_NAME_LENGTH; - } - - public static boolean containsName(String name) { - return StationRepository.stations().stream().anyMatch(station -> station.getName().equals(name)); - } - - public static boolean addStation(String name) { - if (!validNameLength(name) || containsName(name)) { - return false; - } - StationRepository.addStation(new Station(name)); - return true; - } - - public static Station getByName(String name) { - for (Station station : StationRepository.stations()) { - if (station.getName().equals(name)) { - return station; - } - } - return null; - } - - public static boolean deleteStationByName(String name) { - if (!containsName(name) || isBelongsToAnyLine(name)) { - return false; - } - StationRepository.deleteStation(name); - return true; - } - - private static boolean isBelongsToAnyLine(String name) { - return getByName(name).getBelongingLines().size() > 0; - } - - public static List allStations() { - return StationRepository.stations(); - } -} diff --git a/src/main/java/subway/view/Error.java b/src/main/java/subway/view/Error.java deleted file mode 100644 index 829eeec4e..000000000 --- a/src/main/java/subway/view/Error.java +++ /dev/null @@ -1,43 +0,0 @@ -package subway.view; - -public class Error { - public static boolean noFunction() { - System.out.println("\n[ERROR] 선택할 수 없는 기능입니다.\n"); - return false; - } - - public static boolean alreadyExist() { - System.out.println("\n[ERROR] 이미 등록된 이름입니다.\n"); - return false; - } - - public static boolean notExist() { - System.out.println("\n[ERROR] 존재하지 않는 이름입니다.\n"); - return false; - } - - public static boolean stationHasLine() { - System.out.println("\n[ERROR] 노선에 등록되어있어 삭제할 수 없습니다.\n"); - return true; - } - - public static boolean createLine() { - System.out.println("\n[ERROR] 노선 생성 불가\n"); - return false; - } - - public static boolean nameLength() { - System.out.println("\n[ERROR] 이름은 2자 이상만 가능합니다.\n"); - return false; - } - - public static boolean indexOutOfRange() { - System.out.println("\n[ERROR] 범위를 벗어난 순서입니다.\n"); - return false; - } - - public static boolean numberOnly() { - System.out.println("\n[ERROR] 숫자만 가능합니다.\n"); - return false; - } -} diff --git a/src/main/java/subway/view/PrintInfo.java b/src/main/java/subway/view/PrintInfo.java deleted file mode 100644 index 51fe283cd..000000000 --- a/src/main/java/subway/view/PrintInfo.java +++ /dev/null @@ -1,167 +0,0 @@ -package subway.view; - -import java.util.List; - -public class PrintInfo { - public static void mainMenu() { - System.out.println( - "## 메인 화면\n" + - "1. 역 관리\n" + - "2. 노선 관리\n" + - "3. 구간 관리\n" + - "4. 지하철 노선도 출력\n" + - "Q. 종료\n" + - "\n" + - "## 원하는 기능을 선택하세요."); - } - - - - public static void manageStation() { - System.out.println( - "## 역 관리 화면\n" + - "1. 역 등록\n" + - "2. 역 삭제\n" + - "3. 역 조회\n" + - "B. 돌아가기\n" + - "\n" + - "## 원하는 기능을 선택하세요."); - } - - public static void inputAddStationName() { - System.out.println("\n" + - "## 등록할 역 이름을 입력하세요."); - } - - public static void addStationSuccess() { - System.out.println("\n" + - "[INFO] 지하철 역이 등록되었습니다.\n"); - } - - public static void inputDeleteStationName() { - System.out.println("\n" + - "## 삭제할 역 이름을 입력하세요."); - } - - public static void deleteStationSuccess() { - System.out.println("\n" + - "[INFO] 지하철 역이 삭제되었습니다.\n"); - } - - public static void stations(List list) { - System.out.println("\n" + - "## 역 목록"); - printList(list); - } - - - - public static void manageLine() { - System.out.println( - "## 노선 관리 화면\n" + - "1. 노선 등록\n" + - "2. 노선 삭제\n" + - "3. 노선 조회\n" + - "B. 돌아가기\n" + - "\n" + - "## 원하는 기능을 선택하세요."); - } - - public static void inputAddLineName() { - System.out.println("\n" + - "## 등록할 노선 이름을 입력하세요."); - } - - public static void inputAddLineStartStation() { - System.out.println("\n" + - "## 등록할 노선의 상행 종점역 이름을 입력하세요."); - } - - public static void inputAddLineEndStation() { - System.out.println("\n" + - "## 등록할 노선의 하행 종점역 이름을 입력하세요."); - } - - public static void addLineSuccess() { - System.out.println("\n" + - "[INFO] 지하철 노선이 등록되었습니다.\n"); - } - - public static void inputDeleteLineName() { - System.out.println("\n" + - "## 삭제할 노선 이름을 입력하세요."); - } - - public static void deleteLineSuccess() { - System.out.println("\n" + - "[INFO] 지하철 노선이 삭제되었습니다.\n"); - } - - public static void allLines(List list) { - System.out.println("\n" + - "## 노선 목록"); - printList(list); - } - - - - public static void manageSection() { - System.out.println( - "## 구간 관리 화면\n" + - "1. 구간 등록\n" + - "2. 구간 삭제\n" + - "B. 돌아가기\n" + - "\n" + - "## 원하는 기능을 선택하세요."); - } - - public static void inputAddSectionLineName() { - System.out.println("\n" + - "## 노선을 입력하세요."); - } - - public static void inputAddSectionStationName() { - System.out.println("\n" + - "## 역이름을 입력하세요."); - } - - public static void inputAddSectionIndex() { - System.out.println("\n" + - "## 순서를 입력하세요."); - } - - public static void addSectionSuccess() { - System.out.println("\n" + - "[INFO] 구간이 등록되었습니다.\n"); - } - - public static void inputDeleteSectionLineName() { - System.out.println("\n" + - "## 삭제할 구간의 노선을 입력하세요."); - } - - public static void inputDeleteSectionStationName() { - System.out.println("\n" + - "## 삭제할 구간의 역을 입력하세요."); - } - - public static void deleteSectionSuccess() { - System.out.println("\n" + - "[INFO] 구간이 삭제되었습니다.\n"); - } - - - - public static void subwayMapTitle() { - System.out.println("\n## 지하철 노선도"); - } - - public static void subwayMapLine(String lineName) { - System.out.println("[INFO] " + lineName + "\n[INFO] ---"); - } - - public static void printList(List list) { - list.forEach(item -> System.out.println("[INFO] " + item)); - System.out.println(); - } -} From f9fe54db8cb11a1951272ed3dc90e778a15c61dd Mon Sep 17 00:00:00 2001 From: Seungho Baek Date: Thu, 17 Dec 2020 23:31:01 +0900 Subject: [PATCH 15/15] =?UTF-8?q?feat(Section):=20=EA=B5=AC=EA=B0=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Section.java | 13 +++++++++++ .../java/subway/domain/SectionRepository.java | 22 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/main/java/subway/domain/Section.java create mode 100644 src/main/java/subway/domain/SectionRepository.java diff --git a/src/main/java/subway/domain/Section.java b/src/main/java/subway/domain/Section.java new file mode 100644 index 000000000..e45a9b285 --- /dev/null +++ b/src/main/java/subway/domain/Section.java @@ -0,0 +1,13 @@ +package subway.domain; + +public class Section { + private String name; + + public Section(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/subway/domain/SectionRepository.java b/src/main/java/subway/domain/SectionRepository.java new file mode 100644 index 000000000..bd1290bed --- /dev/null +++ b/src/main/java/subway/domain/SectionRepository.java @@ -0,0 +1,22 @@ +package subway.domain; + +import java.util.*; + +public class SectionRepository { + private static final Map> sections = new HashMap<>(); + + public static Map> sections() { + return Collections.unmodifiableMap(sections); + } + + public static void addSection(String lineName, Section section) { + if (!sections.containsKey(lineName)) { + sections.put(lineName, new ArrayList<>()); + } + sections.get(lineName).add(section); + } + + public static boolean deleteSectionByLineAndStation(String line, String station) { + return sections.get(line).removeIf(section -> Objects.equals(section.getName(), station)); + } +}