Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[지하철] 김연진 미션 제출합니다. #2

Open
wants to merge 70 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
084a2f3
docs: 기능 목록 작성
homebdy Sep 2, 2023
873800c
refactor: 패키지 변경
homebdy Sep 2, 2023
1466112
feat(Initialization): 초기 설정
homebdy Sep 2, 2023
facf36b
feat(OutputView): 메인 화면 출력
homebdy Sep 2, 2023
b1272f5
feat(InputView): 메인 화면에서 원하는 기능 입력
homebdy Sep 2, 2023
19155e9
feat(MainOption): 존재하지 않는 기능을 입력한 경우 예외 발생
homebdy Sep 2, 2023
1583825
feat(SubwayController): 메인 기능 선택시 해당 기능으로 연결
homebdy Sep 2, 2023
2e56c8f
feat(OutputView): 역 관리 화면 출력
homebdy Sep 2, 2023
4668e88
feat(InputView): 역 관리 기능 선택
homebdy Sep 3, 2023
44142f1
feat(StationController): 역 생성 기능 입력시 해당 기능으로 연결
homebdy Sep 3, 2023
b7cda1b
feat(InputView): 생성할 역 이름 입력 기능 구현
homebdy Sep 3, 2023
a6beb30
feat(Name): 역 이름이 2글자 이상이 아닐 경우 예외 발생
homebdy Sep 3, 2023
4660213
feat(Station): 파라미터 변경
homebdy Sep 3, 2023
15dd286
feat(StationService): 역 생성 기능 구현
homebdy Sep 3, 2023
e49a7f6
feat(StationRepository): 중복된 이름의 역이 있을 경우 예외 발생
homebdy Sep 3, 2023
fb431f3
feat(OutputView): 등록 완료 안내 출력
homebdy Sep 3, 2023
ecdee10
feat(InputView): 삭제할 역 이름 입력 기능 구현
homebdy Sep 3, 2023
aa270c3
feat(StationRepository): 역 삭제 기능 구현
homebdy Sep 3, 2023
d29caf4
feat(StationRepository): 존재하지 않는 역일 경우 예외 발생
homebdy Sep 3, 2023
f489641
feat(OutputView): 삭제 완료 안내 출력
homebdy Sep 3, 2023
7ece299
feat(Station): toString 재정의
homebdy Sep 3, 2023
4efc20b
feat(OutputView): 등록되어 있는 역 목록 출력 기능 구현
homebdy Sep 3, 2023
aa1f252
feat(SubwayController): 메인 기능에서 노선 관리를 선택할 경우 lineController 연결
homebdy Sep 3, 2023
6d4ff37
feat(OutputView): 노선 관리 화면 출력 기능 구
homebdy Sep 3, 2023
3f9cac4
feat(LineInputView): 원하는 기능 선택 기능 구현
homebdy Sep 3, 2023
f8af5a3
feat(LineInputView): 노선 이름 입력 기능 구현
homebdy Sep 3, 2023
2a06844
feat(LineInputView): 상행 종점역 입력 기능 구현
homebdy Sep 3, 2023
361c1ba
feat(LineInputView): 하행 종점역 입력 기능 구현
homebdy Sep 3, 2023
99fd053
feat(LineRepository): 노선 저장 기능 구현
homebdy Sep 3, 2023
09bf4d5
feat(LineController): 노선 생성 기능 구현
homebdy Sep 3, 2023
39be04c
feat(StioStations): 상행 종점역과 하행 종점역이 같을 경우 예외 발생
homebdy Sep 3, 2023
cd07afc
feat(LineRepository): 이미 존재하는 노선일 경우 예외 발생
homebdy Sep 3, 2023
d6c3b91
feat(OutputView): 노선 생성 완료 안내 출력 기능 구현
homebdy Sep 3, 2023
17fbaa4
feat(InputView): 삭제할 노선 이름 입력
homebdy Sep 3, 2023
e5427cf
feat(LineRepository): 노선 삭제 기능 구현
homebdy Sep 3, 2023
dcc05a2
feat(LineRepository): 존재하지 않는 노선일 경우 예외 발생
homebdy Sep 3, 2023
3f3fa1e
feat(OutputView): 삭제 완료 안내 출력 기능 구현
homebdy Sep 3, 2023
40af501
feat(OutputView): 노선 목록 출력 기능 구현
homebdy Sep 3, 2023
0c78fc0
feat(SubwayController): 구간 관리 기능 연결
homebdy Sep 3, 2023
78d1350
feat(SectionOption): 구간 기능 선택지 관리
homebdy Sep 3, 2023
7d44170
feat(SectionOutputView): 구간 관리 화면 출력 기능 구현
homebdy Sep 3, 2023
fc885bd
feat(SectionOutputView): 원하는 기능 입력 기능 구현
homebdy Sep 3, 2023
071cb51
feat(SectionInputView): 노선 입력 기능 구현
homebdy Sep 3, 2023
3308a26
feat(SectionInputView): 역 이름 입력 기능 구현
homebdy Sep 3, 2023
e059324
feat(SectionInputView): 구간 순서 입력 기능 구현
homebdy Sep 3, 2023
fa0a345
refactor(SectionInputView): 역 입력 메서드 반환값 수정
homebdy Sep 4, 2023
4d276c1
feat(LineRepository): 구간 추가 기능 구현
homebdy Sep 4, 2023
3e684e1
feat(StopStations): 이미 구간에 존재하는 역일 경우 예외 발생
homebdy Sep 4, 2023
965305f
feat(StopStations): 순서가 범위를 벗어날 경우 예외 발생
homebdy Sep 4, 2023
de4f781
feat(SectionOutputView): 구간 등록 완료 안내 출력
homebdy Sep 4, 2023
0f77963
feat(SectionController): 구간 생성 기능 진행
homebdy Sep 4, 2023
eb4db53
feat(InputView): 삭제할 구간의 노선 입력
homebdy Sep 4, 2023
36b8536
feat(InputView): 삭제할 구간의 역 입력
homebdy Sep 4, 2023
b85d035
feat(LineRepository): 구간 삭제 기능 구현
homebdy Sep 4, 2023
fd2018e
feat(OutputView): 삭제 완료 안내 출력
homebdy Sep 4, 2023
0300a69
feat(StopStations): 구간에 존재하지 않는 역일 경우 예외 발생
homebdy Sep 4, 2023
8958f79
feat(SectionController): 삭제 요청 처리 기능 구현
homebdy Sep 4, 2023
d8a8f25
feat: 돌아가기 기능 구현
homebdy Sep 4, 2023
3a3773e
feat(SubwayController): 지하철 노선도 출력 기능 연결
homebdy Sep 4, 2023
e9d1787
feat: 지하철 노선도 출력 기능 구현
homebdy Sep 4, 2023
9a7de56
refactor: InputView, OutputView 분리
homebdy Sep 4, 2023
704b147
feat: 예외 발생 시 재시작 기능 구현
homebdy Sep 4, 2023
4d12fd0
test(LineOption): 노선 관리 기능 목록 테스트
homebdy Sep 4, 2023
fbf5564
test(LineRepository): 노선 관리 예외 테스트
homebdy Sep 4, 2023
4ed6669
feat: 역 삭제시 포함된 노선에서도 삭제
homebdy Sep 5, 2023
a0fc39a
test(LineOption): 옵션 상태 확인 테스트
homebdy Sep 5, 2023
0cb6e0a
test(StopStation): 정차역 추가 삭제 테스트
homebdy Sep 5, 2023
56c5fc5
test(SectionOption): 구간 기능 관리 기능 테스트
homebdy Sep 5, 2023
e3e0dcd
test(SectionRepository): 구간 추가 삭제 기능 테스트
homebdy Sep 5, 2023
e8de46a
refactor(InputView): 입력 방식 변경
homebdy Sep 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
## 기능 목록

### 초기 설정
- [x] 사전 등록 정보 초기 설정

### 메인 화면
- [x] 메인 화면 출력
- [x] 원하는 기능 입력
- [x] 존재하지 않는 기능을 입력한 경우 예외 발생

### 역 관리
- [x] 역 관리 화면 출력
- [x] 원하는 기능 입력

**역 등록**
- [x] 등록할 역 이름 입력
- [x] 중복된 이름의 역이 있을 경우 예외 발생
- [x] 역 이름이 2글자 이상이 아닐 경우 예외 발생
- [x] 등록
- [x] 등록 완료 안내 출력

**역 삭제**
- [x] 삭제할 역 이름 입력
- [x] 존재하지 않는 역일 경우 예외 발생
- [x] 삭제
- [x] 노선에 등록된 역일 경우 노선에서 삭제
- [x] 역 삭제
- [x] 삭제 완료 안내 출력

**역 조회**
- [x] 등록되어 있는 역 목록 출력

### 노선 관리

- [x] 노선 관리 화면 출력
- [x] 원하는 기능 선택

**노선 등록**

- [x] 등록할 노선 이름 입력
- [x] 존재하는 노선일 경우 예외 발생
- [x] 1글자 이하일 경우 예외 발생
- [x] 상행 종점역 이름 입력
- [x] 하행 종점역 이름 입력
- [x] 존재하지 않는 역일 경우 예외 발생
- [x] 상행 종점역과 하행 종점역이 같을 경우 예외 발생
- [x] 노선 생성
- [x] 노선 생성 완료 안내 출력

**노선 삭제**

- [x] 삭제할 노선 이름 입력
- [x] 존재하지 않는 노선일 경우 예외 발생
- [x] 노선 삭제
- [x] 삭제 완료 안내 출력

**노선 조회**
- [x] 노선 목록 출력

### 구간 관리

- [x] 구간 관리 화면 출력
- [x] 원하는 기능 선택

**구간 등록**

- [x] 노선 이름 입력
- [x] 존재하지 않을 경우 예외 발생
- [x] 역 이름 입력
- [x] 존재하지 않을 경우 예외 발생
- [x] 이미 구간에 존재하는 역일 경우 예외 발생
- [x] 순서 입력
- [x] 범위를 벗어날 경우 예외 발생
- [x] 구간 등록
- [x] 등록 완료 안내 출력

**구간 삭제**

- [x] 삭제할 노선 입력
- [x] 존재하지 않는 노선일 경우 예외 발생
- [x] 삭제할 구간의 역 입력
- [x] 구간에 존재하지 않는 역일 경우 예외 발생
- [x] 구간 삭제
- [x] 삭제 완료 안내 출력

### 지하철 노선도 출력

- [x] 지하철 노선도 출력
5 changes: 4 additions & 1 deletion src/main/java/subway/Application.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package subway;

import subway.main.SubwayController;

import java.util.Scanner;

public class Application {
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
// TODO: 프로그램 구현
SubwayController controller = new SubwayController(scanner);
controller.start();
}
}
27 changes: 27 additions & 0 deletions src/main/java/subway/constant/ExceptionMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package subway.constant;

public enum ExceptionMessage {

INVALID_OPTION("존재하지 않는 기능입니다."),
INVALID_LENGTH("2글자 이상 입력만 가능합니다."),
DUPLICATE_STATION("이미 존재하는 역입니다."),
NOT_EXISTENT_STATION("존재하지 않는 역입니다."),
DUPLICATE_LAST_STATION("상행 종점 역과 하행 종점역인 다른 역으로 입력되어야 합니다."),
DUPLICATE_LINE("이미 존재하는 노선입니다."),
NOT_EXISTENT_LINE("존재하지 않는 노선입니다."),
DUPLICATE_SECTION_STATION("해당 노선에 이미 존재하는 역입니다."),
NOT_EXISTING_STATION("해당 노선에 입력하신 역이 존재하지 않습니다."),
OUT_OF_RANGE("해당 순서에 역을 추가할 수 없습니다.");

private static final String PREFIX = "[ERROR] ";
private final String message;

ExceptionMessage(String message) {
this.message = message;
}

@Override
public String toString() {
return PREFIX + message;
}
}
24 changes: 24 additions & 0 deletions src/main/java/subway/constant/InformationMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package subway.constant;

public enum InformationMessage {

COMPLETE_CREATE_STATION("지하철 역이 등록되었습니다."),
COMPLETE_DELETE_STATION("지하철 역이 삭제되었습니다."),
READ_ELEMENT("%s\n"),
CREATE_LINE("지하철 노선이 등록되었습니다."),
DELETE_LINE("지하철 노선이 삭제되었습니다."),
CREATE_SECTION("구간이 등록되었습니다."),
DELETE_SECTION("구간이 삭제되었습니다.");

private static final String PREFIX = "[INFO] ";
private final String message;

InformationMessage(String message) {
this.message = message;
}

@Override
public String toString() {
return PREFIX + message;
}
}
36 changes: 36 additions & 0 deletions src/main/java/subway/constant/OutputMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package subway.constant;

public enum OutputMessage {

MAIN_MESSAGE("메인 화면"),
OPTION_SELECT("원하는 기능을 선택하세요."),
STATION_OPTION_SELECT("역 관리 화면"),
CREATE_STATION("등록할 역 이름을 입력하세요."),
DELETE_STATION("삭제할 역 이름을 입력하세요."),
READ_STATION("역 목록"),
LINE_MANAGEMENT_SCREEN("노선 관리 화면"),
CREATE_LINE("등록할 노선 이름을 입력하세요."),
UP_BOUND_STATION("등록할 노선의 상행 종점역 이름을 입력하세요."),
DESCENDING_STATION("등록할 노선의 하행 종점역 이름을 입력하세요."),
DELETE_LINE("삭제할 노선 이름을 입력하세요."),
READ_LINE("노선 목록"),
SECTION_MANAGEMENT_SCREEN("구간 관리 화면"),
SECTION_LINE("노선을 입력하세요."),
SECTION_STATION("역이름을 입력하세요."),
SECTION_INDEX("순서를 입력하세요."),
DELETE_SECTION_LINE("삭제할 구간의 노선을 입력하세요."),
DELETE_SECTION_STATION("삭제할 구간의 역을 입력하세요."),
SUBWAY_MAP("지하철 노선도");

private static final String PREFIX = "## ";
private final String message;

OutputMessage(String message) {
this.message = message;
}

@Override
public String toString() {
return PREFIX + message;
}
}
19 changes: 19 additions & 0 deletions src/main/java/subway/constant/PrintElement.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package subway.constant;

public enum PrintElement {

COMMA(". "),
NEW_LINE("\n"),
DOTTED_LINE("---");

private final String element;

PrintElement(String element) {
this.element = element;
}

@Override
public String toString() {
return element;
}
}
15 changes: 0 additions & 15 deletions src/main/java/subway/domain/Line.java

This file was deleted.

22 changes: 0 additions & 22 deletions src/main/java/subway/domain/LineRepository.java

This file was deleted.

15 changes: 0 additions & 15 deletions src/main/java/subway/domain/Station.java

This file was deleted.

22 changes: 0 additions & 22 deletions src/main/java/subway/domain/StationRepository.java

This file was deleted.

45 changes: 45 additions & 0 deletions src/main/java/subway/line/Line.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package subway.line;

import subway.constant.InformationMessage;
import subway.constant.PrintElement;
import subway.station.Name;
import subway.station.Station;

public class Line {

private final Name name;
private final StopStations stopStations;

public Line(Name name, StopStations stopStations) {
this.name = name;
this.stopStations = stopStations;
}

public boolean isSame(Name name) {
return name.equals(this.name);
}

public void addStopStation(Station station, int index) {
stopStations.addStation(station, index);
}

public void deleteStopStation(Station station) {
stopStations.deleteStation(station);
}

public boolean isContainStation(Station station) {
return stopStations.contain(station);
}

@Override
public String toString() {
return String.format(InformationMessage.READ_ELEMENT.toString(), name);
}

public String getSubwayMap() {
return String.valueOf(this) +
PrintElement.DOTTED_LINE +
PrintElement.NEW_LINE +
stopStations;
}
}
Loading