From 4767800f5e335b35e4a92bdaae75d1f1d385ea67 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 16:08:03 +0900 Subject: [PATCH 01/32] =?UTF-8?q?feat:=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 489 +++++------------------------------------------------- 1 file changed, 38 insertions(+), 451 deletions(-) diff --git a/README.md b/README.md index e6ed1056f..c6c9e84be 100644 --- a/README.md +++ b/README.md @@ -1,470 +1,57 @@ # 지하철 노선도 미션 -- 지하철 역과 노선을 관리하는 지하철 노선도 기능을 구현한다. - -
## 🚀 기능 요구사항 -### 초기 설정 -- 프로그램 시작 시 역, 노선 등 필요한 정보를 미리 셋팅할 수 있다. - -> 아래의 사전 등록 정보로 반드시 초기 설정을 하기 -> -``` - 1. 지하철역으로 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역이 등록되어 있다. - 2. 지하철 노선으로 2호선, 3호선, 신분당선이 등록되어 있다. - 3. 노선에 역이 아래와 같이 등록되어 있다.(왼쪽 끝이 상행 종점) - - 2호선: 교대역 - 강남역 - 역삼역 - - 3호선: 교대역 - 남부터미널역 - 양재역 - 매봉역 - - 신분당선: 강남역 - 양재역 - 양재시민의숲역 - ``` - - - -### 지하철 역 관련 기능 -- 지하철 역을 등록하고 삭제할 수 있다. (단, 노선에 등록된 역은 삭제할 수 없다) -- 중복된 지하철 역 이름이 등록될 수 없다. -- 지하철 역 이름은 2글자 이상이어야 한다. -- 지하철 역의 목록을 조회할 수 있다. - -### 지하철 노선 관련 기능 -- 지하철 노선을 등록하고 삭제할 수 있다. -- 중복된 지하철 노선 이름이 등록될 수 없다. -- 지하철 노선 이름은 2글자 이상이어야 한다. -- 노선 등록 시 상행 종점역과 하행 종점역을 입력받는다. -- 지하철 노선의 목록을 조회할 수 있다. - -### 지하철 구간 추가 기능 -- 지하철 노선에 구간을 추가하는 기능은 노선에 역을 추가하는 기능이라고도 할 수 있다. - - 역과 역사이를 구간이라 하고 이 구간들의 모음이 노선이다. -- 하나의 역은 여러개의 노선에 추가될 수 있다. -- 역과 역 사이에 새로운 역이 추가 될 수 있다. -- 노선에서 갈래길은 생길 수 없다. - - - -### 지하철 구간 삭제 기능 -- 노선에 등록된 역을 제거할 수 있다. -- 종점을 제거할 경우 다음 역이 종점이 된다. -- 노선에 포함된 역이 두개 이하일 때는 역을 제거할 수 없다. - - - -### 지하철 노선에 등록된 역 조회 기능 -- 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회할 수 있다. - -
- -## ✍🏻 입출력 요구사항 -- `프로그래밍 실행 결과 예시`를 참고하여 입출력을 구현한다. -- 기대하는 출력 결과는 `[INFO]`를 붙여서 출력한다. 출력값의 형식은 예시와 동일하게 한다. -- 에러 발생 시 `[ERROR]`를 붙여서 출력한다. (에러의 문구는 자유롭게 작성한다.) - -### 💻 프로그래밍 실행 결과 -#### 역 관리 -``` -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -1 - -## 역 관리 화면 -1. 역 등록 -2. 역 삭제 -3. 역 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -1 - -## 등록할 역 이름을 입력하세요. -잠실역 - -[INFO] 지하철 역이 등록되었습니다. - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -1 - -## 역 관리 화면 -1. 역 등록 -2. 역 삭제 -3. 역 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -3 - -## 역 목록 -[INFO] 교대역 -[INFO] 강남역 -[INFO] 역삼역 -[INFO] 남부터미널역 -[INFO] 양재역 -[INFO] 양재시민의숲역 -[INFO] 매봉역 -[INFO] 잠실역 - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -1 - -## 역 관리 화면 -1. 역 등록 -2. 역 삭제 -3. 역 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -2 - -## 삭제할 역 이름을 입력하세요. -잠실역 - -[INFO] 지하철 역이 삭제되었습니다. - -... -``` - -### 노선 관리 - -``` - -... - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -2 - -## 노선 관리 화면 -1. 노선 등록 -2. 노선 삭제 -3. 노선 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -1 - -## 등록할 노선 이름을 입력하세요. -1호선 - -## 등록할 노선의 상행 종점역 이름을 입력하세요. -강남역 - -## 등록할 노선의 하행 종점역 이름을 입력하세요. -잠실역 - -[INFO] 지하철 노선이 등록되었습니다. - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -2 - -## 노선 관리 화면 -1. 노선 등록 -2. 노선 삭제 -3. 노선 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -3 - -## 노선 목록 -[INFO] 2호선 -[INFO] 3호선 -[INFO] 신분당선 -[INFO] 1호선 - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -2 - -## 노선 관리 화면 -1. 노선 등록 -2. 노선 삭제 -3. 노선 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -2 - -## 삭제할 노선 이름을 입력하세요. -1호선 - -[INFO] 지하철 노선이 삭제되었습니다. - -... - -``` - -### 구간 관리 -- 순서는 1부터 시작한다. - -``` -... - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -3 - -## 구간 관리 화면 -1. 구간 등록 -2. 구간 삭제 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -1 - -## 노선을 입력하세요. -2호선 - -## 역이름을 입력하세요. -잠실역 - -## 순서를 입력하세요. -2 - -[INFO] 구간이 등록되었습니다. - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -3 - -## 구간 관리 화면 -1. 구간 등록 -2. 구간 삭제 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -2 - -## 삭제할 구간의 노선을 입력하세요. -2호선 - -## 삭제할 구간의 역을 입력하세요. -잠실역 - -[INFO] 구간이 삭제되었습니다. - -... - -``` - -### 지하철 노선도 출력 - -``` -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -4 - -## 지하철 노선도 -[INFO] 2호선 -[INFO] --- -[INFO] 교대역 -[INFO] 강남역 -[INFO] 역삼역 - -[INFO] 3호선 -[INFO] --- -[INFO] 교대역 -[INFO] 남부터미널역 -[INFO] 양재역 -[INFO] 매봉역 - -[INFO] 신분당선 -[INFO] --- -[INFO] 강남역 -[INFO] 양재역 -[INFO] 양재시민의숲역 - -``` - -#### 에러 출력 예시 - -``` -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -5 - -[ERROR] 선택할 수 없는 기능입니다. - -## 원하는 기능을 선택하세요. -1 - -## 역 관리 화면 -1. 역 등록 -2. 역 삭제 -3. 역 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -1 - -## 등록할 역 이름을 입력하세요. -강남역 - -[ERROR] 이미 등록된 역 이름입니다. - -## 역 관리 화면 -1. 역 등록 -2. 역 삭제 -3. 역 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. - -... - -``` - -
+- [ ] 역 정보 초기 설정하는 기능 -## 🎱 프로그래밍 요구사항 -- 자바 코드 컨벤션을 지키면서 프로그래밍한다. - - 기본적으로 [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html)을 원칙으로 한다. - - 단, 들여쓰기는 '2 spaces'가 아닌 '4 spaces'로 한다. -- indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다. - - 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. - - 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다. -- 3항 연산자를 쓰지 않는다. -- 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다. - - 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. -- else 예약어를 쓰지 않는다. - - 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다. - - else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. -- 프로그래밍 요구사항에서 별도로 변경 불가 안내가 없는 경우 파일 수정과 패키지 이동을 자유롭게 할 수 있다. -- 예외 상황 시 에러 문구를 출력해야 한다. 단, 에러 문구는 `[ERROR]` 로 시작해야 한다. +- [ ] 메인 화면 조회 -### 프로그래밍 요구사항 - Application -- Application 클래스를 활용해 구현해야 한다. -- Application의 패키지 구조는 변경하지 않는다. -- 주석을 참고하여 구현할 수 있으며 주석대로 구현하지 않아도 되고 삭제해도 무관하다. -```java -public class Application { - public static void main(String[] args) { - ... - } -} -``` +- [ ] 메인 기능 선택 + - [ ] 예외사항: 선택할 기능은 1 - 4, Q만 가능 -### 프로그래밍 요구사항 - Station, Line -- Station, Line 클래스를 활용하여 지하철역과 노선을 구현해야 한다. -- 제공하는 각 클래스의 기본 생성자를 추가할 수 없다. -- 필드(인스턴스 변수)인 name의 접근 제어자 private을 변경할 수 없다. -- 가능하면 setter 메소드(ex. setXXX)를 추가하지 않고 구현한다. - -```java -public class Station { - private String name; +- [ ] 지하철 역 관리 기능 선택 + - [ ] 예외사항: 선택할 기능은 1 - 3, B만 가능 - public Station(String name) { - this.name = name; - } +- [ ] 지하철 역을 등록 + - [ ] 예외사항: 역 이름은 2글자 이상이어야 한다. + - [ ] 예외사항: 지하철 역 이름은 중복될 수 없다. - public String getName() { - return name; - } +- [ ] 지하철 역을 삭제 + - [ ] 예외사항: 노선에 등록된 역은 삭제할 수 없다. + - [ ] 예외사항: 삭제할 역이 역 목록에 있어야 한다. - // 추가 기능 구현 -} +- [ ] 지하철 역 목록 조회 -``` +- [ ] 지하철 노선 관리 기능 선택 + - [ ] 예외사항: 선택할 기능은 1 - 3, B만 가능 -### 프로그래밍 요구사항 - StationRepository, LineRepository -- Station과 Line의 상태를 저장할 수 있는 StationRepository, LineRepository를 제공한다. -- 필요 시 StationRepository, LineRepository 이 외 추가로 Repository를 만들 수 있다. -- 추가로 생성되는 객체에 대해서 XXXRepository 네이밍으로 저장 클래스를 추가할 수 있다. -- 객체들의 상태를 관리하기 위해서 XXXRepository 클래스를 활용해 저장 로직을 구현해야 한다. -- 필요에 따라 자유롭게 수정이 가능하다. - -```java -public class StationRepository { - private static final List stations = new ArrayList<>(); +- [ ] 지하철 노선 등록 + - [ ] 예외사항: 노선 이름은 2글자 이상이어야 한다. + - [ ] 예외사항: 노선 이름은 중복될 수 없다. - public static List stations() { - return Collections.unmodifiableList(stations); - } +- [ ] 노선 등록 시 상행 종점역과 하행 종점역을 등록 + - [ ] 예외사항: 상행 종점역과 하행 종점역은 2글자 이상이어야 한다. + - [ ] 예외사항: 상행 좀점역과 하행 종점역이 같지 않다. + - [ ] 예외사항: 등록할 역이 역 목록에 있어야한다. - public static void addStation(Station station) { - stations.add(station); - } +- [ ] 지하철 노선 조회 - public static boolean deleteStation(String name) { - return stations.removeIf(station -> Objects.equals(station.getName(), name)); - } -} -``` +- [ ] 지하철 구관 관리 기능 선택 + - [ ] 예외사항: 선택할 기능은 1 - 2, B만 가능 -
-## 📈 진행 요구사항 -- 미션은 [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) 문서를 참고하여 진행할 수 있다. -
+- [ ] 지하철 구간 등록 + - [ ] 예외사항: 노선 당 중복된 역을 허용하지 않는다. + - [ ] 예외사항: 추가할 역의 이름이 2글자 이상이어야 한다. + - [ ] 예외사항: 입력할 노선은 등록된 노선이어야 한다. + - [ ] 예외사항: 입력할 역이름은 2글자 이상이어야 한다. + - [ ] 예외사항: 입력할 역이름은 등록된 역이어야 한다. + - [ ] 예외사항: 입력할 순서는 1 - (노선에 배정된 역 개수)만 허용한다. -## 📝 License +- [ ] 지하철 구간 삭제 + - [ ] 예외사항: 등록된 노선만 삭제할 수 있다. + - [ ] 예외사항: 삭제할 역은 2글자 이상이어야한다. + - [ ] 예외사항: 삭제할 역은 선택한 노선에 등록된 역 이어야한다. + - [ ] 예외사항: 노선에 포함된 역이 2개 이하일 때는 삭제할 수 없다. -This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/blob/master/LICENSE.md) licensed. +- [ ] 지하철 노선도 출력 From a68fa7742060199fda1f33e33de32d3dd6cef4a5 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 16:49:15 +0900 Subject: [PATCH 02/32] =?UTF-8?q?feat:=20=EC=97=AD=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EC=84=A4=EC=A0=95=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit StationName클래스: 2글자 이상의 역 이름을 갖는 자료구조 LineName클래스: 2글자 이상의 노선 이름을 갖는 자료구조 --- README.md | 2 +- src/main/java/subway/Application.java | 2 +- src/main/java/subway/Subway.java | 17 +++++++++ src/main/java/subway/domain/Line.java | 15 +++++--- src/main/java/subway/domain/LineName.java | 36 +++++++++++++++++++ .../java/subway/domain/LineRepository.java | 19 ++++++++++ src/main/java/subway/domain/Station.java | 7 ++-- src/main/java/subway/domain/StationName.java | 36 +++++++++++++++++++ .../java/subway/domain/StationRepository.java | 10 ++++++ 9 files changed, 134 insertions(+), 10 deletions(-) create mode 100644 src/main/java/subway/Subway.java create mode 100644 src/main/java/subway/domain/LineName.java create mode 100644 src/main/java/subway/domain/StationName.java diff --git a/README.md b/README.md index c6c9e84be..7b4a84ed5 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## 🚀 기능 요구사항 -- [ ] 역 정보 초기 설정하는 기능 +- [X] 역 정보 초기 설정하는 기능 - [ ] 메인 화면 조회 diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..e7dc70c6d 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -5,6 +5,6 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - // TODO: 프로그램 구현 + Subway subway = new Subway(scanner); } } diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java new file mode 100644 index 000000000..4e9a63ddc --- /dev/null +++ b/src/main/java/subway/Subway.java @@ -0,0 +1,17 @@ +package subway; + +import subway.domain.LineRepository; +import subway.domain.StationRepository; + +import java.util.Scanner; + +public class Subway { + private Scanner scanner; + + public Subway(Scanner scanner) { + this.scanner = scanner; + StationRepository.init(); + LineRepository.init(); + } + +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..7c10ab947 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,15 +1,22 @@ package subway.domain; +import java.util.ArrayList; +import java.util.List; + public class Line { - private String name; + private LineName name; + private List stations = new ArrayList<>(); - public Line(String name) { + public Line(LineName name) { this.name = name; } - public String getName() { + public LineName getName() { return name; } - // 추가 기능 구현 + public void addStations(Station station) { + stations.add(station); + } + } diff --git a/src/main/java/subway/domain/LineName.java b/src/main/java/subway/domain/LineName.java new file mode 100644 index 000000000..bcdb15508 --- /dev/null +++ b/src/main/java/subway/domain/LineName.java @@ -0,0 +1,36 @@ +package subway.domain; + +import java.util.Objects; + +public class LineName { + private static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다. 다시 입력하세요."; + private static final int NAME_LENGTH_LIMIT = 2; + + private String name; + + public LineName(String name) { + if (name.length() < NAME_LENGTH_LIMIT) { + throw new IllegalArgumentException(NAME_LENGTH_LIMIT_ERROR); + } + this.name = name; + } + + @Override + public boolean equals(Object object) { + if (object instanceof LineName) { + LineName anotherName = (LineName) object; + return name.equals(anotherName.name); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public String toString() { + return name; + } +} diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 49132ddb6..477dd0257 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -8,6 +8,25 @@ public class LineRepository { private static final List lines = new ArrayList<>(); + public static void init() { + Line line1 = new Line(new LineName("2호선")); + line1.addStations(new Station(new StationName("교대역"))); + line1.addStations(new Station(new StationName("강남역"))); + line1.addStations(new Station(new StationName("역삼역"))); + Line line2 = new Line(new LineName("3호선")); + line2.addStations(new Station(new StationName("교대역"))); + line2.addStations(new Station(new StationName("남부터미널역"))); + line2.addStations(new Station(new StationName("양재역"))); + line2.addStations(new Station(new StationName("매봉역"))); + Line line3 = new Line(new LineName("신분당선")); + line3.addStations(new Station(new StationName("강남역"))); + line3.addStations(new Station(new StationName("양재역"))); + line3.addStations(new Station(new StationName("양재시민의숲역"))); + lines.add(line1); + lines.add(line2); + lines.add(line3); + } + public static List lines() { return Collections.unmodifiableList(lines); } diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..5cff72062 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,15 +1,14 @@ package subway.domain; public class Station { - private String name; + private StationName name; - public Station(String name) { + public Station(StationName name) { this.name = name; } - public String getName() { + public StationName getName() { return name; } - // 추가 기능 구현 } diff --git a/src/main/java/subway/domain/StationName.java b/src/main/java/subway/domain/StationName.java new file mode 100644 index 000000000..cb955e303 --- /dev/null +++ b/src/main/java/subway/domain/StationName.java @@ -0,0 +1,36 @@ +package subway.domain; + +import java.util.Objects; + +public class StationName { + private static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다. 다시 입력하세요."; + private static final int NAME_LENGTH_LIMIT = 2; + + private String name; + + public StationName(String name) { + if (name.length() < NAME_LENGTH_LIMIT) { + throw new IllegalArgumentException(NAME_LENGTH_LIMIT_ERROR); + } + this.name = name; + } + + @Override + public boolean equals(Object object) { + if (object instanceof StationName) { + StationName anotherName = (StationName) object; + return name.equals(anotherName.name); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public String toString() { + return name; + } +} diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index b7245c0f3..f71a02ab0 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -8,6 +8,16 @@ public class StationRepository { private static final List stations = new ArrayList<>(); + public static void init() { + stations.add(new Station(new StationName("교대역"))); + stations.add(new Station(new StationName("강남역"))); + stations.add(new Station(new StationName("역삼역"))); + stations.add(new Station(new StationName("남부터미널역"))); + stations.add(new Station(new StationName("양재역"))); + stations.add(new Station(new StationName("양재시민의숲역"))); + stations.add(new Station(new StationName("매봉역"))); + } + public static List stations() { return Collections.unmodifiableList(stations); } From 14b3ba3921a78e8667d3e82057849752aa413e21 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 16:59:43 +0900 Subject: [PATCH 03/32] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EC=A1=B0=ED=9A=8C=20=EB=B0=8F=20=EB=A9=94=EB=89=B4?= =?UTF-8?q?=20=EC=84=A0=ED=83=9D=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- src/main/java/subway/Application.java | 3 +++ src/main/java/subway/Subway.java | 11 ++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7b4a84ed5..a5cb1248a 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ - [X] 역 정보 초기 설정하는 기능 -- [ ] 메인 화면 조회 +- [X] 메인 화면 조회 -- [ ] 메인 기능 선택 +- [X] 메인 기능 선택 - [ ] 예외사항: 선택할 기능은 1 - 4, Q만 가능 - [ ] 지하철 역 관리 기능 선택 diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index e7dc70c6d..25e23bbfe 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -6,5 +6,8 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); Subway subway = new Subway(scanner); + while (true) { + String state = subway.selectState(); + } } } diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java index 4e9a63ddc..115682dd5 100644 --- a/src/main/java/subway/Subway.java +++ b/src/main/java/subway/Subway.java @@ -6,6 +6,9 @@ import java.util.Scanner; public class Subway { + private static final String MAIN_MENU = "## 메인 화면\n1. 역 관리\n2. 노선 관리\n3. 구간 관리\n" + + "4. 지하철 노선도 출력\nQ. 종료\n"; + private Scanner scanner; public Subway(Scanner scanner) { @@ -14,4 +17,10 @@ public Subway(Scanner scanner) { LineRepository.init(); } -} + public String selectState() { + System.out.println(MAIN_MENU); + String menu = scanner.next(); + return menu; + } + +} \ No newline at end of file From 3822331dd1879d3518758f736a9a08fb44707f69 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 17:12:47 +0900 Subject: [PATCH 04/32] =?UTF-8?q?feat:=201=20-=204,=20Q=EB=A7=8C=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=20=EA=B0=80=EB=8A=A5=ED=95=9C=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EC=B2=98=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84(=EB=A9=94=EC=9D=B8=20=ED=99=94=EB=A9=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/subway/Subway.java | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a5cb1248a..c20cafe76 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ - [X] 메인 화면 조회 - [X] 메인 기능 선택 - - [ ] 예외사항: 선택할 기능은 1 - 4, Q만 가능 + - [X] 예외사항: 선택할 기능은 1 - 4, Q만 가능 - [ ] 지하철 역 관리 기능 선택 - [ ] 예외사항: 선택할 기능은 1 - 3, B만 가능 diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java index 115682dd5..5da54b80f 100644 --- a/src/main/java/subway/Subway.java +++ b/src/main/java/subway/Subway.java @@ -3,16 +3,21 @@ import subway.domain.LineRepository; import subway.domain.StationRepository; +import java.util.HashMap; +import java.util.Map; import java.util.Scanner; public class Subway { private static final String MAIN_MENU = "## 메인 화면\n1. 역 관리\n2. 노선 관리\n3. 구간 관리\n" + "4. 지하철 노선도 출력\nQ. 종료\n"; + private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; private Scanner scanner; + private Map menus = new HashMap<>(); public Subway(Scanner scanner) { this.scanner = scanner; + initSubway(); StationRepository.init(); LineRepository.init(); } @@ -20,7 +25,23 @@ public Subway(Scanner scanner) { public String selectState() { System.out.println(MAIN_MENU); String menu = scanner.next(); + try { + if (!menus.containsKey(menu)) { + throw new IllegalArgumentException(WRONG_STATE_TRY_AGAIN); + } + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return selectState(); + } return menu; } + private void initSubway() { + menus.put("1", "1"); + menus.put("2", "2"); + menus.put("3", "3"); + menus.put("4", "4"); + menus.put("Q", "Q"); + } + } \ No newline at end of file From 1422cc7a5254462ae7a20f0643bc59d5fad4da6b Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 17:45:33 +0900 Subject: [PATCH 05/32] =?UTF-8?q?feat:=20=EC=97=AD=20=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 - 3, B만 가능하도록 예외처리 --- README.md | 4 +- src/main/java/subway/Application.java | 10 ++++ src/main/java/subway/InputManager.java | 7 +++ src/main/java/subway/InputStationManager.java | 58 +++++++++++++++++++ src/main/java/subway/Subway.java | 19 ++++-- 5 files changed, 91 insertions(+), 7 deletions(-) create mode 100644 src/main/java/subway/InputManager.java create mode 100644 src/main/java/subway/InputStationManager.java diff --git a/README.md b/README.md index c20cafe76..ea9fb41a6 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ - [X] 메인 기능 선택 - [X] 예외사항: 선택할 기능은 1 - 4, Q만 가능 -- [ ] 지하철 역 관리 기능 선택 - - [ ] 예외사항: 선택할 기능은 1 - 3, B만 가능 +- [X] 지하철 역 관리 기능 선택 + - [X] 예외사항: 선택할 기능은 1 - 3, B만 가능 - [ ] 지하철 역을 등록 - [ ] 예외사항: 역 이름은 2글자 이상이어야 한다. diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 25e23bbfe..b8638801a 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -3,11 +3,21 @@ import java.util.Scanner; public class Application { + private static final String APPLICATION_QUIT = "Q"; + private static final String SUBWAY_LINEMAP_MENU = "4"; + public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); Subway subway = new Subway(scanner); while (true) { String state = subway.selectState(); + if (state.equals(APPLICATION_QUIT)) { + + } + if (state.equals(SUBWAY_LINEMAP_MENU)) { + + } + ((InputManager) subway.getMenus(state)).selectMenu(); } } } diff --git a/src/main/java/subway/InputManager.java b/src/main/java/subway/InputManager.java new file mode 100644 index 000000000..225ce5083 --- /dev/null +++ b/src/main/java/subway/InputManager.java @@ -0,0 +1,7 @@ +package subway; + +public interface InputManager { + void register(); + void delete(); + void selectMenu(); +} diff --git a/src/main/java/subway/InputStationManager.java b/src/main/java/subway/InputStationManager.java new file mode 100644 index 000000000..889639924 --- /dev/null +++ b/src/main/java/subway/InputStationManager.java @@ -0,0 +1,58 @@ +package subway; + +import java.util.Arrays; +import java.util.Scanner; + +public class InputStationManager implements InputManager { + private static final String STATION_MAIN_MENU = "## 역 관리 화면\n1. 역 등록\n" + + "2. 역 삭제\n3. 역 조회\nB. 돌아가기\n"; + private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; + + private Scanner scanner; + + private enum Menu { + REGISTER("1"), + DELETE("2"), + INQUIRY("3"), + BACK("B"); + + private final String name; + + Menu(String name) { + this.name = name; + } + public static void execute(String input) { + Arrays.stream(values()) + .filter(value -> value.name.equals(input)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)); + } + } + + public InputStationManager(Scanner scanner) { + this.scanner = scanner; + } + + @Override + public void selectMenu() { + try { + System.out.println(STATION_MAIN_MENU); + String state = scanner.next(); + Menu.execute(state); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + selectMenu(); + } + } + + @Override + public void register() { + + } + + @Override + public void delete() { + + } + +} diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java index 5da54b80f..7e19842c0 100644 --- a/src/main/java/subway/Subway.java +++ b/src/main/java/subway/Subway.java @@ -11,6 +11,11 @@ public class Subway { private static final String MAIN_MENU = "## 메인 화면\n1. 역 관리\n2. 노선 관리\n3. 구간 관리\n" + "4. 지하철 노선도 출력\nQ. 종료\n"; private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; + private static final String ONE = "1"; + private static final String TOW = "2"; + private static final String THREE = "3"; + private static final String FOUR = "4"; + private static final String APPLICATION_QUIT = "Q"; private Scanner scanner; private Map menus = new HashMap<>(); @@ -37,11 +42,15 @@ public String selectState() { } private void initSubway() { - menus.put("1", "1"); - menus.put("2", "2"); - menus.put("3", "3"); - menus.put("4", "4"); - menus.put("Q", "Q"); + menus.put(ONE, new InputStationManager(scanner)); + menus.put(TOW, "2"); + menus.put(THREE, "3"); + menus.put(FOUR, "4"); + menus.put(APPLICATION_QUIT, "Q"); + } + + public Object getMenus(String name) { + return menus.get(name); } } \ No newline at end of file From 28f12aaacb21d93d924ae2c636f59221fe100d2d Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 18:06:55 +0900 Subject: [PATCH 06/32] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EB=93=B1=EB=A1=9D=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 지하철 역 이름은 중복될 수 없다(예외 처리) --- README.md | 6 ++-- src/main/java/subway/InputStationManager.java | 35 +++++++++++++++---- src/main/java/subway/Subway.java | 1 + src/main/java/subway/SubwayManager.java | 15 ++++++++ src/main/java/subway/domain/LineName.java | 2 +- src/main/java/subway/domain/Station.java | 16 +++++++++ src/main/java/subway/domain/StationName.java | 2 +- 7 files changed, 65 insertions(+), 12 deletions(-) create mode 100644 src/main/java/subway/SubwayManager.java diff --git a/README.md b/README.md index ea9fb41a6..7c0bcc1b1 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ - [X] 지하철 역 관리 기능 선택 - [X] 예외사항: 선택할 기능은 1 - 3, B만 가능 -- [ ] 지하철 역을 등록 - - [ ] 예외사항: 역 이름은 2글자 이상이어야 한다. - - [ ] 예외사항: 지하철 역 이름은 중복될 수 없다. +- [X] 지하철 역을 등록 + - [X] 예외사항: 역 이름은 2글자 이상이어야 한다. + - [X] 예외사항: 지하철 역 이름은 중복될 수 없다. - [ ] 지하철 역을 삭제 - [ ] 예외사항: 노선에 등록된 역은 삭제할 수 없다. diff --git a/src/main/java/subway/InputStationManager.java b/src/main/java/subway/InputStationManager.java index 889639924..0ed0d120d 100644 --- a/src/main/java/subway/InputStationManager.java +++ b/src/main/java/subway/InputStationManager.java @@ -1,5 +1,9 @@ package subway; +import subway.domain.Station; +import subway.domain.StationName; +import subway.domain.StationRepository; + import java.util.Arrays; import java.util.Scanner; @@ -7,25 +11,31 @@ public class InputStationManager implements InputManager { private static final String STATION_MAIN_MENU = "## 역 관리 화면\n1. 역 등록\n" + "2. 역 삭제\n3. 역 조회\nB. 돌아가기\n"; private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; + private static final String INPUT_STATION_TO_ENROLL = "## 등록할 역 이름을 입력하세요."; + private static final String DUPLICATED_TRY_AGAIN = "[ERROR] 중복됩니다."; + private static final String STATION_ENROLLED = "\n[INFO] 지하철 역이 등록되었습니다.\n"; private Scanner scanner; private enum Menu { - REGISTER("1"), - DELETE("2"), - INQUIRY("3"), - BACK("B"); + REGISTER("1", ((InputStationManager) SubwayManager.getMenus("1"))::register); +// DELETE("2"), +// INQUIRY("3"), +// BACK("B"); private final String name; + private final Runnable runnable; - Menu(String name) { + Menu(String name, Runnable runnable) { this.name = name; + this.runnable = runnable; } public static void execute(String input) { Arrays.stream(values()) .filter(value -> value.name.equals(input)) .findFirst() - .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)); + .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)) + .runnable.run(); } } @@ -47,7 +57,18 @@ public void selectMenu() { @Override public void register() { - + try { + System.out.println(INPUT_STATION_TO_ENROLL); + Station station = new Station(new StationName(scanner.next())); + if (StationRepository.stations().contains(station)) { + throw new IllegalArgumentException(DUPLICATED_TRY_AGAIN); + } + StationRepository.addStation(station); + System.out.println(STATION_ENROLLED); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + register(); + } } @Override diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java index 7e19842c0..a3fdb688c 100644 --- a/src/main/java/subway/Subway.java +++ b/src/main/java/subway/Subway.java @@ -47,6 +47,7 @@ private void initSubway() { menus.put(THREE, "3"); menus.put(FOUR, "4"); menus.put(APPLICATION_QUIT, "Q"); + SubwayManager.initSubwayManager(menus); } public Object getMenus(String name) { diff --git a/src/main/java/subway/SubwayManager.java b/src/main/java/subway/SubwayManager.java new file mode 100644 index 000000000..968c05de1 --- /dev/null +++ b/src/main/java/subway/SubwayManager.java @@ -0,0 +1,15 @@ +package subway; + +import java.util.Map; + +public class SubwayManager { + private static Map menus; + + public static void initSubwayManager(Map menus) { + SubwayManager.menus = menus; + } + + public static Object getMenus(String name) { + return menus.get(name); + } +} diff --git a/src/main/java/subway/domain/LineName.java b/src/main/java/subway/domain/LineName.java index bcdb15508..185b55a4e 100644 --- a/src/main/java/subway/domain/LineName.java +++ b/src/main/java/subway/domain/LineName.java @@ -3,7 +3,7 @@ import java.util.Objects; public class LineName { - private static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다. 다시 입력하세요."; + private static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다."; private static final int NAME_LENGTH_LIMIT = 2; private String name; diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index 5cff72062..8dc5c7d54 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,5 +1,7 @@ package subway.domain; +import java.util.Objects; + public class Station { private StationName name; @@ -11,4 +13,18 @@ public StationName getName() { return name; } + @Override + public boolean equals(Object object) { + if (object instanceof Station) { + Station anotherStation = (Station) object; + return name.equals(anotherStation.name); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + } diff --git a/src/main/java/subway/domain/StationName.java b/src/main/java/subway/domain/StationName.java index cb955e303..618eb2604 100644 --- a/src/main/java/subway/domain/StationName.java +++ b/src/main/java/subway/domain/StationName.java @@ -3,7 +3,7 @@ import java.util.Objects; public class StationName { - private static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다. 다시 입력하세요."; + private static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다."; private static final int NAME_LENGTH_LIMIT = 2; private String name; From 580b87e09c75b6fe365d1c02538ec3eb4f81939d Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 18:27:16 +0900 Subject: [PATCH 07/32] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EC=82=AD=EC=A0=9C=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 노선에 등록된 역은 삭제할 수 없다(예외 처리) 삭제할 역이 역 목록에 있어야 한다(예외 처리) --- README.md | 6 +++--- src/main/java/subway/InputStationManager.java | 20 ++++++++++++++++--- src/main/java/subway/domain/Station.java | 5 +++++ .../java/subway/domain/StationRepository.java | 9 +++++++++ 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7c0bcc1b1..39bd16954 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,9 @@ - [X] 예외사항: 역 이름은 2글자 이상이어야 한다. - [X] 예외사항: 지하철 역 이름은 중복될 수 없다. -- [ ] 지하철 역을 삭제 - - [ ] 예외사항: 노선에 등록된 역은 삭제할 수 없다. - - [ ] 예외사항: 삭제할 역이 역 목록에 있어야 한다. +- [X] 지하철 역을 삭제 + - [X] 예외사항: 노선에 등록된 역은 삭제할 수 없다. + - [X] 예외사항: 삭제할 역이 역 목록에 있어야 한다. - [ ] 지하철 역 목록 조회 diff --git a/src/main/java/subway/InputStationManager.java b/src/main/java/subway/InputStationManager.java index 0ed0d120d..83a566e4e 100644 --- a/src/main/java/subway/InputStationManager.java +++ b/src/main/java/subway/InputStationManager.java @@ -14,12 +14,15 @@ public class InputStationManager implements InputManager { private static final String INPUT_STATION_TO_ENROLL = "## 등록할 역 이름을 입력하세요."; private static final String DUPLICATED_TRY_AGAIN = "[ERROR] 중복됩니다."; private static final String STATION_ENROLLED = "\n[INFO] 지하철 역이 등록되었습니다.\n"; + private static final String INPUT_STATION_TO_DELETE = "## 삭제할 역 이름을 입력하세요."; + private static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나 이미 노선에 등록되어 있습니다."; + private static final String STATION_DELETED = "\n[INFO] 지하철 역이 삭제되었습니다.\n"; private Scanner scanner; private enum Menu { - REGISTER("1", ((InputStationManager) SubwayManager.getMenus("1"))::register); -// DELETE("2"), + REGISTER("1", ((InputStationManager) SubwayManager.getMenus("1"))::register), + DELETE("2", ((InputStationManager) SubwayManager.getMenus("1"))::delete); // INQUIRY("3"), // BACK("B"); @@ -73,7 +76,18 @@ public void register() { @Override public void delete() { - + try { + System.out.println(INPUT_STATION_TO_DELETE); + String stationToDelete = scanner.next(); + if (StationRepository.isRegisteredStation(new Station(new StationName(stationToDelete))) + || !StationRepository.deleteStation(stationToDelete)) { + throw new IllegalArgumentException(NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN); + } + System.out.println(STATION_DELETED); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + delete(); + } } } diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index 8dc5c7d54..1599f6e96 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -4,6 +4,7 @@ public class Station { private StationName name; + private boolean register; public Station(StationName name) { this.name = name; @@ -27,4 +28,8 @@ public int hashCode() { return Objects.hash(name); } + public boolean isRegister() { + return register; + } + } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index f71a02ab0..ddfed802d 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -29,4 +29,13 @@ public static void addStation(Station station) { public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + + public static boolean isRegisteredStation(Station anotherStation) { + for (Station station : stations) { + if (station.equals(anotherStation) && station.isRegister()) { + return true; + } + } + return false; + } } From 3e75c787e370f06203be2d903af0684bfca69c34 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 18:48:51 +0900 Subject: [PATCH 08/32] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/subway/InputStationManager.java | 9 ++++++--- src/main/java/subway/domain/Line.java | 1 + src/main/java/subway/domain/Station.java | 9 +++++++++ src/main/java/subway/domain/StationRepository.java | 12 +++++++++++- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 39bd16954..79043f9c2 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ - [X] 예외사항: 노선에 등록된 역은 삭제할 수 없다. - [X] 예외사항: 삭제할 역이 역 목록에 있어야 한다. -- [ ] 지하철 역 목록 조회 +- [X] 지하철 역 목록 조회 - [ ] 지하철 노선 관리 기능 선택 - [ ] 예외사항: 선택할 기능은 1 - 3, B만 가능 diff --git a/src/main/java/subway/InputStationManager.java b/src/main/java/subway/InputStationManager.java index 83a566e4e..e731d7692 100644 --- a/src/main/java/subway/InputStationManager.java +++ b/src/main/java/subway/InputStationManager.java @@ -17,13 +17,16 @@ public class InputStationManager implements InputManager { private static final String INPUT_STATION_TO_DELETE = "## 삭제할 역 이름을 입력하세요."; private static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나 이미 노선에 등록되어 있습니다."; private static final String STATION_DELETED = "\n[INFO] 지하철 역이 삭제되었습니다.\n"; + private static final String STATION_MENU_NUMBER = "1"; private Scanner scanner; private enum Menu { - REGISTER("1", ((InputStationManager) SubwayManager.getMenus("1"))::register), - DELETE("2", ((InputStationManager) SubwayManager.getMenus("1"))::delete); -// INQUIRY("3"), + REGISTER("1", + ((InputStationManager) SubwayManager.getMenus(STATION_MENU_NUMBER))::register), + DELETE("2", + ((InputStationManager) SubwayManager.getMenus(STATION_MENU_NUMBER))::delete), + INQUIRY("3", StationRepository::printStation); // BACK("B"); private final String name; diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 7c10ab947..9d8a03a6e 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -16,6 +16,7 @@ public LineName getName() { } public void addStations(Station station) { + station.setRegister(true); stations.add(station); } diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index 1599f6e96..058bb0918 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -32,4 +32,13 @@ public boolean isRegister() { return register; } + public boolean setRegister(boolean register) { + return this.register = register; + } + + @Override + public String toString() { + return "[INFO]" + name.toString(); + } + } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index ddfed802d..19671476c 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -6,6 +6,8 @@ import java.util.Objects; public class StationRepository { + public static final String STATION_LIST = "\n## 역 목록\n"; + private static final List stations = new ArrayList<>(); public static void init() { @@ -27,7 +29,7 @@ public static void addStation(Station station) { } public static boolean deleteStation(String name) { - return stations.removeIf(station -> Objects.equals(station.getName(), name)); + return stations.removeIf(station -> Objects.equals(station.getName().toString(), name)); } public static boolean isRegisteredStation(Station anotherStation) { @@ -38,4 +40,12 @@ public static boolean isRegisteredStation(Station anotherStation) { } return false; } + + public static void printStation() { + System.out.println(STATION_LIST); + for (Station station : stations) { + System.out.println(station); + } + System.out.println(); + } } From 5bffe28bf1f76c2317dcc6c27a0a3a84564ba1d6 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 19:03:06 +0900 Subject: [PATCH 09/32] =?UTF-8?q?feat:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 메인 화면으로 되돌아가기 기능 --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 79043f9c2..28717607a 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,8 @@ - [X] 지하철 역 목록 조회 +- [X] 메인 화면으로 되돌아가기 + - [ ] 지하철 노선 관리 기능 선택 - [ ] 예외사항: 선택할 기능은 1 - 3, B만 가능 @@ -36,6 +38,8 @@ - [ ] 지하철 노선 조회 +- [ ] 메인 화면으로 되돌아가기 + - [ ] 지하철 구관 관리 기능 선택 - [ ] 예외사항: 선택할 기능은 1 - 2, B만 가능 @@ -53,5 +57,7 @@ - [ ] 예외사항: 삭제할 역은 2글자 이상이어야한다. - [ ] 예외사항: 삭제할 역은 선택한 노선에 등록된 역 이어야한다. - [ ] 예외사항: 노선에 포함된 역이 2개 이하일 때는 삭제할 수 없다. + +- [ ] 메인 화면으로 되돌아가기 -- [ ] 지하철 노선도 출력 +- [ ] 지하철 노선도 출력 \ No newline at end of file From 823eb84e3f7030e601c37ff78003e9b26cbf46f1 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 19:05:10 +0900 Subject: [PATCH 10/32] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EC=9C=BC=EB=A1=9C=20=EB=90=98=EB=8F=8C=EC=95=84?= =?UTF-8?q?=EA=B0=80=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/InputStationManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/InputStationManager.java b/src/main/java/subway/InputStationManager.java index e731d7692..2392f9a8b 100644 --- a/src/main/java/subway/InputStationManager.java +++ b/src/main/java/subway/InputStationManager.java @@ -26,8 +26,8 @@ private enum Menu { ((InputStationManager) SubwayManager.getMenus(STATION_MENU_NUMBER))::register), DELETE("2", ((InputStationManager) SubwayManager.getMenus(STATION_MENU_NUMBER))::delete), - INQUIRY("3", StationRepository::printStation); -// BACK("B"); + INQUIRY("3", StationRepository::printStation), + BACK("B", System.out::println); private final String name; private final Runnable runnable; From d0bcb003479699068fb01e52fb53504c5600f1cc Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 19:17:31 +0900 Subject: [PATCH 11/32] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EC=84=A0=ED=83=9D=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 - 3, B만 가능하도록 예외 처리 --- README.md | 4 +- src/main/java/subway/InputLineManager.java | 57 ++++++++++++++++++++++ src/main/java/subway/InputManager.java | 2 +- src/main/java/subway/Subway.java | 2 +- 4 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 src/main/java/subway/InputLineManager.java diff --git a/README.md b/README.md index 28717607a..d132ddc63 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,8 @@ - [X] 메인 화면으로 되돌아가기 -- [ ] 지하철 노선 관리 기능 선택 - - [ ] 예외사항: 선택할 기능은 1 - 3, B만 가능 +- [X] 지하철 노선 관리 기능 선택 + - [X] 예외사항: 선택할 기능은 1 - 3, B만 가능 - [ ] 지하철 노선 등록 - [ ] 예외사항: 노선 이름은 2글자 이상이어야 한다. diff --git a/src/main/java/subway/InputLineManager.java b/src/main/java/subway/InputLineManager.java new file mode 100644 index 000000000..78c452836 --- /dev/null +++ b/src/main/java/subway/InputLineManager.java @@ -0,0 +1,57 @@ +package subway; + +import java.util.Arrays; +import java.util.Scanner; + +public class InputLineManager implements InputManager { + private static final String LINE_MAIN_MENU = "## 노선 관리 화면\n1. 노선 등록\n" + + "2. 노선 삭제\n3. 노선 조회\nB. 돌아가기\n"; + private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; + + private Scanner scanner; + + private enum Menu { + REGISTER("1"), + DELETE("2"), + INQUIRY("3"), + BACK("B"); + + private final String name; + Menu(String name) { + this.name = name; + } + public static void execute(String input) { + Arrays.stream(values()) + .filter(value -> value.name.equals(input)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)); + } + } + + public InputLineManager(Scanner scanner) { + this.scanner = scanner; + } + + @Override + public void selectMenu() { + try { + System.out.println(LINE_MAIN_MENU); + String state = scanner.next(); + Menu.execute(state); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + selectMenu(); + } + } + + @Override + public void register() { + + } + + @Override + public void delete() { + + } + +} diff --git a/src/main/java/subway/InputManager.java b/src/main/java/subway/InputManager.java index 225ce5083..e4cb3e9e8 100644 --- a/src/main/java/subway/InputManager.java +++ b/src/main/java/subway/InputManager.java @@ -1,7 +1,7 @@ package subway; public interface InputManager { + void selectMenu(); void register(); void delete(); - void selectMenu(); } diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java index a3fdb688c..a32f0d86f 100644 --- a/src/main/java/subway/Subway.java +++ b/src/main/java/subway/Subway.java @@ -43,7 +43,7 @@ public String selectState() { private void initSubway() { menus.put(ONE, new InputStationManager(scanner)); - menus.put(TOW, "2"); + menus.put(TOW, new InputLineManager(scanner)); menus.put(THREE, "3"); menus.put(FOUR, "4"); menus.put(APPLICATION_QUIT, "Q"); From aaeb26eb17d726fbf4598695c70135f77bff12e0 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 19:29:57 +0900 Subject: [PATCH 12/32] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=20=EB=93=B1=EB=A1=9D=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 노선 이름은 2글자 이상이어야 한다(예외 처리) 노선 이름은 중복될 수 없다(예외 처리) --- README.md | 6 ++-- src/main/java/subway/InputLineManager.java | 37 ++++++++++++++++++---- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index d132ddc63..56e652eab 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,9 @@ - [X] 지하철 노선 관리 기능 선택 - [X] 예외사항: 선택할 기능은 1 - 3, B만 가능 -- [ ] 지하철 노선 등록 - - [ ] 예외사항: 노선 이름은 2글자 이상이어야 한다. - - [ ] 예외사항: 노선 이름은 중복될 수 없다. +- [X] 지하철 노선 등록 + - [X] 예외사항: 노선 이름은 2글자 이상이어야 한다. + - [X] 예외사항: 노선 이름은 중복될 수 없다. - [ ] 노선 등록 시 상행 종점역과 하행 종점역을 등록 - [ ] 예외사항: 상행 종점역과 하행 종점역은 2글자 이상이어야 한다. diff --git a/src/main/java/subway/InputLineManager.java b/src/main/java/subway/InputLineManager.java index 78c452836..b5061e750 100644 --- a/src/main/java/subway/InputLineManager.java +++ b/src/main/java/subway/InputLineManager.java @@ -1,5 +1,9 @@ package subway; +import subway.domain.Line; +import subway.domain.LineName; +import subway.domain.LineRepository; + import java.util.Arrays; import java.util.Scanner; @@ -7,24 +11,32 @@ public class InputLineManager implements InputManager { private static final String LINE_MAIN_MENU = "## 노선 관리 화면\n1. 노선 등록\n" + "2. 노선 삭제\n3. 노선 조회\nB. 돌아가기\n"; private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; + private static final String INPUT_LINE_TO_ENROLL = "## 등록할 노선 이름을 입력하세요."; + private static final String DUPLICATED_TRY_AGAIN = "[ERROR] 중복됩니다."; + private static final String INPUT_START_STATION_TO_ENROLL = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; + public static final String LINE_MENU = "2"; private Scanner scanner; private enum Menu { - REGISTER("1"), - DELETE("2"), - INQUIRY("3"), - BACK("B"); + REGISTER("1", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::register); +// DELETE("2"), +// INQUIRY("3"), +// BACK("B"); private final String name; - Menu(String name) { + private final Runnable runnable; + + Menu(String name, Runnable runnable) { this.name = name; + this.runnable = runnable; } public static void execute(String input) { Arrays.stream(values()) .filter(value -> value.name.equals(input)) .findFirst() - .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)); + .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)) + .runnable.run(); } } @@ -46,7 +58,18 @@ public void selectMenu() { @Override public void register() { - + try { + System.out.println(INPUT_LINE_TO_ENROLL); + Line line = new Line(new LineName(scanner.next())); + if (LineRepository.lines().contains(line)) { + throw new IllegalArgumentException(DUPLICATED_TRY_AGAIN); + } + System.out.println(INPUT_START_STATION_TO_ENROLL); + LineRepository.addLine(line); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + register(); + } } @Override From 5b85b0d98bc001707b8e5b3906cb125fea3706db Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 19:54:57 +0900 Subject: [PATCH 13/32] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=8B=9C,=20=EC=83=81=ED=96=89=20=EC=A2=85?= =?UTF-8?q?=EC=A0=90=EC=97=AD=EA=B3=BC=20=ED=95=98=ED=96=89=20=EC=A2=85?= =?UTF-8?q?=EC=A0=90=EC=97=AD=EC=9D=84=20=EB=93=B1=EB=A1=9D=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 상행 종점역과 하행 종점역은 2글자 이상이어야 한다(예외 처리) 상행 종점역과 하행 종점역이 같지 않다(예외 처리) 등록할 역이 역 목록에 있어야한다(예외 처리) --- README.md | 8 ++--- src/main/java/subway/InputLineManager.java | 41 +++++++++++++++++++--- src/main/java/subway/domain/Line.java | 15 ++++++++ 3 files changed, 56 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 56e652eab..a528663ea 100644 --- a/README.md +++ b/README.md @@ -31,10 +31,10 @@ - [X] 예외사항: 노선 이름은 2글자 이상이어야 한다. - [X] 예외사항: 노선 이름은 중복될 수 없다. -- [ ] 노선 등록 시 상행 종점역과 하행 종점역을 등록 - - [ ] 예외사항: 상행 종점역과 하행 종점역은 2글자 이상이어야 한다. - - [ ] 예외사항: 상행 좀점역과 하행 종점역이 같지 않다. - - [ ] 예외사항: 등록할 역이 역 목록에 있어야한다. +- [X] 노선 등록 시 상행 종점역과 하행 종점역을 등록 + - [X] 예외사항: 상행 종점역과 하행 종점역은 2글자 이상이어야 한다. + - [X] 예외사항: 상행 종점역과 하행 종점역이 같지 않다. + - [X] 예외사항: 등록할 역이 역 목록에 있어야한다. - [ ] 지하철 노선 조회 diff --git a/src/main/java/subway/InputLineManager.java b/src/main/java/subway/InputLineManager.java index b5061e750..9560de722 100644 --- a/src/main/java/subway/InputLineManager.java +++ b/src/main/java/subway/InputLineManager.java @@ -1,8 +1,6 @@ package subway; -import subway.domain.Line; -import subway.domain.LineName; -import subway.domain.LineRepository; +import subway.domain.*; import java.util.Arrays; import java.util.Scanner; @@ -15,6 +13,10 @@ public class InputLineManager implements InputManager { private static final String DUPLICATED_TRY_AGAIN = "[ERROR] 중복됩니다."; private static final String INPUT_START_STATION_TO_ENROLL = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; public static final String LINE_MENU = "2"; + public static final String LINE_ENROLLED = "\n[INFO] 지하철 노선이 등록되었습니다.\n"; + public static final String NOTHING_TRY_AGAIN = "[ERROR] 해당 역이 없습니다."; + public static final String NOTHING_OR_START_END_SAME_TRY_AGAIN = "[ERROR] 해당 역이 없거나 상행 종점, 하행 종점역이 같습니다."; + public static final String INPUT_END_STATION_TO_ENROLL = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; private Scanner scanner; @@ -64,14 +66,45 @@ public void register() { if (LineRepository.lines().contains(line)) { throw new IllegalArgumentException(DUPLICATED_TRY_AGAIN); } - System.out.println(INPUT_START_STATION_TO_ENROLL); LineRepository.addLine(line); + registerStartStation(line); + System.out.println(LINE_ENROLLED); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); register(); } } + private void registerStartStation(Line line) { + try { + System.out.println(INPUT_START_STATION_TO_ENROLL); + Station station = new Station(new StationName(scanner.next())); + if (!StationRepository.stations().contains(station)) { + throw new IllegalArgumentException(NOTHING_TRY_AGAIN); + } + registerEndStation(line, station); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + registerStartStation(line); + } + } + + private void registerEndStation(Line line, Station startStation) { + try { + System.out.println(INPUT_END_STATION_TO_ENROLL); + Station endStation = new Station(new StationName(scanner.next())); + if (!StationRepository.stations().contains(endStation) + || startStation.equals(endStation)) { + throw new IllegalArgumentException(NOTHING_OR_START_END_SAME_TRY_AGAIN); + } + line.addStations(startStation); + line.addStations(endStation); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + registerEndStation(line, startStation); + } + } + @Override public void delete() { diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 9d8a03a6e..8fb5bf3f6 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class Line { private LineName name; @@ -20,4 +21,18 @@ public void addStations(Station station) { stations.add(station); } + @Override + public boolean equals(Object object) { + if (object instanceof Line) { + Line anotherStation = (Line) object; + return name.equals(anotherStation.name); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + } From 9d1d5e2eecf19f58bbe0ad443fa154efa2812ef6 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 20:00:00 +0900 Subject: [PATCH 14/32] =?UTF-8?q?feat:=20=EA=B8=B0=EB=8A=A5=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 지하철 노선 삭제 기능 추가 --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index a528663ea..4b1be1879 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,9 @@ - [X] 예외사항: 상행 종점역과 하행 종점역이 같지 않다. - [X] 예외사항: 등록할 역이 역 목록에 있어야한다. +- [ ] 지하철 노선 삭제 + - [ ] 예외사항: 삭제할 역은 등록된 노선이어야 한다. + - [ ] 지하철 노선 조회 - [ ] 메인 화면으로 되돌아가기 From 37d9db548786fb8f7a254637617db6111a7b847b Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 20:08:06 +0900 Subject: [PATCH 15/32] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=20=EC=82=AD=EC=A0=9C=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 삭제할 역은 등록된 노선이어야 한다(예외 처리) --- README.md | 4 ++-- src/main/java/subway/InputLineManager.java | 20 ++++++++++++++++--- .../java/subway/domain/LineRepository.java | 2 +- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4b1be1879..be35646d6 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,8 @@ - [X] 예외사항: 상행 종점역과 하행 종점역이 같지 않다. - [X] 예외사항: 등록할 역이 역 목록에 있어야한다. -- [ ] 지하철 노선 삭제 - - [ ] 예외사항: 삭제할 역은 등록된 노선이어야 한다. +- [X] 지하철 노선 삭제 + - [X] 예외사항: 삭제할 역은 등록된 노선이어야 한다. - [ ] 지하철 노선 조회 diff --git a/src/main/java/subway/InputLineManager.java b/src/main/java/subway/InputLineManager.java index 9560de722..ff4c2680d 100644 --- a/src/main/java/subway/InputLineManager.java +++ b/src/main/java/subway/InputLineManager.java @@ -17,12 +17,15 @@ public class InputLineManager implements InputManager { public static final String NOTHING_TRY_AGAIN = "[ERROR] 해당 역이 없습니다."; public static final String NOTHING_OR_START_END_SAME_TRY_AGAIN = "[ERROR] 해당 역이 없거나 상행 종점, 하행 종점역이 같습니다."; public static final String INPUT_END_STATION_TO_ENROLL = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; + public static final String INPUT_LINE_TO_DELETE = "## 삭제할 노선 이름을 입력하세요."; + public static final String NOTHING_TO_DELETE_TRY_AGAIN = "[ERROR] 삭제할 노선이 없습니다."; + public static final String LINE_DELETED = "\n[INFO] 지하철 노선이 삭제되었습니다.\n"; private Scanner scanner; private enum Menu { - REGISTER("1", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::register); -// DELETE("2"), + REGISTER("1", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::register), + DELETE("2", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::delete); // INQUIRY("3"), // BACK("B"); @@ -33,6 +36,7 @@ private enum Menu { this.name = name; this.runnable = runnable; } + public static void execute(String input) { Arrays.stream(values()) .filter(value -> value.name.equals(input)) @@ -107,7 +111,17 @@ private void registerEndStation(Line line, Station startStation) { @Override public void delete() { - + try { + System.out.println(INPUT_LINE_TO_DELETE); + String lineToDelete = scanner.next(); + if (!LineRepository.deleteLineByName(new LineName(lineToDelete))) { + throw new IllegalArgumentException(NOTHING_TO_DELETE_TRY_AGAIN); + } + System.out.println(LINE_DELETED); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + delete(); + } } } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 477dd0257..fe7ebcd58 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -35,7 +35,7 @@ public static void addLine(Line line) { lines.add(line); } - public static boolean deleteLineByName(String name) { + public static boolean deleteLineByName(LineName name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } } From 8eb364be277ea05f1d02a70002d9ca66ef4dd945 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 20:17:48 +0900 Subject: [PATCH 16/32] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/subway/InputLineManager.java | 4 ++-- src/main/java/subway/domain/Line.java | 5 +++++ src/main/java/subway/domain/LineRepository.java | 10 ++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index be35646d6..328c56d53 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ - [X] 지하철 노선 삭제 - [X] 예외사항: 삭제할 역은 등록된 노선이어야 한다. -- [ ] 지하철 노선 조회 +- [X] 지하철 노선 조회 - [ ] 메인 화면으로 되돌아가기 diff --git a/src/main/java/subway/InputLineManager.java b/src/main/java/subway/InputLineManager.java index ff4c2680d..b61ddfc62 100644 --- a/src/main/java/subway/InputLineManager.java +++ b/src/main/java/subway/InputLineManager.java @@ -25,8 +25,8 @@ public class InputLineManager implements InputManager { private enum Menu { REGISTER("1", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::register), - DELETE("2", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::delete); -// INQUIRY("3"), + DELETE("2", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::delete), + INQUIRY("3", LineRepository::printLine); // BACK("B"); private final String name; diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 8fb5bf3f6..a8ade0757 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -35,4 +35,9 @@ public int hashCode() { return Objects.hash(name); } + @Override + public String toString() { + return "[INFO] " + name; + } + } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index fe7ebcd58..116522f98 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -6,6 +6,8 @@ import java.util.Objects; public class LineRepository { + private static final String LINE_LIST = "\n## 노선 목록"; + private static final List lines = new ArrayList<>(); public static void init() { @@ -38,4 +40,12 @@ public static void addLine(Line line) { public static boolean deleteLineByName(LineName name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + + public static void printLine() { + System.out.println(LINE_LIST); + for (Line line : lines) { + System.out.println(line.toString()); + } + System.out.println(); + } } From df996644deab5aaa283a889cd1aee2930f2938bc Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 20:20:00 +0900 Subject: [PATCH 17/32] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EC=9C=BC=EB=A1=9C=20=EB=90=98=EB=8F=8C=EC=95=84?= =?UTF-8?q?=EA=B0=80=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/java/subway/InputLineManager.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 328c56d53..2c54964b7 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ - [X] 지하철 노선 조회 -- [ ] 메인 화면으로 되돌아가기 +- [X] 메인 화면으로 되돌아가기 - [ ] 지하철 구관 관리 기능 선택 - [ ] 예외사항: 선택할 기능은 1 - 2, B만 가능 diff --git a/src/main/java/subway/InputLineManager.java b/src/main/java/subway/InputLineManager.java index b61ddfc62..82feb21fa 100644 --- a/src/main/java/subway/InputLineManager.java +++ b/src/main/java/subway/InputLineManager.java @@ -26,8 +26,8 @@ public class InputLineManager implements InputManager { private enum Menu { REGISTER("1", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::register), DELETE("2", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::delete), - INQUIRY("3", LineRepository::printLine); -// BACK("B"); + INQUIRY("3", LineRepository::printLine), + BACK("B", System.out::println); private final String name; private final Runnable runnable; From ab4433fb8764ce6100e68e471235d8877206db77 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 20:26:14 +0900 Subject: [PATCH 18/32] =?UTF-8?q?move:=20README=ED=8C=8C=EC=9D=BC=20docs?= =?UTF-8?q?=20=ED=8F=B4=EB=8D=94=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md => docs/README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename README.md => docs/README.md (100%) diff --git a/README.md b/docs/README.md similarity index 100% rename from README.md rename to docs/README.md From d947fae9ac5f8d07e5386ac1ffa50447402779a4 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 20:39:30 +0900 Subject: [PATCH 19/32] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B0=84=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EC=84=A0=ED=83=9D=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 - 2, B만 가능하도록 예외 처리 --- docs/README.md | 4 +- src/main/java/subway/InputSectionManager.java | 55 +++++++++++++++++++ src/main/java/subway/Subway.java | 2 +- 3 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 src/main/java/subway/InputSectionManager.java diff --git a/docs/README.md b/docs/README.md index 2c54964b7..7ba0b292c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -43,8 +43,8 @@ - [X] 메인 화면으로 되돌아가기 -- [ ] 지하철 구관 관리 기능 선택 - - [ ] 예외사항: 선택할 기능은 1 - 2, B만 가능 +- [X] 지하철 구간 관리 기능 선택 + - [X] 예외사항: 선택할 기능은 1 - 2, B만 가능 - [ ] 지하철 구간 등록 diff --git a/src/main/java/subway/InputSectionManager.java b/src/main/java/subway/InputSectionManager.java new file mode 100644 index 000000000..f7a4522b6 --- /dev/null +++ b/src/main/java/subway/InputSectionManager.java @@ -0,0 +1,55 @@ +package subway; + +import java.util.Arrays; +import java.util.Scanner; + +public class InputSectionManager implements InputManager { + private static final String SECTION_MAIN_MENU = "## 구간 관리 화면\n1. 구간 등록\n2. 구간 삭제\nB. 돌아가기\n"; + private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; + + private Scanner scanner; + + private enum Menu { + REGISTER("1"), + DELETE("2"), + BACK("B"); + + private final String name; + + Menu(String name) { + this.name = name; + } + public static void execute(String input) { + Arrays.stream(values()) + .filter(value -> value.name.equals(input)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)); + } + } + + public InputSectionManager(Scanner scanner) { + this.scanner = scanner; + } + + @Override + public void selectMenu() { + try { + System.out.println(SECTION_MAIN_MENU); + String state = scanner.next(); + Menu.execute(state); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + selectMenu(); + } + } + + @Override + public void register() { + + } + + @Override + public void delete() { + + } +} diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java index a32f0d86f..ae99fa45b 100644 --- a/src/main/java/subway/Subway.java +++ b/src/main/java/subway/Subway.java @@ -44,7 +44,7 @@ public String selectState() { private void initSubway() { menus.put(ONE, new InputStationManager(scanner)); menus.put(TOW, new InputLineManager(scanner)); - menus.put(THREE, "3"); + menus.put(THREE, new InputSectionManager(scanner)); menus.put(FOUR, "4"); menus.put(APPLICATION_QUIT, "Q"); SubwayManager.initSubwayManager(menus); From 75bd1eb0b3b90e2c2fcea08fa323ea147d830dd6 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 20:53:11 +0900 Subject: [PATCH 20/32] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EA=B5=AC=EA=B0=84=20=EB=93=B1=EB=A1=9D=EC=A4=91=20=EB=85=B8?= =?UTF-8?q?=EC=84=A0=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 입력할 노선은 등록된 노선이어야 한다(예외 처리) --- docs/README.md | 4 +-- src/main/java/subway/InputSectionManager.java | 34 +++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/docs/README.md b/docs/README.md index 7ba0b292c..8eb5872b6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -47,10 +47,10 @@ - [X] 예외사항: 선택할 기능은 1 - 2, B만 가능 -- [ ] 지하철 구간 등록 +- [X] 지하철 구간 등록 - [ ] 예외사항: 노선 당 중복된 역을 허용하지 않는다. - [ ] 예외사항: 추가할 역의 이름이 2글자 이상이어야 한다. - - [ ] 예외사항: 입력할 노선은 등록된 노선이어야 한다. + - [X] 예외사항: 입력할 노선은 등록된 노선이어야 한다. - [ ] 예외사항: 입력할 역이름은 2글자 이상이어야 한다. - [ ] 예외사항: 입력할 역이름은 등록된 역이어야 한다. - [ ] 예외사항: 입력할 순서는 1 - (노선에 배정된 역 개수)만 허용한다. diff --git a/src/main/java/subway/InputSectionManager.java b/src/main/java/subway/InputSectionManager.java index f7a4522b6..3d4b89a58 100644 --- a/src/main/java/subway/InputSectionManager.java +++ b/src/main/java/subway/InputSectionManager.java @@ -1,29 +1,40 @@ package subway; +import subway.domain.Line; +import subway.domain.LineName; +import subway.domain.LineRepository; + import java.util.Arrays; import java.util.Scanner; public class InputSectionManager implements InputManager { private static final String SECTION_MAIN_MENU = "## 구간 관리 화면\n1. 구간 등록\n2. 구간 삭제\nB. 돌아가기\n"; private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; + private static final String INPUT_LINE = "## 노선을 입력하세요."; + private static final String SECTION_ENROLLED = "\n[INFO] 구간이 등록되었습니다.\n"; + private static final String LINE_NOTHING_TRY_AGAIN = "[ERROR] 해당 노선이 없습니다."; + private static final String SECTION_MENU = "3"; private Scanner scanner; private enum Menu { - REGISTER("1"), - DELETE("2"), - BACK("B"); + REGISTER("1", ((InputSectionManager) SubwayManager.getMenus(SECTION_MENU))::register); +// DELETE("2"), +// BACK("B"); private final String name; + private final Runnable runnable; - Menu(String name) { + Menu(String name, Runnable runnable) { this.name = name; + this.runnable = runnable; } public static void execute(String input) { Arrays.stream(values()) .filter(value -> value.name.equals(input)) .findFirst() - .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)); + .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)) + .runnable.run(); } } @@ -45,7 +56,18 @@ public void selectMenu() { @Override public void register() { - + try { + System.out.println(INPUT_LINE); + Line line = new Line(new LineName(scanner.next())); + if (!LineRepository.lines().contains(line)) { + throw new IllegalArgumentException(LINE_NOTHING_TRY_AGAIN); + } + System.out.println(SECTION_ENROLLED); + } catch (IllegalArgumentException + e) { + System.out.println(e.getMessage()); + register(); + } } @Override From 035e90172d2d031a771f23ee3400503e81a91c29 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 21:19:22 +0900 Subject: [PATCH 21/32] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B0=84=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=8B=9C,=20=EC=97=AD=EC=9D=84=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 노선 당 중복된 역을 허용하지 않는다(예외 처리) 입력할 역이름은 2글자 이상이어야 한다(예외 처리) 입력할 역이름은 등록된 역이어야 한다(예외 처리) --- docs/README.md | 7 +++---- src/main/java/subway/InputSectionManager.java | 21 ++++++++++++++++--- src/main/java/subway/domain/Line.java | 4 ++++ .../java/subway/domain/LineRepository.java | 9 ++++++++ 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/docs/README.md b/docs/README.md index 8eb5872b6..6a944416d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -48,11 +48,10 @@ - [X] 지하철 구간 등록 - - [ ] 예외사항: 노선 당 중복된 역을 허용하지 않는다. - - [ ] 예외사항: 추가할 역의 이름이 2글자 이상이어야 한다. + - [X] 예외사항: 노선 당 중복된 역을 허용하지 않는다. - [X] 예외사항: 입력할 노선은 등록된 노선이어야 한다. - - [ ] 예외사항: 입력할 역이름은 2글자 이상이어야 한다. - - [ ] 예외사항: 입력할 역이름은 등록된 역이어야 한다. + - [X] 예외사항: 입력할 역이름은 2글자 이상이어야 한다. + - [X] 예외사항: 입력할 역이름은 등록된 역이어야 한다. - [ ] 예외사항: 입력할 순서는 1 - (노선에 배정된 역 개수)만 허용한다. - [ ] 지하철 구간 삭제 diff --git a/src/main/java/subway/InputSectionManager.java b/src/main/java/subway/InputSectionManager.java index 3d4b89a58..a52d53900 100644 --- a/src/main/java/subway/InputSectionManager.java +++ b/src/main/java/subway/InputSectionManager.java @@ -1,8 +1,6 @@ package subway; -import subway.domain.Line; -import subway.domain.LineName; -import subway.domain.LineRepository; +import subway.domain.*; import java.util.Arrays; import java.util.Scanner; @@ -14,6 +12,8 @@ public class InputSectionManager implements InputManager { private static final String SECTION_ENROLLED = "\n[INFO] 구간이 등록되었습니다.\n"; private static final String LINE_NOTHING_TRY_AGAIN = "[ERROR] 해당 노선이 없습니다."; private static final String SECTION_MENU = "3"; + private static final String INPUT_STATION = "## 역이름을 입력하세요."; + private static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나 이미 노선에 등록되어 있습니다."; private Scanner scanner; @@ -62,6 +62,7 @@ public void register() { if (!LineRepository.lines().contains(line)) { throw new IllegalArgumentException(LINE_NOTHING_TRY_AGAIN); } + registerStationInSection(line); System.out.println(SECTION_ENROLLED); } catch (IllegalArgumentException e) { @@ -70,6 +71,20 @@ public void register() { } } + private void registerStationInSection(Line line) { + try { + System.out.println(INPUT_STATION); + Station station = new Station(new StationName(scanner.next())); + if (!StationRepository.stations().contains(station) + || LineRepository.containsStationOfLine(line, station)) { + throw new IllegalArgumentException(NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN); + } + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + registerStationInSection(line); + } + } + @Override public void delete() { diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index a8ade0757..35a49e1c6 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -40,4 +40,8 @@ public String toString() { return "[INFO] " + name; } + public List getStations() { + return stations; + } + } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 116522f98..05217dd6f 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -48,4 +48,13 @@ public static void printLine() { } System.out.println(); } + + public static boolean containsStationOfLine(Line line, Station station) { + for (Line n : lines) { + if (n.equals(line) && n.getStations().contains(station)) { + return true; + } + } + return false; + } } From 6d45b36afe697d48f59b8bd99f6b538ae0f1bbb2 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 21:32:07 +0900 Subject: [PATCH 22/32] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B0=84=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=8B=9C,=20=EC=84=A0=ED=83=9D=ED=95=9C=20?= =?UTF-8?q?=EC=97=AD=EC=9D=84=20=EB=84=A3=EC=9D=84=20=EC=9D=B8=EB=8D=B1?= =?UTF-8?q?=EC=8A=A4=EB=A5=BC=20=EC=A7=80=EC=A0=95=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 입력할 인덱스는 1 - (노선에 배정된 역 개수)만 허용한다(예외 처리) --- docs/README.md | 2 +- src/main/java/subway/InputSectionManager.java | 19 +++++++++++ src/main/java/subway/domain/Line.java | 8 +++++ .../java/subway/domain/LineRepository.java | 20 +++++++++++ .../java/subway/domain/PositiveNumber.java | 34 +++++++++++++++++++ 5 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/domain/PositiveNumber.java diff --git a/docs/README.md b/docs/README.md index 6a944416d..98b81e7ae 100644 --- a/docs/README.md +++ b/docs/README.md @@ -52,7 +52,7 @@ - [X] 예외사항: 입력할 노선은 등록된 노선이어야 한다. - [X] 예외사항: 입력할 역이름은 2글자 이상이어야 한다. - [X] 예외사항: 입력할 역이름은 등록된 역이어야 한다. - - [ ] 예외사항: 입력할 순서는 1 - (노선에 배정된 역 개수)만 허용한다. + - [X] 예외사항: 입력할 순서는 1 - (노선에 배정된 역 개수)만 허용한다. - [ ] 지하철 구간 삭제 - [ ] 예외사항: 등록된 노선만 삭제할 수 있다. diff --git a/src/main/java/subway/InputSectionManager.java b/src/main/java/subway/InputSectionManager.java index a52d53900..834f9830d 100644 --- a/src/main/java/subway/InputSectionManager.java +++ b/src/main/java/subway/InputSectionManager.java @@ -14,6 +14,8 @@ public class InputSectionManager implements InputManager { private static final String SECTION_MENU = "3"; private static final String INPUT_STATION = "## 역이름을 입력하세요."; private static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나 이미 노선에 등록되어 있습니다."; + public static final String INPUT_ORDER = "## 순서를 입력하세요."; + public static final String INDEX_OUT_OF_BOUNDS_TRY_AGAIN = "[ERROR] 인덱스가 초과되었습니다."; private Scanner scanner; @@ -79,12 +81,29 @@ private void registerStationInSection(Line line) { || LineRepository.containsStationOfLine(line, station)) { throw new IllegalArgumentException(NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN); } + registerOrderInSection(line, station); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); registerStationInSection(line); } } + private void registerOrderInSection(Line line, Station station) { + try { + System.out.println(INPUT_ORDER); + PositiveNumber orderNumber = new PositiveNumber(scanner.next()); + PositiveNumber lineSize = new PositiveNumber(LineRepository.getLineSize(line)); + if (orderNumber.compareTo(lineSize) > 0) { + throw new IllegalArgumentException(INDEX_OUT_OF_BOUNDS_TRY_AGAIN); + } + station.setRegister(true); + LineRepository.addSection(line, station, orderNumber.getNumber() - 1); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + registerOrderInSection(line, station); + } + } + @Override public void delete() { diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 35a49e1c6..966b543c7 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -44,4 +44,12 @@ public List getStations() { return stations; } + public int size() { + return stations.size(); + } + + public void addStations(int index, Station station) { + stations.add(index, station); + } + } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 05217dd6f..af9f44c08 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -57,4 +57,24 @@ public static boolean containsStationOfLine(Line line, Station station) { } return false; } + + public static int getLineSize(Line line) { + int size = 0; + for (Line n : lines) { + if (n.equals(line)) { + size = n.size(); + break; + } + } + return size; + } + + public static void addSection(Line line, Station station, int orderNumber) { + for (Line n : lines) { + if (n.equals(line)) { + n.addStations(orderNumber, station); + } + } + } + } diff --git a/src/main/java/subway/domain/PositiveNumber.java b/src/main/java/subway/domain/PositiveNumber.java new file mode 100644 index 000000000..9a8cb48b2 --- /dev/null +++ b/src/main/java/subway/domain/PositiveNumber.java @@ -0,0 +1,34 @@ +package subway.domain; + +public class PositiveNumber implements Comparable { + private int number; + + public PositiveNumber(int number) { + if (number <= 0) { + throw new IllegalArgumentException("[ERROR] 양의 정수만 가능. 다시 입력하세요."); + } + this.number = number; + } + + public PositiveNumber(String number) { + for (int i=0; i 9) { + throw new IllegalArgumentException("[ERROR] 양의 정수만 가능. 다시 입력하세요."); + } + } + int orderNumber = Integer.parseInt(number); + if (orderNumber <= 0) { + throw new IllegalArgumentException("[ERROR] 양의 정수만 가능. 다시 입력하세요."); + } + this.number = orderNumber; + } + + @Override + public int compareTo(PositiveNumber anotherNumber) { + return number - anotherNumber.number; + } + + public int getNumber() { + return number; + } +} From 4779b8d9f1de41b64fee30d0e6ac927f4bc0ee96 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 21:39:22 +0900 Subject: [PATCH 23/32] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EA=B5=AC=EA=B0=84=20=EC=82=AD=EC=A0=9C=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 등록된 노선만 삭제할 수 있다(예외 처리) --- docs/README.md | 4 ++-- src/main/java/subway/InputSectionManager.java | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/docs/README.md b/docs/README.md index 98b81e7ae..b2a387428 100644 --- a/docs/README.md +++ b/docs/README.md @@ -54,8 +54,8 @@ - [X] 예외사항: 입력할 역이름은 등록된 역이어야 한다. - [X] 예외사항: 입력할 순서는 1 - (노선에 배정된 역 개수)만 허용한다. -- [ ] 지하철 구간 삭제 - - [ ] 예외사항: 등록된 노선만 삭제할 수 있다. +- [X] 지하철 구간 삭제 + - [X] 예외사항: 등록된 노선만 삭제할 수 있다. - [ ] 예외사항: 삭제할 역은 2글자 이상이어야한다. - [ ] 예외사항: 삭제할 역은 선택한 노선에 등록된 역 이어야한다. - [ ] 예외사항: 노선에 포함된 역이 2개 이하일 때는 삭제할 수 없다. diff --git a/src/main/java/subway/InputSectionManager.java b/src/main/java/subway/InputSectionManager.java index 834f9830d..a717dee62 100644 --- a/src/main/java/subway/InputSectionManager.java +++ b/src/main/java/subway/InputSectionManager.java @@ -16,12 +16,13 @@ public class InputSectionManager implements InputManager { private static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나 이미 노선에 등록되어 있습니다."; public static final String INPUT_ORDER = "## 순서를 입력하세요."; public static final String INDEX_OUT_OF_BOUNDS_TRY_AGAIN = "[ERROR] 인덱스가 초과되었습니다."; + public static final String INPUT_LINE_OF_SECTION_TO_DELETE = "## 삭제할 구간의 노선을 입력하세요."; private Scanner scanner; private enum Menu { - REGISTER("1", ((InputSectionManager) SubwayManager.getMenus(SECTION_MENU))::register); -// DELETE("2"), + REGISTER("1", ((InputSectionManager) SubwayManager.getMenus(SECTION_MENU))::register), + DELETE("2", ((InputSectionManager) SubwayManager.getMenus(SECTION_MENU))::delete); // BACK("B"); private final String name; @@ -106,6 +107,15 @@ private void registerOrderInSection(Line line, Station station) { @Override public void delete() { - + try { + System.out.println(INPUT_LINE_OF_SECTION_TO_DELETE); + Line line = new Line(new LineName(scanner.next())); + if (!LineRepository.lines().contains(line)) { + throw new IllegalArgumentException(LINE_NOTHING_TRY_AGAIN); + } + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + delete(); + } } } From 867fbb66a79d2d53921c42388f1c6bbfd93dc8d2 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 21:59:05 +0900 Subject: [PATCH 24/32] =?UTF-8?q?feat:=20=EC=84=A0=ED=83=9D=ED=95=9C=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EC=9D=98=20=EC=97=AD=EC=9D=84=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 노선에 포함된 역이 2개 이하일 때는 삭제할 수 없다(예외 처리) --- docs/README.md | 6 ++-- src/main/java/subway/InputSectionManager.java | 28 +++++++++++++++++-- .../java/subway/domain/LineRepository.java | 8 ++++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/docs/README.md b/docs/README.md index b2a387428..41ff2a80f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -56,9 +56,9 @@ - [X] 지하철 구간 삭제 - [X] 예외사항: 등록된 노선만 삭제할 수 있다. - - [ ] 예외사항: 삭제할 역은 2글자 이상이어야한다. - - [ ] 예외사항: 삭제할 역은 선택한 노선에 등록된 역 이어야한다. - - [ ] 예외사항: 노선에 포함된 역이 2개 이하일 때는 삭제할 수 없다. + - [X] 예외사항: 삭제할 역은 2글자 이상이어야한다. + - [X] 예외사항: 삭제할 역은 선택한 노선에 등록된 역 이어야한다. + - [X] 예외사항: 노선에 포함된 역이 2개 이하일 때는 삭제할 수 없다. - [ ] 메인 화면으로 되돌아가기 diff --git a/src/main/java/subway/InputSectionManager.java b/src/main/java/subway/InputSectionManager.java index a717dee62..76c75aa1d 100644 --- a/src/main/java/subway/InputSectionManager.java +++ b/src/main/java/subway/InputSectionManager.java @@ -6,17 +6,24 @@ import java.util.Scanner; public class InputSectionManager implements InputManager { - private static final String SECTION_MAIN_MENU = "## 구간 관리 화면\n1. 구간 등록\n2. 구간 삭제\nB. 돌아가기\n"; + private static final String SECTION_MAIN_MENU = "## 구간 관리 화면\n1. 구간 등록\n2. 구간 삭제\n" + + "B. 돌아가기\n"; private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; private static final String INPUT_LINE = "## 노선을 입력하세요."; private static final String SECTION_ENROLLED = "\n[INFO] 구간이 등록되었습니다.\n"; private static final String LINE_NOTHING_TRY_AGAIN = "[ERROR] 해당 노선이 없습니다."; private static final String SECTION_MENU = "3"; private static final String INPUT_STATION = "## 역이름을 입력하세요."; - private static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나 이미 노선에 등록되어 있습니다."; + private static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나" + + " 이미 노선에 등록되어 있습니다."; public static final String INPUT_ORDER = "## 순서를 입력하세요."; public static final String INDEX_OUT_OF_BOUNDS_TRY_AGAIN = "[ERROR] 인덱스가 초과되었습니다."; public static final String INPUT_LINE_OF_SECTION_TO_DELETE = "## 삭제할 구간의 노선을 입력하세요."; + public static final String SECTION_DELETED = "\n[INFO] 구간이 삭제되었습니다.\n"; + public static final String INPUT_STATION_OF_SECTION_TO_ENROLL = "## 삭제할 구간의 역을 입력하세요."; + public static final String STATION_NOTHING_OR_LINE_LENGTH_LIMIT_TRY_AGAIN = "[ERROR] " + + "해당 역이 없거나 현재 노선의 길이가 2이하여서 삭제 할 수 없습니다."; + public static final int LINE_MIN_LENGTH = 2; private Scanner scanner; @@ -113,9 +120,26 @@ public void delete() { if (!LineRepository.lines().contains(line)) { throw new IllegalArgumentException(LINE_NOTHING_TRY_AGAIN); } + deleteStationOfSection(line); + System.out.println(SECTION_DELETED); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); delete(); } } + + private void deleteStationOfSection(Line line) { + try { + System.out.println(INPUT_STATION_OF_SECTION_TO_ENROLL); + Station station = new Station(new StationName(scanner.next())); + if (!LineRepository.containsStationOfLine(line, station) + || LineRepository.getLineSize(line) <= LINE_MIN_LENGTH) { + throw new IllegalArgumentException(STATION_NOTHING_OR_LINE_LENGTH_LIMIT_TRY_AGAIN); + } + LineRepository.deleteSection(line, station); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + deleteStationOfSection(line); + } + } } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index af9f44c08..0b4c417bc 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -77,4 +77,12 @@ public static void addSection(Line line, Station station, int orderNumber) { } } + public static void deleteSection(Line line, Station station) { + for (Line n : lines) { + if (n.equals(line)) { + n.getStations().remove(station); + } + } + } + } From 81bba84b880dbbdf2239f5b9aed7884f7f0a3c5c Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 22:00:57 +0900 Subject: [PATCH 25/32] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EC=9C=BC=EB=A1=9C=20=EB=90=98=EB=8F=8C=EC=95=84?= =?UTF-8?q?=EA=B0=80=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/subway/InputSectionManager.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 41ff2a80f..cf9d5c551 100644 --- a/docs/README.md +++ b/docs/README.md @@ -60,6 +60,6 @@ - [X] 예외사항: 삭제할 역은 선택한 노선에 등록된 역 이어야한다. - [X] 예외사항: 노선에 포함된 역이 2개 이하일 때는 삭제할 수 없다. -- [ ] 메인 화면으로 되돌아가기 +- [X] 메인 화면으로 되돌아가기 - [ ] 지하철 노선도 출력 \ No newline at end of file diff --git a/src/main/java/subway/InputSectionManager.java b/src/main/java/subway/InputSectionManager.java index 76c75aa1d..d7396753a 100644 --- a/src/main/java/subway/InputSectionManager.java +++ b/src/main/java/subway/InputSectionManager.java @@ -29,8 +29,8 @@ public class InputSectionManager implements InputManager { private enum Menu { REGISTER("1", ((InputSectionManager) SubwayManager.getMenus(SECTION_MENU))::register), - DELETE("2", ((InputSectionManager) SubwayManager.getMenus(SECTION_MENU))::delete); -// BACK("B"); + DELETE("2", ((InputSectionManager) SubwayManager.getMenus(SECTION_MENU))::delete), + BACK("B", System.out::println); private final String name; private final Runnable runnable; From f2c6cf50683f55cbb5510a30ba9c835add901418 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 22:06:34 +0900 Subject: [PATCH 26/32] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EB=8F=84=20=EC=B6=9C=EB=A0=A5=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 7 +++++-- src/main/java/subway/domain/LineRepository.java | 10 ++++++++++ src/main/java/subway/domain/Station.java | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index b8638801a..be610b789 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,5 +1,7 @@ package subway; +import subway.domain.LineRepository; + import java.util.Scanner; public class Application { @@ -12,10 +14,11 @@ public static void main(String[] args) { while (true) { String state = subway.selectState(); if (state.equals(APPLICATION_QUIT)) { - + break; } if (state.equals(SUBWAY_LINEMAP_MENU)) { - + LineRepository.printLineAndStation(); + continue; } ((InputManager) subway.getMenus(state)).selectMenu(); } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 0b4c417bc..048c003c0 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -85,4 +85,14 @@ public static void deleteSection(Line line, Station station) { } } + public static void printLineAndStation() { + for (Line line : lines) { + System.out.println(line.toString() + "\n[INFO] ---"); + for (Station station : line.getStations()) { + System.out.println(station.toString()); + } + System.out.println(); + } + } + } diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index 058bb0918..3fa04c782 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -38,7 +38,7 @@ public boolean setRegister(boolean register) { @Override public String toString() { - return "[INFO]" + name.toString(); + return "[INFO] " + name.toString(); } } From b5d4fcffe926f7defa1261a730351aadf7b91c28 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 22:26:50 +0900 Subject: [PATCH 27/32] =?UTF-8?q?move:=20=EB=AA=A8=EB=93=A0=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20=EC=83=81=EC=88=98=EB=93=A4?= =?UTF-8?q?=EC=9D=84=20Constants=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 8 +-- src/main/java/subway/InputLineManager.java | 43 ++++--------- src/main/java/subway/InputSectionManager.java | 54 ++++++---------- src/main/java/subway/InputStationManager.java | 33 ++++------ src/main/java/subway/Subway.java | 24 +++---- src/main/java/subway/domain/Constants.java | 64 +++++++++++++++++++ src/main/java/subway/domain/Line.java | 2 +- src/main/java/subway/domain/LineName.java | 7 +- .../java/subway/domain/LineRepository.java | 6 +- .../java/subway/domain/PositiveNumber.java | 9 +-- src/main/java/subway/domain/StationName.java | 7 +- .../java/subway/domain/StationRepository.java | 4 +- 12 files changed, 132 insertions(+), 129 deletions(-) create mode 100644 src/main/java/subway/domain/Constants.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index be610b789..695d8a4df 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,22 +1,20 @@ package subway; +import subway.domain.Constants; import subway.domain.LineRepository; import java.util.Scanner; public class Application { - private static final String APPLICATION_QUIT = "Q"; - private static final String SUBWAY_LINEMAP_MENU = "4"; - public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); Subway subway = new Subway(scanner); while (true) { String state = subway.selectState(); - if (state.equals(APPLICATION_QUIT)) { + if (state.equals(Constants.APPLICATION_QUIT)) { break; } - if (state.equals(SUBWAY_LINEMAP_MENU)) { + if (state.equals(Constants.SUBWAY_LINEMAP_MENU)) { LineRepository.printLineAndStation(); continue; } diff --git a/src/main/java/subway/InputLineManager.java b/src/main/java/subway/InputLineManager.java index 82feb21fa..0f8b1b20a 100644 --- a/src/main/java/subway/InputLineManager.java +++ b/src/main/java/subway/InputLineManager.java @@ -6,26 +6,11 @@ import java.util.Scanner; public class InputLineManager implements InputManager { - private static final String LINE_MAIN_MENU = "## 노선 관리 화면\n1. 노선 등록\n" + - "2. 노선 삭제\n3. 노선 조회\nB. 돌아가기\n"; - private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; - private static final String INPUT_LINE_TO_ENROLL = "## 등록할 노선 이름을 입력하세요."; - private static final String DUPLICATED_TRY_AGAIN = "[ERROR] 중복됩니다."; - private static final String INPUT_START_STATION_TO_ENROLL = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; - public static final String LINE_MENU = "2"; - public static final String LINE_ENROLLED = "\n[INFO] 지하철 노선이 등록되었습니다.\n"; - public static final String NOTHING_TRY_AGAIN = "[ERROR] 해당 역이 없습니다."; - public static final String NOTHING_OR_START_END_SAME_TRY_AGAIN = "[ERROR] 해당 역이 없거나 상행 종점, 하행 종점역이 같습니다."; - public static final String INPUT_END_STATION_TO_ENROLL = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; - public static final String INPUT_LINE_TO_DELETE = "## 삭제할 노선 이름을 입력하세요."; - public static final String NOTHING_TO_DELETE_TRY_AGAIN = "[ERROR] 삭제할 노선이 없습니다."; - public static final String LINE_DELETED = "\n[INFO] 지하철 노선이 삭제되었습니다.\n"; - private Scanner scanner; private enum Menu { - REGISTER("1", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::register), - DELETE("2", ((InputLineManager) SubwayManager.getMenus(LINE_MENU))::delete), + REGISTER("1", ((InputLineManager) SubwayManager.getMenus(Constants.LINE_MENU))::register), + DELETE("2", ((InputLineManager) SubwayManager.getMenus(Constants.LINE_MENU))::delete), INQUIRY("3", LineRepository::printLine), BACK("B", System.out::println); @@ -41,7 +26,7 @@ public static void execute(String input) { Arrays.stream(values()) .filter(value -> value.name.equals(input)) .findFirst() - .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)) + .orElseThrow(() -> new IllegalArgumentException(Constants.WRONG_STATE_TRY_AGAIN)) .runnable.run(); } } @@ -53,7 +38,7 @@ public InputLineManager(Scanner scanner) { @Override public void selectMenu() { try { - System.out.println(LINE_MAIN_MENU); + System.out.println(Constants.LINE_MAIN_MENU); String state = scanner.next(); Menu.execute(state); } catch (IllegalArgumentException e) { @@ -65,14 +50,14 @@ public void selectMenu() { @Override public void register() { try { - System.out.println(INPUT_LINE_TO_ENROLL); + System.out.println(Constants.INPUT_LINE_TO_ENROLL); Line line = new Line(new LineName(scanner.next())); if (LineRepository.lines().contains(line)) { - throw new IllegalArgumentException(DUPLICATED_TRY_AGAIN); + throw new IllegalArgumentException(Constants.DUPLICATED_TRY_AGAIN); } LineRepository.addLine(line); registerStartStation(line); - System.out.println(LINE_ENROLLED); + System.out.println(Constants.LINE_ENROLLED); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); register(); @@ -81,10 +66,10 @@ public void register() { private void registerStartStation(Line line) { try { - System.out.println(INPUT_START_STATION_TO_ENROLL); + System.out.println(Constants.INPUT_START_STATION_TO_ENROLL); Station station = new Station(new StationName(scanner.next())); if (!StationRepository.stations().contains(station)) { - throw new IllegalArgumentException(NOTHING_TRY_AGAIN); + throw new IllegalArgumentException(Constants.NOTHING_TRY_AGAIN); } registerEndStation(line, station); } catch (IllegalArgumentException e) { @@ -95,11 +80,11 @@ private void registerStartStation(Line line) { private void registerEndStation(Line line, Station startStation) { try { - System.out.println(INPUT_END_STATION_TO_ENROLL); + System.out.println(Constants.INPUT_END_STATION_TO_ENROLL); Station endStation = new Station(new StationName(scanner.next())); if (!StationRepository.stations().contains(endStation) || startStation.equals(endStation)) { - throw new IllegalArgumentException(NOTHING_OR_START_END_SAME_TRY_AGAIN); + throw new IllegalArgumentException(Constants.NOTHING_OR_START_END_SAME_TRY_AGAIN); } line.addStations(startStation); line.addStations(endStation); @@ -112,12 +97,12 @@ private void registerEndStation(Line line, Station startStation) { @Override public void delete() { try { - System.out.println(INPUT_LINE_TO_DELETE); + System.out.println(Constants.INPUT_LINE_TO_DELETE); String lineToDelete = scanner.next(); if (!LineRepository.deleteLineByName(new LineName(lineToDelete))) { - throw new IllegalArgumentException(NOTHING_TO_DELETE_TRY_AGAIN); + throw new IllegalArgumentException(Constants.NOTHING_TO_DELETE_TRY_AGAIN); } - System.out.println(LINE_DELETED); + System.out.println(Constants.LINE_DELETED); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); delete(); diff --git a/src/main/java/subway/InputSectionManager.java b/src/main/java/subway/InputSectionManager.java index d7396753a..d7e99c3e6 100644 --- a/src/main/java/subway/InputSectionManager.java +++ b/src/main/java/subway/InputSectionManager.java @@ -6,30 +6,11 @@ import java.util.Scanner; public class InputSectionManager implements InputManager { - private static final String SECTION_MAIN_MENU = "## 구간 관리 화면\n1. 구간 등록\n2. 구간 삭제\n" + - "B. 돌아가기\n"; - private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; - private static final String INPUT_LINE = "## 노선을 입력하세요."; - private static final String SECTION_ENROLLED = "\n[INFO] 구간이 등록되었습니다.\n"; - private static final String LINE_NOTHING_TRY_AGAIN = "[ERROR] 해당 노선이 없습니다."; - private static final String SECTION_MENU = "3"; - private static final String INPUT_STATION = "## 역이름을 입력하세요."; - private static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나" + - " 이미 노선에 등록되어 있습니다."; - public static final String INPUT_ORDER = "## 순서를 입력하세요."; - public static final String INDEX_OUT_OF_BOUNDS_TRY_AGAIN = "[ERROR] 인덱스가 초과되었습니다."; - public static final String INPUT_LINE_OF_SECTION_TO_DELETE = "## 삭제할 구간의 노선을 입력하세요."; - public static final String SECTION_DELETED = "\n[INFO] 구간이 삭제되었습니다.\n"; - public static final String INPUT_STATION_OF_SECTION_TO_ENROLL = "## 삭제할 구간의 역을 입력하세요."; - public static final String STATION_NOTHING_OR_LINE_LENGTH_LIMIT_TRY_AGAIN = "[ERROR] " + - "해당 역이 없거나 현재 노선의 길이가 2이하여서 삭제 할 수 없습니다."; - public static final int LINE_MIN_LENGTH = 2; - private Scanner scanner; private enum Menu { - REGISTER("1", ((InputSectionManager) SubwayManager.getMenus(SECTION_MENU))::register), - DELETE("2", ((InputSectionManager) SubwayManager.getMenus(SECTION_MENU))::delete), + REGISTER("1", ((InputSectionManager) SubwayManager.getMenus(Constants.SECTION_MENU))::register), + DELETE("2", ((InputSectionManager) SubwayManager.getMenus(Constants.SECTION_MENU))::delete), BACK("B", System.out::println); private final String name; @@ -39,11 +20,12 @@ private enum Menu { this.name = name; this.runnable = runnable; } + public static void execute(String input) { Arrays.stream(values()) .filter(value -> value.name.equals(input)) .findFirst() - .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)) + .orElseThrow(() -> new IllegalArgumentException(Constants.WRONG_STATE_TRY_AGAIN)) .runnable.run(); } } @@ -55,7 +37,7 @@ public InputSectionManager(Scanner scanner) { @Override public void selectMenu() { try { - System.out.println(SECTION_MAIN_MENU); + System.out.println(Constants.SECTION_MAIN_MENU); String state = scanner.next(); Menu.execute(state); } catch (IllegalArgumentException e) { @@ -67,13 +49,13 @@ public void selectMenu() { @Override public void register() { try { - System.out.println(INPUT_LINE); + System.out.println(Constants.INPUT_LINE); Line line = new Line(new LineName(scanner.next())); if (!LineRepository.lines().contains(line)) { - throw new IllegalArgumentException(LINE_NOTHING_TRY_AGAIN); + throw new IllegalArgumentException(Constants.LINE_NOTHING_TRY_AGAIN); } registerStationInSection(line); - System.out.println(SECTION_ENROLLED); + System.out.println(Constants.SECTION_ENROLLED); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); @@ -83,11 +65,11 @@ public void register() { private void registerStationInSection(Line line) { try { - System.out.println(INPUT_STATION); + System.out.println(Constants.INPUT_STATION); Station station = new Station(new StationName(scanner.next())); if (!StationRepository.stations().contains(station) || LineRepository.containsStationOfLine(line, station)) { - throw new IllegalArgumentException(NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN); + throw new IllegalArgumentException(Constants.NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN); } registerOrderInSection(line, station); } catch (IllegalArgumentException e) { @@ -98,11 +80,11 @@ private void registerStationInSection(Line line) { private void registerOrderInSection(Line line, Station station) { try { - System.out.println(INPUT_ORDER); + System.out.println(Constants.INPUT_ORDER); PositiveNumber orderNumber = new PositiveNumber(scanner.next()); PositiveNumber lineSize = new PositiveNumber(LineRepository.getLineSize(line)); if (orderNumber.compareTo(lineSize) > 0) { - throw new IllegalArgumentException(INDEX_OUT_OF_BOUNDS_TRY_AGAIN); + throw new IllegalArgumentException(Constants.INDEX_OUT_OF_BOUNDS_TRY_AGAIN); } station.setRegister(true); LineRepository.addSection(line, station, orderNumber.getNumber() - 1); @@ -115,13 +97,13 @@ private void registerOrderInSection(Line line, Station station) { @Override public void delete() { try { - System.out.println(INPUT_LINE_OF_SECTION_TO_DELETE); + System.out.println(Constants.INPUT_LINE_OF_SECTION_TO_DELETE); Line line = new Line(new LineName(scanner.next())); if (!LineRepository.lines().contains(line)) { - throw new IllegalArgumentException(LINE_NOTHING_TRY_AGAIN); + throw new IllegalArgumentException(Constants.LINE_NOTHING_TRY_AGAIN); } deleteStationOfSection(line); - System.out.println(SECTION_DELETED); + System.out.println(Constants.SECTION_DELETED); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); delete(); @@ -130,11 +112,11 @@ public void delete() { private void deleteStationOfSection(Line line) { try { - System.out.println(INPUT_STATION_OF_SECTION_TO_ENROLL); + System.out.println(Constants.INPUT_STATION_OF_SECTION_TO_ENROLL); Station station = new Station(new StationName(scanner.next())); if (!LineRepository.containsStationOfLine(line, station) - || LineRepository.getLineSize(line) <= LINE_MIN_LENGTH) { - throw new IllegalArgumentException(STATION_NOTHING_OR_LINE_LENGTH_LIMIT_TRY_AGAIN); + || LineRepository.getLineSize(line) <= Constants.LINE_MIN_LENGTH) { + throw new IllegalArgumentException(Constants.STATION_NOTHING_OR_LINE_LENGTH_LIMIT_TRY_AGAIN); } LineRepository.deleteSection(line, station); } catch (IllegalArgumentException e) { diff --git a/src/main/java/subway/InputStationManager.java b/src/main/java/subway/InputStationManager.java index 2392f9a8b..a46db55b1 100644 --- a/src/main/java/subway/InputStationManager.java +++ b/src/main/java/subway/InputStationManager.java @@ -1,5 +1,6 @@ package subway; +import subway.domain.Constants; import subway.domain.Station; import subway.domain.StationName; import subway.domain.StationRepository; @@ -8,24 +9,13 @@ import java.util.Scanner; public class InputStationManager implements InputManager { - private static final String STATION_MAIN_MENU = "## 역 관리 화면\n1. 역 등록\n" + - "2. 역 삭제\n3. 역 조회\nB. 돌아가기\n"; - private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; - private static final String INPUT_STATION_TO_ENROLL = "## 등록할 역 이름을 입력하세요."; - private static final String DUPLICATED_TRY_AGAIN = "[ERROR] 중복됩니다."; - private static final String STATION_ENROLLED = "\n[INFO] 지하철 역이 등록되었습니다.\n"; - private static final String INPUT_STATION_TO_DELETE = "## 삭제할 역 이름을 입력하세요."; - private static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나 이미 노선에 등록되어 있습니다."; - private static final String STATION_DELETED = "\n[INFO] 지하철 역이 삭제되었습니다.\n"; - private static final String STATION_MENU_NUMBER = "1"; - private Scanner scanner; private enum Menu { REGISTER("1", - ((InputStationManager) SubwayManager.getMenus(STATION_MENU_NUMBER))::register), + ((InputStationManager) SubwayManager.getMenus(Constants.STATION_MENU_NUMBER))::register), DELETE("2", - ((InputStationManager) SubwayManager.getMenus(STATION_MENU_NUMBER))::delete), + ((InputStationManager) SubwayManager.getMenus(Constants.STATION_MENU_NUMBER))::delete), INQUIRY("3", StationRepository::printStation), BACK("B", System.out::println); @@ -36,11 +26,12 @@ private enum Menu { this.name = name; this.runnable = runnable; } + public static void execute(String input) { Arrays.stream(values()) .filter(value -> value.name.equals(input)) .findFirst() - .orElseThrow(() -> new IllegalArgumentException(WRONG_STATE_TRY_AGAIN)) + .orElseThrow(() -> new IllegalArgumentException(Constants.WRONG_STATE_TRY_AGAIN)) .runnable.run(); } } @@ -52,7 +43,7 @@ public InputStationManager(Scanner scanner) { @Override public void selectMenu() { try { - System.out.println(STATION_MAIN_MENU); + System.out.println(Constants.STATION_MAIN_MENU); String state = scanner.next(); Menu.execute(state); } catch (IllegalArgumentException e) { @@ -64,13 +55,13 @@ public void selectMenu() { @Override public void register() { try { - System.out.println(INPUT_STATION_TO_ENROLL); + System.out.println(Constants.INPUT_STATION_TO_ENROLL); Station station = new Station(new StationName(scanner.next())); if (StationRepository.stations().contains(station)) { - throw new IllegalArgumentException(DUPLICATED_TRY_AGAIN); + throw new IllegalArgumentException(Constants.DUPLICATED_TRY_AGAIN); } StationRepository.addStation(station); - System.out.println(STATION_ENROLLED); + System.out.println(Constants.STATION_ENROLLED); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); register(); @@ -80,13 +71,13 @@ public void register() { @Override public void delete() { try { - System.out.println(INPUT_STATION_TO_DELETE); + System.out.println(Constants.INPUT_STATION_TO_DELETE); String stationToDelete = scanner.next(); if (StationRepository.isRegisteredStation(new Station(new StationName(stationToDelete))) || !StationRepository.deleteStation(stationToDelete)) { - throw new IllegalArgumentException(NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN); + throw new IllegalArgumentException(Constants.NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN); } - System.out.println(STATION_DELETED); + System.out.println(Constants.STATION_DELETED); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); delete(); diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java index ae99fa45b..3752d51fc 100644 --- a/src/main/java/subway/Subway.java +++ b/src/main/java/subway/Subway.java @@ -1,5 +1,6 @@ package subway; +import subway.domain.Constants; import subway.domain.LineRepository; import subway.domain.StationRepository; @@ -8,15 +9,6 @@ import java.util.Scanner; public class Subway { - private static final String MAIN_MENU = "## 메인 화면\n1. 역 관리\n2. 노선 관리\n3. 구간 관리\n" + - "4. 지하철 노선도 출력\nQ. 종료\n"; - private static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; - private static final String ONE = "1"; - private static final String TOW = "2"; - private static final String THREE = "3"; - private static final String FOUR = "4"; - private static final String APPLICATION_QUIT = "Q"; - private Scanner scanner; private Map menus = new HashMap<>(); @@ -28,11 +20,11 @@ public Subway(Scanner scanner) { } public String selectState() { - System.out.println(MAIN_MENU); + System.out.println(Constants.MAIN_MENU); String menu = scanner.next(); try { if (!menus.containsKey(menu)) { - throw new IllegalArgumentException(WRONG_STATE_TRY_AGAIN); + throw new IllegalArgumentException(Constants.WRONG_STATE_TRY_AGAIN); } } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); @@ -42,11 +34,11 @@ public String selectState() { } private void initSubway() { - menus.put(ONE, new InputStationManager(scanner)); - menus.put(TOW, new InputLineManager(scanner)); - menus.put(THREE, new InputSectionManager(scanner)); - menus.put(FOUR, "4"); - menus.put(APPLICATION_QUIT, "Q"); + menus.put(Constants.ONE, new InputStationManager(scanner)); + menus.put(Constants.TOW, new InputLineManager(scanner)); + menus.put(Constants.THREE, new InputSectionManager(scanner)); + menus.put(Constants.FOUR, Constants.FOUR); + menus.put(Constants.APPLICATION_QUIT, Constants.APPLICATION_QUIT); SubwayManager.initSubwayManager(menus); } diff --git a/src/main/java/subway/domain/Constants.java b/src/main/java/subway/domain/Constants.java new file mode 100644 index 000000000..72e0a0554 --- /dev/null +++ b/src/main/java/subway/domain/Constants.java @@ -0,0 +1,64 @@ +package subway.domain; + +public class Constants { + public static final String APPLICATION_QUIT = "Q"; + public static final String SUBWAY_LINEMAP_MENU = "4"; + public static final String LINE_MAIN_MENU = "## 노선 관리 화면\n1. 노선 등록\n" + + "2. 노선 삭제\n3. 노선 조회\nB. 돌아가기\n"; + public static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다."; + public static final String INPUT_LINE_TO_ENROLL = "## 등록할 노선 이름을 입력하세요."; + public static final String DUPLICATED_TRY_AGAIN = "[ERROR] 중복됩니다."; + public static final String INPUT_START_STATION_TO_ENROLL = "## 등록할 노선의 상행 종점역 " + + "이름을 입력하세요."; + public static final String LINE_MENU = "2"; + public static final String LINE_ENROLLED = "\n[INFO] 지하철 노선이 등록되었습니다.\n"; + public static final String NOTHING_TRY_AGAIN = "[ERROR] 해당 역이 없습니다."; + public static final String NOTHING_OR_START_END_SAME_TRY_AGAIN = "[ERROR] 해당 역이 없거나 " + + "상행 종점, 하행 종점역이 같습니다."; + public static final String INPUT_END_STATION_TO_ENROLL = "## 등록할 노선의 하행 종점역 " + + "이름을 입력하세요."; + public static final String INPUT_LINE_TO_DELETE = "## 삭제할 노선 이름을 입력하세요."; + public static final String NOTHING_TO_DELETE_TRY_AGAIN = "[ERROR] 삭제할 노선이 없습니다."; + public static final String LINE_DELETED = "\n[INFO] 지하철 노선이 삭제되었습니다.\n"; + public static final String SECTION_MAIN_MENU = "## 구간 관리 화면\n1. 구간 등록\n2. 구간 삭제\n" + + "B. 돌아가기\n"; + public static final String INPUT_LINE = "## 노선을 입력하세요."; + public static final String SECTION_ENROLLED = "\n[INFO] 구간이 등록되었습니다.\n"; + public static final String LINE_NOTHING_TRY_AGAIN = "[ERROR] 해당 노선이 없습니다."; + public static final String SECTION_MENU = "3"; + public static final String INPUT_STATION = "## 역이름을 입력하세요."; + public static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나" + + " 이미 노선에 등록되어 있습니다."; + public static final String INPUT_ORDER = "## 순서를 입력하세요."; + public static final String INDEX_OUT_OF_BOUNDS_TRY_AGAIN = "[ERROR] 인덱스가 초과되었습니다."; + public static final String INPUT_LINE_OF_SECTION_TO_DELETE = "## 삭제할 구간의 노선을 입력하세요."; + public static final String SECTION_DELETED = "\n[INFO] 구간이 삭제되었습니다.\n"; + public static final String INPUT_STATION_OF_SECTION_TO_ENROLL = "## 삭제할 구간의 역을 입력하세요."; + public static final String STATION_NOTHING_OR_LINE_LENGTH_LIMIT_TRY_AGAIN = "[ERROR] " + + "해당 역이 없거나 현재 노선의 길이가 2이하여서 삭제 할 수 없습니다."; + public static final int LINE_MIN_LENGTH = 2; + public static final String STATION_MAIN_MENU = "## 역 관리 화면\n1. 역 등록\n" + + "2. 역 삭제\n3. 역 조회\nB. 돌아가기\n"; + public static final String INPUT_STATION_TO_ENROLL = "## 등록할 역 이름을 입력하세요."; + public static final String STATION_ENROLLED = "\n[INFO] 지하철 역이 등록되었습니다.\n"; + public static final String INPUT_STATION_TO_DELETE = "## 삭제할 역 이름을 입력하세요."; + public static final String STATION_DELETED = "\n[INFO] 지하철 역이 삭제되었습니다.\n"; + public static final String STATION_MENU_NUMBER = "1"; + public static final String MAIN_MENU = "## 메인 화면\n1. 역 관리\n2. 노선 관리\n3. 구간 관리\n" + + "4. 지하철 노선도 출력\nQ. 종료\n"; + public static final String ONE = "1"; + public static final String TOW = "2"; + public static final String THREE = "3"; + public static final String FOUR = "4"; + public static final String INFORMATION = "[INFO] "; + public static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다."; + public static final int NAME_LENGTH_LIMIT = 2; + public static final String LINE_LIST = "\n## 노선 목록"; + public static final String INFORMATION_BAR = "\n[INFO] ---"; + public static final String ERROR_ONLY_SINGLE_DIGIT_POSITIVE_NUMBER = "[ERROR] 한 자리 양의 정수만 가능합니다."; + public static final int SINGLE_DIGIT_MIN = 0; + public static final int SINGLE_DIGIT_MAX = 9; +// public static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다."; +// public static final int NAME_LENGTH_LIMIT = 2; + public static final String STATION_LIST = "\n## 역 목록\n"; +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 966b543c7..018688d0c 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -37,7 +37,7 @@ public int hashCode() { @Override public String toString() { - return "[INFO] " + name; + return Constants.INFORMATION + name; } public List getStations() { diff --git a/src/main/java/subway/domain/LineName.java b/src/main/java/subway/domain/LineName.java index 185b55a4e..c139c1a8d 100644 --- a/src/main/java/subway/domain/LineName.java +++ b/src/main/java/subway/domain/LineName.java @@ -3,14 +3,11 @@ import java.util.Objects; public class LineName { - private static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다."; - private static final int NAME_LENGTH_LIMIT = 2; - private String name; public LineName(String name) { - if (name.length() < NAME_LENGTH_LIMIT) { - throw new IllegalArgumentException(NAME_LENGTH_LIMIT_ERROR); + if (name.length() < Constants.NAME_LENGTH_LIMIT) { + throw new IllegalArgumentException(Constants.NAME_LENGTH_LIMIT_ERROR); } this.name = name; } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 048c003c0..ca32c4c08 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -6,8 +6,6 @@ import java.util.Objects; public class LineRepository { - private static final String LINE_LIST = "\n## 노선 목록"; - private static final List lines = new ArrayList<>(); public static void init() { @@ -42,7 +40,7 @@ public static boolean deleteLineByName(LineName name) { } public static void printLine() { - System.out.println(LINE_LIST); + System.out.println(Constants.LINE_LIST); for (Line line : lines) { System.out.println(line.toString()); } @@ -87,7 +85,7 @@ public static void deleteSection(Line line, Station station) { public static void printLineAndStation() { for (Line line : lines) { - System.out.println(line.toString() + "\n[INFO] ---"); + System.out.println(line.toString() + Constants.INFORMATION_BAR); for (Station station : line.getStations()) { System.out.println(station.toString()); } diff --git a/src/main/java/subway/domain/PositiveNumber.java b/src/main/java/subway/domain/PositiveNumber.java index 9a8cb48b2..c510d75ea 100644 --- a/src/main/java/subway/domain/PositiveNumber.java +++ b/src/main/java/subway/domain/PositiveNumber.java @@ -5,20 +5,21 @@ public class PositiveNumber implements Comparable { public PositiveNumber(int number) { if (number <= 0) { - throw new IllegalArgumentException("[ERROR] 양의 정수만 가능. 다시 입력하세요."); + throw new IllegalArgumentException(Constants.ERROR_ONLY_SINGLE_DIGIT_POSITIVE_NUMBER); } this.number = number; } public PositiveNumber(String number) { for (int i=0; i 9) { - throw new IllegalArgumentException("[ERROR] 양의 정수만 가능. 다시 입력하세요."); + if (number.charAt(i) - '0' < Constants.SINGLE_DIGIT_MIN + || number.charAt(i) - '0' > Constants.SINGLE_DIGIT_MAX) { + throw new IllegalArgumentException(Constants.ERROR_ONLY_SINGLE_DIGIT_POSITIVE_NUMBER); } } int orderNumber = Integer.parseInt(number); if (orderNumber <= 0) { - throw new IllegalArgumentException("[ERROR] 양의 정수만 가능. 다시 입력하세요."); + throw new IllegalArgumentException(Constants.ERROR_ONLY_SINGLE_DIGIT_POSITIVE_NUMBER); } this.number = orderNumber; } diff --git a/src/main/java/subway/domain/StationName.java b/src/main/java/subway/domain/StationName.java index 618eb2604..b1a669d68 100644 --- a/src/main/java/subway/domain/StationName.java +++ b/src/main/java/subway/domain/StationName.java @@ -3,14 +3,11 @@ import java.util.Objects; public class StationName { - private static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다."; - private static final int NAME_LENGTH_LIMIT = 2; - private String name; public StationName(String name) { - if (name.length() < NAME_LENGTH_LIMIT) { - throw new IllegalArgumentException(NAME_LENGTH_LIMIT_ERROR); + if (name.length() < Constants.NAME_LENGTH_LIMIT) { + throw new IllegalArgumentException(Constants.NAME_LENGTH_LIMIT_ERROR); } this.name = name; } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index 19671476c..8709c0e90 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -6,8 +6,6 @@ import java.util.Objects; public class StationRepository { - public static final String STATION_LIST = "\n## 역 목록\n"; - private static final List stations = new ArrayList<>(); public static void init() { @@ -42,7 +40,7 @@ public static boolean isRegisteredStation(Station anotherStation) { } public static void printStation() { - System.out.println(STATION_LIST); + System.out.println(Constants.STATION_LIST); for (Station station : stations) { System.out.println(station); } From 6456510a1a26ca1b2edf9e4df80704c98d2e67a2 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 23:12:54 +0900 Subject: [PATCH 28/32] =?UTF-8?q?test:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=9E=90=EB=A3=8C=EA=B5=AC=EC=A1=B0=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Constants.java | 4 +- .../java/subway/domain/PositiveNumber.java | 6 +- src/test/java/subway/domain/LineNameTest.java | 41 +++++++++++++ .../subway/domain/PositiveNumberTest.java | 58 +++++++++++++++++++ .../java/subway/domain/StationNameTest.java | 41 +++++++++++++ 5 files changed, 144 insertions(+), 6 deletions(-) create mode 100644 src/test/java/subway/domain/LineNameTest.java create mode 100644 src/test/java/subway/domain/PositiveNumberTest.java create mode 100644 src/test/java/subway/domain/StationNameTest.java diff --git a/src/main/java/subway/domain/Constants.java b/src/main/java/subway/domain/Constants.java index 72e0a0554..7466a02d5 100644 --- a/src/main/java/subway/domain/Constants.java +++ b/src/main/java/subway/domain/Constants.java @@ -55,10 +55,8 @@ public class Constants { public static final int NAME_LENGTH_LIMIT = 2; public static final String LINE_LIST = "\n## 노선 목록"; public static final String INFORMATION_BAR = "\n[INFO] ---"; - public static final String ERROR_ONLY_SINGLE_DIGIT_POSITIVE_NUMBER = "[ERROR] 한 자리 양의 정수만 가능합니다."; + public static final String ERROR_ONLY_POSITIVE_NUMBER = "[ERROR] 양의 정수만 가능합니다."; public static final int SINGLE_DIGIT_MIN = 0; public static final int SINGLE_DIGIT_MAX = 9; -// public static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다."; -// public static final int NAME_LENGTH_LIMIT = 2; public static final String STATION_LIST = "\n## 역 목록\n"; } diff --git a/src/main/java/subway/domain/PositiveNumber.java b/src/main/java/subway/domain/PositiveNumber.java index c510d75ea..9c8d4e0ec 100644 --- a/src/main/java/subway/domain/PositiveNumber.java +++ b/src/main/java/subway/domain/PositiveNumber.java @@ -5,7 +5,7 @@ public class PositiveNumber implements Comparable { public PositiveNumber(int number) { if (number <= 0) { - throw new IllegalArgumentException(Constants.ERROR_ONLY_SINGLE_DIGIT_POSITIVE_NUMBER); + throw new IllegalArgumentException(Constants.ERROR_ONLY_POSITIVE_NUMBER); } this.number = number; } @@ -14,12 +14,12 @@ public PositiveNumber(String number) { for (int i=0; i Constants.SINGLE_DIGIT_MAX) { - throw new IllegalArgumentException(Constants.ERROR_ONLY_SINGLE_DIGIT_POSITIVE_NUMBER); + throw new IllegalArgumentException(Constants.ERROR_ONLY_POSITIVE_NUMBER); } } int orderNumber = Integer.parseInt(number); if (orderNumber <= 0) { - throw new IllegalArgumentException(Constants.ERROR_ONLY_SINGLE_DIGIT_POSITIVE_NUMBER); + throw new IllegalArgumentException(Constants.ERROR_ONLY_POSITIVE_NUMBER); } this.number = orderNumber; } diff --git a/src/test/java/subway/domain/LineNameTest.java b/src/test/java/subway/domain/LineNameTest.java new file mode 100644 index 000000000..fa09c67b7 --- /dev/null +++ b/src/test/java/subway/domain/LineNameTest.java @@ -0,0 +1,41 @@ +package subway.domain; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class LineNameTest { + + @Test + public void testCase1_isCorrectLineName() { + //GIVEN + String name = "2호선"; + + //WHEN + boolean actualResult = true; + try { + LineName lineName = new LineName(name); + } catch (Exception e) { + actualResult = false; + } + + //THEN + Assertions.assertTrue(actualResult); + } + + @Test + public void testCase2_isCorrectLineName() { + //GIVEN + String name = "2"; + + //WHEN + boolean actualResult = true; + try { + LineName lineName = new LineName(name); + } catch (Exception e) { + actualResult = false; + } + + //THEN + Assertions.assertFalse(actualResult); + } +} diff --git a/src/test/java/subway/domain/PositiveNumberTest.java b/src/test/java/subway/domain/PositiveNumberTest.java new file mode 100644 index 000000000..fcafffec2 --- /dev/null +++ b/src/test/java/subway/domain/PositiveNumberTest.java @@ -0,0 +1,58 @@ +package subway.domain; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class PositiveNumberTest { + + @Test + public void testCase1_isPositiveNumber() { + //GIVEN + String number = "-1"; + + //WHEN + boolean actualResult = true; + try { + PositiveNumber positiveNumber = new PositiveNumber(number); + } catch (Exception e) { + actualResult = false; + } + + //THEN + Assertions.assertFalse(actualResult); + } + + @Test + public void testCase2_isCorrectLineName() { + //GIVEN + String number = "10"; + + //WHEN + boolean actualResult = true; + try { + PositiveNumber positiveNumber = new PositiveNumber(number); + } catch (Exception e) { + actualResult = false; + } + + //THEN + Assertions.assertTrue(actualResult); + } + + @Test + public void testCase3_isCorrectLineName() { + //GIVEN + String number = "9"; + + //WHEN + boolean actualResult = true; + try { + PositiveNumber positiveNumber = new PositiveNumber(number); + } catch (Exception e) { + actualResult = false; + } + + //THEN + Assertions.assertTrue(actualResult); + } +} diff --git a/src/test/java/subway/domain/StationNameTest.java b/src/test/java/subway/domain/StationNameTest.java new file mode 100644 index 000000000..7b698d869 --- /dev/null +++ b/src/test/java/subway/domain/StationNameTest.java @@ -0,0 +1,41 @@ +package subway.domain; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class StationNameTest { + + @Test + public void testCase1_isCorrectStationName() { + //GIVEN + String name = "방배역"; + + //WHEN + boolean actualResult = true; + try { + StationName stationName = new StationName(name); + } catch (Exception e) { + actualResult = false; + } + + //THEN + Assertions.assertTrue(actualResult); + } + + @Test + public void testCase2_isCorrectLineName() { + //GIVEN + String name = "역"; + + //WHEN + boolean actualResult = true; + try { + StationName stationName = new StationName(name); + } catch (Exception e) { + actualResult = false; + } + + //THEN + Assertions.assertFalse(actualResult); + } +} From e3f8cde71f5c61c686c11c36ff53f24548b34359 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 23:19:47 +0900 Subject: [PATCH 29/32] =?UTF-8?q?feat:=20=EC=8B=9C=EC=9E=91=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 10 +++++++++- src/main/java/subway/InputLineManager.java | 10 +++++++++- src/main/java/subway/InputSectionManager.java | 10 +++++++++- src/main/java/subway/InputStationManager.java | 10 +++++++++- src/main/java/subway/Subway.java | 10 +++++++++- src/main/java/subway/SubwayManager.java | 10 +++++++++- src/main/java/subway/domain/LineName.java | 10 +++++++++- src/main/java/subway/domain/PositiveNumber.java | 10 +++++++++- src/main/java/subway/domain/StationName.java | 10 +++++++++- 9 files changed, 81 insertions(+), 9 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 695d8a4df..631a1d433 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,5 +1,13 @@ package subway; - +/* + * Application + * + * version 1.0 + * + * 2020.12.15 + * + * Copyright (c) by Davinci.J + */ import subway.domain.Constants; import subway.domain.LineRepository; diff --git a/src/main/java/subway/InputLineManager.java b/src/main/java/subway/InputLineManager.java index 0f8b1b20a..60eac09b2 100644 --- a/src/main/java/subway/InputLineManager.java +++ b/src/main/java/subway/InputLineManager.java @@ -1,5 +1,13 @@ package subway; - +/* + * InputLineManager + * + * version 1.0 + * + * 2020.12.15 + * + * Copyright (c) by Davinci.J + */ import subway.domain.*; import java.util.Arrays; diff --git a/src/main/java/subway/InputSectionManager.java b/src/main/java/subway/InputSectionManager.java index d7e99c3e6..38a9cf666 100644 --- a/src/main/java/subway/InputSectionManager.java +++ b/src/main/java/subway/InputSectionManager.java @@ -1,5 +1,13 @@ package subway; - +/* + * InputSectionManager + * + * version 1.0 + * + * 2020.12.15 + * + * Copyright (c) by Davinci.J + */ import subway.domain.*; import java.util.Arrays; diff --git a/src/main/java/subway/InputStationManager.java b/src/main/java/subway/InputStationManager.java index a46db55b1..d2a456987 100644 --- a/src/main/java/subway/InputStationManager.java +++ b/src/main/java/subway/InputStationManager.java @@ -1,5 +1,13 @@ package subway; - +/* + * InputStationManager + * + * version 1.0 + * + * 2020.12.15 + * + * Copyright (c) by Davinci.J + */ import subway.domain.Constants; import subway.domain.Station; import subway.domain.StationName; diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/Subway.java index 3752d51fc..a533a7357 100644 --- a/src/main/java/subway/Subway.java +++ b/src/main/java/subway/Subway.java @@ -1,5 +1,13 @@ package subway; - +/* + * Subway + * + * version 1.0 + * + * 2020.12.15 + * + * Copyright (c) by Davinci.J + */ import subway.domain.Constants; import subway.domain.LineRepository; import subway.domain.StationRepository; diff --git a/src/main/java/subway/SubwayManager.java b/src/main/java/subway/SubwayManager.java index 968c05de1..9a01bce9e 100644 --- a/src/main/java/subway/SubwayManager.java +++ b/src/main/java/subway/SubwayManager.java @@ -1,5 +1,13 @@ package subway; - +/* + * SubwayManager + * + * version 1.0 + * + * 2020.12.15 + * + * Copyright (c) by Davinci.J + */ import java.util.Map; public class SubwayManager { diff --git a/src/main/java/subway/domain/LineName.java b/src/main/java/subway/domain/LineName.java index c139c1a8d..b338641e5 100644 --- a/src/main/java/subway/domain/LineName.java +++ b/src/main/java/subway/domain/LineName.java @@ -1,5 +1,13 @@ package subway.domain; - +/* + * LineName + * + * version 1.0 + * + * 2020.12.15 + * + * Copyright (c) by Davinci.J + */ import java.util.Objects; public class LineName { diff --git a/src/main/java/subway/domain/PositiveNumber.java b/src/main/java/subway/domain/PositiveNumber.java index 9c8d4e0ec..3d2f50ab0 100644 --- a/src/main/java/subway/domain/PositiveNumber.java +++ b/src/main/java/subway/domain/PositiveNumber.java @@ -1,5 +1,13 @@ package subway.domain; - +/* + * PositiveNumber + * + * version 1.0 + * + * 2020.12.15 + * + * Copyright (c) by Davinci.J + */ public class PositiveNumber implements Comparable { private int number; diff --git a/src/main/java/subway/domain/StationName.java b/src/main/java/subway/domain/StationName.java index b1a669d68..8398a8837 100644 --- a/src/main/java/subway/domain/StationName.java +++ b/src/main/java/subway/domain/StationName.java @@ -1,5 +1,13 @@ package subway.domain; - +/* + * StationName + * + * version 1.0 + * + * 2020.12.15 + * + * Copyright (c) by Davinci.J + */ import java.util.Objects; public class StationName { From 578e7906531d65b29a1f4383936468d2be779bd9 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Tue, 15 Dec 2020 23:26:45 +0900 Subject: [PATCH 30/32] =?UTF-8?q?refactor:=20=ED=8F=B4=EB=8D=94=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 2 ++ src/main/java/subway/{ => controller}/Subway.java | 5 ++++- src/main/java/subway/{ => controller}/SubwayManager.java | 2 +- src/main/java/subway/{ => manager}/InputLineManager.java | 3 ++- src/main/java/subway/{ => manager}/InputManager.java | 2 +- src/main/java/subway/{ => manager}/InputSectionManager.java | 3 ++- src/main/java/subway/{ => manager}/InputStationManager.java | 3 ++- 7 files changed, 14 insertions(+), 6 deletions(-) rename src/main/java/subway/{ => controller}/Subway.java (90%) rename src/main/java/subway/{ => controller}/SubwayManager.java (93%) rename src/main/java/subway/{ => manager}/InputLineManager.java (98%) rename src/main/java/subway/{ => manager}/InputManager.java (80%) rename src/main/java/subway/{ => manager}/InputSectionManager.java (98%) rename src/main/java/subway/{ => manager}/InputStationManager.java (97%) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 631a1d433..71f9f862c 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -8,8 +8,10 @@ * * Copyright (c) by Davinci.J */ +import subway.controller.Subway; import subway.domain.Constants; import subway.domain.LineRepository; +import subway.manager.InputManager; import java.util.Scanner; diff --git a/src/main/java/subway/Subway.java b/src/main/java/subway/controller/Subway.java similarity index 90% rename from src/main/java/subway/Subway.java rename to src/main/java/subway/controller/Subway.java index a533a7357..f3c63ff20 100644 --- a/src/main/java/subway/Subway.java +++ b/src/main/java/subway/controller/Subway.java @@ -1,4 +1,4 @@ -package subway; +package subway.controller; /* * Subway * @@ -11,6 +11,9 @@ import subway.domain.Constants; import subway.domain.LineRepository; import subway.domain.StationRepository; +import subway.manager.InputLineManager; +import subway.manager.InputSectionManager; +import subway.manager.InputStationManager; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/subway/SubwayManager.java b/src/main/java/subway/controller/SubwayManager.java similarity index 93% rename from src/main/java/subway/SubwayManager.java rename to src/main/java/subway/controller/SubwayManager.java index 9a01bce9e..f95f2ec02 100644 --- a/src/main/java/subway/SubwayManager.java +++ b/src/main/java/subway/controller/SubwayManager.java @@ -1,4 +1,4 @@ -package subway; +package subway.controller; /* * SubwayManager * diff --git a/src/main/java/subway/InputLineManager.java b/src/main/java/subway/manager/InputLineManager.java similarity index 98% rename from src/main/java/subway/InputLineManager.java rename to src/main/java/subway/manager/InputLineManager.java index 60eac09b2..e0fa2cc77 100644 --- a/src/main/java/subway/InputLineManager.java +++ b/src/main/java/subway/manager/InputLineManager.java @@ -1,4 +1,4 @@ -package subway; +package subway.manager; /* * InputLineManager * @@ -8,6 +8,7 @@ * * Copyright (c) by Davinci.J */ +import subway.controller.SubwayManager; import subway.domain.*; import java.util.Arrays; diff --git a/src/main/java/subway/InputManager.java b/src/main/java/subway/manager/InputManager.java similarity index 80% rename from src/main/java/subway/InputManager.java rename to src/main/java/subway/manager/InputManager.java index e4cb3e9e8..7befacd69 100644 --- a/src/main/java/subway/InputManager.java +++ b/src/main/java/subway/manager/InputManager.java @@ -1,4 +1,4 @@ -package subway; +package subway.manager; public interface InputManager { void selectMenu(); diff --git a/src/main/java/subway/InputSectionManager.java b/src/main/java/subway/manager/InputSectionManager.java similarity index 98% rename from src/main/java/subway/InputSectionManager.java rename to src/main/java/subway/manager/InputSectionManager.java index 38a9cf666..9a5deea44 100644 --- a/src/main/java/subway/InputSectionManager.java +++ b/src/main/java/subway/manager/InputSectionManager.java @@ -1,4 +1,4 @@ -package subway; +package subway.manager; /* * InputSectionManager * @@ -8,6 +8,7 @@ * * Copyright (c) by Davinci.J */ +import subway.controller.SubwayManager; import subway.domain.*; import java.util.Arrays; diff --git a/src/main/java/subway/InputStationManager.java b/src/main/java/subway/manager/InputStationManager.java similarity index 97% rename from src/main/java/subway/InputStationManager.java rename to src/main/java/subway/manager/InputStationManager.java index d2a456987..a180a4c92 100644 --- a/src/main/java/subway/InputStationManager.java +++ b/src/main/java/subway/manager/InputStationManager.java @@ -1,4 +1,4 @@ -package subway; +package subway.manager; /* * InputStationManager * @@ -8,6 +8,7 @@ * * Copyright (c) by Davinci.J */ +import subway.controller.SubwayManager; import subway.domain.Constants; import subway.domain.Station; import subway.domain.StationName; From 96885ce25ed90dece414a65eb30f00dde024496a Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Wed, 16 Dec 2020 22:45:33 +0900 Subject: [PATCH 31/32] =?UTF-8?q?refactor:=20=EB=B9=84=EC=A6=88=EB=8B=88?= =?UTF-8?q?=EC=8A=A4=20=EB=A1=9C=EC=A7=81=EA=B3=BC=20UI=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 18 +--- .../java/subway/{domain => }/Constants.java | 2 +- src/main/java/subway/controller/Subway.java | 72 ++++++++------- .../java/subway/controller/SubwayManager.java | 23 ----- src/main/java/subway/domain/Line.java | 2 + src/main/java/subway/domain/LineName.java | 2 + .../java/subway/domain/LineRepository.java | 18 ---- .../java/subway/domain/PositiveNumber.java | 3 + src/main/java/subway/domain/Station.java | 4 +- src/main/java/subway/domain/StationName.java | 2 + .../java/subway/domain/StationRepository.java | 7 -- .../java/subway/manager/InputManager.java | 7 -- ...InputLineManager.java => LineManager.java} | 52 ++++------- ...ectionManager.java => SectionManager.java} | 61 +++++-------- ...tationManager.java => StationManager.java} | 46 ++++------ src/main/java/subway/view/InputView.java | 89 +++++++++++++++++++ src/main/java/subway/view/OutputView.java | 33 +++++++ 17 files changed, 237 insertions(+), 204 deletions(-) rename src/main/java/subway/{domain => }/Constants.java (99%) delete mode 100644 src/main/java/subway/controller/SubwayManager.java delete mode 100644 src/main/java/subway/manager/InputManager.java rename src/main/java/subway/manager/{InputLineManager.java => LineManager.java} (62%) rename src/main/java/subway/manager/{InputSectionManager.java => SectionManager.java} (63%) rename src/main/java/subway/manager/{InputStationManager.java => StationManager.java} (57%) create mode 100644 src/main/java/subway/view/InputView.java create mode 100644 src/main/java/subway/view/OutputView.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 71f9f862c..9ba8f627b 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -9,26 +9,14 @@ * Copyright (c) by Davinci.J */ import subway.controller.Subway; -import subway.domain.Constants; -import subway.domain.LineRepository; -import subway.manager.InputManager; +import subway.view.InputView; import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - Subway subway = new Subway(scanner); - while (true) { - String state = subway.selectState(); - if (state.equals(Constants.APPLICATION_QUIT)) { - break; - } - if (state.equals(Constants.SUBWAY_LINEMAP_MENU)) { - LineRepository.printLineAndStation(); - continue; - } - ((InputManager) subway.getMenus(state)).selectMenu(); - } + InputView.insertScanner(scanner); + Subway.run(); } } diff --git a/src/main/java/subway/domain/Constants.java b/src/main/java/subway/Constants.java similarity index 99% rename from src/main/java/subway/domain/Constants.java rename to src/main/java/subway/Constants.java index 7466a02d5..7c7b5c51f 100644 --- a/src/main/java/subway/domain/Constants.java +++ b/src/main/java/subway/Constants.java @@ -1,4 +1,4 @@ -package subway.domain; +package subway; public class Constants { public static final String APPLICATION_QUIT = "Q"; diff --git a/src/main/java/subway/controller/Subway.java b/src/main/java/subway/controller/Subway.java index f3c63ff20..08741d3a7 100644 --- a/src/main/java/subway/controller/Subway.java +++ b/src/main/java/subway/controller/Subway.java @@ -8,53 +8,63 @@ * * Copyright (c) by Davinci.J */ -import subway.domain.Constants; +import subway.Constants; import subway.domain.LineRepository; import subway.domain.StationRepository; -import subway.manager.InputLineManager; -import subway.manager.InputSectionManager; -import subway.manager.InputStationManager; +import subway.manager.LineManager; +import subway.manager.SectionManager; +import subway.manager.StationManager; +import subway.view.InputView; +import subway.view.OutputView; -import java.util.HashMap; -import java.util.Map; -import java.util.Scanner; +import java.util.Arrays; public class Subway { - private Scanner scanner; - private Map menus = new HashMap<>(); - - public Subway(Scanner scanner) { - this.scanner = scanner; - initSubway(); + static { StationRepository.init(); LineRepository.init(); } - public String selectState() { - System.out.println(Constants.MAIN_MENU); - String menu = scanner.next(); + private enum Menu { + STATION("1", StationManager::selectMenu), + LINE("2", LineManager::selectMenu), + SECTION("3", SectionManager::selectMenu), + SUBWAY_LIST("4", OutputView::printLineAndStation), + QUIT("Q", new Subway()::exit); + + private final String name; + private final Runnable runnable; + + Menu(String name, Runnable runnable) { + this.name = name; + this.runnable = runnable; + } + + public static void execute(String input) { + Arrays.stream(values()) + .filter(value -> value.name.equals(input)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException(Constants.WRONG_STATE_TRY_AGAIN)) + .runnable.run(); + } + + } + + public static void run() { try { - if (!menus.containsKey(menu)) { - throw new IllegalArgumentException(Constants.WRONG_STATE_TRY_AGAIN); + String state = InputView.inputMainMenu(); + Menu.execute(state); + if (!state.equals(Constants.APPLICATION_QUIT)) { + run(); } } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); - return selectState(); + run(); } - return menu; - } - - private void initSubway() { - menus.put(Constants.ONE, new InputStationManager(scanner)); - menus.put(Constants.TOW, new InputLineManager(scanner)); - menus.put(Constants.THREE, new InputSectionManager(scanner)); - menus.put(Constants.FOUR, Constants.FOUR); - menus.put(Constants.APPLICATION_QUIT, Constants.APPLICATION_QUIT); - SubwayManager.initSubwayManager(menus); } - public Object getMenus(String name) { - return menus.get(name); + private void exit() { + System.exit(0); } } \ No newline at end of file diff --git a/src/main/java/subway/controller/SubwayManager.java b/src/main/java/subway/controller/SubwayManager.java deleted file mode 100644 index f95f2ec02..000000000 --- a/src/main/java/subway/controller/SubwayManager.java +++ /dev/null @@ -1,23 +0,0 @@ -package subway.controller; -/* - * SubwayManager - * - * version 1.0 - * - * 2020.12.15 - * - * Copyright (c) by Davinci.J - */ -import java.util.Map; - -public class SubwayManager { - private static Map menus; - - public static void initSubwayManager(Map menus) { - SubwayManager.menus = menus; - } - - public static Object getMenus(String name) { - return menus.get(name); - } -} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 018688d0c..1788183bd 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,5 +1,7 @@ package subway.domain; +import subway.Constants; + import java.util.ArrayList; import java.util.List; import java.util.Objects; diff --git a/src/main/java/subway/domain/LineName.java b/src/main/java/subway/domain/LineName.java index b338641e5..92d62387f 100644 --- a/src/main/java/subway/domain/LineName.java +++ b/src/main/java/subway/domain/LineName.java @@ -8,6 +8,8 @@ * * Copyright (c) by Davinci.J */ +import subway.Constants; + import java.util.Objects; public class LineName { diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index ca32c4c08..4caa32786 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -39,14 +39,6 @@ public static boolean deleteLineByName(LineName name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } - public static void printLine() { - System.out.println(Constants.LINE_LIST); - for (Line line : lines) { - System.out.println(line.toString()); - } - System.out.println(); - } - public static boolean containsStationOfLine(Line line, Station station) { for (Line n : lines) { if (n.equals(line) && n.getStations().contains(station)) { @@ -83,14 +75,4 @@ public static void deleteSection(Line line, Station station) { } } - public static void printLineAndStation() { - for (Line line : lines) { - System.out.println(line.toString() + Constants.INFORMATION_BAR); - for (Station station : line.getStations()) { - System.out.println(station.toString()); - } - System.out.println(); - } - } - } diff --git a/src/main/java/subway/domain/PositiveNumber.java b/src/main/java/subway/domain/PositiveNumber.java index 3d2f50ab0..b613d6d67 100644 --- a/src/main/java/subway/domain/PositiveNumber.java +++ b/src/main/java/subway/domain/PositiveNumber.java @@ -1,4 +1,7 @@ package subway.domain; + +import subway.Constants; + /* * PositiveNumber * diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index 3fa04c782..4e2daaf2d 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,5 +1,7 @@ package subway.domain; +import subway.Constants; + import java.util.Objects; public class Station { @@ -38,7 +40,7 @@ public boolean setRegister(boolean register) { @Override public String toString() { - return "[INFO] " + name.toString(); + return Constants.INFORMATION + name.toString(); } } diff --git a/src/main/java/subway/domain/StationName.java b/src/main/java/subway/domain/StationName.java index 8398a8837..115dc8002 100644 --- a/src/main/java/subway/domain/StationName.java +++ b/src/main/java/subway/domain/StationName.java @@ -8,6 +8,8 @@ * * Copyright (c) by Davinci.J */ +import subway.Constants; + import java.util.Objects; public class StationName { diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index 8709c0e90..0c57f53cc 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -39,11 +39,4 @@ public static boolean isRegisteredStation(Station anotherStation) { return false; } - public static void printStation() { - System.out.println(Constants.STATION_LIST); - for (Station station : stations) { - System.out.println(station); - } - System.out.println(); - } } diff --git a/src/main/java/subway/manager/InputManager.java b/src/main/java/subway/manager/InputManager.java deleted file mode 100644 index 7befacd69..000000000 --- a/src/main/java/subway/manager/InputManager.java +++ /dev/null @@ -1,7 +0,0 @@ -package subway.manager; - -public interface InputManager { - void selectMenu(); - void register(); - void delete(); -} diff --git a/src/main/java/subway/manager/InputLineManager.java b/src/main/java/subway/manager/LineManager.java similarity index 62% rename from src/main/java/subway/manager/InputLineManager.java rename to src/main/java/subway/manager/LineManager.java index e0fa2cc77..b61c50977 100644 --- a/src/main/java/subway/manager/InputLineManager.java +++ b/src/main/java/subway/manager/LineManager.java @@ -8,20 +8,19 @@ * * Copyright (c) by Davinci.J */ -import subway.controller.SubwayManager; +import subway.Constants; import subway.domain.*; +import subway.view.InputView; +import subway.view.OutputView; import java.util.Arrays; -import java.util.Scanner; - -public class InputLineManager implements InputManager { - private Scanner scanner; +public class LineManager { private enum Menu { - REGISTER("1", ((InputLineManager) SubwayManager.getMenus(Constants.LINE_MENU))::register), - DELETE("2", ((InputLineManager) SubwayManager.getMenus(Constants.LINE_MENU))::delete), - INQUIRY("3", LineRepository::printLine), - BACK("B", System.out::println); + REGISTER("1", LineManager::register), + DELETE("2", LineManager::delete), + INQUIRY("3", OutputView::printLine), + BACK("B", () -> {}); private final String name; private final Runnable runnable; @@ -40,27 +39,18 @@ public static void execute(String input) { } } - public InputLineManager(Scanner scanner) { - this.scanner = scanner; - } - - @Override - public void selectMenu() { + public static void selectMenu() { try { - System.out.println(Constants.LINE_MAIN_MENU); - String state = scanner.next(); - Menu.execute(state); + Menu.execute(InputView.inputLineMenu()); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); selectMenu(); } } - @Override - public void register() { + public static void register() { try { - System.out.println(Constants.INPUT_LINE_TO_ENROLL); - Line line = new Line(new LineName(scanner.next())); + Line line = new Line(new LineName(InputView.inputLineToRegister())); if (LineRepository.lines().contains(line)) { throw new IllegalArgumentException(Constants.DUPLICATED_TRY_AGAIN); } @@ -73,10 +63,10 @@ public void register() { } } - private void registerStartStation(Line line) { + private static void registerStartStation(Line line) { try { - System.out.println(Constants.INPUT_START_STATION_TO_ENROLL); - Station station = new Station(new StationName(scanner.next())); + Station station = new Station( + new StationName(InputView.inputStartStationToEnroll())); if (!StationRepository.stations().contains(station)) { throw new IllegalArgumentException(Constants.NOTHING_TRY_AGAIN); } @@ -87,10 +77,9 @@ private void registerStartStation(Line line) { } } - private void registerEndStation(Line line, Station startStation) { + private static void registerEndStation(Line line, Station startStation) { try { - System.out.println(Constants.INPUT_END_STATION_TO_ENROLL); - Station endStation = new Station(new StationName(scanner.next())); + Station endStation = new Station(new StationName(InputView.inputEndStationToEnroll())); if (!StationRepository.stations().contains(endStation) || startStation.equals(endStation)) { throw new IllegalArgumentException(Constants.NOTHING_OR_START_END_SAME_TRY_AGAIN); @@ -103,12 +92,9 @@ private void registerEndStation(Line line, Station startStation) { } } - @Override - public void delete() { + public static void delete() { try { - System.out.println(Constants.INPUT_LINE_TO_DELETE); - String lineToDelete = scanner.next(); - if (!LineRepository.deleteLineByName(new LineName(lineToDelete))) { + if (!LineRepository.deleteLineByName(new LineName(InputView.inputLineToDelete()))) { throw new IllegalArgumentException(Constants.NOTHING_TO_DELETE_TRY_AGAIN); } System.out.println(Constants.LINE_DELETED); diff --git a/src/main/java/subway/manager/InputSectionManager.java b/src/main/java/subway/manager/SectionManager.java similarity index 63% rename from src/main/java/subway/manager/InputSectionManager.java rename to src/main/java/subway/manager/SectionManager.java index 9a5deea44..d33224ded 100644 --- a/src/main/java/subway/manager/InputSectionManager.java +++ b/src/main/java/subway/manager/SectionManager.java @@ -8,19 +8,17 @@ * * Copyright (c) by Davinci.J */ -import subway.controller.SubwayManager; +import subway.Constants; import subway.domain.*; +import subway.view.InputView; import java.util.Arrays; -import java.util.Scanner; - -public class InputSectionManager implements InputManager { - private Scanner scanner; +public class SectionManager { private enum Menu { - REGISTER("1", ((InputSectionManager) SubwayManager.getMenus(Constants.SECTION_MENU))::register), - DELETE("2", ((InputSectionManager) SubwayManager.getMenus(Constants.SECTION_MENU))::delete), - BACK("B", System.out::println); + REGISTER("1", SectionManager::register), + DELETE("2", SectionManager::delete), + BACK("B", () -> {}); private final String name; private final Runnable runnable; @@ -39,43 +37,33 @@ public static void execute(String input) { } } - public InputSectionManager(Scanner scanner) { - this.scanner = scanner; - } - - @Override - public void selectMenu() { + public static void selectMenu() { try { - System.out.println(Constants.SECTION_MAIN_MENU); - String state = scanner.next(); - Menu.execute(state); + Menu.execute(InputView.inputSectionMenu()); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); selectMenu(); } } - @Override - public void register() { + public static void register() { try { - System.out.println(Constants.INPUT_LINE); - Line line = new Line(new LineName(scanner.next())); + Line line = new Line(new LineName(InputView.inputSectionToRegister())); if (!LineRepository.lines().contains(line)) { throw new IllegalArgumentException(Constants.LINE_NOTHING_TRY_AGAIN); } registerStationInSection(line); System.out.println(Constants.SECTION_ENROLLED); - } catch (IllegalArgumentException - e) { + } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); register(); } } - private void registerStationInSection(Line line) { + private static void registerStationInSection(Line line) { try { - System.out.println(Constants.INPUT_STATION); - Station station = new Station(new StationName(scanner.next())); + Station station = new Station( + new StationName(InputView.inputStationInSectionToRegister())); if (!StationRepository.stations().contains(station) || LineRepository.containsStationOfLine(line, station)) { throw new IllegalArgumentException(Constants.NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN); @@ -87,10 +75,9 @@ private void registerStationInSection(Line line) { } } - private void registerOrderInSection(Line line, Station station) { + private static void registerOrderInSection(Line line, Station station) { try { - System.out.println(Constants.INPUT_ORDER); - PositiveNumber orderNumber = new PositiveNumber(scanner.next()); + PositiveNumber orderNumber = new PositiveNumber(InputView.inputOrderInSectionToRegister()); PositiveNumber lineSize = new PositiveNumber(LineRepository.getLineSize(line)); if (orderNumber.compareTo(lineSize) > 0) { throw new IllegalArgumentException(Constants.INDEX_OUT_OF_BOUNDS_TRY_AGAIN); @@ -103,15 +90,13 @@ private void registerOrderInSection(Line line, Station station) { } } - @Override - public void delete() { + public static void delete() { try { - System.out.println(Constants.INPUT_LINE_OF_SECTION_TO_DELETE); - Line line = new Line(new LineName(scanner.next())); + Line line = new Line(new LineName(InputView.inputSectionToDelete())); if (!LineRepository.lines().contains(line)) { throw new IllegalArgumentException(Constants.LINE_NOTHING_TRY_AGAIN); } - deleteStationOfSection(line); + deleteStationInSection(line); System.out.println(Constants.SECTION_DELETED); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); @@ -119,10 +104,10 @@ public void delete() { } } - private void deleteStationOfSection(Line line) { + private static void deleteStationInSection(Line line) { try { - System.out.println(Constants.INPUT_STATION_OF_SECTION_TO_ENROLL); - Station station = new Station(new StationName(scanner.next())); + Station station = new Station( + new StationName(InputView.inputStationInSectionToDelete())); if (!LineRepository.containsStationOfLine(line, station) || LineRepository.getLineSize(line) <= Constants.LINE_MIN_LENGTH) { throw new IllegalArgumentException(Constants.STATION_NOTHING_OR_LINE_LENGTH_LIMIT_TRY_AGAIN); @@ -130,7 +115,7 @@ private void deleteStationOfSection(Line line) { LineRepository.deleteSection(line, station); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); - deleteStationOfSection(line); + deleteStationInSection(line); } } } diff --git a/src/main/java/subway/manager/InputStationManager.java b/src/main/java/subway/manager/StationManager.java similarity index 57% rename from src/main/java/subway/manager/InputStationManager.java rename to src/main/java/subway/manager/StationManager.java index a180a4c92..fdeea9959 100644 --- a/src/main/java/subway/manager/InputStationManager.java +++ b/src/main/java/subway/manager/StationManager.java @@ -8,25 +8,21 @@ * * Copyright (c) by Davinci.J */ -import subway.controller.SubwayManager; -import subway.domain.Constants; +import subway.Constants; import subway.domain.Station; import subway.domain.StationName; import subway.domain.StationRepository; +import subway.view.InputView; +import subway.view.OutputView; import java.util.Arrays; -import java.util.Scanner; - -public class InputStationManager implements InputManager { - private Scanner scanner; +public class StationManager { private enum Menu { - REGISTER("1", - ((InputStationManager) SubwayManager.getMenus(Constants.STATION_MENU_NUMBER))::register), - DELETE("2", - ((InputStationManager) SubwayManager.getMenus(Constants.STATION_MENU_NUMBER))::delete), - INQUIRY("3", StationRepository::printStation), - BACK("B", System.out::println); + REGISTER("1", StationManager::register), + DELETE("2", StationManager::delete), + INQUIRY("3", OutputView::printStation), + BACK("B", () -> {}); private final String name; private final Runnable runnable; @@ -45,15 +41,9 @@ public static void execute(String input) { } } - public InputStationManager(Scanner scanner) { - this.scanner = scanner; - } - - @Override - public void selectMenu() { + public static void selectMenu() { try { - System.out.println(Constants.STATION_MAIN_MENU); - String state = scanner.next(); + String state = InputView.inputStationMenu(); Menu.execute(state); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); @@ -61,11 +51,9 @@ public void selectMenu() { } } - @Override - public void register() { + public static void register() { try { - System.out.println(Constants.INPUT_STATION_TO_ENROLL); - Station station = new Station(new StationName(scanner.next())); + Station station = new Station(new StationName(InputView.inputStationToRegister())); if (StationRepository.stations().contains(station)) { throw new IllegalArgumentException(Constants.DUPLICATED_TRY_AGAIN); } @@ -77,13 +65,11 @@ public void register() { } } - @Override - public void delete() { + public static void delete() { try { - System.out.println(Constants.INPUT_STATION_TO_DELETE); - String stationToDelete = scanner.next(); - if (StationRepository.isRegisteredStation(new Station(new StationName(stationToDelete))) - || !StationRepository.deleteStation(stationToDelete)) { + if (StationRepository.isRegisteredStation( + new Station(new StationName(InputView.inputStationToDelete()))) + || !StationRepository.deleteStation(InputView.inputStationToDelete())) { throw new IllegalArgumentException(Constants.NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN); } System.out.println(Constants.STATION_DELETED); diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java new file mode 100644 index 000000000..95642c4a2 --- /dev/null +++ b/src/main/java/subway/view/InputView.java @@ -0,0 +1,89 @@ +package subway.view; + +import subway.Constants; + +import java.util.Scanner; + +public class InputView { + public static Scanner scanner; + + public static void insertScanner(Scanner scanner) { + InputView.scanner = scanner; + } + + public static String inputMainMenu() { + System.out.println(Constants.MAIN_MENU); + return scanner.next(); + } + + public static String inputStationMenu() { + System.out.println(Constants.STATION_MAIN_MENU); + return scanner.next(); + } + + public static String inputStationToRegister() { + System.out.println(Constants.INPUT_STATION_TO_ENROLL); + return scanner.next(); + } + + public static String inputStationToDelete() { + System.out.println(Constants.INPUT_STATION_TO_DELETE); + return scanner.next(); + } + + public static String inputLineMenu() { + System.out.println(Constants.LINE_MAIN_MENU); + return scanner.next(); + } + + public static String inputLineToRegister() { + System.out.println(Constants.INPUT_LINE_TO_ENROLL); + return scanner.next(); + } + + public static String inputStartStationToEnroll() { + System.out.println(Constants.INPUT_START_STATION_TO_ENROLL); + return scanner.next(); + } + + public static String inputEndStationToEnroll() { + System.out.println(Constants.INPUT_END_STATION_TO_ENROLL); + return scanner.next(); + } + + public static String inputLineToDelete() { + System.out.println(Constants.INPUT_LINE_TO_DELETE); + return scanner.next(); + } + + public static String inputSectionMenu() { + System.out.println(Constants.SECTION_MAIN_MENU); + return scanner.next(); + } + + public static String inputSectionToRegister() { + System.out.println(Constants.INPUT_LINE); + return scanner.next(); + } + + public static String inputStationInSectionToRegister() { + System.out.println(Constants.INPUT_STATION); + return scanner.next(); + } + + public static String inputOrderInSectionToRegister() { + System.out.println(Constants.INPUT_ORDER); + return scanner.next(); + } + + public static String inputSectionToDelete() { + System.out.println(Constants.INPUT_LINE_OF_SECTION_TO_DELETE); + return scanner.next(); + } + + public static String inputStationInSectionToDelete() { + System.out.println(Constants.INPUT_STATION_OF_SECTION_TO_ENROLL); + return scanner.next(); + } + +} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java new file mode 100644 index 000000000..8255accf8 --- /dev/null +++ b/src/main/java/subway/view/OutputView.java @@ -0,0 +1,33 @@ +package subway.view; + +import subway.Constants; +import subway.domain.*; + +public class OutputView { + + public static void printStation() { + System.out.println(Constants.STATION_LIST); + for (Station station : StationRepository.stations()) { + System.out.println(station); + } + System.out.println(); + } + + public static void printLine() { + System.out.println(Constants.LINE_LIST); + for (Line line : LineRepository.lines()) { + System.out.println(line.toString()); + } + System.out.println(); + } + + public static void printLineAndStation() { + for (Line line : LineRepository.lines()) { + System.out.println(line.toString() + Constants.INFORMATION_BAR); + for (Station station : line.getStations()) { + System.out.println(station.toString()); + } + System.out.println(); + } + } +} From 227b22228ed001d64a018bece38485c37eac7a02 Mon Sep 17 00:00:00 2001 From: JUNGHOJONG Date: Wed, 16 Dec 2020 23:11:52 +0900 Subject: [PATCH 32/32] =?UTF-8?q?refactor:=20=EC=96=91=EC=9D=98=20?= =?UTF-8?q?=EC=A0=95=EC=88=98=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Constants.java | 3 ++- src/main/java/subway/domain/PositiveNumber.java | 14 -------------- src/main/java/subway/view/InputView.java | 13 ++++++++++--- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/main/java/subway/Constants.java b/src/main/java/subway/Constants.java index 7c7b5c51f..9be70b478 100644 --- a/src/main/java/subway/Constants.java +++ b/src/main/java/subway/Constants.java @@ -58,5 +58,6 @@ public class Constants { public static final String ERROR_ONLY_POSITIVE_NUMBER = "[ERROR] 양의 정수만 가능합니다."; public static final int SINGLE_DIGIT_MIN = 0; public static final int SINGLE_DIGIT_MAX = 9; - public static final String STATION_LIST = "\n## 역 목록\n"; + public static final String STATION_LIST = "\n## 역 목록"; + public static final String ERROR_NOT_NUMBER = "[ERROR] 숫자가 아닙니다."; } diff --git a/src/main/java/subway/domain/PositiveNumber.java b/src/main/java/subway/domain/PositiveNumber.java index b613d6d67..8b7d096ed 100644 --- a/src/main/java/subway/domain/PositiveNumber.java +++ b/src/main/java/subway/domain/PositiveNumber.java @@ -21,20 +21,6 @@ public PositiveNumber(int number) { this.number = number; } - public PositiveNumber(String number) { - for (int i=0; i Constants.SINGLE_DIGIT_MAX) { - throw new IllegalArgumentException(Constants.ERROR_ONLY_POSITIVE_NUMBER); - } - } - int orderNumber = Integer.parseInt(number); - if (orderNumber <= 0) { - throw new IllegalArgumentException(Constants.ERROR_ONLY_POSITIVE_NUMBER); - } - this.number = orderNumber; - } - @Override public int compareTo(PositiveNumber anotherNumber) { return number - anotherNumber.number; diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index 95642c4a2..af190bf72 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -2,6 +2,7 @@ import subway.Constants; +import java.util.InputMismatchException; import java.util.Scanner; public class InputView { @@ -71,9 +72,15 @@ public static String inputStationInSectionToRegister() { return scanner.next(); } - public static String inputOrderInSectionToRegister() { - System.out.println(Constants.INPUT_ORDER); - return scanner.next(); + public static int inputOrderInSectionToRegister() { + try { + System.out.println(Constants.INPUT_ORDER); + return scanner.nextInt(); + } catch (InputMismatchException e) { + System.out.println(Constants.ERROR_NOT_NUMBER); + scanner.nextLine(); + return inputOrderInSectionToRegister(); + } } public static String inputSectionToDelete() {