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); + } +}