Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
86dbc9e
docs(readme): add list of features to implement
hanulparkk Dec 15, 2020
8129571
feat(subway): add skeleton code that uses mvc pattern
hanulparkk Dec 15, 2020
f4c3003
feat(initialization): add enum class to manage initial domain data
hanulparkk Dec 15, 2020
ddd2642
feat(subway): add skeleton code for line and section
hanulparkk Dec 15, 2020
c778422
feat(controller,view): add enum class to manage message constants
hanulparkk Dec 15, 2020
b6002fb
feat(controller): add enum class to manage functions
hanulparkk Dec 15, 2020
8c7ddeb
feat(controller): add enum class to manage subway screen
hanulparkk Dec 15, 2020
843cef0
feat(subway-controller): add init methods for domains
hanulparkk Dec 15, 2020
8774333
docs(readme): update feature implementation
hanulparkk Dec 15, 2020
84eac4e
feat(main-controller,view): display main screen
hanulparkk Dec 15, 2020
88bec3f
docs(readme): update feature implementation
hanulparkk Dec 15, 2020
1363683
feat(main-validator): validate user input for main screen function
hanulparkk Dec 15, 2020
a7a1aa1
docs(readme): update feature implementation
hanulparkk Dec 15, 2020
bc852d3
feat(station-validator): validate user input for station magement scr…
hanulparkk Dec 15, 2020
d8b1f9f
feat(station-controller): add methods for station magement screen fun…
hanulparkk Dec 15, 2020
ebf0f8a
docs(readme): update feature implementation
hanulparkk Dec 15, 2020
ed2d4bd
feat(line-validator): validate user input for line magement screen fu…
hanulparkk Dec 15, 2020
db468f0
feat(line-controller,service): add methods for line management screen…
hanulparkk Dec 15, 2020
d98de00
docs(readme): update feature implementation
hanulparkk Dec 15, 2020
35bcf75
feat(section-validator): validate user input for section management s…
hanulparkk Dec 15, 2020
2184589
feat(section-management-screen): add method for section management sc…
hanulparkk Dec 15, 2020
36294c9
docs(readme): update feature implementation
hanulparkk Dec 15, 2020
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
70 changes: 70 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# 지하철 노선도 미션

## 🎯 구현할 기능 목록

### 초기 설정
- [x] 아래의 사전 등록 정보로 초기 설정을 한다.
```
1. 지하철역으로 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역이 등록되어 있다.
2. 지하철 노선으로 2호선, 3호선, 신분당선이 등록되어 있다.
3. 노선에 역이 아래와 같이 등록되어 있다.(왼쪽 끝이 상행 종점)
- 2호선: 교대역 - 강남역 - 역삼역
- 3호선: 교대역 - 남부터미널역 - 양재역 - 매봉역
- 신분당선: 강남역 - 양재역 - 양재시민의숲역
```

### 메인 화면 관련 기능
- [x] 메인 화면을 출력한다.
- [x] 원하는 기능을 선택한다.
- **예외 상황 시 에러 문구를 출력한다.**
- [ ] 선택할 수 없는 기능을 선택한 경우
- [ ] 역 관리 화면을 출력한다.
- [ ] 노선 관리 화면을 출력한다.
- [ ] 구간 관리 화면을 출력한다.
- [ ] 지하철 노선도를 출력한다.
- 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 출력한다.
- [ ] 프로그램을 종료한다.

### 역 관리 화면 관련 기능
- [x] 원하는 기능을 선택한다.
- **예외 상황 시 에러 문구를 출력한다.**
- [ ] 선택할 수 없는 기능을 선택한 경우
- [x] 지하철 역을 등록한다.
- **예외 상황 시 에러 문구를 출력한다.**
- [x] 중복된 지하철 역 이름을 등록하는 경우
- [x] 지하철 역 이름이 2글자 미만인 경우
- [x] 입력이 없는 경우
- [x] 지하철 역 이름에 공백이 포함된 경우
- [x] 지하철 역을 삭제한다.
- **예외 상황 시 에러 문구를 출력한다.**
- [x] 노선에 등록된 역을 삭제하는 경우
- [x] 등록되지 않은 역을 삭제하는 경우
- [x] 지하철 역의 목록을 조회한다.

### 노선 관리 화면 관련 기능
- [x] 원하는 기능을 선택한다.
- **예외 상황 시 에러 문구를 출력한다.**
- [ ] 선택할 수 없는 기능을 선택한 경우
- [x] 지하철 노선을 등록한다. 노선 등록 시 상행 종점역과 하행 종점역을 입력받는다.
- **예외 상황 시 에러 문구를 출력한다.**
- [x] 중복된 지하철 노선 이름을 등록하는 경우
- [x] 지하철 노선 이름이 2글자 미만인 경우
- [x] 지하철 노선 이름이 없는 경우
- [x] 지하철 노선 이름에 공백이 포함된 경우
- [x] 지하철 노선을 삭제한다.
- **예외 상황 시 에러 문구를 출력한다.**
- [x] 등록되지 않은 노선을 삭제하는 경우
- [x] 지하철 노선의 목록을 조회한다.

### 구간 관리 화면 관련 기능
- [x] 원하는 기능을 선택한다.
- **예외 상황 시 에러 문구를 출력한다.**
- [ ] 선택할 수 없는 기능을 선택한 경우
- [x] 지하철 구간을 등록한다. 구간 등록 시 노선과 역 이름, 순서를 입력받는다.
- **예외 상황 시 에러 문구를 출력한다.**
- [ ] 중복된 지하철 구간을 등록하는 경우
- [ ] 지하철 구간을 삭제한다.
- 종점을 제거할 경우 다음 역이 종점이 된다.
- **예외 상황 시 에러 문구를 출력한다.**
- [ ] 노선에 등록되지 않은 역을 제거하는 경우
- [ ] 노선에 포함된 역이 두개 이하일 때 역을 삭제하는 경우
4 changes: 2 additions & 2 deletions src/main/java/subway/Application.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package subway;

import java.util.Scanner;
import subway.controller.SubwayController;

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

import subway.controller.function.LineFunction;
import subway.controller.message.LineMessage;
import subway.controller.screen.SubwayScreen;
import subway.service.LineService;
import subway.controller.validation.LineValidator;
import subway.service.SectionService;
import subway.view.SubwayView;

public class LineController {
public static void run() {
SubwayView.displayScreen(SubwayScreen.LINE_MANAGEMENT);
SubwayView.notice(LineMessage.SELECT_FUNCTION);
String functionCode = LineValidator.validateLineFunction(SubwayView.userInput());
LineFunction.callBy(functionCode);
}

public static void lines() {
SubwayView.notice(LineMessage.NOTICE_LINE_LIST);
LineService.lines().stream()
.forEach(line -> SubwayView.info(line.getName()));
SubwayView.newLine();
}

public static void addLine() {
SubwayView.notice(LineMessage.ENTER_LINE_NAME);
String lineName = LineValidator.validateLineName(SubwayView.userInput());
SubwayView.notice(LineMessage.ENTER_UPWARD_STATION_NAME);
String upwardStationName =
LineValidator.validateUpwardStationName(SubwayView.userInput());
SubwayView.notice(LineMessage.ENTER_DOWNWARD_STATION_NAME);
String downwardStationName =
LineValidator.validateDownwardStationName(upwardStationName, SubwayView.userInput());

LineService.addLine(lineName);
SectionService.createSection(lineName, upwardStationName, downwardStationName);
SubwayView.info(LineMessage.INFO_ADD_LINE);
}

public static void deleteLineByName() {
SubwayView.notice(LineMessage.ENTER_LINE_NAME_TO_BE_DELETED);
String lineName = LineValidator.validateLineNameToBeDeleted(SubwayView.userInput());
LineService.deleteLineByName(lineName);
SubwayView.info(LineMessage.INFO_DELETE_LINE);
}
}
32 changes: 32 additions & 0 deletions src/main/java/subway/controller/MainController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package subway.controller;

import subway.controller.function.MainFunction;
import subway.controller.message.MainMessage;
import subway.controller.screen.SubwayScreen;
import subway.controller.validation.MainValidator;
import subway.view.SubwayView;

import java.util.Objects;

public class MainController {
private static boolean isQuit(String functionCode) {
return Objects.equals(MainFunction.QUIT.getCode(), functionCode);
}

public static void run() {
while (true) {
SubwayView.displayScreen(SubwayScreen.MAIN);
SubwayView.notice(MainMessage.SELECT_FUNCTION);
String functionCode = MainValidator.validateMainFunction(SubwayView.userInput());

if (isQuit(functionCode)) {
return;
}

MainFunction.callBy(functionCode);
}
}

public static void redirect() {
}
}
44 changes: 44 additions & 0 deletions src/main/java/subway/controller/SectionController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package subway.controller;

import subway.controller.function.SectionFunction;
import subway.controller.message.SectionMessage;
import subway.controller.screen.SubwayScreen;
import subway.controller.validation.SectionValidator;
import subway.service.SectionService;
import subway.view.SubwayView;

public class SectionController {
public static void run() {
SubwayView.displayScreen(SubwayScreen.SECTION_MANAGEMENT);
SubwayView.notice(SectionMessage.SELECT_FUNCTION);
String functionCode = SectionValidator.validateSectionFunction(SubwayView.userInput());
SectionFunction.callBy(functionCode);
}

public static void sections() {
SubwayView.notice(SectionMessage.NOTICE_SECTION_LIST);
SectionService.sections().stream()
.forEach(section -> SubwayView.printSubwayMap(section));
SubwayView.newLine();
}

public static void addSection() {
SubwayView.notice(SectionMessage.ENTER_LINE_NAME);
String lineName = SectionValidator.validateLineNameExist(SubwayView.userInput());
SubwayView.notice(SectionMessage.ENTER_STATION_NAME);
String stationName = SectionValidator.validateStationNameExist(SubwayView.userInput());
SubwayView.notice(SectionMessage.ENTER_ORDER);
int order = SectionValidator.validateOrder(SubwayView.userInput());
SectionService.addSection(lineName, stationName, order);
SubwayView.info(SectionMessage.INFO_ADD_SECTION);
}

public static void deleteSection() {
SubwayView.notice(SectionMessage.ENTER_LINE_NAME_TO_BE_DELETED);
String lineName = SectionValidator.validateLineNameExist(SubwayView.userInput());
SubwayView.notice(SectionMessage.ENTER_STATION_NAME_TO_BE_DELETED);
String stationName = SectionValidator.validateLineNameToBeDeleted(SubwayView.userInput());
SectionService.deleteSectionByName(lineName, stationName);
SubwayView.info(SectionMessage.INFO_DELETE_SECTION);
}
}
38 changes: 38 additions & 0 deletions src/main/java/subway/controller/StationController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package subway.controller;

import subway.controller.function.StationFunction;
import subway.controller.message.StationMessage;
import subway.controller.screen.SubwayScreen;
import subway.controller.validation.StationValidator;
import subway.service.StationService;
import subway.view.SubwayView;

public class StationController {
public static void run() {
SubwayView.displayScreen(SubwayScreen.STATION_MANAGEMENT);
SubwayView.notice(StationMessage.SELECT_FUNCTION);
String functionCode = StationValidator.validateStationFunction(SubwayView.userInput());
StationFunction.callBy(functionCode);
}

public static void stations() {
SubwayView.notice(StationMessage.NOTICE_STATION_LIST);
StationService.stations().stream()
.forEach(station -> SubwayView.info(station.getName()));
SubwayView.newLine();
}

public static void addStation() {
SubwayView.notice(StationMessage.ENTER_STATION_NAME);
String stationName = StationValidator.validateStationName(SubwayView.userInput());
StationService.addStation(stationName);
SubwayView.info(StationMessage.INFO_ADD_STATION);
}

public static void deleteStation() {
SubwayView.notice(StationMessage.ENTER_STATION_NAME_TO_BE_DELETED);
String stationName = StationValidator.validateStationNameToBeDeleted(SubwayView.userInput());
StationService.deleteStationByName(stationName);
SubwayView.info(StationMessage.INFO_DELETE_STATION);
}
}
44 changes: 44 additions & 0 deletions src/main/java/subway/controller/SubwayController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package subway.controller;

import subway.controller.initialization.InitialLine;
import subway.controller.initialization.InitialSection;
import subway.controller.initialization.InitialStation;
import subway.service.LineService;
import subway.service.SectionService;
import subway.service.StationService;

import java.util.Arrays;
import java.util.List;

public class SubwayController {
public static void initStation() {
Arrays.stream(InitialStation.values())
.forEach(station -> StationService.addStation(station.getName()));
}

public static void initLine() {
Arrays.stream(InitialLine.values())
.forEach(line -> LineService.addLine(line.getName()));
Arrays.stream(InitialLine.values())
.forEach(line -> SectionService.createSection(line.getName()));
}

public static void initSection() {
Arrays.stream(InitialSection.values())
.forEach(initialSection -> initSection(initialSection));
}

public static void initSection(InitialSection initialSection) {
String lineName = initialSection.getLineName();
List<String> stationNames = initialSection.getStationNames();
stationNames.stream()
.forEach(stationName -> SectionService.addSection(lineName, stationName));
}

public static void run() {
initStation();
initLine();
initSection();
MainController.run();
}
}
9 changes: 9 additions & 0 deletions src/main/java/subway/controller/function/Function.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package subway.controller.function;

public interface Function {
String getCode();

String getTitle();

Runnable getFunction();
}
48 changes: 48 additions & 0 deletions src/main/java/subway/controller/function/LineFunction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package subway.controller.function;

import subway.controller.LineController;
import subway.controller.MainController;

import java.util.Arrays;
import java.util.Objects;

public enum LineFunction implements Function {
REGISTER_LINE("1", "노선 등록", LineController::addLine),
DELETE_LINE("2", "노선 삭제", LineController::deleteLineByName),
SEARCH_LINE("3", "노선 조회", LineController::lines),
BACK("B", "돌아가기", MainController::redirect);

private String code;
private String title;
private Runnable function;

LineFunction(String code, String title, Runnable function) {
this.code = code;
this.title = title;
this.function = function;
}

@Override
public String getCode() {
return code;
}

@Override
public String getTitle() {
return title;
}

@Override
public Runnable getFunction() {
return function;
}

public static void callBy(String code) {
Arrays.stream(LineFunction.values())
.filter(function -> Objects.equals(function.getCode(), code))
.findAny()
.get()
.getFunction()
.run();
}
}
Loading