diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..a69288be1 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,103 @@ +# 미션 - 지하철 노선도 미션 🚇 + +### 💻 기능 구현 목록 + +- 프로그램 시작 시, 사전 등록정보로 역과 노선 초기 설정 +- 메인화면 기능 목록(1, 2, 3, 4, Q)과 입력 안내 문구 출력 +- 원하는 기능 입력 + - `예외` (1, 2, 3, 4, Q) 외에 다른 값을 입력한 경우 + - `처리` 에러 문구([ERROR]) 출력 후 다시 입력 + +#### 1 역관리 +- 역 관리 화면 기능 목록(1, 2, 3, B)과 입력 안내 문구 출력 +- 원하는 기능 입력 + - `예외` (1, 2, 3, B) 외에 다른 값을 입력한 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - `1 역등록` + - 역 이름 입력 받는 문구 출력 + - 등록할 역 이름 입력 + - `예외` 이미 등록된 역인 경우 + - `예외` 역 이름이 2글자 미만인 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 등록완료 문구 출력 후 메인화면으로 돌아감 + - `2 역삭제` + - 역 이름 입력 받는 문구 출력 + - 삭제할 역 이름 입력 + - `예외` 등록되지 않은 역인 경우 + - `예외` 노선에 등록된 역인 경우 => 역삭제 불가 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 삭제완료 문구 출력 후 메인화면으로 돌아감 + - `3 역조회` + - 역 목록 출력 후 메인 화면으로 돌아감 + - `B 돌아가기` + - 메인화면으로 돌아감 + +#### 2 노선관리 +- 노선 관리 화면 기능 목록(1, 2, 3, B)과 입력 안내 문구 출력 +- 원하는 기능 입력 + - `예외` (1, 2, 3, B) 외에 다른 값을 입력한 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - `1 노선등록` + - 노선 입력 받는 문구 출력 + - 등록할 노선 이름 입력 + - `예외` 이미 등록된 노선일 경우 + - `예외` 노선 이름이 2글자 미만인 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 등록할 노선의 상행 종점역 입력안내 문구 출력 및 입력 + - `예외` 등록되지 않은 역일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 등록할 노선의 하행 종점역 입력안내 문구 출력 및 입력 + - `예외` 등록되지 않은 역일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - `예외` 상행종점역과 같은 역을 입력한 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 등록완료 문구 출력 후 메인화면으로 돌아감 + - `2 노선삭제` + - 노선 입력 받는 문구 출력 + - 삭제할 노선 이름 입력 + - `예외` 등록되지 않은 노선일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 삭제완료 문구 출력 후 메인화면으로 돌아감 + - `3 노선조회` + - 노선 목록 출력 후 메인화면으로 돌아감 + - `B 돌아가기` + - 메인화면으로 돌아감 + +#### 3 구간관리 +- 구간 관리 화면 기능 목록(1, 2, B)과 입력 안내 문구 출력 +- 원하는 기능 입력 + - `예외` (1, 2, B) 외에 다른 값을 입력한 경우 + - `처리` 에러 문구(`[ERROR]`) 출력 후 다시 입력 + - `1 구간등록` + - 노선 입력 받는 문구 출력 + - 구간등록할 노선 입력 + - `예외` 등록되지 않은 노선일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 역이름 입력 받는 문구 출력 + - 등록할 역이름 입력 + - `예외` 이미 해당 노선에 존재하는 역일 경우 + - `예외` 등록되지 않은 역일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 등록할 순서 입력 (순서는 1부터 시작) + - `예외` 숫자가 아닌 값을 입력한 경우 + - `예외` Range밖의 Index값을 입력한 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 구간등록 완료 문구 출력 후 메인화면으로 돌아감 + - `2 구간삭제` + - 노선 입력 받는 문구 출력 + - 구간삭제할 노선 입력 + - `예외` 등록되지 않은 노선일 경우 + - `예외` 해당 노선에 포함된 역이 2개 이하일 경우 => 구간삭제 불가 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 삭제할 역이름 입력 + - `예외` 해당 노선에 등록되지 않은 역일 경우 + - `처리` 에러 문구([ERROR]) 출력 후 메인화면으로 돌아감 + - 구간삭제 완료 문구 출력 후 메인화면으로 돌아감 + - `B 돌아가기` 메인화면으로 돌아감 + +#### 4 노선도출력 +- 지하철 노선도 출력 후 메인화면으로 돌아감 + - `[INFO]` (호선, ---, 역) 순으로 저장된 모든 노선출력 + +#### Q 종료 +- 프로그램 종료 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index dcf98e9d0..657667c91 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue Dec 15 20:43:57 KST 2020 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip +zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists \ No newline at end of file diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..d14c04b14 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,37 @@ package subway; +import subway.domain.*; + import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - // TODO: 프로그램 구현 + Init.initialize(); + startProgram(scanner); + } + + public static void startProgram(Scanner kbd) { + View.showMainMenu(); + String mainInput = InputView.inputFunction(kbd, Constants.MAIN_FUNCTIONS); + goSubMenu(mainInput, kbd); + } + + public static void goSubMenu(String input, Scanner kbd) { + System.out.println(); + if (input.equals(Constants.STATION_MENU)) + StationManage.manageStation(kbd); + if (input.equals(Constants.LINE_MENU)) + LineManage.manageLine(kbd); + if (input.equals(Constants.SECTION_MENU)) + SectionManage.manageSection(kbd); + if (input.equals(Constants.PRINT_LINES)) + View.displayAllLines(kbd); + if (input.equalsIgnoreCase(Constants.FINISH_PROGRAM)) + finishProgram(); + } + + public static void finishProgram() { + System.out.println("## 프로그램 종료"); } -} +} \ No newline at end of file diff --git a/src/main/java/subway/domain/Constants.java b/src/main/java/subway/domain/Constants.java new file mode 100644 index 000000000..1bd614df8 --- /dev/null +++ b/src/main/java/subway/domain/Constants.java @@ -0,0 +1,30 @@ +package subway.domain; + +import java.util.Arrays; +import java.util.List; + +public class Constants { + public static final int FUNCTION_INPUT_ERROR = 0; + public static final int ALREADY_EXIST_ERROR = 1; + public static final int NAME_LENGTH_ERROR = 2; + public static final int NO_SUCH_NAME_ERROR = 3; + public static final int HAS_IN_LINE_ERROR = 4; + public static final int SAME_NAME_ERROR = 5; + public static final int HAS_IN_SPECIFIC_LINE_ERROR = 6; + public static final int UNVALID_INDEX_ERROR = 7; + public static final int CANT_DELETE_SECTION_ERROR = 8; + public static final int HAS_NOT_IN_SPECIFIC_LINE_ERROR = 9; + + public static final List MAIN_FUNCTIONS = Arrays.asList("1", "2", "3", "4", "Q"); + public static final String STATION_MENU = "1"; + public static final String LINE_MENU = "2"; + public static final String SECTION_MENU = "3"; + public static final String PRINT_LINES = "4"; + public static final String FINISH_PROGRAM = "Q"; + public static final List SUB_FUNCTIONS = Arrays.asList("1", "2", "3", "B"); + public static final String ADD_MENU = "1"; + public static final String DELETE_MENU = "2"; + public static final String SEARCH_MENU = "3"; + public static final String GO_BACK_MENU = "B"; + public static final List SECTION_FUNCTIONS = Arrays.asList("1", "2", "B"); +} diff --git a/src/main/java/subway/domain/ErrorMessage.java b/src/main/java/subway/domain/ErrorMessage.java new file mode 100644 index 000000000..f16f8e641 --- /dev/null +++ b/src/main/java/subway/domain/ErrorMessage.java @@ -0,0 +1,26 @@ +package subway.domain; + +public class ErrorMessage { + public static void displayErrorMessage(int errorCase) { + if (errorCase == Constants.FUNCTION_INPUT_ERROR) + System.out.println("[ERROR] 선택할 수 없는 기능입니다."); + if (errorCase == Constants.ALREADY_EXIST_ERROR) + System.out.println("[ERROR] 이미 등록된 역/노선 이름입니다."); + if (errorCase == Constants.NAME_LENGTH_ERROR) + System.out.println("[ERROR] 이름을 2글자 이상 입력해주세요."); + if (errorCase == Constants.NO_SUCH_NAME_ERROR) + System.out.println("[ERROR] 등록되지 않은 역/노선 이름입니다."); + if (errorCase == Constants.HAS_IN_LINE_ERROR) + System.out.println("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); + if (errorCase == Constants.SAME_NAME_ERROR) + System.out.println("[ERROR] 상행역과 하행역은 같을 수 없습니다."); + if (errorCase == Constants.HAS_IN_SPECIFIC_LINE_ERROR) + System.out.println("[ERROR] 이미 해당 노선에 존재하는 역입니다."); + if (errorCase == Constants.UNVALID_INDEX_ERROR) + System.out.println("[ERROR] Range 내의 정수만 입력할 수 있습니다."); + if (errorCase == Constants.CANT_DELETE_SECTION_ERROR) + System.out.println("[ERROR] 역이 2개 이하인 노선의 구간은 삭제할 수 없습니다."); + if (errorCase == Constants.HAS_NOT_IN_SPECIFIC_LINE_ERROR) + System.out.println("[ERROR] 해당 노선에 존재하지 않는 역입니다."); + } +} diff --git a/src/main/java/subway/domain/Errors.java b/src/main/java/subway/domain/Errors.java new file mode 100644 index 000000000..59d415b23 --- /dev/null +++ b/src/main/java/subway/domain/Errors.java @@ -0,0 +1,101 @@ +package subway.domain; + +import java.util.List; + +public class Errors { + public static boolean checkInput(String input, List functions) { + boolean check = true; + if (!functions.contains(input)) { + ErrorMessage.displayErrorMessage(Constants.FUNCTION_INPUT_ERROR); + check = false; + } + return check; + } + + public static void checkSameStation(String name) { + if (StationRepository.isExist(name)) { + ErrorMessage.displayErrorMessage(Constants.ALREADY_EXIST_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkSameLine(String name) { + if (LineRepository.isExist(name)) { + ErrorMessage.displayErrorMessage(Constants.ALREADY_EXIST_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkSameName(String firstName, String lastName) { + if (firstName.equals(lastName)) { + ErrorMessage.displayErrorMessage(Constants.SAME_NAME_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkTextLength(String name) { + if (name.length() < 2) { + ErrorMessage.displayErrorMessage(Constants.NAME_LENGTH_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkExistStation(String name) { + if (!StationRepository.isExist(name)) { + ErrorMessage.displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkExistLine(String name) { + if (!LineRepository.isExist(name)) { + ErrorMessage.displayErrorMessage(Constants.NO_SUCH_NAME_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkInLine(String name) { + for (Line line : LineRepository.lines()) + if (line.hasStation(name)) { + ErrorMessage.displayErrorMessage(Constants.HAS_IN_LINE_ERROR); + throw new IllegalArgumentException(); + } + } + + public static Line checkInSpecificLine(String lineName, String stationName) { + Line line = LineRepository.getLineByName(lineName); + if (line.hasStation(stationName)) { + ErrorMessage.displayErrorMessage(Constants.HAS_IN_SPECIFIC_LINE_ERROR); + throw new IllegalArgumentException(); + } + return line; + } + + public static void checkNotInSpecificLine(String lineName, String stationName) { + Line line = LineRepository.getLineByName(lineName); + if (!line.hasStation(stationName)) { + ErrorMessage.displayErrorMessage(Constants.HAS_NOT_IN_SPECIFIC_LINE_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkValidIndex(Line line, String index) { + try { + int intIndex = Integer.parseInt(index); + int size = line.getSize(); + if (intIndex < 1 || intIndex > size+1) + throw new IndexOutOfBoundsException(); + } catch (Exception e) { + ErrorMessage.displayErrorMessage(Constants.UNVALID_INDEX_ERROR); + throw new IllegalArgumentException(); + } + } + + public static void checkValidLine(String name) { + Line line = LineRepository.getLineByName(name); + if (line.getSize() < 3) { + ErrorMessage.displayErrorMessage(Constants.CANT_DELETE_SECTION_ERROR); + throw new IllegalArgumentException(); + } + } +} diff --git a/src/main/java/subway/domain/Init.java b/src/main/java/subway/domain/Init.java new file mode 100644 index 000000000..9580f486c --- /dev/null +++ b/src/main/java/subway/domain/Init.java @@ -0,0 +1,26 @@ +package subway.domain; + +import java.util.Arrays; +import java.util.List; + +public class Init { + public static void initialize() { + initializeStation(); + initializeLine(); + } + + public static void initializeStation() { + List names = Arrays.asList("교대역", "강남역", "역삼역", "남부터미널역", "양재역", "양재시민의숲역", "매봉역"); + for (String name : names) + StationRepository.addStation(new Station(name)); + } + + public static void initializeLine() { + Line line2 = new Line("2호선"); + LineRepository.addLine(line2, Arrays.asList("교대역", "강남역", "역삼역")); + Line line3 = new Line("3호선"); + LineRepository.addLine(line3, Arrays.asList("교대역", "남부터미널역", "양재역", "매봉역")); + Line lineSinbundang = new Line("신분당선"); + LineRepository.addLine(lineSinbundang, Arrays.asList("강남역", "양재역", "양재시민의숲역")); + } +} diff --git a/src/main/java/subway/domain/InputView.java b/src/main/java/subway/domain/InputView.java new file mode 100644 index 000000000..5b1ffd0db --- /dev/null +++ b/src/main/java/subway/domain/InputView.java @@ -0,0 +1,17 @@ +package subway.domain; + +import java.util.List; +import java.util.Scanner; + +public class InputView { + public static String inputFunction(Scanner kbd, List functions) { + String input = "0"; + boolean check = false; + while(!check) { + System.out.println("\n## 원하는 기능을 선택하세요."); + input = kbd.nextLine(); + check = Errors.checkInput(input, functions); + } + return input; + } +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..46127cf4d 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,7 +1,12 @@ package subway.domain; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + public class Line { private String name; + private List stationNames = new ArrayList<>(); public Line(String name) { this.name = name; @@ -11,5 +16,25 @@ public String getName() { return name; } - // 추가 기능 구현 + public void displayLine() { + for (String station : stationNames) + System.out.println("[INFO] " + station); + System.out.println(); + } + + public void addStation(int index, String name) { + stationNames.add(index-1, name); + } + + public boolean deleteStation(String name) { + return stationNames.removeIf(stationName -> Objects.equals(stationName, name)); + } + + public boolean hasStation(String name) { + return stationNames.contains(name); + } + + public int getSize() { + return stationNames.size(); + } } diff --git a/src/main/java/subway/domain/LineManage.java b/src/main/java/subway/domain/LineManage.java new file mode 100644 index 000000000..73753187d --- /dev/null +++ b/src/main/java/subway/domain/LineManage.java @@ -0,0 +1,67 @@ +package subway.domain; + +import java.util.Arrays; +import java.util.Scanner; + +import static subway.Application.startProgram; + +public class LineManage { + public static void manageLine(Scanner kbd) { + View.showLineMenu(); + String input = InputView.inputFunction(kbd, Constants.SUB_FUNCTIONS); + if (input.equals(Constants.ADD_MENU)) + addLine(kbd); + if (input.equals(Constants.DELETE_MENU)) + deleteLine(kbd); + if (input.equals(Constants.SEARCH_MENU)) + searchLine(kbd); + if (input.equalsIgnoreCase(Constants.GO_BACK_MENU)) + startProgram(kbd); + } + + public static void addLine(Scanner kbd) { + try { + makeNewLine(kbd); + System.out.println("\n[INFO] 지하철 노선이 등록되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void makeNewLine(Scanner kbd) throws IllegalArgumentException { + System.out.println("\n## 등록할 노선 이름을 입력하세요."); + String lineName = kbd.nextLine(); + Errors.checkSameLine(lineName); + Errors.checkTextLength(lineName); + System.out.println("\n## 등록할 노선의 상행 종점역 이름을 입력하세요."); + String firstStation = kbd.nextLine(); + Errors.checkExistStation(firstStation); + System.out.println("\n## 등록할 노선의 하행 종점역 이름을 입력하세요."); + String lastStation = kbd.nextLine(); + Errors.checkExistStation(lastStation); + Errors.checkSameName(firstStation, lastStation); + Line newLine = new Line(lineName); + LineRepository.addLine(newLine, Arrays.asList(firstStation, lastStation)); + } + + public static void deleteLine(Scanner kbd) { + try { + System.out.println("\n## 삭제할 노선 이름을 입력하세요."); + String lineName = kbd.nextLine(); + Errors.checkExistLine(lineName); + LineRepository.deleteLineByName(lineName); + System.out.println("\n[INFO] 지하철 노선이 삭제되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void searchLine(Scanner kbd) { + System.out.println("\n## 노선 목록"); + for (Line line : LineRepository.lines()) + System.out.println("[INFO] " + line.getName()); + startProgram(kbd); + } +} diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 49132ddb6..4c93ec973 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -12,11 +12,31 @@ public static List lines() { return Collections.unmodifiableList(lines); } - public static void addLine(Line line) { + public static void addLine(Line line, List names) { + for (int i = 1; i <= names.size(); i++) + line.addStation(i, names.get(i-1)); lines.add(line); } public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + + public static boolean isExist(String name) { + return lines.stream().map(Line::getName).anyMatch(x -> x.equals(name)); + } + + public static Line getLineByName(String Name) { + return lines.stream().filter(line -> line.getName().equals(Name)).findAny().orElse(null); + } + + public static void addStationToLine(String lineName, String stationName, int index) { + Line line = getLineByName(lineName); + line.addStation(index, stationName); + } + + public static void deleteStationInLine(String lineName, String stationName) { + Line line = getLineByName(lineName); + line.deleteStation(stationName); + } } diff --git a/src/main/java/subway/domain/SectionManage.java b/src/main/java/subway/domain/SectionManage.java new file mode 100644 index 000000000..eafff4c6a --- /dev/null +++ b/src/main/java/subway/domain/SectionManage.java @@ -0,0 +1,59 @@ +package subway.domain; + +import java.util.Scanner; + +import static subway.Application.startProgram; + +public class SectionManage { + public static void manageSection(Scanner kbd) { + View.showSectionMenu(); + String input = InputView.inputFunction(kbd, Constants.SECTION_FUNCTIONS); + if (input.equals(Constants.ADD_MENU)) + addSection(kbd); + if (input.equals(Constants.DELETE_MENU)) + deleteSection(kbd); + if (input.equals(Constants.GO_BACK_MENU)) + startProgram(kbd); + } + + public static void addSection(Scanner kbd) { + try { + makeNewSection(kbd); + System.out.println("\n[INFO] 구간이 등록되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void makeNewSection(Scanner kbd) { + System.out.println("\n## 노선을 입력하세요."); + String lineName = kbd.nextLine(); + Errors.checkExistLine(lineName); + System.out.println("\n## 역이름을 입력하세요."); + String stationName = kbd.nextLine(); + Errors.checkExistStation(stationName); + Line line = Errors.checkInSpecificLine(lineName, stationName); + System.out.println("\n## 순서를 입력하세요."); + String index = kbd.nextLine(); + Errors.checkValidIndex(line, index); + LineRepository.addStationToLine(lineName, stationName, Integer.parseInt(index)); + } + + public static void deleteSection(Scanner kbd) { + try { + System.out.println("\n## 삭제할 구간의 노선을 입력하세요."); + String lineName = kbd.nextLine(); + Errors.checkExistLine(lineName); + Errors.checkValidLine(lineName); + System.out.println("\n## 삭제할 구간의 역을 입력하세요."); + String stationName = kbd.nextLine(); + Errors.checkNotInSpecificLine(lineName, stationName); + LineRepository.deleteStationInLine(lineName, stationName); + System.out.println("\n[INFO] 구간이 삭제되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } +} diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..6df2edada 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -10,6 +10,4 @@ public Station(String name) { public String getName() { return name; } - - // 추가 기능 구현 } diff --git a/src/main/java/subway/domain/StationManage.java b/src/main/java/subway/domain/StationManage.java new file mode 100644 index 000000000..f9db42d6b --- /dev/null +++ b/src/main/java/subway/domain/StationManage.java @@ -0,0 +1,55 @@ +package subway.domain; + +import java.util.Scanner; + +import static subway.Application.startProgram; + +public class StationManage { + public static void manageStation(Scanner kbd) { + View.showStationMenu(); + String input = InputView.inputFunction(kbd, Constants.SUB_FUNCTIONS); + if (input.equals(Constants.ADD_MENU)) + addStation(kbd); + if (input.equals(Constants.DELETE_MENU)) + deleteStation(kbd); + if (input.equals(Constants.SEARCH_MENU)) + searchStation(kbd); + if (input.equalsIgnoreCase(Constants.GO_BACK_MENU)) + startProgram(kbd); + } + + public static void addStation(Scanner kbd) { + try { + System.out.println("\n## 등록할 역 이름을 입력하세요."); + String stationName = kbd.nextLine(); + Errors.checkSameStation(stationName); + Errors.checkTextLength(stationName); + StationRepository.addStation(new Station(stationName)); + System.out.println("\n[INFO] 지하철 역이 등록되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void deleteStation(Scanner kbd) { + try { + System.out.println("\n## 삭제할 역 이름을 입력하세요."); + String stationName = kbd.nextLine(); + Errors.checkExistStation(stationName); + Errors.checkInLine(stationName); + StationRepository.deleteStation(stationName); + System.out.println("\n[INFO] 지하철 역이 삭제되었습니다."); + startProgram(kbd); + } catch (Exception e) { + startProgram(kbd); + } + } + + public static void searchStation(Scanner kbd) { + System.out.println("\n## 역 목록"); + for (Station station : StationRepository.stations()) + System.out.println("[INFO] " + station.getName()); + startProgram(kbd); + } +} diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index b7245c0f3..d6023571c 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -19,4 +19,8 @@ public static void addStation(Station station) { public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + + public static boolean isExist(String name) { + return stations.stream().map(Station::getName).anyMatch(x -> x.equals(name)); + } } diff --git a/src/main/java/subway/domain/View.java b/src/main/java/subway/domain/View.java new file mode 100644 index 000000000..ca4a6cc8d --- /dev/null +++ b/src/main/java/subway/domain/View.java @@ -0,0 +1,48 @@ +package subway.domain; + +import java.util.Scanner; +import static subway.Application.startProgram; + +public class View { + public static void showMainMenu() { + System.out.println("\n## 메인 화면"); + System.out.println("1. 역 관리"); + System.out.println("2. 노선 관리"); + System.out.println("3. 구간 관리"); + System.out.println("4. 지하철 노선도 출력"); + System.out.println("Q. 종료"); + } + + public static void showStationMenu() { + System.out.println("## 역 관리 화면"); + System.out.println("1. 역 등록"); + System.out.println("2. 역 삭제"); + System.out.println("3. 역 조회"); + System.out.println("B. 돌아가기"); + } + + public static void showLineMenu() { + System.out.println("## 노선 관리 화면"); + System.out.println("1. 노선 등록"); + System.out.println("2. 노선 삭제"); + System.out.println("3. 노선 조회"); + System.out.println("B. 돌아가기"); + } + + public static void showSectionMenu() { + System.out.println("## 구간 관리 화면"); + System.out.println("1. 구간 등록"); + System.out.println("2. 구간 삭제"); + System.out.println("B. 돌아가기"); + } + + public static void displayAllLines(Scanner kbd) { + System.out.println("## 지하철 노선도"); + for(Line line : LineRepository.lines()) { + System.out.println("[INFO] " + line.getName()); + System.out.println("[INFO] ---"); + line.displayLine(); + } + startProgram(kbd); + } +}