diff --git a/README.md b/docs/README.md
similarity index 73%
rename from README.md
rename to docs/README.md
index 00410ae50..239b1e869 100644
--- a/README.md
+++ b/docs/README.md
@@ -17,10 +17,10 @@
- 2호선: 교대역 - 강남역 - 역삼역
- 3호선: 교대역 - 남부터미널역 - 양재역 - 매봉역
- 신분당선: 강남역 - 양재역 - 양재시민의숲역
- ```
+```
+
+
-
-
### 지하철 역 관련 기능
- 지하철 역을 등록하고 삭제할 수 있다. (단, 노선에 등록된 역은 삭제할 수 없다)
- 중복된 지하철 역 이름이 등록될 수 없다.
@@ -41,14 +41,14 @@
- 역과 역 사이에 새로운 역이 추가 될 수 있다.
- 노선에서 갈래길은 생길 수 없다.
-
+
### 지하철 구간 삭제 기능
- 노선에 등록된 역을 제거할 수 있다.
- 종점을 제거할 경우 다음 역이 종점이 된다.
- 노선에 포함된 역이 두개 이하일 때는 역을 제거할 수 없다.
-
+
### 지하철 노선에 등록된 역 조회 기능
- 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회할 수 있다.
@@ -410,7 +410,7 @@ public class Application {
- 제공하는 각 클래스의 기본 생성자를 추가할 수 없다.
- 필드(인스턴스 변수)인 name의 접근 제어자 private을 변경할 수 없다.
- 가능하면 setter 메소드(ex. setXXX)를 추가하지 않고 구현한다.
-
+
```java
public class Station {
private String name;
@@ -434,7 +434,7 @@ public class Station {
- 추가로 생성되는 객체에 대해서 XXXRepository 네이밍으로 저장 클래스를 추가할 수 있다.
- 객체들의 상태를 관리하기 위해서 XXXRepository 클래스를 활용해 저장 로직을 구현해야 한다.
- 필요에 따라 자유롭게 수정이 가능하다.
-
+
```java
public class StationRepository {
private static final List stations = new ArrayList<>();
@@ -455,15 +455,66 @@ public class StationRepository {
-## 📈 진행 요구사항
-- 미션은 [java-subway-map-precourse 저장소](https://github.com/woowacourse/java-subway-map-precourse) 를 fork/clone해 시작한다.
-- 기능을 구현하기 전에 java-subway-map-precourse/docs/README.md 파일에 구현할 기능 목록을 정리해 추가한다.
-- git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다.
- - [AngularJS Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 참고해 commit log를 남긴다.
-- [프리코스 과제 제출 문서](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) 절차를 따라 미션을 제출한다.
- - [프리코스 과제 FAQ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse/faq) 문서를 참고하여 진행할 수 있다.
-
-
-## 📝 License
+## 📝 기능 구현
+
+#### 1. 메인화면
+
+- 메뉴에 있는 번호가 아니면 `[ERROR] 선택할 수 없는 기능입니다.`
+- 메인 메뉴, 지하철 역 메뉴, 지하철 노선 메뉴, 지하철 구간 메뉴 생성
+
+#### 2. 역 관리
+
+- **역 등록**
+ - 지하철 역 등록하기 `[INFO] 지하철 역이 등록되었습니다.`
+ - 이름은 2글자 이상이여야함 `[ERROR] 역이름은 2글자 이상 입력해야합니다.`
+ - `역`으로 끝나게 이름 작성해야함 `[ERROR] 역이름은 OO역으로 끝나야 합니다.`
+ - 중복되지 않도록 작성해야함 `[ERROR] 이미 등록된 역 이름입니다. 중복되지 않는 역이름을 입력해주세요.`
+- **역 삭제**
+ - 지하철 역 삭제하기 `[INFO] 지하철 역이 삭제되었습니다.`
+ - 역 리스트에 존재해야함 `[ERROR] 존재하지 않는 역입니다.`
+ - 마지막에 `역`으로 끝나야함 `[ERROR] OO역으로 입력해야 삭제가 가능합니다.`
+ - 노선에 등록되어있지 않아야함 `[ERROR] 노선에 등록되어있는 역은 삭제가 불가능합니다.`
+- **역 조회**
+ - 역 이름만 가지고 있는 배열 생성(조회하면 배열의 원소를 하나씩 보여주기)
+
+#### 3. 노선 관리
+
+- **노선 등록**
+ - 노선 등록하기 `[INFO] 지하철 노선이 등록되었습니다.`
+ - 노선 이름
+ - 이름은 2글자 이상이여야함 `[ERROR] 노선 이름은 2글자 이상 입력해야합니다.`
+ - `선`으로 끝나게 이름 작성해야함 `[ERROR] 노선이름은 OO선 또는 O호선으로 끝나야 합니다.`
+ - 중복되지 않도록 작성해야함 `[ERROR] 이미 존재하는 노선입니다. 중복되지 않는 노선 이름을 입력해주세요.`
+ - 상행 종점역 이름 / 하행 종점역 이름
+ - 존재하는 역 중에서 작성해야함 `[ERROR] 존재하는 역 중에서 입력해주세요.`
+- **노선 삭제**
+ - 지하철 노선 삭제하기 `[INFO] 지하철 노선이 삭제되었습니다.`
+ - 노선 리스트에 존재해야함 `[ERROR] 존재하지 않는 노선입니다.`
+ - 마지막에 `호선` 또는 `선`으로 끝나야함 `[ERROR] OO선 또는 O호선으로 입력해야합니다..`
+ - 노선에 등록되어있어야함 `[ERROR] 노선에 등록되어있지 않는 역입니다. 다시 입력해주세요.`
+- **노선 조회**
+ - 노선 이름만 가지고 있는 배열 생성(조회하면 배열의 원소를 하나씩 보여주기)
+
+#### 4. 구간 관리
+
+- **구간 등록**
+ - 구간 등록하기 `[INFO] 구간이 등록되었습니다.`
+ - 노선 이름
+ - 존재하는 노선 중에서 작성해야함 `[ERROR] 존재하는 노선 중에서 입력해주세요.`
+ - 역 이름
+ - 존재하는 역 중에서 작성해야함 `[ERROR] 존재하는 역 중에서 입력해주세요.`
+ - 순서
+ - 종점 역 사이에 있어야함 `[ERROR] 종점역 사이에 존재해야합니다.`
+- **구간 삭제**
+ - 지하철 노선 삭제하기 `[INFO] 지하철 노선이 삭제되었습니다.`
+ - 노선 리스트에 존재해야함 `[ERROR] 존재하지 않는 노선입니다.`
+ - 마지막에 `호선` 또는 `선`으로 끝나야함 `[ERROR] OO선 또는 O호선으로 입력해야합니다..`
+ - 노선에 등록되어있어야함 `[ERROR] 노선에 등록되어있지 않는 역입니다. 다시 입력해주세요.`
+
+#### 5. 지하철 노선도 출력
+
+- 가지고 있어야하는 배열
+ - 역만 가지고 있는 배열
+ - 노선만 가지고 있는 배열
+ - 노선도 -> [ [2호선, ---, 교대역, 강남역, 역삼역], [3호선, ---, ,,,], [신분당선, ---, ,,,] ]
-This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/blob/master/LICENSE.md) licensed.
diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java
index 0bcf786cc..7cba546b7 100644
--- a/src/main/java/subway/Application.java
+++ b/src/main/java/subway/Application.java
@@ -1,10 +1,23 @@
package subway;
+import subway.domain.line.Line;
+import subway.domain.station.Station;
+
import java.util.Scanner;
public class Application {
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
// TODO: 프로그램 구현
+ System.out.println("start");
+ System.out.println("startStation");
+ Station startStation = Station.getStation(scanner.nextLine());
+ System.out.println("endStation");
+ Station endStation = Station.getStation(scanner.nextLine());
+ System.out.println(Line.getLine("2호", startStation, endStation));
+// System.out.println(MainMenuInputView.getMainMenuCommand(scanner));
+// List stationList = StationRepository.save(Station.getStation(scanner.nextLine()));
+// System.out.println(StationResponseDto.StationEntityToList(stationList));
+// System.out.println(StationService.save(new StationRequestDto(scanner.nextLine())));
}
}
diff --git a/src/main/java/subway/DummyData.java b/src/main/java/subway/DummyData.java
new file mode 100644
index 000000000..53d8bc565
--- /dev/null
+++ b/src/main/java/subway/DummyData.java
@@ -0,0 +1,31 @@
+package subway;
+
+import subway.domain.line.Line;
+import subway.domain.line.LineRepository;
+import subway.domain.station.Station;
+import subway.domain.station.StationRepository;
+
+import java.util.Arrays;
+
+public class DummyData {
+
+ public static void saveDummyData() {
+ Station station1 = Station.getStation("교대역");
+ Station station2 = Station.getStation("강남역");
+ Station station3 = Station.getStation("역삼역");
+ Station station4 = Station.getStation("남부터미널역");
+ Station station5 = Station.getStation("양재역");
+ Station station6 = Station.getStation("양재시민의숲역");
+ Station station7 = Station.getStation("매봉역");
+
+ StationRepository.saveDummyData(
+ Arrays.asList(station1, station2, station3, station4, station5, station6, station7)
+ );
+
+ Line line1 = Line.getLine("2호선", station1, station2);
+ Line line2 = Line.getLine("3호선", station1, station4);
+ Line line3 = Line.getLine("신분당선", station2, station5);
+
+ LineRepository.saveDummyData(Arrays.asList(line1, line2, line3));
+ }
+}
diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java
deleted file mode 100644
index f4d738d5a..000000000
--- a/src/main/java/subway/domain/Line.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package subway.domain;
-
-public class Line {
- private String name;
-
- public Line(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- // 추가 기능 구현
-}
diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java
deleted file mode 100644
index 49132ddb6..000000000
--- a/src/main/java/subway/domain/LineRepository.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package subway.domain;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
-public class LineRepository {
- private static final List lines = new ArrayList<>();
-
- public static List lines() {
- return Collections.unmodifiableList(lines);
- }
-
- public static void addLine(Line line) {
- lines.add(line);
- }
-
- public static boolean deleteLineByName(String name) {
- return lines.removeIf(line -> Objects.equals(line.getName(), name));
- }
-}
diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java
deleted file mode 100644
index bdb142590..000000000
--- a/src/main/java/subway/domain/Station.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package subway.domain;
-
-public class Station {
- private String name;
-
- public Station(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- // 추가 기능 구현
-}
diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java
deleted file mode 100644
index b7245c0f3..000000000
--- a/src/main/java/subway/domain/StationRepository.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package subway.domain;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
-public class StationRepository {
- private static final List stations = new ArrayList<>();
-
- public static List stations() {
- return Collections.unmodifiableList(stations);
- }
-
- public static void addStation(Station station) {
- stations.add(station);
- }
-
- public static boolean deleteStation(String name) {
- return stations.removeIf(station -> Objects.equals(station.getName(), name));
- }
-}
diff --git a/src/main/java/subway/domain/line/Line.java b/src/main/java/subway/domain/line/Line.java
new file mode 100644
index 000000000..be92e331e
--- /dev/null
+++ b/src/main/java/subway/domain/line/Line.java
@@ -0,0 +1,52 @@
+package subway.domain.line;
+
+import subway.domain.station.Station;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+public class Line {
+ private final String name;
+ private final List stationList;
+
+ public Line(String name, List stationList) {
+ this.name = name;
+ this.stationList = stationList;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public static Line getLine(String lineName, Station startStation, Station endStation) {
+ if (LineCheck.checkLineNameLength(lineName) && LineCheck.checkLineNameEndPoint(lineName)) {
+ }
+ return new Line(lineName, Arrays.asList(startStation, endStation));
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ Line line = (Line) o;
+ return Objects.equals(name, line.name);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name);
+ }
+
+ public boolean contains(Station station) {
+ return stationList.contains(station);
+ }
+
+ public void insertSection(int index, Station station) {
+ stationList.add(index, station);
+ }
+}
diff --git a/src/main/java/subway/domain/line/LineCheck.java b/src/main/java/subway/domain/line/LineCheck.java
new file mode 100644
index 000000000..baeec9b5f
--- /dev/null
+++ b/src/main/java/subway/domain/line/LineCheck.java
@@ -0,0 +1,23 @@
+package subway.domain.line;
+
+public class LineCheck {
+
+ private static final int MIN_LINE_NAME_LENGTH = 2;
+
+ private static final String LINE_LENGTH_ERROR_MESSAGE = "[ERROR] 노선 이름은 2글자 이상 입력해야합니다.";
+ public static final String LINE_END_POINT_ERROR_MESSAGE = "[ERROR] 노선이름은 OO선 또는 O호선으로 끝나야 합니다.";
+
+ public static boolean checkLineNameLength(String lineName) {
+ if (lineName.length() < MIN_LINE_NAME_LENGTH) {
+ throw new IllegalArgumentException(LINE_LENGTH_ERROR_MESSAGE);
+ }
+ return true;
+ }
+
+ public static boolean checkLineNameEndPoint(String lineName) {
+ if (!lineName.endsWith("선") || !lineName.endsWith("호선")) {
+ throw new IllegalArgumentException(LINE_END_POINT_ERROR_MESSAGE);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/subway/domain/line/LineRepository.java b/src/main/java/subway/domain/line/LineRepository.java
new file mode 100644
index 000000000..00068abf3
--- /dev/null
+++ b/src/main/java/subway/domain/line/LineRepository.java
@@ -0,0 +1,58 @@
+package subway.domain.line;
+
+import subway.domain.station.Station;
+import subway.domain.station.StationRepository;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+public class LineRepository {
+
+ private static final List lines = new ArrayList<>();
+
+ public static final String LINE_DUPLICATE_ERROR_MESSAGE = "[ERROR] 이미 등록된 노선 이름입니다. 중복되지 않는 역이름을 입력해주세요.";
+ public static final String LINE_CANNOT_FIND_ERROR_MESSAGE = "[ERROR] 존재하지 않는 노선입니다.";
+
+ public static List lines() {
+ return Collections.unmodifiableList(lines);
+ }
+
+ public static List save(Line lineName) {
+ if (lines.contains(lineName)) {
+ throw new IllegalArgumentException(LINE_DUPLICATE_ERROR_MESSAGE);
+ }
+ lines.add(lineName);
+ return lines;
+ }
+
+ // 구간 입력할 때 존재하는 노선인지 확인
+ public static Line findLineName(String lineName) {
+ return lines.stream().filter(line -> line.getName().equals(lineName))
+ .findAny().orElseThrow(() -> new IllegalArgumentException(LINE_CANNOT_FIND_ERROR_MESSAGE));
+ }
+
+ // station이 line에 포함되어있는지 확인
+ public static boolean contains(Station station) {
+ return lines.stream().anyMatch(line -> line.contains(station));
+ }
+
+ // 노선 삭제
+ public static boolean deleteLineByName(String name) {
+ return lines.removeIf(line -> Objects.equals(line.getName(), name));
+ }
+
+ // 구간에 station추가
+ public static void insertSection(String lineName, int index, Station station) {
+ Line line = findLineName(lineName);
+ line.insertSection(index, station);
+ }
+
+ public static void saveDummyData(List lines) {
+ lines.forEach(LineRepository::save);
+ }
+
+ // 구간에 station제거
+// public static
+}
diff --git a/src/main/java/subway/domain/station/Station.java b/src/main/java/subway/domain/station/Station.java
new file mode 100644
index 000000000..18a0de5d0
--- /dev/null
+++ b/src/main/java/subway/domain/station/Station.java
@@ -0,0 +1,37 @@
+package subway.domain.station;
+
+import java.util.Objects;
+
+public class Station {
+ private String name;
+ public Station(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public static Station getStation(String stationName) {
+ if (StationCheck.checkStationNameLength(stationName) && StationCheck.checkStationNameEndPoint(stationName)) {
+ }
+ return new Station(stationName);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ Station station = (Station) o;
+ return Objects.equals(name, station.name);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name);
+ }
+}
diff --git a/src/main/java/subway/domain/station/StationCheck.java b/src/main/java/subway/domain/station/StationCheck.java
new file mode 100644
index 000000000..5375e0495
--- /dev/null
+++ b/src/main/java/subway/domain/station/StationCheck.java
@@ -0,0 +1,26 @@
+package subway.domain.station;
+
+public class StationCheck {
+
+ private String stationName;
+
+ private static final int MIN_STATION_NAME_LENGTH = 2;
+
+ private static final String STATION_LENGTH_ERROR_MESSAGE = "[ERROR] 역이름은 2글자 이상 입력해야합니다.";
+ public static final String STATION_END_POINT_ERROR_MESSAGE = "[ERROR] 역 이름은 OO역으로 끝나야 합니다.";
+
+
+ public static boolean checkStationNameLength(String stationName) {
+ if (stationName.length() < MIN_STATION_NAME_LENGTH) {
+ throw new IllegalArgumentException(STATION_LENGTH_ERROR_MESSAGE);
+ }
+ return true;
+ }
+
+ public static boolean checkStationNameEndPoint(String stationName) {
+ if (!stationName.endsWith("역")) {
+ throw new IllegalArgumentException(STATION_END_POINT_ERROR_MESSAGE);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/subway/domain/station/StationRepository.java b/src/main/java/subway/domain/station/StationRepository.java
new file mode 100644
index 000000000..bb212bd92
--- /dev/null
+++ b/src/main/java/subway/domain/station/StationRepository.java
@@ -0,0 +1,47 @@
+package subway.domain.station;
+
+import subway.domain.line.LineRepository;
+
+import java.util.*;
+
+public class StationRepository {
+ private static final List stations = new ArrayList<>();
+
+ public static final String STATION_DUPLICATE_ERROR_MESSAGE = "[ERROR] 이미 등록된 역 이름입니다. 중복되지 않는 역이름을 입력해주세요.";
+ public static final String STATION_CANNOT_FIND_ERROR_MESSAGE = "[ERROR] 존재하지 않는 역입니다.";
+ public static final String LINE_ALREADY_CONTAINS_STATION_ERROR_MESSAGE = "[ERROR] 노선에 등록되어있는 역은 삭제가 불가능합니다.";
+
+ public static List stations() {
+ return Collections.unmodifiableList(stations);
+ }
+
+ public static List save(Station stationName) {
+ if (stations.contains(stationName)) {
+ throw new IllegalArgumentException(STATION_DUPLICATE_ERROR_MESSAGE);
+ }
+ stations.add(stationName);
+ return stations;
+ }
+
+ public static void addStation(Station station) {
+ stations.add(station);
+ }
+
+ public static Station findStationName(String stationName) {
+ return stations.stream().filter(station -> station.getName().equals(stationName))
+ .findAny().orElseThrow(() -> new IllegalArgumentException(STATION_CANNOT_FIND_ERROR_MESSAGE));
+ }
+
+ // Line에 station포함되어있으면 station 삭제 못함
+ public static boolean deleteStation(String stationName) {
+ Station targetStation = findStationName(stationName);
+ if (LineRepository.contains(targetStation)) {
+ throw new IllegalArgumentException(LINE_ALREADY_CONTAINS_STATION_ERROR_MESSAGE);
+ }
+ return stations.removeIf(station -> Objects.equals(station.getName(), stationName));
+ }
+
+ public static void saveDummyData(List stations) {
+ stations.forEach(StationRepository::save);
+ }
+}
diff --git a/src/main/java/subway/dto/station/StationRequestDto.java b/src/main/java/subway/dto/station/StationRequestDto.java
new file mode 100644
index 000000000..ca501498b
--- /dev/null
+++ b/src/main/java/subway/dto/station/StationRequestDto.java
@@ -0,0 +1,14 @@
+package subway.dto.station;
+
+public class StationRequestDto {
+
+ private final String stationName;
+
+ public StationRequestDto(String stationName) {
+ this.stationName = stationName;
+ }
+
+ public String getName() {
+ return stationName;
+ }
+}
diff --git a/src/main/java/subway/dto/station/StationResponseDto.java b/src/main/java/subway/dto/station/StationResponseDto.java
new file mode 100644
index 000000000..e66393f47
--- /dev/null
+++ b/src/main/java/subway/dto/station/StationResponseDto.java
@@ -0,0 +1,29 @@
+package subway.dto.station;
+
+import subway.domain.station.Station;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class StationResponseDto {
+
+ private final String name;
+
+ public StationResponseDto(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public static StationResponseDto StationEntity(Station entity) {
+ return new StationResponseDto(entity.getName());
+ }
+
+ public static List StationEntityToList(List entities) {
+ return entities.stream()
+ .map(StationResponseDto::StationEntity)
+ .collect(Collectors.toList());
+ }
+}
diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java
new file mode 100644
index 000000000..20a8ac9d5
--- /dev/null
+++ b/src/main/java/subway/service/station/StationService.java
@@ -0,0 +1,25 @@
+package subway.service.station;
+
+import subway.domain.station.Station;
+import subway.domain.station.StationRepository;
+import subway.dto.station.StationRequestDto;
+
+public class StationService {
+
+ public static final String STATION_DELETE_CONDITION_ERROR_MESSAGE = "[ERROR] 노선에 등록되어있는 역은 삭제가 불가능합니다.";
+
+ public static boolean save(StationRequestDto stationRequestDto) {
+ Station newStation = Station.getStation(stationRequestDto.getName());
+ StationRepository.save(newStation);
+ System.out.println(StationRepository.save(newStation));
+ return true;
+ }
+
+// public static boolean delete(String stationName) {
+// Station station = StationRepository.findStationName(stationName);
+// if (LineList.contains(stationName)) { // 노선에 역이 포함되어있다면
+// throw new IllegalArgumentException(STATION_DELETE_CONDITION_ERROR_MESSAGE);
+// }
+// StationRepository.deleteStation(station);
+// }
+}
diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java
new file mode 100644
index 000000000..71bfa84d4
--- /dev/null
+++ b/src/main/java/subway/view/InputView.java
@@ -0,0 +1,35 @@
+package subway.view;
+
+import subway.view.line.LineMenuInputView;
+import subway.view.main.MainMenuInputView;
+import subway.view.route.RouteMenuInputView;
+import subway.view.station.StationMenuInputView;
+
+import java.util.Scanner;
+
+public class InputView {
+
+ public static void menuRun(Scanner scanner) {
+ String menuChooseResult = MainMenuInputView.getMainMenuCommand(scanner);
+ while (true) {
+ if (menuChooseResult.equals("1")) {
+ if (StationMenuInputView.getStationMenuCommand(scanner).equals("B")) {
+ MainMenuInputView.getMainMenuCommand(scanner);
+ }
+ StationMenuInputView.getStationMenuCommand(scanner);
+ }
+ if (menuChooseResult.equals("2")) {
+ if (LineMenuInputView.getLineMenuCommand(scanner).equals("B")) {
+ MainMenuInputView.getMainMenuCommand(scanner);
+ }
+ LineMenuInputView.getLineMenuCommand(scanner);
+ }
+ if (menuChooseResult.equals("3")) {
+ if (RouteMenuInputView.getRouteMenuCommand(scanner).equals("B")) {
+ MainMenuInputView.getMainMenuCommand(scanner);
+ }
+ RouteMenuInputView.getRouteMenuCommand(scanner);
+ }
+ }
+ }
+}
diff --git a/src/main/java/subway/view/line/LineMenuInputView.java b/src/main/java/subway/view/line/LineMenuInputView.java
new file mode 100644
index 000000000..bb8a3f123
--- /dev/null
+++ b/src/main/java/subway/view/line/LineMenuInputView.java
@@ -0,0 +1,31 @@
+package subway.view.line;
+
+import java.util.Scanner;
+
+public class LineMenuInputView {
+
+ private static final String LINE_ENROLL_MENU = "1";
+ private static final String LINE_DELETE_MENU = "2";
+ private static final String LINE_PRINTALL_MENU = "3";
+ private static final String INVALID_INPUT = "[ERROR] 선택할 수 없는 기능입니다.";
+ private static final String BACK_MENU = "B";
+
+ public static String getLineMenuCommand(Scanner scanner) {
+ LineMenuOutputView.printLineMenu();
+ try {
+ String lineMenuCommand = scanner.nextLine();
+ validateLineMenuCommand(lineMenuCommand);
+ return lineMenuCommand;
+ } catch (Exception e) {
+ System.out.println(e.getMessage());
+ return getLineMenuCommand(scanner);
+ }
+ }
+
+ private static void validateLineMenuCommand(String lineMenuCommand) {
+ if (!lineMenuCommand.equals(LINE_ENROLL_MENU) && !lineMenuCommand.equals(LINE_DELETE_MENU) &&
+ !lineMenuCommand.equals(LINE_PRINTALL_MENU) && !lineMenuCommand.equals(BACK_MENU)) {
+ throw new IllegalArgumentException(INVALID_INPUT);
+ }
+ }
+}
diff --git a/src/main/java/subway/view/line/LineMenuOutputView.java b/src/main/java/subway/view/line/LineMenuOutputView.java
new file mode 100644
index 000000000..001f05577
--- /dev/null
+++ b/src/main/java/subway/view/line/LineMenuOutputView.java
@@ -0,0 +1,17 @@
+package subway.view.line;
+
+public class LineMenuOutputView {
+
+ private static final String LINE_MENU = "## 노선 관리 화면\n1. 노선 등록\n2. 노선 삭제\n3. 노선 조회\nB. 돌아가기\n";
+ private static final String CHOOSE_COMMAND_MESSAGE = "## 원하는 기능을 선택하세요.";
+
+ public static void printLineMenu() {
+ System.out.println();
+ System.out.println(LINE_MENU);
+ printChooseCommandMessage();
+ }
+
+ public static void printChooseCommandMessage() {
+ System.out.println(CHOOSE_COMMAND_MESSAGE);
+ }
+}
diff --git a/src/main/java/subway/view/main/MainMenuInputView.java b/src/main/java/subway/view/main/MainMenuInputView.java
new file mode 100644
index 000000000..8fedf76e3
--- /dev/null
+++ b/src/main/java/subway/view/main/MainMenuInputView.java
@@ -0,0 +1,31 @@
+package subway.view.main;
+
+import java.util.Scanner;
+
+public class MainMenuInputView {
+
+ private static final String STATION_MENU = "1";
+ private static final String LINE_MENU = "2";
+ private static final String SECTION_MENU = "3";
+ private static final String INVALID_INPUT = "[ERROR] 선택할 수 없는 기능입니다.";
+ private static final String QUIT_MENU = "Q";
+
+ public static String getMainMenuCommand(Scanner scanner) {
+ MainMenuOutputView.printMainMenu();
+ try {
+ String menuCommand = scanner.nextLine();
+ validateMainMenuCommand(menuCommand);
+ return menuCommand;
+ } catch (Exception e) {
+ System.out.println(e.getMessage());
+ return getMainMenuCommand(scanner);
+ }
+ }
+
+ private static void validateMainMenuCommand(String menuCommand) {
+ if (!menuCommand.equals(STATION_MENU) && !menuCommand.equals(LINE_MENU) &&
+ !menuCommand.equals(SECTION_MENU) && !menuCommand.equals(QUIT_MENU)) {
+ throw new IllegalArgumentException(INVALID_INPUT);
+ }
+ }
+}
diff --git a/src/main/java/subway/view/main/MainMenuOutputView.java b/src/main/java/subway/view/main/MainMenuOutputView.java
new file mode 100644
index 000000000..f54beac31
--- /dev/null
+++ b/src/main/java/subway/view/main/MainMenuOutputView.java
@@ -0,0 +1,16 @@
+package subway.view.main;
+
+public class MainMenuOutputView {
+ private static final String MAIN_MENU = "## 메인 화면\n1. 역관리\n2. 노선 관리\n3. 구간 관리\n4. 지하철 노선도 출력\nQ. 종료\n";
+ private static final String CHOOSE_COMMAND_MESSAGE = "## 원하는 기능을 선택하세요.";
+
+ public static void printMainMenu() {
+ System.out.println();
+ System.out.println(MAIN_MENU);
+ printChooseCommandMessage();
+ }
+
+ public static void printChooseCommandMessage() {
+ System.out.println(CHOOSE_COMMAND_MESSAGE);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/subway/view/route/RouteMenuInputView.java b/src/main/java/subway/view/route/RouteMenuInputView.java
new file mode 100644
index 000000000..f4301bba6
--- /dev/null
+++ b/src/main/java/subway/view/route/RouteMenuInputView.java
@@ -0,0 +1,30 @@
+package subway.view.route;
+
+import java.util.Scanner;
+
+public class RouteMenuInputView {
+
+ private static final String ROUTE_ENROLL_MENU = "1";
+ private static final String ROUTE_DELETE_MENU = "2";
+ private static final String INVALID_INPUT = "[ERROR] 선택할 수 없는 기능입니다.";
+ private static final String BACK_MENU = "B";
+
+ public static String getRouteMenuCommand(Scanner scanner) {
+ RouteMenuOutputView.printRouteMenu();
+ try {
+ String routeMenuCommand = scanner.nextLine();
+ validateRouteMenuCommand(routeMenuCommand);
+ return routeMenuCommand;
+ } catch (Exception e) {
+ System.out.println(e.getMessage());
+ return getRouteMenuCommand(scanner);
+ }
+ }
+
+ private static void validateRouteMenuCommand(String routeMenuCommand) {
+ if (!routeMenuCommand.equals(ROUTE_ENROLL_MENU) && !routeMenuCommand.equals(ROUTE_DELETE_MENU) &&
+ !routeMenuCommand.equals(BACK_MENU)) {
+ throw new IllegalArgumentException(INVALID_INPUT);
+ }
+ }
+}
diff --git a/src/main/java/subway/view/route/RouteMenuOutputView.java b/src/main/java/subway/view/route/RouteMenuOutputView.java
new file mode 100644
index 000000000..277c1cb1d
--- /dev/null
+++ b/src/main/java/subway/view/route/RouteMenuOutputView.java
@@ -0,0 +1,17 @@
+package subway.view.route;
+
+public class RouteMenuOutputView {
+
+ private static final String ROUTE_MENU = "## 구간 관리 화면\n1. 구간 등록\n2. 구간 삭제\nB. 돌아가기\n";
+ private static final String CHOOSE_COMMAND_MESSAGE = "## 원하는 기능을 선택하세요.";
+
+ public static void printRouteMenu() {
+ System.out.println();
+ System.out.println(ROUTE_MENU);
+ printChooseCommandMessage();
+ }
+
+ public static void printChooseCommandMessage() {
+ System.out.println(CHOOSE_COMMAND_MESSAGE);
+ }
+}
diff --git a/src/main/java/subway/view/station/StationMenuInputView.java b/src/main/java/subway/view/station/StationMenuInputView.java
new file mode 100644
index 000000000..dd1f9beeb
--- /dev/null
+++ b/src/main/java/subway/view/station/StationMenuInputView.java
@@ -0,0 +1,31 @@
+package subway.view.station;
+
+import java.util.Scanner;
+
+public class StationMenuInputView {
+
+ private static final String STATION_ENROLL_MENU = "1";
+ private static final String STATION_DELETE_MENU = "2";
+ private static final String STATION_PRINTALL_MENU = "3";
+ private static final String INVALID_INPUT = "[ERROR] 선택할 수 없는 기능입니다.";
+ private static final String BACK_MENU = "B";
+
+ public static String getStationMenuCommand(Scanner scanner) {
+ StationMenuOutputView.printStation();
+ try {
+ String stationMenuCommand = scanner.nextLine();
+ validateStationMenuCommand(stationMenuCommand);
+ return stationMenuCommand;
+ } catch (Exception e) {
+ System.out.println(e.getMessage());
+ return getStationMenuCommand(scanner);
+ }
+ }
+
+ private static void validateStationMenuCommand(String stationMenuCommand) {
+ if (!stationMenuCommand.equals(STATION_ENROLL_MENU) && !stationMenuCommand.equals(STATION_DELETE_MENU) &&
+ !stationMenuCommand.equals(STATION_PRINTALL_MENU) && !stationMenuCommand.equals(BACK_MENU)) {
+ throw new IllegalArgumentException(INVALID_INPUT);
+ }
+ }
+}
diff --git a/src/main/java/subway/view/station/StationMenuOutputView.java b/src/main/java/subway/view/station/StationMenuOutputView.java
new file mode 100644
index 000000000..1ec9dbd01
--- /dev/null
+++ b/src/main/java/subway/view/station/StationMenuOutputView.java
@@ -0,0 +1,17 @@
+package subway.view.station;
+
+public class StationMenuOutputView {
+
+ private static final String STATION_MENU = "## 역 관리 화면\n1. 역 등록\n2. 역 삭제\n3. 역 조회\nB. 돌아가기\n";
+ private static final String CHOOSE_COMMAND_MESSAGE = "## 원하는 기능을 선택하세요.";
+
+ public static void printStation() {
+ System.out.println();
+ System.out.println(STATION_MENU);
+ printChooseCommandMessage();
+ }
+
+ public static void printChooseCommandMessage() {
+ System.out.println(CHOOSE_COMMAND_MESSAGE);
+ }
+}