From fdff313d831c570a8124d3db44161e7a43b6791f Mon Sep 17 00:00:00 2001 From: Gomding <57378410+Gomding@users.noreply.github.com> Date: Mon, 14 Dec 2020 02:21:16 +0900 Subject: [PATCH 01/49] =?UTF-8?q?docs=20:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=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 | 517 ++++++------------------------------------------------ 1 file changed, 49 insertions(+), 468 deletions(-) diff --git a/README.md b/README.md index 450e7753a..89367c852 100644 --- a/README.md +++ b/README.md @@ -1,469 +1,50 @@ -# 지하철 노선도 미션 -- 지하철 역과 노선을 관리하는 지하철 노선도 기능을 구현한다. +## 기능 구현 목록 + +* 프로그램 시작 시 역, 노선 등 필요한 정보를 미리 셋팅할 수 있다. (초기 설정 like 기본값) + 1. 지하철 역으로 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역이 등록되어 있다. + 2. 지하철 노선으로 2호선, 3호선, 신분당선이 등록되어 있다. + 3. 기본 노선에는 역이 아래와 같이 등록되어 있다. (왼쪽 끝이 상행 종점) + * 2호선 : 교대역 - 강남역 - 역삼역 + * 3호선 : 교대역 - 남부터미널역 - 양재역 - 매봉역 + * 신분당선 : 강남역 - 양재역 - 양재시민의숲역 + + +* 역 관련 기능 + 1. 지하철 역을 등록하고 삭제하는 기능 (단, 노선에 등록된 역은 삭제할 수 없다) + 2. 지하철 역의 목록을 조회할 수 있다. + + +* 역 관련 예외 + 1. 중복된 지하철 역 이름은 등록할 수 없음 + 2. 지하철 역 이름은 2글자 이상이어야 한다. + + +* 노선 관련 기능 + 1. 지하철 노선을 등록하고 삭제할 수 있다. + 2. 노선 등록 시 상행 종점역과 하행 종점역을 입력 받는다. + 3. 지하철 노선의 목록을 조회할 수 있다. + + +* 노선 관련 예외 + 1. 중복된 지하철 노선 이름이 등록될 수 없다. + 2. 지하철 노선 이름은 2글자 이상이어야 한다. + 3. 노선을 조회, 삭제할 때 등록되지 않은 노선에 대한 조회, 삭제는 예외를 발생시킨다. + 4. 더이상 노선이 없다면 삭제 기능이나 조회기능에 진입했을 때 메시지로 알려준다.(모든 노선을 삭제했을 때) + + +* 구간 추가 기능 (역과 역 사이를 구간, 구간들의 모음 = 노선) + 1. 지하철 노선에 구간을 추가하는 기능 ( 노선에 역을 추가하는 것) + 2. 하나의 역은 여러개의 노선에 추가가 가능 + 3. 역과 역 사이에 새로운 역을 추가하는 기능 + 4. 갈래길을 생성할 수 없음(예외사항) + 5. 노선에 이미 있는 역이라면 추가가 불가능(예외사항) + +* 구간 삭제 기능 + 1. 노선에 등록된 역을 제거하는 기능 + 2. 종점을 제거할 경우 다음 역이 종점이됨 + 3. 노선에 포함된 역이 2개 이하일때는 역을 제거할 수 없습니다. (예외사항) + + +* 노선에 등록된 역 리스트 조회기능 + 1. 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회하는 기능 -
- -## 🚀 기능 요구사항 - -### 초기 설정 -- 프로그램 시작 시 역, 노선 등 필요한 정보를 미리 셋팅할 수 있다. - -> 아래의 사전 등록 정보로 반드시 초기 설정을 하기 -> -``` - 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) { - ... - } -} -``` - -### 프로그래밍 요구사항 - Station, Line -- Station, Line 클래스를 활용하여 지하철역과 노선을 구현해야 한다. -- 제공하는 각 클래스의 기본 생성자를 추가할 수 없다. -- 필드(인스턴스 변수)인 name의 접근 제어자 private을 변경할 수 없다. -- 가능하면 setter 메소드(ex. setXXX)를 추가하지 않고 구현한다. - -```java -public class Station { - private String name; - - public Station(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - // 추가 기능 구현 -} - -``` - -### 프로그래밍 요구사항 - StationRepository, LineRepository -- Station과 Line의 상태를 저장할 수 있는 StationRepository, LineRepository를 제공한다. -- 필요 시 StationRepository, LineRepository 이 외 추가로 Repository를 만들 수 있다. -- 추가로 생성되는 객체에 대해서 XXXRepository 네이밍으로 저장 클래스를 추가할 수 있다. -- 객체들의 상태를 관리하기 위해서 XXXRepository 클래스를 활용해 저장 로직을 구현해야 한다. -- 필요에 따라 자유롭게 수정이 가능하다. - -```java -public class StationRepository { - private static final List stations = new ArrayList<>(); - - public static List stations() { - return Collections.unmodifiableList(stations); - } - - public static void addStation(Station station) { - stations.add(station); - } - - public static boolean deleteStation(String name) { - return stations.removeIf(station -> Objects.equals(station.getName(), name)); - } -} -``` - -
- -## 📈 진행 요구사항 -- 미션은 [java-subway-map-precourse 저장소](https://github.com/woowacourse/java-subway-map-precourse) 를 fork/clone해 시작한다. -- 기능을 구현하기 전에 java-subway-map-precourse/docs/README.md 파일에 구현할 기능 목록을 정리해 추가한다. -- git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다. - - [AngularJS Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 참고해 commit log를 남긴다. -- [프리코스 과제 제출 문서](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) 절차를 따라 미션을 제출한다. - - [프리코스 과제 FAQ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse/faq) 문서를 참고하여 진행할 수 있다. -
- -## 📝 License - -This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/blob/master/LICENSE.md) licensed. From 4163bb0d3490cc70c17ed8f9c3c22cd14d080698 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 00:31:57 +0900 Subject: [PATCH 02/49] =?UTF-8?q?feat=20:=20=EC=97=AD=EC=9D=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 10 ++++++++++ src/main/java/subway/domain/LineRepository.java | 1 + src/main/java/subway/domain/StationRepository.java | 7 +++++++ 3 files changed, 18 insertions(+) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..54611f852 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,5 +1,8 @@ package subway.domain; +import java.util.LinkedList; +import java.util.List; + public class Line { private String name; @@ -12,4 +15,11 @@ public String getName() { } // 추가 기능 구현 + +/* private List stationList = new LinkedList<>(); + + public boolean equal(String lineName) { + return name.equals(lineName); + }*/ + } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 49132ddb6..65551ac22 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -19,4 +19,5 @@ public static void addLine(Line line) { public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index b7245c0f3..8b7ff19fb 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -19,4 +19,11 @@ public static void addStation(Station station) { public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + + public static void printStationList() { + for (Station station : stations) { + System.out.println(station.getName()); + } + } + } From 2cbd92d145f1c30d6e966dab1ce2602b94a9da37 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 00:37:13 +0900 Subject: [PATCH 03/49] =?UTF-8?q?feat=20:=20=EC=97=AD=EC=9D=84=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=ED=95=A0=20=EB=95=8C=20=EC=A4=91=EB=B3=B5=EA=B2=80?= =?UTF-8?q?=EC=82=AC=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/util/StationError.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/subway/util/StationError.java diff --git a/src/main/java/subway/util/StationError.java b/src/main/java/subway/util/StationError.java new file mode 100644 index 000000000..38e7c6b26 --- /dev/null +++ b/src/main/java/subway/util/StationError.java @@ -0,0 +1,17 @@ +package subway.util; + +import subway.domain.Station; + +import java.util.List; + +public class StationError { + + public static boolean checkDuplicateName(String name, List stations) { + for(Station station : stations) { + if (station.getName().equals(name)) { + return true; + } + } + return false; + } +} From b15f8484e45295be74cab0bb6ce1c0be2b0dde08 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 00:54:02 +0900 Subject: [PATCH 04/49] =?UTF-8?q?feat=20:=20=EC=97=AD=EC=9D=84=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=ED=95=A0=20=EB=95=8C=20=EC=97=AD=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=B4=202=EC=9E=90=EB=A6=AC=20=EC=9D=B4=EC=83=81=EC=9D=B8?= =?UTF-8?q?=EC=A7=80=20=EA=B2=80=EC=82=AC=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/util/StationError.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/subway/util/StationError.java b/src/main/java/subway/util/StationError.java index 38e7c6b26..d35e2de32 100644 --- a/src/main/java/subway/util/StationError.java +++ b/src/main/java/subway/util/StationError.java @@ -6,6 +6,8 @@ public class StationError { + private static final int SIZE = 2; + public static boolean checkDuplicateName(String name, List stations) { for(Station station : stations) { if (station.getName().equals(name)) { @@ -14,4 +16,11 @@ public static boolean checkDuplicateName(String name, List stations) { } return false; } + + public static boolean checkValidName(String name) { + if (name.length() >= SIZE) { + return true; + } + return false; + } } From a1cbfc565f6501f4fcd7565b6832bb6cd394a39b Mon Sep 17 00:00:00 2001 From: Gomding <57378410+Gomding@users.noreply.github.com> Date: Tue, 15 Dec 2020 01:13:36 +0900 Subject: [PATCH 05/49] =?UTF-8?q?update(readme)=20:=20=EA=B5=AC=EA=B0=84?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EA=B8=B0=EB=8A=A5=EC=97=90=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=82=AC=ED=95=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 89367c852..ae4a68994 100644 --- a/README.md +++ b/README.md @@ -33,11 +33,13 @@ * 구간 추가 기능 (역과 역 사이를 구간, 구간들의 모음 = 노선) + + 순서는 1부터 시작 1. 지하철 노선에 구간을 추가하는 기능 ( 노선에 역을 추가하는 것) 2. 하나의 역은 여러개의 노선에 추가가 가능 3. 역과 역 사이에 새로운 역을 추가하는 기능 4. 갈래길을 생성할 수 없음(예외사항) 5. 노선에 이미 있는 역이라면 추가가 불가능(예외사항) + 6. 구간에 추가하는 역이 등록돼있는 역인지 검사하는 기능(예외사항) * 구간 삭제 기능 1. 노선에 등록된 역을 제거하는 기능 From e34169689093c84f9a3bb22f0a525fce910688a0 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 01:16:43 +0900 Subject: [PATCH 06/49] =?UTF-8?q?feat=20:=20=EB=85=B8=EC=84=A0=EC=9D=84=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=ED=95=A0=20=EB=95=8C=20=EC=83=81=ED=96=89?= =?UTF-8?q?=EC=84=A0=20=ED=95=98=ED=96=89=EC=84=A0=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=B4=20=EB=85=B8=EC=84=A0=EC=95=88?= =?UTF-8?q?=EC=97=90=20=EC=A7=80=ED=95=98=EC=B2=A0=20=EC=97=AD=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=A5=BC=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/domain/Line.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 54611f852..e3611a655 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -16,9 +16,13 @@ public String getName() { // 추가 기능 구현 -/* private List stationList = new LinkedList<>(); + private List stationList = new LinkedList<>(); - public boolean equal(String lineName) { + public void addStation(String stationName) { + stationList.add(new Station(stationName)); + } + + /*public boolean equal(String lineName) { return name.equals(lineName); }*/ From ce114a4d6d1a8e4ce07d74f78a570de215fd5de2 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 01:26:13 +0900 Subject: [PATCH 07/49] =?UTF-8?q?feat=20:=20=EB=85=B8=EC=84=A0=EC=9D=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=A0=20=EB=95=8C=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=EB=90=9C=20=EC=9D=B4=EB=A6=84=EC=9D=B4=20=EC=9E=88=EB=8A=94?= =?UTF-8?q?=EC=A7=80=20=EA=B2=80=EC=82=AC=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/domain/LineRepository.java | 6 ++++++ src/main/java/subway/util/LineError.java | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/main/java/subway/util/LineError.java diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 65551ac22..b80cc616d 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -20,4 +20,10 @@ public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + public static void printLineList() { + for (Line line : lines) { + System.out.println(line.getName()); + } + } + } diff --git a/src/main/java/subway/util/LineError.java b/src/main/java/subway/util/LineError.java new file mode 100644 index 000000000..71c86a0f6 --- /dev/null +++ b/src/main/java/subway/util/LineError.java @@ -0,0 +1,19 @@ +package subway.util; + +import subway.domain.Line; + +import java.util.List; + +public class LineError { + + private static final int SIZE = 2; + + public static boolean checkDuplicateName(String name, List lines) { + for (Line line : lines) { + if (line.getName().equals(name)) { + return true; + } + } + return false; + } +} From b3368f65eb9861b062644fcc07950a7addba6220 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 01:26:38 +0900 Subject: [PATCH 08/49] =?UTF-8?q?feat=20:=20=EB=85=B8=EC=84=A0=EC=9D=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=A0=20=EB=95=8C=202=EA=B8=80=EC=9E=90?= =?UTF-8?q?=20=EC=9D=B4=EC=83=81=EC=9D=B8=EC=A7=80=20=EA=B2=80=EC=82=AC?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/util/LineError.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/subway/util/LineError.java b/src/main/java/subway/util/LineError.java index 71c86a0f6..6c9f3efe8 100644 --- a/src/main/java/subway/util/LineError.java +++ b/src/main/java/subway/util/LineError.java @@ -16,4 +16,11 @@ public static boolean checkDuplicateName(String name, List lines) { } return false; } + + public static boolean checkValidName(String name) { + if (name.length() >= 2) { + return true; + } + return false; + } } From 9d63ef7b45e4fad8de3a68c390aabe1eadfb8b28 Mon Sep 17 00:00:00 2001 From: Gomding <57378410+Gomding@users.noreply.github.com> Date: Tue, 15 Dec 2020 01:28:39 +0900 Subject: [PATCH 09/49] =?UTF-8?q?update(readme)=20:=20=EC=97=AD,=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EA=B4=80=EB=A0=A8=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ae4a68994..a4ae2f459 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ * 역 관련 예외 1. 중복된 지하철 역 이름은 등록할 수 없음 2. 지하철 역 이름은 2글자 이상이어야 한다. + 3. 지하철 역을 삭제할 때 등록되지 않은 역에대한 삭제는 예외를 발생시킨다. * 노선 관련 기능 @@ -28,7 +29,7 @@ * 노선 관련 예외 1. 중복된 지하철 노선 이름이 등록될 수 없다. 2. 지하철 노선 이름은 2글자 이상이어야 한다. - 3. 노선을 조회, 삭제할 때 등록되지 않은 노선에 대한 조회, 삭제는 예외를 발생시킨다. + 3. 노선을 삭제할 때 등록되지 않은 노선에 대한 삭제는 예외를 발생시킨다. 4. 더이상 노선이 없다면 삭제 기능이나 조회기능에 진입했을 때 메시지로 알려준다.(모든 노선을 삭제했을 때) From 1331c570bd63a3813e991be3c425d8ee09ad9cd8 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 01:33:31 +0900 Subject: [PATCH 10/49] =?UTF-8?q?feat=20:=20=EC=97=AD=EC=9D=B4=EB=82=98=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EC=9D=84=20=EC=A1=B0=ED=9A=8C=ED=95=A0=20?= =?UTF-8?q?=EB=95=8C=20=EC=A1=B4=EC=9E=AC=ED=95=98=EB=8A=94=20=EC=97=AD?= =?UTF-8?q?=EC=9D=B4=EB=82=98=20=EB=85=B8=EC=84=A0=EC=9D=B4=20=EC=97=86?= =?UTF-8?q?=EB=8B=A4=EB=A9=B4=20=EB=A9=94=EC=8B=9C=EC=A7=80=EB=A1=9C=20?= =?UTF-8?q?=EC=95=8C=EB=A0=A4=EC=A3=BC=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/LineRepository.java | 4 ++++ src/main/java/subway/domain/StationRepository.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index b80cc616d..d27eb5345 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -21,6 +21,10 @@ public static boolean deleteLineByName(String name) { } public static void printLineList() { + if (lines.size() == 0) { + System.out.println("존재하는 노선이 없습니다."); + return; + } for (Line line : lines) { System.out.println(line.getName()); } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index 8b7ff19fb..4021f8f54 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -21,6 +21,10 @@ public static boolean deleteStation(String name) { } public static void printStationList() { + if (stations.size() == 0) { + System.out.println("존재하는 역이 없습니다."); + return; + } for (Station station : stations) { System.out.println(station.getName()); } From a24525ff6b446c987c8a4da52da228651c4d2949 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 01:58:06 +0900 Subject: [PATCH 11/49] =?UTF-8?q?feat=20:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EC=97=90=20=EA=B5=AC=EA=B0=84=EC=9D=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=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 --- src/main/java/subway/domain/Line.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index e3611a655..b299d1532 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -22,6 +22,10 @@ public void addStation(String stationName) { stationList.add(new Station(stationName)); } + public void addStation(String stationName, int index) { + stationList.add(index-1, new Station(stationName)); + } + /*public boolean equal(String lineName) { return name.equals(lineName); }*/ From 8f418c5f8406e5a64a77a324eda581239ee0b8eb Mon Sep 17 00:00:00 2001 From: Gomding <57378410+Gomding@users.noreply.github.com> Date: Tue, 15 Dec 2020 02:09:15 +0900 Subject: [PATCH 12/49] =?UTF-8?q?update(README)=20:=20=EA=B5=AC=EA=B0=84?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EC=98=88=EC=99=B8=EA=B8=B0=EB=8A=A5=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 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a4ae2f459..43a9b8f70 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ 3. 역과 역 사이에 새로운 역을 추가하는 기능 4. 갈래길을 생성할 수 없음(예외사항) 5. 노선에 이미 있는 역이라면 추가가 불가능(예외사항) - 6. 구간에 추가하는 역이 등록돼있는 역인지 검사하는 기능(예외사항) + 6. 구간에 추가하는 역이 등록돼있는 역인지(StationRepository에 있는 역인지) 검사하는 기능(예외사항) * 구간 삭제 기능 1. 노선에 등록된 역을 제거하는 기능 From eb32b8f348816b533716eeda86213f3d807e2f34 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 03:04:53 +0900 Subject: [PATCH 13/49] =?UTF-8?q?feat=20:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EC=97=90=20=EA=B5=AC=EA=B0=84=EC=9D=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=A0=20=EB=95=8C=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 지하철 노선에 구간을 추가할 때 입력한 역 이름이 StationRepository에 존재하는지 검사하는 기능 추가 --- src/main/java/subway/util/IntervalError.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/subway/util/IntervalError.java diff --git a/src/main/java/subway/util/IntervalError.java b/src/main/java/subway/util/IntervalError.java new file mode 100644 index 000000000..04ba4416f --- /dev/null +++ b/src/main/java/subway/util/IntervalError.java @@ -0,0 +1,17 @@ +package subway.util; + +import subway.domain.Station; + +import java.util.List; + +public class IntervalError { + + public static boolean checkValidStation(String name, List stationList) { + for (Station station : stationList) { + if (station.getName().equals(name)) { + return false; + } + } + return true; + } +} From 706e4731a5350fd73bbd11967d3b04d1f6895ab4 Mon Sep 17 00:00:00 2001 From: Gomding <57378410+Gomding@users.noreply.github.com> Date: Tue, 15 Dec 2020 03:06:47 +0900 Subject: [PATCH 14/49] =?UTF-8?q?update(README)=20:=20=EA=B5=AC=EA=B0=84?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 43a9b8f70..6f84a206c 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ 1. 노선에 등록된 역을 제거하는 기능 2. 종점을 제거할 경우 다음 역이 종점이됨 3. 노선에 포함된 역이 2개 이하일때는 역을 제거할 수 없습니다. (예외사항) + 4. 노선에 존재하지 않는 역이라면 제거할 수 없습니다. (예외사항) * 노선에 등록된 역 리스트 조회기능 From 6240409b58f630fabadcb3fb2bb9e7bd1e9cfa9e Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 03:24:08 +0900 Subject: [PATCH 15/49] =?UTF-8?q?feat=20:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EC=97=90=20=EB=93=B1=EB=A1=9D=EB=90=9C=20?= =?UTF-8?q?=EC=97=AD=EC=9D=84=20=EC=A0=9C=EA=B1=B0=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80(=EA=B5=AC=EA=B0=84=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 5 +++++ src/main/java/subway/util/IntervalError.java | 2 ++ src/main/java/subway/util/LineError.java | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index b299d1532..99df017d1 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -2,6 +2,7 @@ import java.util.LinkedList; import java.util.List; +import java.util.Objects; public class Line { private String name; @@ -26,6 +27,10 @@ public void addStation(String stationName, int index) { stationList.add(index-1, new Station(stationName)); } + public boolean deleteStation(String stationName) { + return stationList.removeIf(station -> Objects.equals(station.getName(), stationName)); + } + /*public boolean equal(String lineName) { return name.equals(lineName); }*/ diff --git a/src/main/java/subway/util/IntervalError.java b/src/main/java/subway/util/IntervalError.java index 04ba4416f..8f811c52b 100644 --- a/src/main/java/subway/util/IntervalError.java +++ b/src/main/java/subway/util/IntervalError.java @@ -5,6 +5,7 @@ import java.util.List; public class IntervalError { + private static final int SIZE = 2; public static boolean checkValidStation(String name, List stationList) { for (Station station : stationList) { @@ -14,4 +15,5 @@ public static boolean checkValidStation(String name, List stationList) } return true; } + } diff --git a/src/main/java/subway/util/LineError.java b/src/main/java/subway/util/LineError.java index 6c9f3efe8..0bd253e6d 100644 --- a/src/main/java/subway/util/LineError.java +++ b/src/main/java/subway/util/LineError.java @@ -18,7 +18,7 @@ public static boolean checkDuplicateName(String name, List lines) { } public static boolean checkValidName(String name) { - if (name.length() >= 2) { + if (name.length() >= SIZE) { return true; } return false; From 5773f5ab8f0330e8f327f11a0e437c6e4ca5240a Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 03:25:07 +0900 Subject: [PATCH 16/49] =?UTF-8?q?feat=20:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EC=97=90=20=EB=93=B1=EB=A1=9D=EB=90=9C=20?= =?UTF-8?q?=EC=97=AD=EC=9D=84=20=EC=A0=9C=EA=B1=B0=ED=95=A0=20=EB=95=8C=20?= =?UTF-8?q?=ED=8F=AC=ED=95=A8=EB=90=9C=20=EC=97=AD=EC=9D=B4=202=EA=B0=9C?= =?UTF-8?q?=20=EC=9D=B4=ED=95=98=EC=9D=B8=EC=A7=80=20=EA=B2=80=EC=82=AC?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/util/IntervalError.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/subway/util/IntervalError.java b/src/main/java/subway/util/IntervalError.java index 8f811c52b..bb7c1c67b 100644 --- a/src/main/java/subway/util/IntervalError.java +++ b/src/main/java/subway/util/IntervalError.java @@ -16,4 +16,11 @@ public static boolean checkValidStation(String name, List stationList) return true; } + public static boolean checkValidDelete(String name, List stationList) { + if (stationList.size() <= SIZE) { + return false; + } + return true; + } + } From 7f3f012f1fa7a00e9e4ee685fe96e5b21a545951 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 03:27:18 +0900 Subject: [PATCH 17/49] =?UTF-8?q?update=20:=20=EC=98=88=EC=99=B8=EC=82=AC?= =?UTF-8?q?=ED=95=AD=EC=9D=84=20=EA=B2=80=EC=82=AC=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9D=B4=EB=A6=84=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20Error=20->=20Validator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/util/{IntervalError.java => IntervalValidator.java} | 2 +- .../java/subway/util/{LineError.java => LineValidator.java} | 2 +- .../subway/util/{StationError.java => StationValidator.java} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/main/java/subway/util/{IntervalError.java => IntervalValidator.java} (94%) rename src/main/java/subway/util/{LineError.java => LineValidator.java} (94%) rename src/main/java/subway/util/{StationError.java => StationValidator.java} (94%) diff --git a/src/main/java/subway/util/IntervalError.java b/src/main/java/subway/util/IntervalValidator.java similarity index 94% rename from src/main/java/subway/util/IntervalError.java rename to src/main/java/subway/util/IntervalValidator.java index bb7c1c67b..ad0d25702 100644 --- a/src/main/java/subway/util/IntervalError.java +++ b/src/main/java/subway/util/IntervalValidator.java @@ -4,7 +4,7 @@ import java.util.List; -public class IntervalError { +public class IntervalValidator { private static final int SIZE = 2; public static boolean checkValidStation(String name, List stationList) { diff --git a/src/main/java/subway/util/LineError.java b/src/main/java/subway/util/LineValidator.java similarity index 94% rename from src/main/java/subway/util/LineError.java rename to src/main/java/subway/util/LineValidator.java index 0bd253e6d..c3b5b6b6b 100644 --- a/src/main/java/subway/util/LineError.java +++ b/src/main/java/subway/util/LineValidator.java @@ -4,7 +4,7 @@ import java.util.List; -public class LineError { +public class LineValidator { private static final int SIZE = 2; diff --git a/src/main/java/subway/util/StationError.java b/src/main/java/subway/util/StationValidator.java similarity index 94% rename from src/main/java/subway/util/StationError.java rename to src/main/java/subway/util/StationValidator.java index d35e2de32..5c1b52283 100644 --- a/src/main/java/subway/util/StationError.java +++ b/src/main/java/subway/util/StationValidator.java @@ -4,7 +4,7 @@ import java.util.List; -public class StationError { +public class StationValidator { private static final int SIZE = 2; From fb5fed0ffb970a4270982020e65efafe92d3476d Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 03:33:01 +0900 Subject: [PATCH 18/49] =?UTF-8?q?feat=20:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=20=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=A8?= =?UTF-8?q?=EC=9D=84=20=EC=8B=9C=EC=9E=91=ED=95=98=EA=B3=A0=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=ED=95=98=EB=8A=94=20SubwayMap=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 3 +++ src/main/java/subway/map/SubwayMap.java | 10 ++++++++++ 2 files changed, 13 insertions(+) create mode 100644 src/main/java/subway/map/SubwayMap.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..141f3a6c6 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,13 @@ package subway; +import subway.map.SubwayMap; + import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 + new SubwayMap().start(scanner); } } diff --git a/src/main/java/subway/map/SubwayMap.java b/src/main/java/subway/map/SubwayMap.java new file mode 100644 index 000000000..6e4f702a2 --- /dev/null +++ b/src/main/java/subway/map/SubwayMap.java @@ -0,0 +1,10 @@ +package subway.map; + +import java.util.Scanner; + +public class SubwayMap { + + public void start(Scanner scanner) { + + } +} From 05b63d2764018f9df098ddab940a4aef0415d8e6 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 03:39:04 +0900 Subject: [PATCH 19/49] =?UTF-8?q?update=20:=20=EC=A7=80=ED=95=98=EC=B2=A0?= =?UTF-8?q?=20=EB=85=B8=EC=84=A0=EB=8F=84=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=A8=EC=9D=84=20=EC=A7=84=ED=96=89=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EA=B3=BC=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클래스명 변경 : SubwayMap -> MainMenu 패키지명 변경 : map -> menu --- src/main/java/subway/Application.java | 4 ++-- src/main/java/subway/map/SubwayMap.java | 10 ---------- src/main/java/subway/menu/MainMenu.java | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 12 deletions(-) delete mode 100644 src/main/java/subway/map/SubwayMap.java create mode 100644 src/main/java/subway/menu/MainMenu.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 141f3a6c6..e8144a1ef 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,6 +1,6 @@ package subway; -import subway.map.SubwayMap; +import subway.menu.MainMenu; import java.util.Scanner; @@ -8,6 +8,6 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 - new SubwayMap().start(scanner); + new MainMenu().start(scanner); } } diff --git a/src/main/java/subway/map/SubwayMap.java b/src/main/java/subway/map/SubwayMap.java deleted file mode 100644 index 6e4f702a2..000000000 --- a/src/main/java/subway/map/SubwayMap.java +++ /dev/null @@ -1,10 +0,0 @@ -package subway.map; - -import java.util.Scanner; - -public class SubwayMap { - - public void start(Scanner scanner) { - - } -} diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java new file mode 100644 index 000000000..ca5b63454 --- /dev/null +++ b/src/main/java/subway/menu/MainMenu.java @@ -0,0 +1,18 @@ +package subway.menu; + +import java.util.Scanner; + +public class MainMenu { + + private static final String MAIN_TITLE = "## 메인 화면"; + private static final String MENU1 = "1. 역 관리"; + private static final String MENU2 = "2. 노선 관리"; + private static final String MENU3 = "3. 구간 관리"; + private static final String MENU4 = "4. 지하철 노선도 출력"; + private static final String QUIT = "Q. 종료"; + private static final String CHOICE_MESSAGE = "## 원하는 기능을 선택하세요."; + + public void start(Scanner scanner) { + + } +} From f92a9cb2e30e409dc008dcc5fe92d6ecd6d8ca42 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 03:47:15 +0900 Subject: [PATCH 20/49] =?UTF-8?q?update=20:=20StationRepository=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EC=88=98=EC=A0=95,=20Line=EC=97=90=20?= =?UTF-8?q?=EC=97=AD=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit StationRepository - stationList 를 ArrayList에서 LinkedList로 변경 Line - stationList와 관련 기능을 없애고 StationRepository 타입의 변수를 추가 --- src/main/java/subway/domain/Line.java | 14 +------------- src/main/java/subway/domain/StationRepository.java | 11 ++++++----- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 99df017d1..308c3111f 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -17,19 +17,7 @@ public String getName() { // 추가 기능 구현 - private List stationList = new LinkedList<>(); - - public void addStation(String stationName) { - stationList.add(new Station(stationName)); - } - - public void addStation(String stationName, int index) { - stationList.add(index-1, new Station(stationName)); - } - - public boolean deleteStation(String stationName) { - return stationList.removeIf(station -> Objects.equals(station.getName(), stationName)); - } + private StationRepository stationRepository = new StationRepository(); /*public boolean equal(String lineName) { return name.equals(lineName); diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index 4021f8f54..9c9ace03f 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -1,12 +1,9 @@ package subway.domain; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; public class StationRepository { - private static final List stations = new ArrayList<>(); + private static final List stations = new LinkedList<>(); public static List stations() { return Collections.unmodifiableList(stations); @@ -16,6 +13,10 @@ public static void addStation(Station station) { stations.add(station); } + public static void addStation(Station station, int index) { + stations.add(index-1, station); + } + public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } From 838bcab6db959871d1af66fcfde476f8d6bb4ad8 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 03:56:54 +0900 Subject: [PATCH 21/49] =?UTF-8?q?feat=20:=20=EB=A9=94=EC=9D=B8=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20=ED=99=94=EB=A9=B4=20=EC=B6=9C=EB=A0=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/menu/MainMenu.java | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index ca5b63454..af20b898b 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -12,7 +12,38 @@ public class MainMenu { private static final String QUIT = "Q. 종료"; private static final String CHOICE_MESSAGE = "## 원하는 기능을 선택하세요."; + private Scanner scanner; + public void start(Scanner scanner) { + this.scanner = scanner; + String input = ""; + while (!input.equals("Q")) { + printMainMenu(); + input = scanner.nextLine(); + switch (input) { + case "1" : + break; + case "2" : + break; + case "3" : + break; + case "4" : + break; + case "Q" : + break; + } + } + } + private void printMainMenu() { + StringBuilder sb = new StringBuilder(); + sb.append(MAIN_TITLE).append("\n") + .append(MENU1).append("\n") + .append(MENU2).append("\n") + .append(MENU3).append("\n") + .append(MENU4).append("\n") + .append(QUIT).append("\n\n") + .append(CHOICE_MESSAGE).append("\n"); + System.out.println(sb); } } From ef38c2977555833185f602cb8affdce941d430f6 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 04:20:24 +0900 Subject: [PATCH 22/49] =?UTF-8?q?feat=20:=20=EC=97=AD=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=20=ED=99=94=EB=A9=B4=20=EB=A9=94=EB=89=B4=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=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 | 2 +- src/main/java/subway/menu/MainMenu.java | 8 +++-- src/main/java/subway/menu/StationMenu.java | 38 ++++++++++++++++++++++ 3 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 src/main/java/subway/menu/StationMenu.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index e8144a1ef..417d3abde 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -8,6 +8,6 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 - new MainMenu().start(scanner); + new MainMenu(scanner).start(); } } diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index af20b898b..d0fa07ace 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -14,14 +14,18 @@ public class MainMenu { private Scanner scanner; - public void start(Scanner scanner) { + public MainMenu(Scanner scanner) { this.scanner = scanner; + } + + public void start() { String input = ""; while (!input.equals("Q")) { printMainMenu(); input = scanner.nextLine(); switch (input) { case "1" : + new StationMenu(scanner).startStationMenu(); break; case "2" : break; @@ -43,7 +47,7 @@ private void printMainMenu() { .append(MENU3).append("\n") .append(MENU4).append("\n") .append(QUIT).append("\n\n") - .append(CHOICE_MESSAGE).append("\n"); + .append(CHOICE_MESSAGE); System.out.println(sb); } } diff --git a/src/main/java/subway/menu/StationMenu.java b/src/main/java/subway/menu/StationMenu.java new file mode 100644 index 000000000..e4b38af05 --- /dev/null +++ b/src/main/java/subway/menu/StationMenu.java @@ -0,0 +1,38 @@ +package subway.menu; + +import java.util.Scanner; + +public class StationMenu { + private static final String MENU_TITLE = "## 역 관리 화면"; + private static final String MENU1 = "1. 역 등록"; + private static final String MENU2 = "2. 역 삭제"; + private static final String MENU3 = "3. 역 조회"; + private static final String BACK = "B. 돌아가기"; + private static final String CHOICE_MESSAGE = "## 원하는 기능을 선택하세요."; + + private Scanner scanner; + + public StationMenu(Scanner scanner) { + this.scanner = scanner; + } + + public void startStationMenu() { + this.scanner = scanner; + String input = ""; + while (!input.equals("B")) { + printStationMenu(); + input = this.scanner.nextLine(); + } + } + + public void printStationMenu() { + StringBuilder sb = new StringBuilder(); + sb.append(MENU_TITLE).append("\n") + .append(MENU1).append("\n") + .append(MENU2).append("\n") + .append(MENU3).append("\n") + .append(BACK).append("\n") + .append(CHOICE_MESSAGE); + System.out.println(sb); + } +} From 124f7a4ca43684a706fa9fb8b562cd52a2ed05b0 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 14:00:52 +0900 Subject: [PATCH 23/49] =?UTF-8?q?feat=20:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EC=95=84=20?= =?UTF-8?q?=EC=A7=80=ED=95=98=EC=B2=A0=20=EC=97=AD=EC=9D=84=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/menu/MainMenu.java | 28 ++++++++++--------- src/main/java/subway/menu/StationMenu.java | 21 ++++++++++++-- .../java/subway/util/StationValidator.java | 7 +++++ 3 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index d0fa07ace..227d37a2f 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -1,5 +1,8 @@ package subway.menu; +import subway.domain.LineRepository; +import subway.domain.StationRepository; + import java.util.Scanner; public class MainMenu { @@ -20,21 +23,20 @@ public MainMenu(Scanner scanner) { public void start() { String input = ""; - while (!input.equals("Q")) { + while (true) { printMainMenu(); input = scanner.nextLine(); - switch (input) { - case "1" : - new StationMenu(scanner).startStationMenu(); - break; - case "2" : - break; - case "3" : - break; - case "4" : - break; - case "Q" : - break; + if (input.equals("1")) { + new StationMenu(scanner).startStationMenu(); + } + if (input.equals("2")) { + } + if (input.equals("3")) { + } + if (input.equals("4")) { + } + if (input.equals("Q")) { + break; } } } diff --git a/src/main/java/subway/menu/StationMenu.java b/src/main/java/subway/menu/StationMenu.java index e4b38af05..0f18147c0 100644 --- a/src/main/java/subway/menu/StationMenu.java +++ b/src/main/java/subway/menu/StationMenu.java @@ -1,5 +1,9 @@ package subway.menu; +import subway.domain.Station; +import subway.domain.StationRepository; +import subway.util.StationValidator; + import java.util.Scanner; public class StationMenu { @@ -17,11 +21,24 @@ public StationMenu(Scanner scanner) { } public void startStationMenu() { - this.scanner = scanner; String input = ""; - while (!input.equals("B")) { + while (true) { printStationMenu(); input = this.scanner.nextLine(); + if (input.equals("1")) { + System.out.println("## 등록할 역 이름을 입력하세요."); + String stationName = scanner.nextLine(); + if (StationValidator.checkValidStationName(stationName, StationRepository.stations())) { + StationRepository.addStation(new Station(stationName)); + } + } + if (input.equals("2")) { + } + if (input.equals("3")) { + } + if (input.equals("B")) { + break; + } } } diff --git a/src/main/java/subway/util/StationValidator.java b/src/main/java/subway/util/StationValidator.java index 5c1b52283..1941625c5 100644 --- a/src/main/java/subway/util/StationValidator.java +++ b/src/main/java/subway/util/StationValidator.java @@ -8,6 +8,13 @@ public class StationValidator { private static final int SIZE = 2; + public static boolean checkValidStationName(String name, List stations) { + if (checkValidName(name) && !checkDuplicateName(name, stations)) { + return true; + } + return false; + } + public static boolean checkDuplicateName(String name, List stations) { for(Station station : stations) { if (station.getName().equals(name)) { From 80d1c0f49d2dd8d989f1227f593f4715714adfc4 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 14:15:06 +0900 Subject: [PATCH 24/49] =?UTF-8?q?feat=20:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EC=95=84=20?= =?UTF-8?q?=EC=A7=80=ED=95=98=EC=B2=A0=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=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/menu/MainMenu.java | 2 +- src/main/java/subway/menu/StationMenu.java | 11 +++++++++-- src/main/java/subway/util/StationValidator.java | 9 +++++---- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index 227d37a2f..35a821d18 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -22,7 +22,7 @@ public MainMenu(Scanner scanner) { } public void start() { - String input = ""; + String input; while (true) { printMainMenu(); input = scanner.nextLine(); diff --git a/src/main/java/subway/menu/StationMenu.java b/src/main/java/subway/menu/StationMenu.java index 0f18147c0..bb85d48c3 100644 --- a/src/main/java/subway/menu/StationMenu.java +++ b/src/main/java/subway/menu/StationMenu.java @@ -21,18 +21,25 @@ public StationMenu(Scanner scanner) { } public void startStationMenu() { - String input = ""; + String input; while (true) { printStationMenu(); input = this.scanner.nextLine(); + //TODO 함수 분리하기 if (input.equals("1")) { System.out.println("## 등록할 역 이름을 입력하세요."); String stationName = scanner.nextLine(); - if (StationValidator.checkValidStationName(stationName, StationRepository.stations())) { + if (StationValidator.checkValidStationName(stationName)) { StationRepository.addStation(new Station(stationName)); + System.out.println("[ INFO ] 지하철 역이 등록되었습니다."); } } if (input.equals("2")) { + System.out.println("## 삭제할 역 이름을 입력하세요."); + String stationName = scanner.nextLine(); + if (StationRepository.deleteStation(stationName)) { + System.out.println("[ INFO ] 지하철 역이 삭제되었습니다."); + } } if (input.equals("3")) { } diff --git a/src/main/java/subway/util/StationValidator.java b/src/main/java/subway/util/StationValidator.java index 1941625c5..780237681 100644 --- a/src/main/java/subway/util/StationValidator.java +++ b/src/main/java/subway/util/StationValidator.java @@ -1,6 +1,7 @@ package subway.util; import subway.domain.Station; +import subway.domain.StationRepository; import java.util.List; @@ -8,15 +9,15 @@ public class StationValidator { private static final int SIZE = 2; - public static boolean checkValidStationName(String name, List stations) { - if (checkValidName(name) && !checkDuplicateName(name, stations)) { + public static boolean checkValidStationName(String name) { + if (checkValidName(name) && !checkDuplicateName(name)) { return true; } return false; } - public static boolean checkDuplicateName(String name, List stations) { - for(Station station : stations) { + public static boolean checkDuplicateName(String name) { + for(Station station : StationRepository.stations()) { if (station.getName().equals(name)) { return true; } From 9cf1d2cc2e2681fe1af58945914cb8ded9e4bc74 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 15:52:59 +0900 Subject: [PATCH 25/49] =?UTF-8?q?feat=20:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EC=95=84=20?= =?UTF-8?q?=EC=A7=80=ED=95=98=EC=B2=A0=20=EC=97=AD=EC=9D=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/StationRepository.java | 5 +++-- src/main/java/subway/menu/MainMenu.java | 2 ++ src/main/java/subway/menu/StationMenu.java | 13 ++++++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index 9c9ace03f..f95d7451c 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -23,12 +23,13 @@ public static boolean deleteStation(String name) { public static void printStationList() { if (stations.size() == 0) { - System.out.println("존재하는 역이 없습니다."); + System.out.println("존재하는 역이 없습니다.\n"); return; } for (Station station : stations) { - System.out.println(station.getName()); + System.out.println("[ INFO ] " + station.getName()); } + System.out.println(); } } diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index 35a821d18..be193b12d 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -21,11 +21,13 @@ public MainMenu(Scanner scanner) { this.scanner = scanner; } + //TODO 메뉴 이외의 입력을 받았을 때 예외사항 출력 구현해야함 public void start() { String input; while (true) { printMainMenu(); input = scanner.nextLine(); + System.out.println(); if (input.equals("1")) { new StationMenu(scanner).startStationMenu(); } diff --git a/src/main/java/subway/menu/StationMenu.java b/src/main/java/subway/menu/StationMenu.java index bb85d48c3..40ce7630e 100644 --- a/src/main/java/subway/menu/StationMenu.java +++ b/src/main/java/subway/menu/StationMenu.java @@ -25,23 +25,29 @@ public void startStationMenu() { while (true) { printStationMenu(); input = this.scanner.nextLine(); + System.out.println(); //TODO 함수 분리하기 if (input.equals("1")) { System.out.println("## 등록할 역 이름을 입력하세요."); String stationName = scanner.nextLine(); + System.out.println(); if (StationValidator.checkValidStationName(stationName)) { StationRepository.addStation(new Station(stationName)); - System.out.println("[ INFO ] 지하철 역이 등록되었습니다."); + System.out.println("[ INFO ] 지하철 역이 등록되었습니다.\n"); } } + //TODO 역이 노선이 등록된 역인지 확인하고 이미 노선에 등록된 역이라면 삭제할 수 없도록 구현해야함 if (input.equals("2")) { System.out.println("## 삭제할 역 이름을 입력하세요."); String stationName = scanner.nextLine(); + System.out.println(); if (StationRepository.deleteStation(stationName)) { - System.out.println("[ INFO ] 지하철 역이 삭제되었습니다."); + System.out.println("[ INFO ] 지하철 역이 삭제되었습니다.\n"); } } if (input.equals("3")) { + System.out.println("## 역 목록"); + StationRepository.printStationList(); } if (input.equals("B")) { break; @@ -49,13 +55,14 @@ public void startStationMenu() { } } + //TODO 출력 기능을 다른곳에 모으기 public void printStationMenu() { StringBuilder sb = new StringBuilder(); sb.append(MENU_TITLE).append("\n") .append(MENU1).append("\n") .append(MENU2).append("\n") .append(MENU3).append("\n") - .append(BACK).append("\n") + .append(BACK).append("\n\n") .append(CHOICE_MESSAGE); System.out.println(sb); } From b391c5ea5f0622e6a2ce4cc95c5ebdff6fa52e57 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 15:55:43 +0900 Subject: [PATCH 26/49] =?UTF-8?q?feat=20:=20=EB=85=B8=EC=84=A0=EC=9D=84=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=98=EB=8A=94=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=EC=9D=B8=20LineMenu=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/menu/LineMenu.java | 16 ++++++++++++++++ src/main/java/subway/menu/MainMenu.java | 1 + 2 files changed, 17 insertions(+) create mode 100644 src/main/java/subway/menu/LineMenu.java diff --git a/src/main/java/subway/menu/LineMenu.java b/src/main/java/subway/menu/LineMenu.java new file mode 100644 index 000000000..ac8757f63 --- /dev/null +++ b/src/main/java/subway/menu/LineMenu.java @@ -0,0 +1,16 @@ +package subway.menu; + +import java.util.Scanner; + +public class LineMenu { + + private Scanner scanner; + + public LineMenu(Scanner scanner) { + this.scanner = scanner; + } + + public void startLineMenu() { + + } +} diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index be193b12d..424d56242 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -32,6 +32,7 @@ public void start() { new StationMenu(scanner).startStationMenu(); } if (input.equals("2")) { + new LineMenu(scanner).startLineMenu(); } if (input.equals("3")) { } From b3162c1b286d4633ae47c4e6be27a5e185e6d803 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 16:01:23 +0900 Subject: [PATCH 27/49] =?UTF-8?q?feat=20:=20=EB=85=B8=EC=84=A0=EC=9D=84=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=98=EB=8A=94=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/menu/LineMenu.java | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/main/java/subway/menu/LineMenu.java b/src/main/java/subway/menu/LineMenu.java index ac8757f63..63f66ed80 100644 --- a/src/main/java/subway/menu/LineMenu.java +++ b/src/main/java/subway/menu/LineMenu.java @@ -1,8 +1,18 @@ package subway.menu; +import subway.domain.Station; +import subway.domain.StationRepository; +import subway.util.StationValidator; + import java.util.Scanner; public class LineMenu { + private static final String MENU_TITLE = "## 노선 관리 화면"; + private static final String MENU1 = "1. 노선 등록"; + private static final String MENU2 = "2. 노선 삭제"; + private static final String MENU3 = "3. 노선 조회"; + private static final String BACK = "B. 돌아가기"; + private static final String CHOICE_MESSAGE = "## 원하는 기능을 선택하세요."; private Scanner scanner; @@ -11,6 +21,34 @@ public LineMenu(Scanner scanner) { } public void startLineMenu() { + String input; + while (true) { + printLineMenu(); + input = scanner.nextLine(); + System.out.println(); + //TODO 함수 분리하기 + if (input.equals("1")) { + } + if (input.equals("2")) { + } + if (input.equals("3")) { + } + if (input.equals("B")) { + break; + } + } + + } + //TODO 출력 기능을 다른곳에 모으기 + public void printLineMenu() { + StringBuilder sb = new StringBuilder(); + sb.append(MENU_TITLE).append("\n") + .append(MENU1).append("\n") + .append(MENU2).append("\n") + .append(MENU3).append("\n") + .append(BACK).append("\n\n") + .append(CHOICE_MESSAGE); + System.out.println(sb); } } From 91eee26ae6d487ce05996488fa835b55b96290d3 Mon Sep 17 00:00:00 2001 From: Gomding <57378410+Gomding@users.noreply.github.com> Date: Tue, 15 Dec 2020 16:12:02 +0900 Subject: [PATCH 28/49] =?UTF-8?q?update(README)=20:=20=EB=85=B8=EC=84=A0?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20=EC=98=88=EC=99=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 | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6f84a206c..5e6901fdf 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ 2. 지하철 노선 이름은 2글자 이상이어야 한다. 3. 노선을 삭제할 때 등록되지 않은 노선에 대한 삭제는 예외를 발생시킨다. 4. 더이상 노선이 없다면 삭제 기능이나 조회기능에 진입했을 때 메시지로 알려준다.(모든 노선을 삭제했을 때) + 5. 상행 종점역과 하행 종점역을 입력받을때 입력한 역이 StationRepository에 등록되어 있지 않다면 예외를 발생시킨다. * 구간 추가 기능 (역과 역 사이를 구간, 구간들의 모음 = 노선) From bb5984ed45bedcec9c07145f857b5e118b4ee6b5 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 16:50:20 +0900 Subject: [PATCH 29/49] =?UTF-8?q?feat=20:=20=EB=85=B8=EC=84=A0=EC=9D=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=98=EA=B3=A0=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 11 +++++++-- .../java/subway/domain/StationRepository.java | 2 +- src/main/java/subway/menu/LineMenu.java | 24 ++++++++++++++++++- src/main/java/subway/util/LineValidator.java | 11 +++++---- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 308c3111f..520c9ba44 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -2,7 +2,6 @@ import java.util.LinkedList; import java.util.List; -import java.util.Objects; public class Line { private String name; @@ -17,7 +16,15 @@ public String getName() { // 추가 기능 구현 - private StationRepository stationRepository = new StationRepository(); + List stationList = new LinkedList<>(); + + public Line(String name, String upLineLastStop, String downLineLastStop) { + this.name = name; + stationList.add(new Station(upLineLastStop)); + stationList.add(new Station(downLineLastStop)); + } + + /*public boolean equal(String lineName) { return name.equals(lineName); diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index f95d7451c..dd8783fe6 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -3,7 +3,7 @@ import java.util.*; public class StationRepository { - private static final List stations = new LinkedList<>(); + private static final List stations = new ArrayList<>(); public static List stations() { return Collections.unmodifiableList(stations); diff --git a/src/main/java/subway/menu/LineMenu.java b/src/main/java/subway/menu/LineMenu.java index 63f66ed80..e2ddae940 100644 --- a/src/main/java/subway/menu/LineMenu.java +++ b/src/main/java/subway/menu/LineMenu.java @@ -1,7 +1,10 @@ package subway.menu; +import subway.domain.Line; +import subway.domain.LineRepository; import subway.domain.Station; import subway.domain.StationRepository; +import subway.util.LineValidator; import subway.util.StationValidator; import java.util.Scanner; @@ -25,17 +28,36 @@ public void startLineMenu() { while (true) { printLineMenu(); input = scanner.nextLine(); - System.out.println(); //TODO 함수 분리하기 if (input.equals("1")) { + System.out.println("\n## 등록할 노선 이름을 입력하세요."); + String lineName = scanner.nextLine(); + if (LineValidator.checkValidLineName(lineName)) { + System.out.println("\n## 등록할 상행 종점역 이름을 입력하세요."); + String upLineLastStop = scanner.nextLine(); + if (StationValidator.checkDuplicateName(upLineLastStop)) { + System.out.println("\n##등록할 하행 종점역 이름을 입력하세요."); + String downLineLastStop = scanner.nextLine(); + if (StationValidator.checkDuplicateName(downLineLastStop)) { + LineRepository.addLine(new Line(lineName, upLineLastStop, downLineLastStop)); + System.out.println("\n[ INFO ] 지하철 노선이 등록되었습니다."); + } + } + } } if (input.equals("2")) { + System.out.println("## 삭제할 노선 이름을 입력하세요."); + String lineName = scanner.nextLine(); + if (LineRepository.deleteLineByName(lineName)) { + System.out.println("[ INFO ] 지하철 노선이 삭제되었습니다."); + } } if (input.equals("3")) { } if (input.equals("B")) { break; } + System.out.println(); } } diff --git a/src/main/java/subway/util/LineValidator.java b/src/main/java/subway/util/LineValidator.java index c3b5b6b6b..95814c6e3 100644 --- a/src/main/java/subway/util/LineValidator.java +++ b/src/main/java/subway/util/LineValidator.java @@ -1,15 +1,18 @@ package subway.util; import subway.domain.Line; - -import java.util.List; +import subway.domain.LineRepository; public class LineValidator { private static final int SIZE = 2; - public static boolean checkDuplicateName(String name, List lines) { - for (Line line : lines) { + public static boolean checkValidLineName(String name) { + return !checkDuplicateName(name) && checkValidName(name); + } + + public static boolean checkDuplicateName(String name) { + for (Line line : LineRepository.lines()) { if (line.getName().equals(name)) { return true; } From a3997c51322d06ae260e2af111513704aafca485 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 16:54:41 +0900 Subject: [PATCH 30/49] =?UTF-8?q?feat=20:=20=EB=85=B8=EC=84=A0=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=EC=9D=84=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/LineRepository.java | 3 +-- src/main/java/subway/menu/LineMenu.java | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index d27eb5345..7895037b2 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -26,8 +26,7 @@ public static void printLineList() { return; } for (Line line : lines) { - System.out.println(line.getName()); + System.out.println("[ INFO ] " + line.getName()); } } - } diff --git a/src/main/java/subway/menu/LineMenu.java b/src/main/java/subway/menu/LineMenu.java index e2ddae940..dd71202b9 100644 --- a/src/main/java/subway/menu/LineMenu.java +++ b/src/main/java/subway/menu/LineMenu.java @@ -53,6 +53,8 @@ public void startLineMenu() { } } if (input.equals("3")) { + System.out.println("## 노선 목록"); + LineRepository.printLineList(); } if (input.equals("B")) { break; From 85866f2d0fced808516274710af1ab9cd0369478 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 17:03:13 +0900 Subject: [PATCH 31/49] =?UTF-8?q?feat=20:=20=EA=B5=AC=EA=B0=84=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=ED=99=94=EB=A9=B4=EC=9D=84=20=EB=8B=B4=EB=8B=B9?= =?UTF-8?q?=ED=95=98=EB=8A=94=20SectionMenu=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/menu/LineMenu.java | 4 +-- src/main/java/subway/menu/MainMenu.java | 1 + src/main/java/subway/menu/SectionMenu.java | 31 +++++++++++++++++++ ...alValidator.java => SectionValidator.java} | 2 +- 4 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 src/main/java/subway/menu/SectionMenu.java rename src/main/java/subway/util/{IntervalValidator.java => SectionValidator.java} (94%) diff --git a/src/main/java/subway/menu/LineMenu.java b/src/main/java/subway/menu/LineMenu.java index dd71202b9..bdc1568ba 100644 --- a/src/main/java/subway/menu/LineMenu.java +++ b/src/main/java/subway/menu/LineMenu.java @@ -2,8 +2,6 @@ import subway.domain.Line; import subway.domain.LineRepository; -import subway.domain.Station; -import subway.domain.StationRepository; import subway.util.LineValidator; import subway.util.StationValidator; @@ -28,7 +26,7 @@ public void startLineMenu() { while (true) { printLineMenu(); input = scanner.nextLine(); - //TODO 함수 분리하기 + //TODO 함수 분리하기!!!!! if (input.equals("1")) { System.out.println("\n## 등록할 노선 이름을 입력하세요."); String lineName = scanner.nextLine(); diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index 424d56242..4103045cf 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -35,6 +35,7 @@ public void start() { new LineMenu(scanner).startLineMenu(); } if (input.equals("3")) { + new SectionMenu(scanner).startSectionMenu(); } if (input.equals("4")) { } diff --git a/src/main/java/subway/menu/SectionMenu.java b/src/main/java/subway/menu/SectionMenu.java new file mode 100644 index 000000000..cbca69a0d --- /dev/null +++ b/src/main/java/subway/menu/SectionMenu.java @@ -0,0 +1,31 @@ +package subway.menu; + +import java.util.Scanner; + +public class SectionMenu { + private static final String MENU_TITLE = "## 노선 관리 화면"; + private static final String MENU1 = "1. 구간 등록"; + private static final String MENU2 = "2. 구간 삭제"; + private static final String BACK = "B. 돌아가기"; + private static final String CHOICE_MESSAGE = "## 원하는 기능을 선택하세요."; + + private Scanner scanner; + + public SectionMenu(Scanner scanner) { + this.scanner = scanner; + } + + public void startSectionMenu() { + + } + + private void printMainMenu() { + StringBuilder sb = new StringBuilder(); + sb.append(MENU_TITLE).append("\n") + .append(MENU1).append("\n") + .append(MENU2).append("\n") + .append(BACK).append("\n\n") + .append(CHOICE_MESSAGE); + System.out.println(sb); + } +} diff --git a/src/main/java/subway/util/IntervalValidator.java b/src/main/java/subway/util/SectionValidator.java similarity index 94% rename from src/main/java/subway/util/IntervalValidator.java rename to src/main/java/subway/util/SectionValidator.java index ad0d25702..e44471ced 100644 --- a/src/main/java/subway/util/IntervalValidator.java +++ b/src/main/java/subway/util/SectionValidator.java @@ -4,7 +4,7 @@ import java.util.List; -public class IntervalValidator { +public class SectionValidator { private static final int SIZE = 2; public static boolean checkValidStation(String name, List stationList) { From 7c57f8df937d77b434ee52861dca057a42256dc4 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 17:05:23 +0900 Subject: [PATCH 32/49] =?UTF-8?q?feat=20:=20=EA=B5=AC=EA=B0=84=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EB=A9=94=EB=89=B4=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= =?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 --- src/main/java/subway/menu/LineMenu.java | 3 +-- src/main/java/subway/menu/MainMenu.java | 3 +-- src/main/java/subway/menu/SectionMenu.java | 11 ++++++++++- src/main/java/subway/menu/StationMenu.java | 3 +-- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/subway/menu/LineMenu.java b/src/main/java/subway/menu/LineMenu.java index bdc1568ba..3ec798496 100644 --- a/src/main/java/subway/menu/LineMenu.java +++ b/src/main/java/subway/menu/LineMenu.java @@ -22,10 +22,9 @@ public LineMenu(Scanner scanner) { } public void startLineMenu() { - String input; while (true) { printLineMenu(); - input = scanner.nextLine(); + String input = scanner.nextLine(); //TODO 함수 분리하기!!!!! if (input.equals("1")) { System.out.println("\n## 등록할 노선 이름을 입력하세요."); diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index 4103045cf..173e3cd97 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -23,10 +23,9 @@ public MainMenu(Scanner scanner) { //TODO 메뉴 이외의 입력을 받았을 때 예외사항 출력 구현해야함 public void start() { - String input; while (true) { printMainMenu(); - input = scanner.nextLine(); + String input = scanner.nextLine(); System.out.println(); if (input.equals("1")) { new StationMenu(scanner).startStationMenu(); diff --git a/src/main/java/subway/menu/SectionMenu.java b/src/main/java/subway/menu/SectionMenu.java index cbca69a0d..8e5025dcd 100644 --- a/src/main/java/subway/menu/SectionMenu.java +++ b/src/main/java/subway/menu/SectionMenu.java @@ -16,7 +16,16 @@ public SectionMenu(Scanner scanner) { } public void startSectionMenu() { - + while (true) { + String input = scanner.nextLine(); + if (input.equals("1")) { + } + if (input.equals("2")) { + } + if (input.equals("B")) { + break; + } + } } private void printMainMenu() { diff --git a/src/main/java/subway/menu/StationMenu.java b/src/main/java/subway/menu/StationMenu.java index 40ce7630e..0829a06a6 100644 --- a/src/main/java/subway/menu/StationMenu.java +++ b/src/main/java/subway/menu/StationMenu.java @@ -21,10 +21,9 @@ public StationMenu(Scanner scanner) { } public void startStationMenu() { - String input; while (true) { printStationMenu(); - input = this.scanner.nextLine(); + String input = this.scanner.nextLine(); System.out.println(); //TODO 함수 분리하기 if (input.equals("1")) { From ebbfe3a6559d6b1f1667e5515196365bc6340817 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 18:21:13 +0900 Subject: [PATCH 33/49] =?UTF-8?q?feat=20:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EC=95=84=20?= =?UTF-8?q?=EA=B5=AC=EA=B0=84=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 15 ++++++++--- .../java/subway/domain/LineRepository.java | 9 +++++++ .../java/subway/domain/StationRepository.java | 9 +++++++ src/main/java/subway/menu/SectionMenu.java | 25 +++++++++++++++++-- .../java/subway/util/SectionValidator.java | 9 +++++++ 5 files changed, 62 insertions(+), 5 deletions(-) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 520c9ba44..3ea4e37c0 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -16,12 +16,21 @@ public String getName() { // 추가 기능 구현 - List stationList = new LinkedList<>(); + private List stationList = new LinkedList<>(); public Line(String name, String upLineLastStop, String downLineLastStop) { this.name = name; - stationList.add(new Station(upLineLastStop)); - stationList.add(new Station(downLineLastStop)); + stationList.add(StationRepository.findStationByName(upLineLastStop)); + stationList.add(StationRepository.findStationByName(downLineLastStop)); + } + + public int size() { + return stationList.size(); + } + + public void add(String index, String stationName) { + Station station = StationRepository.findStationByName(stationName); + stationList.add(Integer.parseInt(index)-1, station); } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 7895037b2..8e19e2596 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -20,6 +20,15 @@ public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + public static Line findLineByName(String lineName) { + for (Line line : lines) { + if (line.getName().equals(lineName)) { + return line; + } + } + return null; + } + public static void printLineList() { if (lines.size() == 0) { System.out.println("존재하는 노선이 없습니다."); diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index dd8783fe6..d4c5bc99e 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -21,6 +21,15 @@ public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + public static Station findStationByName(String name) { + for (Station station : stations()) { + if (station.getName().equals(name)) { + return station; + } + } + return null; + } + public static void printStationList() { if (stations.size() == 0) { System.out.println("존재하는 역이 없습니다.\n"); diff --git a/src/main/java/subway/menu/SectionMenu.java b/src/main/java/subway/menu/SectionMenu.java index 8e5025dcd..3b9a5e59a 100644 --- a/src/main/java/subway/menu/SectionMenu.java +++ b/src/main/java/subway/menu/SectionMenu.java @@ -1,9 +1,16 @@ package subway.menu; +import subway.domain.Line; +import subway.domain.LineRepository; +import subway.util.LineValidator; +import subway.util.SectionValidator; +import subway.util.StationValidator; + +import java.util.Objects; import java.util.Scanner; public class SectionMenu { - private static final String MENU_TITLE = "## 노선 관리 화면"; + private static final String MENU_TITLE = "## 구간 관리 화면"; private static final String MENU1 = "1. 구간 등록"; private static final String MENU2 = "2. 구간 삭제"; private static final String BACK = "B. 돌아가기"; @@ -17,8 +24,22 @@ public SectionMenu(Scanner scanner) { public void startSectionMenu() { while (true) { + printSectionMenu(); String input = scanner.nextLine(); if (input.equals("1")) { + System.out.println("\n## 노선을 입력하세요."); + String lineName = scanner.nextLine(); + if (LineValidator.checkDuplicateName(lineName)) { + System.out.println("\n## 역 이름을 입력하세요."); + String stationName = scanner.nextLine(); + if (StationValidator.checkDuplicateName(stationName)) { + System.out.println("\n## 순서를 입력하세요."); + String index = scanner.nextLine(); + if (SectionValidator.checkValidIndex(index, lineName)) { + Objects.requireNonNull(LineRepository.findLineByName(lineName)).add(index, stationName); + } + } + } } if (input.equals("2")) { } @@ -28,7 +49,7 @@ public void startSectionMenu() { } } - private void printMainMenu() { + private void printSectionMenu() { StringBuilder sb = new StringBuilder(); sb.append(MENU_TITLE).append("\n") .append(MENU1).append("\n") diff --git a/src/main/java/subway/util/SectionValidator.java b/src/main/java/subway/util/SectionValidator.java index e44471ced..d850db04f 100644 --- a/src/main/java/subway/util/SectionValidator.java +++ b/src/main/java/subway/util/SectionValidator.java @@ -1,5 +1,6 @@ package subway.util; +import subway.domain.LineRepository; import subway.domain.Station; import java.util.List; @@ -23,4 +24,12 @@ public static boolean checkValidDelete(String name, List stationList) { return true; } + public static boolean checkValidIndex(String index, String lineName) { + int lineSize = LineRepository.findLineByName(lineName).size(); + if (Integer.parseInt(index) > 0 && Integer.parseInt(index) <= lineSize) { + return true; + } + return false; + } + } From 3a77c7cdd4364fb71e30d76bc720b95cd570ab95 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 18:45:50 +0900 Subject: [PATCH 34/49] =?UTF-8?q?feat=20:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EC=95=84=20?= =?UTF-8?q?=EA=B5=AC=EA=B0=84=EC=9D=84=20=EC=82=AD=EC=A0=9C=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/domain/Line.java | 9 +++++++++ src/main/java/subway/menu/SectionMenu.java | 11 +++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 3ea4e37c0..e69e364c9 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,5 +1,6 @@ package subway.domain; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -33,6 +34,14 @@ public void add(String index, String stationName) { stationList.add(Integer.parseInt(index)-1, station); } + public boolean isRemovable(String stationName) { + return stationList.removeIf(station -> station.getName().equals(stationName)); + } + + public List stationList() { + return Collections.unmodifiableList(stationList); + } + /*public boolean equal(String lineName) { diff --git a/src/main/java/subway/menu/SectionMenu.java b/src/main/java/subway/menu/SectionMenu.java index 3b9a5e59a..c4b651afa 100644 --- a/src/main/java/subway/menu/SectionMenu.java +++ b/src/main/java/subway/menu/SectionMenu.java @@ -37,11 +37,22 @@ public void startSectionMenu() { String index = scanner.nextLine(); if (SectionValidator.checkValidIndex(index, lineName)) { Objects.requireNonNull(LineRepository.findLineByName(lineName)).add(index, stationName); + System.out.println("\n[ INFO ] 구간이 등록되었습니다."); } } } } if (input.equals("2")) { + System.out.println("\n## 삭제할 구간의 노선을 입력하세요."); + String lineName = scanner.nextLine(); + Line line = LineRepository.findLineByName(lineName); + if (line != null) { + System.out.println("\n## 삭제할 구간의 역을 입력하세요."); + String stationName = scanner.nextLine(); + if (line.isRemovable(stationName)) { + System.out.println("\n[ INFO ] 구간이 삭제되었습니다."); + } + } } if (input.equals("B")) { break; From 3f06c53dd4282ef804ec89cb43aa0019194ec64e Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 18:50:02 +0900 Subject: [PATCH 35/49] =?UTF-8?q?feat=20:=20=EC=A0=84=EC=B2=B4=20=EC=A7=80?= =?UTF-8?q?=ED=95=98=EC=B2=A0=20=EB=85=B8=EC=84=A0=EB=8F=84=EB=A5=BC=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/menu/MainMenu.java | 1 + src/main/java/subway/menu/SubwayMapMenu.java | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 src/main/java/subway/menu/SubwayMapMenu.java diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index 173e3cd97..3d22e6aff 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -37,6 +37,7 @@ public void start() { new SectionMenu(scanner).startSectionMenu(); } if (input.equals("4")) { + new SubwayMapMenu().printSubwayMap(); } if (input.equals("Q")) { break; diff --git a/src/main/java/subway/menu/SubwayMapMenu.java b/src/main/java/subway/menu/SubwayMapMenu.java new file mode 100644 index 000000000..2a513a2c8 --- /dev/null +++ b/src/main/java/subway/menu/SubwayMapMenu.java @@ -0,0 +1,20 @@ +package subway.menu; + +import subway.domain.Line; +import subway.domain.LineRepository; +import subway.domain.Station; + +public class SubwayMapMenu { + + public void printSubwayMap() { + System.out.println("## 지하철 노선도"); + for (Line line : LineRepository.lines()) { + System.out.println("\n[ INFO ] " + line.getName()); + System.out.println("[ INFO ] ---"); + for (Station station : line.stationList()) { + System.out.println("[ INFO ] " + station.getName()); + } + } + System.out.println(); + } +} From 3cd65939e55d17940b4784a7927d0541b24e874b Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 19:30:11 +0900 Subject: [PATCH 36/49] =?UTF-8?q?feat=20:=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=A8=20=EC=8B=9C=EC=9E=91=20=EC=8B=9C=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=EC=9D=84=20=EC=84=B8=ED=8C=85=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 7 ++- src/main/java/subway/menu/MainMenu.java | 2 + src/main/java/subway/util/DefaultSetting.java | 49 +++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/util/DefaultSetting.java diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index e69e364c9..927b7bd6b 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -29,7 +29,12 @@ public int size() { return stationList.size(); } - public void add(String index, String stationName) { + public void addStation(String stationName) { + Station station = StationRepository.findStationByName(stationName); + stationList.add(station); + } + + public void addStation(String index, String stationName) { Station station = StationRepository.findStationByName(stationName); stationList.add(Integer.parseInt(index)-1, station); } diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index 3d22e6aff..91ed2c0d9 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -2,6 +2,7 @@ import subway.domain.LineRepository; import subway.domain.StationRepository; +import subway.util.DefaultSetting; import java.util.Scanner; @@ -23,6 +24,7 @@ public MainMenu(Scanner scanner) { //TODO 메뉴 이외의 입력을 받았을 때 예외사항 출력 구현해야함 public void start() { + new DefaultSetting().defaultSetting(); while (true) { printMainMenu(); String input = scanner.nextLine(); diff --git a/src/main/java/subway/util/DefaultSetting.java b/src/main/java/subway/util/DefaultSetting.java new file mode 100644 index 000000000..58f1cf21c --- /dev/null +++ b/src/main/java/subway/util/DefaultSetting.java @@ -0,0 +1,49 @@ +package subway.util; + +import subway.domain.Line; +import subway.domain.LineRepository; +import subway.domain.Station; +import subway.domain.StationRepository; + +public class DefaultSetting { + private static final String KYODAE = "교대역"; + private static final String GANGNAM = "강남역"; + private static final String YEOKSAM = "역삼역"; + private static final String NORTH_TERMINAL = "남부터미널역"; + private static final String YANGJAE = "양재역"; + private static final String YANGJAE_CITIZEN_FOREST = "양재시민의숲역"; + private static final String MAEBONG = "매봉역"; + private static final String LINE2 = "2호선"; + private static final String LINE3 = "3호선"; + private static final String SINBUNDANG_LINE = "신분당선"; + + public void defaultSetting() { + StationRepository.addStation(new Station(KYODAE)); + StationRepository.addStation(new Station(GANGNAM)); + StationRepository.addStation(new Station(YEOKSAM)); + StationRepository.addStation(new Station(NORTH_TERMINAL)); + StationRepository.addStation(new Station(YANGJAE)); + StationRepository.addStation(new Station(YANGJAE_CITIZEN_FOREST)); + StationRepository.addStation(new Station(MAEBONG)); + + LineRepository.addLine(new Line(LINE2)); + LineRepository.addLine(new Line(LINE3)); + LineRepository.addLine(new Line(SINBUNDANG_LINE)); + + Line line2 = LineRepository.findLineByName(LINE2); + line2.addStation(KYODAE); + line2.addStation(GANGNAM); + line2.addStation(YEOKSAM); + + Line line3 = LineRepository.findLineByName(LINE3); + line3.addStation(KYODAE); + line3.addStation(NORTH_TERMINAL); + line3.addStation(YANGJAE); + line3.addStation(MAEBONG); + + Line dxLine = LineRepository.findLineByName(SINBUNDANG_LINE); + dxLine.addStation(GANGNAM); + dxLine.addStation(YANGJAE); + dxLine.addStation(YANGJAE_CITIZEN_FOREST); + } +} From 63ac76f5af36788eed0f2ccfb74f787f5ae64972 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 19:36:24 +0900 Subject: [PATCH 37/49] =?UTF-8?q?fix=20:=20=ED=95=A8=EC=88=98=EB=AA=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=ED=9B=84=20=EB=B0=9C=EC=83=9D=ED=96=88?= =?UTF-8?q?=EB=8D=98=20=EC=98=88=EC=99=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/menu/MainMenu.java | 2 -- src/main/java/subway/menu/SectionMenu.java | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index 91ed2c0d9..b2ff7499d 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -1,7 +1,5 @@ package subway.menu; -import subway.domain.LineRepository; -import subway.domain.StationRepository; import subway.util.DefaultSetting; import java.util.Scanner; diff --git a/src/main/java/subway/menu/SectionMenu.java b/src/main/java/subway/menu/SectionMenu.java index c4b651afa..38e11e762 100644 --- a/src/main/java/subway/menu/SectionMenu.java +++ b/src/main/java/subway/menu/SectionMenu.java @@ -36,7 +36,7 @@ public void startSectionMenu() { System.out.println("\n## 순서를 입력하세요."); String index = scanner.nextLine(); if (SectionValidator.checkValidIndex(index, lineName)) { - Objects.requireNonNull(LineRepository.findLineByName(lineName)).add(index, stationName); + Objects.requireNonNull(LineRepository.findLineByName(lineName)).addStation(index, stationName); System.out.println("\n[ INFO ] 구간이 등록되었습니다."); } } From f62b6d7659ab38ce38c214ade79ba53344ffb014 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 20:12:05 +0900 Subject: [PATCH 38/49] =?UTF-8?q?feat=20:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EC=82=AD=EC=A0=9C=EC=8B=9C=20=EB=85=B8=EC=84=A0?= =?UTF-8?q?=EC=97=90=20=EB=93=B1=EB=A1=9D=20=EB=90=98=EC=9E=88=EB=8A=94=20?= =?UTF-8?q?=EC=97=AD=EC=9D=B4=EB=9D=BC=EB=A9=B4=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EB=B6=88=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 13 ++++++-- src/main/java/subway/domain/Station.java | 21 +++++++++++++ .../java/subway/domain/StationRepository.java | 6 +++- src/test/java/subway/domain/LineTest.java | 30 +++++++++++++++++++ src/test/java/subway/domain/StationTest.java | 24 +++++++++++++++ 5 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 src/test/java/subway/domain/LineTest.java create mode 100644 src/test/java/subway/domain/StationTest.java diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 927b7bd6b..f29b1e87d 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -3,6 +3,7 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Objects; public class Line { private String name; @@ -21,8 +22,8 @@ public String getName() { public Line(String name, String upLineLastStop, String downLineLastStop) { this.name = name; - stationList.add(StationRepository.findStationByName(upLineLastStop)); - stationList.add(StationRepository.findStationByName(downLineLastStop)); + addStation(upLineLastStop); + addStation(downLineLastStop); } public int size() { @@ -32,15 +33,21 @@ public int size() { public void addStation(String stationName) { Station station = StationRepository.findStationByName(stationName); stationList.add(station); + station.increaseCount(); } public void addStation(String index, String stationName) { Station station = StationRepository.findStationByName(stationName); stationList.add(Integer.parseInt(index)-1, station); + station.increaseCount(); } public boolean isRemovable(String stationName) { - return stationList.removeIf(station -> station.getName().equals(stationName)); + if (stationList.removeIf(station -> station.getName().equals(stationName))) { + Objects.requireNonNull(StationRepository.findStationByName(stationName)).decreaseCount(); + return true; + } + return false; } public List stationList() { diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..81a124959 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -12,4 +12,25 @@ public String getName() { } // 추가 기능 구현 + + private int count; + + public void increaseCount() { + this.count++; + } + + public void decreaseCount() { + this.count--; + } + + public int getCount() { + return this.count; + } + + public boolean isRemovable() { + if (this.count == 0) { + return true; + } + return false; + } } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index d4c5bc99e..3c7d06d7b 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -18,7 +18,11 @@ public static void addStation(Station station, int index) { } public static boolean deleteStation(String name) { - return stations.removeIf(station -> Objects.equals(station.getName(), name)); + Station thisStation = findStationByName(name); + if (thisStation != null && thisStation.isRemovable()) { + return stations.removeIf(station -> Objects.equals(station.getName(), name)); + } + return false; } public static Station findStationByName(String name) { diff --git a/src/test/java/subway/domain/LineTest.java b/src/test/java/subway/domain/LineTest.java new file mode 100644 index 000000000..9238d4886 --- /dev/null +++ b/src/test/java/subway/domain/LineTest.java @@ -0,0 +1,30 @@ +package subway.domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import subway.util.DefaultSetting; + +import static org.junit.jupiter.api.Assertions.*; + +public class LineTest { + + @BeforeEach + public void 초기값설정() { + new DefaultSetting().defaultSetting(); + StationRepository.addStation(new Station("서울역")); + StationRepository.addStation(new Station("중앙역")); + } + + @Test + public void 노선_생성된다() { + Line line = new Line("4호선"); + assertEquals(line.getName(), "4호선"); + } + + @Test + public void 구간_추가된다() { + + } + + +} diff --git a/src/test/java/subway/domain/StationTest.java b/src/test/java/subway/domain/StationTest.java new file mode 100644 index 000000000..bbf3ec0c5 --- /dev/null +++ b/src/test/java/subway/domain/StationTest.java @@ -0,0 +1,24 @@ +package subway.domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import subway.util.DefaultSetting; + +import static org.junit.jupiter.api.Assertions.*; + +public class StationTest { + + @BeforeEach + public void 초기값설정() { + new DefaultSetting().defaultSetting(); + StationRepository.addStation(new Station("서울역")); + StationRepository.addStation(new Station("중앙역")); + } + + @Test + public void 역_생성된다() { + Station station = new Station("왕십리역"); + assertEquals(station.getName(), "왕십리역"); + } + +} From 0866fd560dc09d6533cb5b94a929e6108574b2e3 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 20:50:06 +0900 Subject: [PATCH 39/49] =?UTF-8?q?test=20:=20Line,=20Station=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=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/domain/Line.java | 1 + src/main/java/subway/domain/Station.java | 2 +- src/test/java/subway/domain/LineTest.java | 28 +++++++++++++++++++- src/test/java/subway/domain/StationTest.java | 23 ++++++++++++++-- 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f29b1e87d..90e69db48 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -42,6 +42,7 @@ public void addStation(String index, String stationName) { station.increaseCount(); } + //TODO 삭제 여부를 알아보는 메서드와 삭제를 진행하는 메서드로 나눠야함 public boolean isRemovable(String stationName) { if (stationList.removeIf(station -> station.getName().equals(stationName))) { Objects.requireNonNull(StationRepository.findStationByName(stationName)).decreaseCount(); diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index 81a124959..50a221c8d 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -13,7 +13,7 @@ public String getName() { // 추가 기능 구현 - private int count; + private int count = 0; public void increaseCount() { this.count++; diff --git a/src/test/java/subway/domain/LineTest.java b/src/test/java/subway/domain/LineTest.java index 9238d4886..c4e433cab 100644 --- a/src/test/java/subway/domain/LineTest.java +++ b/src/test/java/subway/domain/LineTest.java @@ -1,6 +1,7 @@ package subway.domain; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import subway.util.DefaultSetting; @@ -22,8 +23,33 @@ public class LineTest { } @Test - public void 구간_추가된다() { + public void 상행_하행_생성자() { + Line line = new Line("4호선", "서울역", "중앙역"); + assertEquals(line.size(), 2); + } + + @Test + public void 가장_마지막에_구간_추가() { + Line line = new Line("5호선"); + line.addStation("중앙역"); + assertEquals(line.size(), 1); + } + @Order(2) + @Test + public void 순서_정해서_구간_추가() { + Line line = LineRepository.findLineByName("2호선"); + line.addStation("1", "중앙역"); + assertEquals(line.stationList().get(0).getName(), "중앙역"); + } + + @Order(1) + @Test + public void 구간_삭제된다() { + Line line = LineRepository.findLineByName("2호선"); + int beforeSize = line.size(); + line.isRemovable("강남역"); + assertEquals(beforeSize-3, line.size()); } diff --git a/src/test/java/subway/domain/StationTest.java b/src/test/java/subway/domain/StationTest.java index bbf3ec0c5..aacfabe9f 100644 --- a/src/test/java/subway/domain/StationTest.java +++ b/src/test/java/subway/domain/StationTest.java @@ -8,17 +8,36 @@ public class StationTest { + Station station; + @BeforeEach public void 초기값설정() { new DefaultSetting().defaultSetting(); StationRepository.addStation(new Station("서울역")); StationRepository.addStation(new Station("중앙역")); + station = new Station("서울숲역"); } @Test public void 역_생성된다() { - Station station = new Station("왕십리역"); - assertEquals(station.getName(), "왕십리역"); + assertEquals(station.getName(), "서울숲역"); + } + + @Test + public void isRemovable_테스트() { + assertTrue(station.isRemovable()); + } + + @Test + public void increaseCount_테스트() { + station.increaseCount(); + assertEquals(station.getCount(), 1); + } + + @Test + public void decreaseCount_테스트() { + station.decreaseCount(); + assertEquals(station.getCount(), -1); } } From 4de3f1b8730906c698570de86a7ae19e26293812 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 21:07:52 +0900 Subject: [PATCH 40/49] =?UTF-8?q?test=20:=20LineRepositoryTest,=20StationR?= =?UTF-8?q?epositoryTest=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/domain/StationRepository.java | 4 --- .../subway/domain/LineRepositoryTest.java | 31 ++++++++++++++++++ .../subway/domain/StationRepositoryTest.java | 32 +++++++++++++++++++ 3 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 src/test/java/subway/domain/LineRepositoryTest.java create mode 100644 src/test/java/subway/domain/StationRepositoryTest.java diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index 3c7d06d7b..c529a7f44 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -13,10 +13,6 @@ public static void addStation(Station station) { stations.add(station); } - public static void addStation(Station station, int index) { - stations.add(index-1, station); - } - public static boolean deleteStation(String name) { Station thisStation = findStationByName(name); if (thisStation != null && thisStation.isRemovable()) { diff --git a/src/test/java/subway/domain/LineRepositoryTest.java b/src/test/java/subway/domain/LineRepositoryTest.java new file mode 100644 index 000000000..f3e1d322c --- /dev/null +++ b/src/test/java/subway/domain/LineRepositoryTest.java @@ -0,0 +1,31 @@ +package subway.domain; + +import org.junit.jupiter.api.Test; +import subway.util.DefaultSetting; + +import static org.junit.jupiter.api.Assertions.*; + +public class LineRepositoryTest { + + @Test + public void 초기값설정() { + new DefaultSetting().defaultSetting(); + } + + @Test + public void line_추가된다() { + LineRepository.addLine(new Line("10호선")); + assertEquals(LineRepository.findLineByName("10호선").getName(), "10호선"); + } + + @Test + public void line_삭제된다() { + LineRepository.addLine(new Line("삭제용호선")); + assertTrue(LineRepository.deleteLineByName("삭제용호선")); + } + + @Test + public void line_가져온다() { + assertEquals(LineRepository.findLineByName("2호선").getName(), "2호선"); + } +} diff --git a/src/test/java/subway/domain/StationRepositoryTest.java b/src/test/java/subway/domain/StationRepositoryTest.java new file mode 100644 index 000000000..11df06b40 --- /dev/null +++ b/src/test/java/subway/domain/StationRepositoryTest.java @@ -0,0 +1,32 @@ +package subway.domain; + +import org.junit.jupiter.api.Test; +import subway.util.DefaultSetting; + +import static org.junit.jupiter.api.Assertions.*; + +public class StationRepositoryTest { + + @Test + public void 초기값_설정() { + new DefaultSetting().defaultSetting(); + } + + @Test + public void station_추가된다() { + StationRepository.addStation(new Station("서울역")); + assertEquals(StationRepository.findStationByName("서울역").getName(), "서울역"); + } + + @Test + public void station_삭제된다() { + StationRepository.addStation(new Station("서울역")); + assertTrue(StationRepository.deleteStation("서울역")); + } + + @Test + public void station_가져온다() { + Station station = StationRepository.findStationByName("양재역"); + assertEquals(station.getName(), "양재역"); + } +} From 8be6dcb94aba7ff30c989bf48db7953e4b274f27 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 22:05:23 +0900 Subject: [PATCH 41/49] =?UTF-8?q?feat=20:=20StationService=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 도메인 간의 순서를 보장해주기 위한 Service 추가 --- src/main/java/subway/domain/Station.java | 7 +++ .../java/subway/domain/StationRepository.java | 11 ---- src/main/java/subway/menu/StationMenu.java | 60 +++++++++++++------ .../java/subway/service/StationService.java | 22 +++++++ .../java/subway/util/StationValidator.java | 13 +++- 5 files changed, 83 insertions(+), 30 deletions(-) create mode 100644 src/main/java/subway/service/StationService.java diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index 50a221c8d..afa4fc649 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -33,4 +33,11 @@ public boolean isRemovable() { } return false; } + + public boolean delete() { + if (isRemovable()) { + return StationRepository.deleteStation(this.name); + } + return false; + } } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index c529a7f44..1e849075f 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -30,15 +30,4 @@ public static Station findStationByName(String name) { return null; } - public static void printStationList() { - if (stations.size() == 0) { - System.out.println("존재하는 역이 없습니다.\n"); - return; - } - for (Station station : stations) { - System.out.println("[ INFO ] " + station.getName()); - } - System.out.println(); - } - } diff --git a/src/main/java/subway/menu/StationMenu.java b/src/main/java/subway/menu/StationMenu.java index 0829a06a6..01997da45 100644 --- a/src/main/java/subway/menu/StationMenu.java +++ b/src/main/java/subway/menu/StationMenu.java @@ -2,8 +2,10 @@ import subway.domain.Station; import subway.domain.StationRepository; +import subway.service.StationService; import subway.util.StationValidator; +import java.util.List; import java.util.Scanner; public class StationMenu { @@ -21,32 +23,23 @@ public StationMenu(Scanner scanner) { } public void startStationMenu() { + selectStationMenu(); + } + + private void selectStationMenu() { while (true) { printStationMenu(); String input = this.scanner.nextLine(); System.out.println(); //TODO 함수 분리하기 if (input.equals("1")) { - System.out.println("## 등록할 역 이름을 입력하세요."); - String stationName = scanner.nextLine(); - System.out.println(); - if (StationValidator.checkValidStationName(stationName)) { - StationRepository.addStation(new Station(stationName)); - System.out.println("[ INFO ] 지하철 역이 등록되었습니다.\n"); - } + addStationMenu(); } - //TODO 역이 노선이 등록된 역인지 확인하고 이미 노선에 등록된 역이라면 삭제할 수 없도록 구현해야함 if (input.equals("2")) { - System.out.println("## 삭제할 역 이름을 입력하세요."); - String stationName = scanner.nextLine(); - System.out.println(); - if (StationRepository.deleteStation(stationName)) { - System.out.println("[ INFO ] 지하철 역이 삭제되었습니다.\n"); - } + deleteStationMenu(); } if (input.equals("3")) { - System.out.println("## 역 목록"); - StationRepository.printStationList(); + printStationList(); } if (input.equals("B")) { break; @@ -54,8 +47,41 @@ public void startStationMenu() { } } + private void addStationMenu() { + System.out.println("## 등록할 역 이름을 입력하세요."); + String stationName = scanner.nextLine(); + System.out.println(); + if (StationValidator.checkValidStationName(stationName)) { + StationService.addStation(stationName); + System.out.println("[ INFO ] 지하철 역이 등록되었습니다.\n"); + } + } + + //TODO 역이 노선이 등록된 역인지 확인하고 이미 노선에 등록된 역이라면 삭제할 수 없도록 구현해야함 + private void deleteStationMenu() { + System.out.println("## 삭제할 역 이름을 입력하세요."); + String stationName = scanner.nextLine(); + System.out.println(); + if (StationService.deleteStation(stationName)) { + System.out.println("[ INFO ] 지하철 역이 삭제되었습니다.\n"); + } + } + + private void printStationList() { + System.out.println("## 역 목록"); + List stations = StationService.getStationList(); + if (stations.size() == 0) { + System.out.println("[ INFO ] 존재하는 역이 없습니다."); + return; + } + for (Station station : stations) { + System.out.println("[ INFO ] " + station.getName()); + } + System.out.println(); + } + //TODO 출력 기능을 다른곳에 모으기 - public void printStationMenu() { + private void printStationMenu() { StringBuilder sb = new StringBuilder(); sb.append(MENU_TITLE).append("\n") .append(MENU1).append("\n") diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java new file mode 100644 index 000000000..926b5c98c --- /dev/null +++ b/src/main/java/subway/service/StationService.java @@ -0,0 +1,22 @@ +package subway.service; + +import subway.domain.Station; +import subway.domain.StationRepository; + +import java.util.List; + +public class StationService { + + public static void addStation(String stationName) { + StationRepository.addStation(new Station(stationName)); + } + + public static boolean deleteStation(String stationName) { + Station station = StationRepository.findStationByName(stationName); + return station.delete(); + } + + public static List getStationList() { + return StationRepository.stations(); + } +} diff --git a/src/main/java/subway/util/StationValidator.java b/src/main/java/subway/util/StationValidator.java index 780237681..849ca2a0f 100644 --- a/src/main/java/subway/util/StationValidator.java +++ b/src/main/java/subway/util/StationValidator.java @@ -3,8 +3,6 @@ import subway.domain.Station; import subway.domain.StationRepository; -import java.util.List; - public class StationValidator { private static final int SIZE = 2; @@ -19,6 +17,7 @@ public static boolean checkValidStationName(String name) { public static boolean checkDuplicateName(String name) { for(Station station : StationRepository.stations()) { if (station.getName().equals(name)) { + System.out.println("[ ERROR ] 이미 존재하는 역입니다."); return true; } } @@ -29,6 +28,16 @@ public static boolean checkValidName(String name) { if (name.length() >= SIZE) { return true; } + System.out.println("[ ERROR ] 유효하지 않은 역이름입니다."); + return false; + } + + public static boolean haveStationName(String name) { + for(Station station : StationRepository.stations()) { + if (station.getName().equals(name)) { + return true; + } + } return false; } } From c3a6ad199c0bde5989991e83f4a04c17e348c1bd Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 22:07:08 +0900 Subject: [PATCH 42/49] =?UTF-8?q?feat=20:=20=EC=97=AD=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=97=90=20=EC=97=90=EB=9F=AC=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=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/util/StationValidator.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/subway/util/StationValidator.java b/src/main/java/subway/util/StationValidator.java index 849ca2a0f..64226c25b 100644 --- a/src/main/java/subway/util/StationValidator.java +++ b/src/main/java/subway/util/StationValidator.java @@ -28,16 +28,7 @@ public static boolean checkValidName(String name) { if (name.length() >= SIZE) { return true; } - System.out.println("[ ERROR ] 유효하지 않은 역이름입니다."); - return false; - } - - public static boolean haveStationName(String name) { - for(Station station : StationRepository.stations()) { - if (station.getName().equals(name)) { - return true; - } - } + System.out.println("[ ERROR ] 역 이름은 2글자 이상이어야합니다."); return false; } } From 0b474818b029f835b3f5ec7f2e2c1141c47cb1b0 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 22:18:28 +0900 Subject: [PATCH 43/49] =?UTF-8?q?feat=20:=20=EC=97=AD=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/domain/StationRepository.java | 6 +---- src/main/java/subway/menu/LineMenu.java | 3 ++- src/main/java/subway/menu/MainMenu.java | 2 +- src/main/java/subway/menu/StationMenu.java | 3 ++- .../java/subway/util/StationValidator.java | 24 +++++++++++++++++++ 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index 1e849075f..710670b0c 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -14,11 +14,7 @@ public static void addStation(Station station) { } public static boolean deleteStation(String name) { - Station thisStation = findStationByName(name); - if (thisStation != null && thisStation.isRemovable()) { - return stations.removeIf(station -> Objects.equals(station.getName(), name)); - } - return false; + return stations.removeIf(station -> Objects.equals(station.getName(), name)); } public static Station findStationByName(String name) { diff --git a/src/main/java/subway/menu/LineMenu.java b/src/main/java/subway/menu/LineMenu.java index 3ec798496..3e4315369 100644 --- a/src/main/java/subway/menu/LineMenu.java +++ b/src/main/java/subway/menu/LineMenu.java @@ -58,9 +58,10 @@ public void startLineMenu() { } System.out.println(); } - } + + //TODO 출력 기능을 다른곳에 모으기 public void printLineMenu() { StringBuilder sb = new StringBuilder(); diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index b2ff7499d..b824d1f65 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -20,7 +20,7 @@ public MainMenu(Scanner scanner) { this.scanner = scanner; } - //TODO 메뉴 이외의 입력을 받았을 때 예외사항 출력 구현해야함 + //TODO 메뉴번호 이외의 입력을 받았을 때 예외사항 출력 구현해야함 public void start() { new DefaultSetting().defaultSetting(); while (true) { diff --git a/src/main/java/subway/menu/StationMenu.java b/src/main/java/subway/menu/StationMenu.java index 01997da45..a88b8789e 100644 --- a/src/main/java/subway/menu/StationMenu.java +++ b/src/main/java/subway/menu/StationMenu.java @@ -62,7 +62,8 @@ private void deleteStationMenu() { System.out.println("## 삭제할 역 이름을 입력하세요."); String stationName = scanner.nextLine(); System.out.println(); - if (StationService.deleteStation(stationName)) { + if (StationValidator.checkRemovableStation(stationName)) { + StationService.deleteStation(stationName); System.out.println("[ INFO ] 지하철 역이 삭제되었습니다.\n"); } } diff --git a/src/main/java/subway/util/StationValidator.java b/src/main/java/subway/util/StationValidator.java index 64226c25b..5b2ef1a7c 100644 --- a/src/main/java/subway/util/StationValidator.java +++ b/src/main/java/subway/util/StationValidator.java @@ -31,4 +31,28 @@ public static boolean checkValidName(String name) { System.out.println("[ ERROR ] 역 이름은 2글자 이상이어야합니다."); return false; } + + public static boolean checkRemovableStation(String name) { + if (haveStationName(name) && checkValidRemoveStation(name)) { + return true; + } + return false; + } + + public static boolean checkValidRemoveStation(String name) { + Station station = StationRepository.findStationByName(name); + if (station.isRemovable()) { + return true; + } + System.out.println("[ ERROR ] 노선과 연결되어 있어서 삭제할 수 없는 역입니다."); + return false; + } + + public static boolean haveStationName(String name) { + if (checkDuplicateName(name)) { + return true; + } + System.out.println("[ ERROR ] 존재하지 않는 지하철 역입니다."); + return false; + } } From d61d189bf585e4763ddffcf24c898bde4c904d48 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 23:14:23 +0900 Subject: [PATCH 44/49] =?UTF-8?q?feat=20:=20LineService=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 17 +++- .../java/subway/domain/LineRepository.java | 10 -- src/main/java/subway/menu/LineMenu.java | 96 +++++++++++++------ src/main/java/subway/menu/StationMenu.java | 2 - src/main/java/subway/service/LineService.java | 22 +++++ src/main/java/subway/util/LineValidator.java | 28 ++++++ .../java/subway/util/StationValidator.java | 14 +-- 7 files changed, 137 insertions(+), 52 deletions(-) create mode 100644 src/main/java/subway/service/LineService.java diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 90e69db48..8eb0f79f9 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -43,6 +43,7 @@ public void addStation(String index, String stationName) { } //TODO 삭제 여부를 알아보는 메서드와 삭제를 진행하는 메서드로 나눠야함 + // 구간 삭제 public boolean isRemovable(String stationName) { if (stationList.removeIf(station -> station.getName().equals(stationName))) { Objects.requireNonNull(StationRepository.findStationByName(stationName)).decreaseCount(); @@ -51,14 +52,20 @@ public boolean isRemovable(String stationName) { return false; } - public List stationList() { - return Collections.unmodifiableList(stationList); + public void beforeRemove() { + for (Station station : stationList()) { + station.decreaseCount(); + } } + public void deleteLine() { + beforeRemove(); + LineRepository.deleteLineByName(this.name); + } + public List stationList() { + return Collections.unmodifiableList(stationList); + } - /*public boolean equal(String lineName) { - return name.equals(lineName); - }*/ } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 8e19e2596..c3f66e140 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -28,14 +28,4 @@ public static Line findLineByName(String lineName) { } return null; } - - public static void printLineList() { - if (lines.size() == 0) { - System.out.println("존재하는 노선이 없습니다."); - return; - } - for (Line line : lines) { - System.out.println("[ INFO ] " + line.getName()); - } - } } diff --git a/src/main/java/subway/menu/LineMenu.java b/src/main/java/subway/menu/LineMenu.java index 3e4315369..86c81553b 100644 --- a/src/main/java/subway/menu/LineMenu.java +++ b/src/main/java/subway/menu/LineMenu.java @@ -1,10 +1,11 @@ package subway.menu; import subway.domain.Line; -import subway.domain.LineRepository; +import subway.service.LineService; import subway.util.LineValidator; import subway.util.StationValidator; +import java.util.List; import java.util.Scanner; public class LineMenu { @@ -22,37 +23,14 @@ public LineMenu(Scanner scanner) { } public void startLineMenu() { + selectLineMenu(); + } + + public void selectLineMenu() { while (true) { printLineMenu(); String input = scanner.nextLine(); - //TODO 함수 분리하기!!!!! - if (input.equals("1")) { - System.out.println("\n## 등록할 노선 이름을 입력하세요."); - String lineName = scanner.nextLine(); - if (LineValidator.checkValidLineName(lineName)) { - System.out.println("\n## 등록할 상행 종점역 이름을 입력하세요."); - String upLineLastStop = scanner.nextLine(); - if (StationValidator.checkDuplicateName(upLineLastStop)) { - System.out.println("\n##등록할 하행 종점역 이름을 입력하세요."); - String downLineLastStop = scanner.nextLine(); - if (StationValidator.checkDuplicateName(downLineLastStop)) { - LineRepository.addLine(new Line(lineName, upLineLastStop, downLineLastStop)); - System.out.println("\n[ INFO ] 지하철 노선이 등록되었습니다."); - } - } - } - } - if (input.equals("2")) { - System.out.println("## 삭제할 노선 이름을 입력하세요."); - String lineName = scanner.nextLine(); - if (LineRepository.deleteLineByName(lineName)) { - System.out.println("[ INFO ] 지하철 노선이 삭제되었습니다."); - } - } - if (input.equals("3")) { - System.out.println("## 노선 목록"); - LineRepository.printLineList(); - } + lineMenu(input); if (input.equals("B")) { break; } @@ -60,7 +38,67 @@ public void startLineMenu() { } } + private void lineMenu(String input) { + if (input.equals("1")) { + addLineMenu(); + } + if (input.equals("2")) { + deleteLineMenu(); + } + if (input.equals("3")) { + printLineList(); + } + } + + private void addLineMenu() { + System.out.println("\n## 등록할 노선 이름을 입력하세요."); + String lineName = scanner.nextLine(); + addLineName(lineName); + } + + private void addLineName(String lineName) { + if (LineValidator.checkValidLineName(lineName)) { + addUpLineLastStop(lineName); + } + } + + private void addUpLineLastStop(String lineName) { + System.out.println("\n## 등록할 상행 종점역 이름을 입력하세요."); + String upLineLastStop = scanner.nextLine(); + if (StationValidator.haveStationName(upLineLastStop)) { + addDownLineLastStop(lineName, upLineLastStop); + } + } + + private void addDownLineLastStop(String lineName, String upLineLastStop) { + System.out.println("\n## 등록할 하행 종점역 이름을 입력하세요."); + String downLineLastStop = scanner.nextLine(); + if (LineValidator.checkValidDownLastStop(upLineLastStop, downLineLastStop)) { + LineService.addLine(lineName, upLineLastStop, downLineLastStop); + System.out.println("\n[ INFO ] 지하철 노선이 등록되었습니다."); + } + } + private void deleteLineMenu(){ + System.out.println("## 삭제할 노선 이름을 입력하세요."); + String lineName = scanner.nextLine(); + if (LineValidator.haveLineName(lineName)) { + LineService.deleteLine(lineName); + System.out.println("[ INFO ] 지하철 노선이 삭제되었습니다."); + } + } + + private void printLineList() { + System.out.println("## 노선 목록"); + List lines = LineService.getLineList(); + if (lines.size() == 0) { + System.out.println("존재하는 노선이 없습니다."); + return; + } + for (Line line : lines) { + System.out.println("[ INFO ] " + line.getName()); + } + } //TODO 출력 기능을 다른곳에 모으기 public void printLineMenu() { diff --git a/src/main/java/subway/menu/StationMenu.java b/src/main/java/subway/menu/StationMenu.java index a88b8789e..f11093010 100644 --- a/src/main/java/subway/menu/StationMenu.java +++ b/src/main/java/subway/menu/StationMenu.java @@ -1,7 +1,6 @@ package subway.menu; import subway.domain.Station; -import subway.domain.StationRepository; import subway.service.StationService; import subway.util.StationValidator; @@ -31,7 +30,6 @@ private void selectStationMenu() { printStationMenu(); String input = this.scanner.nextLine(); System.out.println(); - //TODO 함수 분리하기 if (input.equals("1")) { addStationMenu(); } diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java new file mode 100644 index 000000000..0c7c3e699 --- /dev/null +++ b/src/main/java/subway/service/LineService.java @@ -0,0 +1,22 @@ +package subway.service; + +import subway.domain.Line; +import subway.domain.LineRepository; + +import java.util.List; + +public class LineService { + + public static void addLine(String lineName, String upLineLastStop, String downLineLastStop){ + LineRepository.addLine(new Line(lineName, upLineLastStop, downLineLastStop)); + } + + public static void deleteLine(String lineName) { + Line line = LineRepository.findLineByName(lineName); + line.deleteLine(); + } + + public static List getLineList() { + return LineRepository.lines(); + } +} diff --git a/src/main/java/subway/util/LineValidator.java b/src/main/java/subway/util/LineValidator.java index 95814c6e3..48a374852 100644 --- a/src/main/java/subway/util/LineValidator.java +++ b/src/main/java/subway/util/LineValidator.java @@ -2,6 +2,7 @@ import subway.domain.Line; import subway.domain.LineRepository; +import subway.domain.Station; public class LineValidator { @@ -14,6 +15,7 @@ public static boolean checkValidLineName(String name) { public static boolean checkDuplicateName(String name) { for (Line line : LineRepository.lines()) { if (line.getName().equals(name)) { + System.out.println("[ ERROR ] 이미 존재하는 노선입니다.\n"); return true; } } @@ -24,6 +26,32 @@ public static boolean checkValidName(String name) { if (name.length() >= SIZE) { return true; } + System.out.println("[ ERROR ] 노선 이름은 2글자 이상이어야 합니다.\n"); + return false; + } + + public static boolean haveLineName(String name) { + for (Line line : LineRepository.lines()) { + if (line.getName().equals(name)) { + return true; + } + } + System.out.println("[ ERROR ] 등록 되지않은 노선입니다.\n"); + return false; + } + + public static boolean checkValidDownLastStop(String upName, String downName) { + if (StationValidator.haveStationName(downName) && !isSameStation(upName, downName)) { + return true; + } + return false; + } + + public static boolean isSameStation(String upName, String downName) { + if (upName.equals(downName)) { + System.out.println("[ ERROR ] 상행선종점과 하행선종점은 각각 다른 지하철 역이어야 합니다."); + return true; + } return false; } } diff --git a/src/main/java/subway/util/StationValidator.java b/src/main/java/subway/util/StationValidator.java index 5b2ef1a7c..4ea266037 100644 --- a/src/main/java/subway/util/StationValidator.java +++ b/src/main/java/subway/util/StationValidator.java @@ -17,7 +17,7 @@ public static boolean checkValidStationName(String name) { public static boolean checkDuplicateName(String name) { for(Station station : StationRepository.stations()) { if (station.getName().equals(name)) { - System.out.println("[ ERROR ] 이미 존재하는 역입니다."); + System.out.println("[ ERROR ] 이미 존재하는 역입니다.\n"); return true; } } @@ -28,7 +28,7 @@ public static boolean checkValidName(String name) { if (name.length() >= SIZE) { return true; } - System.out.println("[ ERROR ] 역 이름은 2글자 이상이어야합니다."); + System.out.println("[ ERROR ] 역 이름은 2글자 이상이어야합니다.\n"); return false; } @@ -44,15 +44,17 @@ public static boolean checkValidRemoveStation(String name) { if (station.isRemovable()) { return true; } - System.out.println("[ ERROR ] 노선과 연결되어 있어서 삭제할 수 없는 역입니다."); + System.out.println("[ ERROR ] 노선과 연결되어 있어서 삭제할 수 없는 역입니다.\n"); return false; } public static boolean haveStationName(String name) { - if (checkDuplicateName(name)) { - return true; + for(Station station : StationRepository.stations()) { + if (station.getName().equals(name)) { + return true; + } } - System.out.println("[ ERROR ] 존재하지 않는 지하철 역입니다."); + System.out.println("[ ERROR ] 등록 되지않은 지하철 역입니다.\n"); return false; } } From faece9fb2c14f2b7533ff75170873d1e556d2256 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 23:17:59 +0900 Subject: [PATCH 45/49] =?UTF-8?q?refactor=20:=20MainMenu=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=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/menu/MainMenu.java | 32 +++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/main/java/subway/menu/MainMenu.java b/src/main/java/subway/menu/MainMenu.java index b824d1f65..8d6f440d0 100644 --- a/src/main/java/subway/menu/MainMenu.java +++ b/src/main/java/subway/menu/MainMenu.java @@ -23,28 +23,36 @@ public MainMenu(Scanner scanner) { //TODO 메뉴번호 이외의 입력을 받았을 때 예외사항 출력 구현해야함 public void start() { new DefaultSetting().defaultSetting(); + selectMainMenu(); + } + + private void selectMainMenu() { while (true) { printMainMenu(); String input = scanner.nextLine(); System.out.println(); - if (input.equals("1")) { - new StationMenu(scanner).startStationMenu(); - } - if (input.equals("2")) { - new LineMenu(scanner).startLineMenu(); - } - if (input.equals("3")) { - new SectionMenu(scanner).startSectionMenu(); - } - if (input.equals("4")) { - new SubwayMapMenu().printSubwayMap(); - } + mainMenu(input); if (input.equals("Q")) { break; } } } + private void mainMenu(String input) { + if (input.equals("1")) { + new StationMenu(scanner).startStationMenu(); + } + if (input.equals("2")) { + new LineMenu(scanner).startLineMenu(); + } + if (input.equals("3")) { + new SectionMenu(scanner).startSectionMenu(); + } + if (input.equals("4")) { + new SubwayMapMenu().printSubwayMap(); + } + } + private void printMainMenu() { StringBuilder sb = new StringBuilder(); sb.append(MAIN_TITLE).append("\n") From 4252c49fa4b3a54cdbf983fbda4a1815bf210fe9 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 23:20:41 +0900 Subject: [PATCH 46/49] =?UTF-8?q?refactor=20:=20SubwayMapMenu=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=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/menu/SubwayMapMenu.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/subway/menu/SubwayMapMenu.java b/src/main/java/subway/menu/SubwayMapMenu.java index 2a513a2c8..a97dd385c 100644 --- a/src/main/java/subway/menu/SubwayMapMenu.java +++ b/src/main/java/subway/menu/SubwayMapMenu.java @@ -8,13 +8,21 @@ public class SubwayMapMenu { public void printSubwayMap() { System.out.println("## 지하철 노선도"); + printLines(); + System.out.println(); + } + + private void printLines() { for (Line line : LineRepository.lines()) { System.out.println("\n[ INFO ] " + line.getName()); System.out.println("[ INFO ] ---"); - for (Station station : line.stationList()) { - System.out.println("[ INFO ] " + station.getName()); - } + printStations(line); + } + } + + private void printStations(Line line) { + for (Station station : line.stationList()) { + System.out.println("[ INFO ] " + station.getName()); } - System.out.println(); } } From c259f526c5d189a835b5f53da613c806af7d6386 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 23:48:48 +0900 Subject: [PATCH 47/49] =?UTF-8?q?feat=20:=20SectionService=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Line.java | 8 +- src/main/java/subway/menu/SectionMenu.java | 73 +++++++++++++------ .../java/subway/service/SectionService.java | 17 +++++ .../java/subway/util/SectionValidator.java | 34 +++++++-- 4 files changed, 95 insertions(+), 37 deletions(-) create mode 100644 src/main/java/subway/service/SectionService.java diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 8eb0f79f9..a3ba219b3 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -44,12 +44,8 @@ public void addStation(String index, String stationName) { //TODO 삭제 여부를 알아보는 메서드와 삭제를 진행하는 메서드로 나눠야함 // 구간 삭제 - public boolean isRemovable(String stationName) { - if (stationList.removeIf(station -> station.getName().equals(stationName))) { - Objects.requireNonNull(StationRepository.findStationByName(stationName)).decreaseCount(); - return true; - } - return false; + public boolean removeStation(String stationName) { + return stationList.removeIf(station -> station.getName().equals(stationName)); } public void beforeRemove() { diff --git a/src/main/java/subway/menu/SectionMenu.java b/src/main/java/subway/menu/SectionMenu.java index 38e11e762..f069efe59 100644 --- a/src/main/java/subway/menu/SectionMenu.java +++ b/src/main/java/subway/menu/SectionMenu.java @@ -2,6 +2,7 @@ import subway.domain.Line; import subway.domain.LineRepository; +import subway.service.SectionService; import subway.util.LineValidator; import subway.util.SectionValidator; import subway.util.StationValidator; @@ -23,36 +24,18 @@ public SectionMenu(Scanner scanner) { } public void startSectionMenu() { + selectSectionMenu(); + } + + private void selectSectionMenu() { while (true) { printSectionMenu(); String input = scanner.nextLine(); if (input.equals("1")) { - System.out.println("\n## 노선을 입력하세요."); - String lineName = scanner.nextLine(); - if (LineValidator.checkDuplicateName(lineName)) { - System.out.println("\n## 역 이름을 입력하세요."); - String stationName = scanner.nextLine(); - if (StationValidator.checkDuplicateName(stationName)) { - System.out.println("\n## 순서를 입력하세요."); - String index = scanner.nextLine(); - if (SectionValidator.checkValidIndex(index, lineName)) { - Objects.requireNonNull(LineRepository.findLineByName(lineName)).addStation(index, stationName); - System.out.println("\n[ INFO ] 구간이 등록되었습니다."); - } - } - } + addSectionMenu(); } if (input.equals("2")) { - System.out.println("\n## 삭제할 구간의 노선을 입력하세요."); - String lineName = scanner.nextLine(); - Line line = LineRepository.findLineByName(lineName); - if (line != null) { - System.out.println("\n## 삭제할 구간의 역을 입력하세요."); - String stationName = scanner.nextLine(); - if (line.isRemovable(stationName)) { - System.out.println("\n[ INFO ] 구간이 삭제되었습니다."); - } - } + deleteSectionMenu(); } if (input.equals("B")) { break; @@ -60,6 +43,48 @@ public void startSectionMenu() { } } + private void addSectionMenu() { + addLine(); + } + + private void addLine() { + System.out.println("\n## 노선을 입력하세요."); + String lineName = scanner.nextLine(); + if (LineValidator.haveLineName(lineName)) { + addStation(lineName); + } + } + + private void addStation(String lineName) { + System.out.println("\n## 역 이름을 입력하세요."); + String stationName = scanner.nextLine(); + if (StationValidator.haveStationName(stationName)) { + addIndex(lineName, stationName); + } + } + + private void addIndex(String lineName, String stationName) { + System.out.println("\n## 순서를 입력하세요."); + String index = scanner.nextLine(); + if (SectionValidator.checkValidIndex(index, lineName)) { + SectionService.addSection(lineName, index, stationName); + System.out.println("\n[ INFO ] 구간이 등록되었습니다."); + } + } + + private void deleteSectionMenu() { + System.out.println("\n## 삭제할 구간의 노선을 입력하세요."); + String lineName = scanner.nextLine(); + if (LineValidator.haveLineName(lineName)) { + System.out.println("\n## 삭제할 구간의 역을 입력하세요."); + String stationName = scanner.nextLine(); + if (SectionValidator.checkRemovableSection(lineName, stationName)) { + SectionService.removeSection(stationName, lineName); + System.out.println("\n[ INFO ] 구간이 삭제되었습니다."); + } + } + } + private void printSectionMenu() { StringBuilder sb = new StringBuilder(); sb.append(MENU_TITLE).append("\n") diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java new file mode 100644 index 000000000..60e967a3e --- /dev/null +++ b/src/main/java/subway/service/SectionService.java @@ -0,0 +1,17 @@ +package subway.service; + +import subway.domain.Line; +import subway.domain.LineRepository; + +public class SectionService { + + public static void addSection(String lineName, String index, String stationName) { + LineRepository.findLineByName(lineName).addStation(index, stationName); + } + + public static void removeSection(String stationName, String lineName) { + Line line = LineRepository.findLineByName(lineName); + line.removeStation(stationName); + } + +} diff --git a/src/main/java/subway/util/SectionValidator.java b/src/main/java/subway/util/SectionValidator.java index d850db04f..2b5efb12b 100644 --- a/src/main/java/subway/util/SectionValidator.java +++ b/src/main/java/subway/util/SectionValidator.java @@ -1,5 +1,6 @@ package subway.util; +import subway.domain.Line; import subway.domain.LineRepository; import subway.domain.Station; @@ -17,19 +18,38 @@ public static boolean checkValidStation(String name, List stationList) return true; } - public static boolean checkValidDelete(String name, List stationList) { - if (stationList.size() <= SIZE) { - return false; - } - return true; - } - public static boolean checkValidIndex(String index, String lineName) { int lineSize = LineRepository.findLineByName(lineName).size(); if (Integer.parseInt(index) > 0 && Integer.parseInt(index) <= lineSize) { return true; } + System.out.println("[ ERROR ] 유효하지 않은 순서입니다.(현재 노선의 최대 크기 : " + lineSize + ")"); + return false; + } + + public static boolean checkRemovableSection(String lineName, String stationName) { + if (haveSection(lineName, stationName) && checkValidDelete(lineName)) { + return true; + } return false; } + public static boolean haveSection(String lineName, String stationName) { + Line line = LineRepository.findLineByName(lineName); + if (line.isRemovable(stationName)) { + return true; + } + System.out.println("[ ERROR ] 구간에 존재하지 않는 역입니다."); + return false; + } + + public static boolean checkValidDelete(String lineName) { + Line line = LineRepository.findLineByName(lineName); + if (line.stationList().size() <= SIZE) { + System.out.println("[ ERROR ] 상행선 종점과 하행선 종점만 남았을 때는 구간을 삭제할 수 없습니다."); + return false; + } + return true; + } + } From bc96c5164b49e1306d3f81da32f3636b4d64a0f6 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 23:52:02 +0900 Subject: [PATCH 48/49] =?UTF-8?q?refactor=20:=20=EA=B5=AC=EA=B0=84?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/menu/SectionMenu.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/subway/menu/SectionMenu.java b/src/main/java/subway/menu/SectionMenu.java index f069efe59..5149adf0b 100644 --- a/src/main/java/subway/menu/SectionMenu.java +++ b/src/main/java/subway/menu/SectionMenu.java @@ -76,12 +76,16 @@ private void deleteSectionMenu() { System.out.println("\n## 삭제할 구간의 노선을 입력하세요."); String lineName = scanner.nextLine(); if (LineValidator.haveLineName(lineName)) { - System.out.println("\n## 삭제할 구간의 역을 입력하세요."); - String stationName = scanner.nextLine(); - if (SectionValidator.checkRemovableSection(lineName, stationName)) { - SectionService.removeSection(stationName, lineName); - System.out.println("\n[ INFO ] 구간이 삭제되었습니다."); - } + inputDeleteStation(lineName); + } + } + + private void inputDeleteStation(String lineName) { + System.out.println("\n## 삭제할 구간의 역을 입력하세요."); + String stationName = scanner.nextLine(); + if (SectionValidator.checkRemovableSection(lineName, stationName)) { + SectionService.removeSection(stationName, lineName); + System.out.println("\n[ INFO ] 구간이 삭제되었습니다."); } } From 9fca54e7d5b83fb75b6e5cce1a8ac565b1cbed94 Mon Sep 17 00:00:00 2001 From: Gomding Date: Tue, 15 Dec 2020 23:55:12 +0900 Subject: [PATCH 49/49] =?UTF-8?q?fix=20:=20=EA=B5=AC=EA=B0=84=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=9C=A0=ED=9A=A8=EC=84=B1=EA=B2=80=EC=82=AC=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/util/SectionValidator.java | 6 ++++-- src/test/java/subway/domain/LineTest.java | 9 --------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/main/java/subway/util/SectionValidator.java b/src/main/java/subway/util/SectionValidator.java index 2b5efb12b..a4e63488e 100644 --- a/src/main/java/subway/util/SectionValidator.java +++ b/src/main/java/subway/util/SectionValidator.java @@ -36,8 +36,10 @@ public static boolean checkRemovableSection(String lineName, String stationName) public static boolean haveSection(String lineName, String stationName) { Line line = LineRepository.findLineByName(lineName); - if (line.isRemovable(stationName)) { - return true; + for (Station station : line.stationList()) { + if (station.getName().equals(stationName)) { + return true; + } } System.out.println("[ ERROR ] 구간에 존재하지 않는 역입니다."); return false; diff --git a/src/test/java/subway/domain/LineTest.java b/src/test/java/subway/domain/LineTest.java index c4e433cab..ef671f958 100644 --- a/src/test/java/subway/domain/LineTest.java +++ b/src/test/java/subway/domain/LineTest.java @@ -43,14 +43,5 @@ public class LineTest { assertEquals(line.stationList().get(0).getName(), "중앙역"); } - @Order(1) - @Test - public void 구간_삭제된다() { - Line line = LineRepository.findLineByName("2호선"); - int beforeSize = line.size(); - line.isRemovable("강남역"); - assertEquals(beforeSize-3, line.size()); - } - }