diff --git a/README.md b/README.md index 00410ae50..929d63475 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,58 @@ + +# 기능구현 목록 + +- 상수 관리 클래스 + +### View +- 입력 클래스 + - [x] 기능 선택 입력 함수 + - [x] 메인뷰 입력함수 + - [x] 기능뷰 입력함수 + +- 출력 클래스 + - [x] 메인 화면 출력 함수 + - [x] 역, 노선, 구간 관리 화면 출력함수 + - [x] 선택한 기능 질문 출력함수 + - [x] 기능결과(INFO) 출력함수 + - [x] 에러 출력함수 + - [ ] 지하철 노선도 출력함수 + +### 비즈니스 로직 +- 역 관리 + - 역 등록 + - [x] 중복된 이름 불가 + - [x] 이름은 2글자 이상 + - 역 삭제 + - [ ] 노선에 등록된 역은 삭제 불가 + - [x] 역 조회 + +- 노선 관리 + - 노선 등록 + - [x] 중복 이름 불가 + - [x] 이름은 2글자 이상 + - [ ] 상,하 종점역은 달라야 한다 + - [x] 노선 삭제 + - [x] 노선 조회 + +- 구간 관리 + - 구간 등록 + - [ ] 등록되어 있는 노선인지 확인 + - [ ] 등록된 역인지 확인 + - [ ] 입력받은 순서가 올바른 순서인지 확인 + - 구간 삭제 + - [ ] 등록된 노선인지 확인 + - [ ] 노선에 등록된 역인지 확인 + + +- 지하철 노선도 출력 + - [ ] 노선이 없을 경우 None 출력 + + # 지하철 노선도 미션 - 지하철 역과 노선을 관리하는 지하철 노선도 기능을 구현한다. + +
## 🚀 기능 요구사항 diff --git a/src/main/java/Utils/Validator.java b/src/main/java/Utils/Validator.java new file mode 100644 index 000000000..abcea7952 --- /dev/null +++ b/src/main/java/Utils/Validator.java @@ -0,0 +1,14 @@ +package Utils; + +import subway.Constant; + +import java.util.IllformedLocaleException; + +public class Validator { + + public static void checkDataLength(String data){ + if(data.length() < Constant.MINIMUM_LENGTH){ + throw new IllegalArgumentException(Constant.ILLEGAL_ARGUMENT_EXCEPTION_MINIMUM_LENGTH); + } + } +} diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..d6349ac8d 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,14 @@ package subway; +import subway.domain.SubwayMap; + import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 + + new SubwayMap(scanner); /**프로그램 시작*/ } } diff --git a/src/main/java/subway/Constant.java b/src/main/java/subway/Constant.java new file mode 100644 index 000000000..99b3cf679 --- /dev/null +++ b/src/main/java/subway/Constant.java @@ -0,0 +1,39 @@ +package subway; + +public class Constant { + + public static final String VIEW_HEADER = "## "; + public static final String VIEW_FORMAT = "%s. %s\n"; + public static final String MAIN_VIEW_HEADER = "메인 화면"; + public static final String STATION_LIST_HEADER = "역 목록"; + public static final String LINE_LIST_HEADER = "노선 목록"; + public static final String RESULT_HEADER = "[INFO] "; + public static final String ILLEGAL_ARGUMENT_EXCEPTION_HEADER = "[ERROR] "; + public static final String BACK_KEY = "B"; + public static final int MINIMUM_LENGTH = 2; + + public static final String ASKING_FUNCTION_INPUT_FUNCTION_ORDER = "원하는 기능을 선택하세요."; + + public static final String INPUT_DATA_REGISTER_FORMAT = "등록할 %s 이름을 입력하세요.\n"; + public static final String INPUT_DATA_DELETE_FORMAT = "삭제할 %s 이름을 입력하세요.\n"; + + public static final String INPUT_SECTION_LINE_DATA_REGISTER_FORMAT = "노선을 입력하세요.\n"; + public static final String INPUT_SECTION_LINE_DATA_DELETE_FORMAT = "삭제할 구간의 노선을 입력하세요.\n"; + public static final String INPUT_SECTION_STATION_DATA_REGISTER_FORMAT = "역 이름을 입력하세요.\n"; + public static final String INPUT_SECTION_STATION_DATA_DELETE_FORMAT = "삭제할 구간의 역을 입력하세요.\n"; + + public static final String MANAGEMENT_VIEW_HEADER_FORMAT = "%s 관리 화면\n"; + public static final String MANAGEMENT_VIEW_BODY_FORMAT = "%s. %s %s\n"; + public static final String MANAGEMENT_VIEW_BODY_BACK_FORMAT = "%s. %s\n"; + + public static final String ILLEGAL_ARGUMENT_EXCEPTION_INVALID_MENU_ORDER = "선택할 수 없는 기능입니다."; + public static final String ILLEGAL_ARGUMENT_EXCEPTION_MINIMUM_LENGTH = "이름은 "+MINIMUM_LENGTH+" 글자 이상입니다."; + + public static final String REGISTER_DUPLICATE_DATA_ERROR_FORMAT = "이미 등록된 %s 이름입니다."; + public static final String REGISTER_RESULT_FORMAT = "%s이 등록되었습니다."; + public static final String DELETE_DATA_ERROR_FORMAT = "등록되지 않은 %s 이름입니다."; + public static final String DELETE_RESULT_FORMAT = "%s이 삭제되었습니다."; + + public static final String FIND_EMPTY_LIST = "등록된 %s이 없습니다."; + +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java deleted file mode 100644 index f4d738d5a..000000000 --- a/src/main/java/subway/domain/Line.java +++ /dev/null @@ -1,15 +0,0 @@ -package subway.domain; - -public class Line { - private String name; - - public Line(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - // 추가 기능 구현 -} diff --git a/src/main/java/subway/domain/Services.java b/src/main/java/subway/domain/Services.java new file mode 100644 index 000000000..2c0213063 --- /dev/null +++ b/src/main/java/subway/domain/Services.java @@ -0,0 +1,32 @@ +package subway.domain; + +import subway.domain.management.LineManager; +import subway.domain.management.SectionManager; +import subway.domain.menu.MainMenu; +import subway.domain.management.StationManager; + +import java.util.Scanner; + +public class Services { + + public static void doService(String inputData, Scanner scanner) { + if (inputData.equals(MainMenu.STATION.getOrder())) { + StationManager stationManager = new StationManager(scanner); + stationManager.doStationManagement(); + return; + } + if (inputData.equals(MainMenu.LINE.getOrder())) { + LineManager lineManager = new LineManager(scanner); + lineManager.doStationManagement(); + return; + } + if (inputData.equals(MainMenu.SECTION.getOrder())) { + SectionManager sectionManager = new SectionManager(scanner); + sectionManager.doStationManagement(); + return; + } + if (inputData.equals(MainMenu.MAP.getOrder())) { + + } + } +} diff --git a/src/main/java/subway/domain/SubwayMap.java b/src/main/java/subway/domain/SubwayMap.java new file mode 100644 index 000000000..fc22c7248 --- /dev/null +++ b/src/main/java/subway/domain/SubwayMap.java @@ -0,0 +1,69 @@ +package subway.domain; + +import subway.Constant; +import subway.domain.data.Line; +import subway.domain.data.LineRepository; +import subway.domain.data.Station; +import subway.domain.data.StationRepository; +import subway.domain.menu.MainMenu; +import subway.view.InputView; +import subway.view.OutputView; + +import java.util.Scanner; + +public class SubwayMap { + + private Scanner scanner; + private LineRepository lineRepository; + private StationRepository stationRepository; + + public SubwayMap(Scanner scanner) { + this.scanner = scanner; + initData(); + startService(); + } + + private void initData() { + initStation(); + initLine(); + } + + private void initLine() { + String[] initLineData = { + "2호선", "3호선", "신분당선"}; + for(String lineName : initLineData){ + LineRepository.addLine(new Line(lineName)); + } + } + + private void initStation() { + String[] initStationData = { + "교대역", "강남역" ,"역삼역" ,"남부터미널역", "양재역", "양재시민의숲역", "매봉역"}; + for(String stationName : initStationData){ + StationRepository.addStation(new Station(stationName)); + } + } + + private void startService() { + while (true) { + OutputView.printMainView(); + String inputData = selectService(); + if (inputData.equals(MainMenu.END.getOrder())){ + return; + } + Services.doService(inputData, scanner); + } + } + + private String selectService() { + try { + OutputView.printAskingFunction(Constant.ASKING_FUNCTION_INPUT_FUNCTION_ORDER); + return InputView.inputMainMenu(scanner); + } catch (IllegalArgumentException e){ + OutputView.printError(e.getMessage()); + return selectService(); + } + } + + +} diff --git a/src/main/java/subway/domain/data/Line.java b/src/main/java/subway/domain/data/Line.java new file mode 100644 index 000000000..64d425e21 --- /dev/null +++ b/src/main/java/subway/domain/data/Line.java @@ -0,0 +1,47 @@ +package subway.domain.data; + +import java.util.List; +import java.util.Objects; + +public class Line { + private String name; + private Station firstStation; + private Station lastStation; + private List stations; + + public Line(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public Station getFirstStation() { + return firstStation; + } + + public Station getLastStation() { + return lastStation; + } + + public List getStations() { + return stations; + } + + public void initLineSection(Station firstStation, Station lastStation, List stations){ + this.firstStation = firstStation; + this.lastStation = lastStation; + this.stations = stations; + } + + public void addSection(Station station, int position){ + + } + + public boolean deleteSection(String name) { + return stations.removeIf(station -> Objects.equals(station.getName(), name)); + } + + // 추가 기능 구현 +} diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/data/LineRepository.java similarity index 94% rename from src/main/java/subway/domain/LineRepository.java rename to src/main/java/subway/domain/data/LineRepository.java index 49132ddb6..4deb3332d 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/data/LineRepository.java @@ -1,4 +1,4 @@ -package subway.domain; +package subway.domain.data; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/data/Station.java similarity index 87% rename from src/main/java/subway/domain/Station.java rename to src/main/java/subway/domain/data/Station.java index bdb142590..9d2e697a0 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/data/Station.java @@ -1,4 +1,4 @@ -package subway.domain; +package subway.domain.data; public class Station { private String name; diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/data/StationRepository.java similarity index 95% rename from src/main/java/subway/domain/StationRepository.java rename to src/main/java/subway/domain/data/StationRepository.java index b7245c0f3..a67636d3c 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/data/StationRepository.java @@ -1,4 +1,4 @@ -package subway.domain; +package subway.domain.data; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/subway/domain/management/LineManager.java b/src/main/java/subway/domain/management/LineManager.java new file mode 100644 index 000000000..9bd98024f --- /dev/null +++ b/src/main/java/subway/domain/management/LineManager.java @@ -0,0 +1,100 @@ +package subway.domain.management; + +import subway.Constant; +import subway.domain.data.Line; +import subway.domain.data.LineRepository; +import subway.domain.menu.ManagementMenu; +import subway.domain.menu.ServiceList; +import subway.view.InputView; +import subway.view.OutputView; + +import java.util.Scanner; + +public class LineManager extends ServiceManager{ + + public LineManager(Scanner scanner) { + super(scanner); + } + + @Override + public void doStationManagement() { + OutputView.printManagementView(ServiceList.LINE, menuList); + String inputData = getInputData(scanner); + + try { + checkInputData(inputData); + } catch (IllegalArgumentException e){ + OutputView.printError(e.getMessage()); + doStationManagement(); + } + } + + private void checkInputData(String inputData) { + if(inputData.equals(ManagementMenu.REGISTER.getOrder())){ + registerLine(ManagementMenu.REGISTER); + return; + } + if(inputData.equals(ManagementMenu.DELETE.getOrder())){ + deleteLine(ManagementMenu.DELETE); + return; + } + if(inputData.equals(ManagementMenu.FIND.getOrder())){ + findLine(); + return; + } + } + + private void registerLine(ManagementMenu menu) { + String name = getLineName(menu); + + for(Line savedLine : LineRepository.lines()){ + if(savedLine.getName().equals(name)){ + OutputView.printErrorWithFormat(Constant.REGISTER_DUPLICATE_DATA_ERROR_FORMAT, ServiceList.LINE.getName()); + return; + } + } + + Line line = new Line(name); + LineRepository.addLine(line); + OutputView.printFunctionResult(Constant.REGISTER_RESULT_FORMAT, ServiceList.LINE.getName()); + return; + } + + private void deleteLine(ManagementMenu menu) { + String name = getLineName(menu); + + for(Line savedLine : LineRepository.lines()){ + if(savedLine.getName().equals(name)){ + OutputView.printFunctionResult(Constant.DELETE_RESULT_FORMAT, ServiceList.LINE.getName()); + LineRepository.deleteLineByName(name); + return; + } + } + + OutputView.printErrorWithFormat(Constant.DELETE_DATA_ERROR_FORMAT, ServiceList.LINE.getName()); + return; + } + + private void findLine() { + OutputView.printLineList(LineRepository.lines(), ServiceList.LINE.getName()); + } + + private String getLineName(ManagementMenu menu) { + if(menu.equals(ManagementMenu.REGISTER)) { + OutputView.printInputData(Constant.INPUT_DATA_REGISTER_FORMAT, ServiceList.LINE.getName()); + } + if(menu.equals(ManagementMenu.DELETE)) { + OutputView.printInputData(Constant.INPUT_DATA_DELETE_FORMAT, ServiceList.LINE.getName()); + } + String data = InputView.inputData(scanner); + return data; + } + + @Override + protected void initMenuList() { + menuList.add(ManagementMenu.REGISTER); + menuList.add(ManagementMenu.DELETE); + menuList.add(ManagementMenu.FIND); + menuList.add(ManagementMenu.BACK); + } +} diff --git a/src/main/java/subway/domain/management/SectionManager.java b/src/main/java/subway/domain/management/SectionManager.java new file mode 100644 index 000000000..b69a6f784 --- /dev/null +++ b/src/main/java/subway/domain/management/SectionManager.java @@ -0,0 +1,108 @@ +package subway.domain.management; + +import subway.Constant; +import subway.domain.data.Line; +import subway.domain.data.LineRepository; +import subway.domain.data.Station; +import subway.domain.data.StationRepository; +import subway.domain.menu.ManagementMenu; +import subway.domain.menu.ServiceList; +import subway.view.InputView; +import subway.view.OutputView; + +import java.util.Scanner; + +public class SectionManager extends ServiceManager { + + public SectionManager(Scanner scanner) { + super(scanner); + } + + @Override + public void doStationManagement() { + OutputView.printManagementView(ServiceList.SECTION, menuList); + String inputData = getInputData(scanner); + + try { + checkInputData(inputData); + } catch (IllegalArgumentException e) { + OutputView.printError(e.getMessage()); + doStationManagement(); + } + } + + private void checkInputData(String inputData) { + if (inputData.equals(ManagementMenu.REGISTER.getOrder())) { + //registerStation(ManagementMenu.REGISTER); + return; + } + if (inputData.equals(ManagementMenu.DELETE.getOrder())) { + deleteSection(ManagementMenu.DELETE); + return; + } + } + + private void deleteSection(ManagementMenu menu) { + Line line = getLineName(menu); + Station station = getStationName(line, menu); + + line.deleteSection(station.getName()); + } + + private Line checkValidLineName(String lineName) { + for (Line savedLine : LineRepository.lines()) { + if (savedLine.getName().equals(lineName)) { + return savedLine; + } + } + throw new IllegalArgumentException("등록되지 않은 노선입니다."); + } + + private Station checkValidStationName(Line line, String stationName) { + for (Station station : line.getStations()) { + if (station.getName().equals(stationName)) { + return station; + } + } + throw new IllegalArgumentException("해당 구간에 등록되지 않은 노선입니다."); + } + + private Line getLineName(ManagementMenu menu) { + try { + if (menu.equals(ManagementMenu.REGISTER)) { + OutputView.printInputData(Constant.INPUT_SECTION_LINE_DATA_REGISTER_FORMAT, ServiceList.SECTION.getName()); + } + if (menu.equals(ManagementMenu.DELETE)) { + OutputView.printInputData(Constant.INPUT_SECTION_LINE_DATA_DELETE_FORMAT, ServiceList.SECTION.getName()); + } + String data = InputView.inputData(scanner); + return checkValidLineName(data); + } catch (IllegalArgumentException e) { + OutputView.printError(e.getMessage()); + return getLineName(menu); + } + } + + private Station getStationName(Line line, ManagementMenu menu) { + try{ + if (menu.equals(ManagementMenu.REGISTER)) { + OutputView.printInputData(Constant.INPUT_SECTION_STATION_DATA_REGISTER_FORMAT, ServiceList.SECTION.getName()); + } + if (menu.equals(ManagementMenu.DELETE)) { + OutputView.printInputData(Constant.INPUT_SECTION_STATION_DATA_DELETE_FORMAT, ServiceList.SECTION.getName()); + } + String data = InputView.inputData(scanner); + return checkValidStationName(line, data); + } catch (IllegalArgumentException e){ + OutputView.printError(e.getMessage()); + return getStationName(line, menu); + } + } + + @Override + protected void initMenuList() { + menuList.add(ManagementMenu.REGISTER); + menuList.add(ManagementMenu.DELETE); + menuList.add(ManagementMenu.BACK); + } +} diff --git a/src/main/java/subway/domain/management/ServiceManager.java b/src/main/java/subway/domain/management/ServiceManager.java new file mode 100644 index 000000000..56fc21c21 --- /dev/null +++ b/src/main/java/subway/domain/management/ServiceManager.java @@ -0,0 +1,36 @@ +package subway.domain.management; + +import subway.Constant; +import subway.domain.menu.ManagementMenu; +import subway.domain.menu.ServiceList; +import subway.view.InputView; +import subway.view.OutputView; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public abstract class ServiceManager { + protected List menuList = new ArrayList<>(); + protected Scanner scanner; + + public ServiceManager(Scanner scanner) { + initMenuList(); + this.scanner = scanner; + } + + protected String getInputData(Scanner scanner){ + try{ + OutputView.printAskingFunction(Constant.ASKING_FUNCTION_INPUT_FUNCTION_ORDER); + return InputView.inputManagementMenu(scanner, menuList); + } catch (IllegalArgumentException e){ + OutputView.printError(e.getMessage()); + return getInputData(scanner); + } + } + + public abstract void doStationManagement(); + + protected abstract void initMenuList(); +} diff --git a/src/main/java/subway/domain/management/StationManager.java b/src/main/java/subway/domain/management/StationManager.java new file mode 100644 index 000000000..d9f118ec2 --- /dev/null +++ b/src/main/java/subway/domain/management/StationManager.java @@ -0,0 +1,103 @@ +package subway.domain.management; + +import subway.Constant; +import subway.domain.data.Station; +import subway.domain.data.StationRepository; +import subway.domain.menu.ManagementMenu; +import subway.domain.menu.ServiceList; +import subway.view.InputView; +import subway.view.OutputView; + +import java.util.List; +import java.util.Scanner; + + +public class StationManager extends ServiceManager { + + public StationManager(Scanner scanner) { + super(scanner); + } + + @Override + public void doStationManagement() { + OutputView.printManagementView(ServiceList.STATION, menuList); + String inputData = getInputData(scanner); + + try { + checkInputData(inputData); + } catch (IllegalArgumentException e){ + OutputView.printError(e.getMessage()); + doStationManagement(); + } + } + + private void checkInputData(String inputData) { + if(inputData.equals(ManagementMenu.REGISTER.getOrder())){ + registerStation(ManagementMenu.REGISTER); + return; + } + if(inputData.equals(ManagementMenu.DELETE.getOrder())){ + deleteStation(ManagementMenu.DELETE); + return; + } + if(inputData.equals(ManagementMenu.FIND.getOrder())){ + findStation(); + return; + } + } + + private void deleteStation(ManagementMenu menu) { + String name = getStationName(menu); + + for(Station savedStation : StationRepository.stations()){ + if(savedStation.getName().equals(name)){ + OutputView.printFunctionResult(Constant.DELETE_RESULT_FORMAT, ServiceList.STATION.getName()); + StationRepository.deleteStation(name); + return; + } + } + + OutputView.printErrorWithFormat(Constant.DELETE_DATA_ERROR_FORMAT, ServiceList.STATION.getName()); + return; + } + + private void findStation() { + OutputView.printStationList(StationRepository.stations(), ServiceList.STATION.getName()); + } + + private void registerStation(ManagementMenu menu) { + String name = getStationName(menu); + + for(Station savedStation : StationRepository.stations()){ + if(savedStation.getName().equals(name)){ + OutputView.printErrorWithFormat(Constant.REGISTER_DUPLICATE_DATA_ERROR_FORMAT, ServiceList.STATION.getName()); + return; + } + } + + Station station = new Station(name); + StationRepository.addStation(station); + OutputView.printFunctionResult(Constant.REGISTER_RESULT_FORMAT, ServiceList.STATION.getName()); + return; + } + + private String getStationName(ManagementMenu menu) { + if(menu.equals(ManagementMenu.REGISTER)) { + OutputView.printInputData(Constant.INPUT_DATA_REGISTER_FORMAT, ServiceList.STATION.getName()); + } + if(menu.equals(ManagementMenu.DELETE)) { + OutputView.printInputData(Constant.INPUT_DATA_DELETE_FORMAT, ServiceList.STATION.getName()); + } + String data = InputView.inputData(scanner); + return data; + } + + + @Override + protected void initMenuList() { + menuList.add(ManagementMenu.REGISTER); + menuList.add(ManagementMenu.DELETE); + menuList.add(ManagementMenu.FIND); + menuList.add(ManagementMenu.BACK); + } +} diff --git a/src/main/java/subway/domain/menu/MainMenu.java b/src/main/java/subway/domain/menu/MainMenu.java new file mode 100644 index 000000000..4855548d9 --- /dev/null +++ b/src/main/java/subway/domain/menu/MainMenu.java @@ -0,0 +1,35 @@ +package subway.domain.menu; + +public enum MainMenu { + STATION(String.valueOf(ServiceList.STATION.ordinal()+1), ServiceList.STATION.getName()+" 관리") + , LINE(String.valueOf(ServiceList.LINE.ordinal()+1), ServiceList.LINE.getName()+" 관리") + , SECTION(String.valueOf(ServiceList.SECTION.ordinal()+1), ServiceList.SECTION.getName()+" 관리") + , MAP(String.valueOf(ServiceList.MAP.ordinal()+1), ServiceList.MAP.getName()+" 출력") + , END("Q", "종료"); + + final private String order; + final private String message; + + MainMenu(String order, String message) { + this.order = order; + this.message = message; + } + + public String getOrder() { + return order; + } + + public String getMessage() { + return message; + } + + public static boolean isValidOrder(String order){ + for(MainMenu mainMenu : MainMenu.values()){ + if(mainMenu.getOrder().equals(order)){ + return true; + } + } + return false; + } + +} diff --git a/src/main/java/subway/domain/menu/ManagementMenu.java b/src/main/java/subway/domain/menu/ManagementMenu.java new file mode 100644 index 000000000..b27cf7328 --- /dev/null +++ b/src/main/java/subway/domain/menu/ManagementMenu.java @@ -0,0 +1,26 @@ +package subway.domain.menu; + +public enum ManagementMenu { + + REGISTER("1", "등록") + , DELETE("2", "삭제") + , FIND("3", "조회") + , BACK("B", "돌아가기"); + + final private String order; + final private String message; + + ManagementMenu(String order, String message) { + this.order = order; + this.message = message; + } + + public String getOrder() { + return order; + } + + public String getMessage() { + return message; + } + +} diff --git a/src/main/java/subway/domain/menu/ServiceList.java b/src/main/java/subway/domain/menu/ServiceList.java new file mode 100644 index 000000000..c5bd3d2d1 --- /dev/null +++ b/src/main/java/subway/domain/menu/ServiceList.java @@ -0,0 +1,15 @@ +package subway.domain.menu; + +public enum ServiceList { + STATION("역"), LINE("노선"), SECTION("구간"), MAP("지하철 노선도"); + + final private String name; + + ServiceList(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java new file mode 100644 index 000000000..c964af355 --- /dev/null +++ b/src/main/java/subway/view/InputView.java @@ -0,0 +1,39 @@ +package subway.view; + +import Utils.Validator; +import subway.Constant; +import subway.domain.menu.MainMenu; +import subway.domain.menu.ManagementMenu; + +import java.util.List; +import java.util.Scanner; + +public class InputView { + + public InputView() { + } + + public static String inputMainMenu(Scanner scanner) { + String inputData = scanner.nextLine(); + if (!MainMenu.isValidOrder(inputData)) { + throw new IllegalArgumentException(Constant.ILLEGAL_ARGUMENT_EXCEPTION_INVALID_MENU_ORDER); + } + return inputData; + } + + public static String inputManagementMenu(Scanner scanner, List menuList) { + String inputData = scanner.nextLine(); + for (ManagementMenu menu : menuList) { + if (menu.getOrder().equals(inputData)) { + return inputData; + } + } + throw new IllegalArgumentException(Constant.ILLEGAL_ARGUMENT_EXCEPTION_INVALID_MENU_ORDER); + } + + public static String inputData(Scanner scanner) { + String inputData = scanner.nextLine(); + Validator.checkDataLength(inputData); + return inputData; + } +} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java new file mode 100644 index 000000000..c4aecec5e --- /dev/null +++ b/src/main/java/subway/view/OutputView.java @@ -0,0 +1,106 @@ +package subway.view; + +import subway.Constant; +import subway.domain.data.Line; +import subway.domain.data.Station; +import subway.domain.menu.MainMenu; +import subway.domain.menu.ManagementMenu; +import subway.domain.menu.ServiceList; + +import java.util.List; + +public class OutputView { + + public OutputView() { + } + + public static void printMainView(){ + System.out.println(); + System.out.print(Constant.VIEW_HEADER); + System.out.println(Constant.MAIN_VIEW_HEADER); + for(MainMenu menu : MainMenu.values()) { + System.out.printf(Constant.VIEW_FORMAT, menu.getOrder(), menu.getMessage()); + } + } + + public static void printManagementView(ServiceList service, List menuList){ + System.out.println(); + System.out.print(Constant.VIEW_HEADER); + System.out.printf(Constant.MANAGEMENT_VIEW_HEADER_FORMAT, service.getName()); + for(ManagementMenu menu : menuList) { + if(menu.getOrder().equals(Constant.BACK_KEY)){ + System.out.printf(Constant.MANAGEMENT_VIEW_BODY_BACK_FORMAT, menu.getOrder(), menu.getMessage()); + continue; + } + System.out.printf(Constant.MANAGEMENT_VIEW_BODY_FORMAT, menu.getOrder(), service.getName(), menu.getMessage()); + } + } + + public static void printSubwayMap(){ + + } + + public static void printAskingFunction(String askingMessage){ + System.out.println(); + System.out.print(Constant.VIEW_HEADER); + System.out.println(askingMessage); + } + + public static void printInputData(String format, String service){ + System.out.println(); + System.out.print(Constant.VIEW_HEADER); + System.out.printf(format, service); + } + + public static void printFunctionResult(String resultMessageFormat, String service){ + System.out.println(); + System.out.print(Constant.RESULT_HEADER); + System.out.printf(resultMessageFormat, service); + System.out.println(); + } + + public static void printError(String errorMessage){ + System.out.println(); + System.out.print(Constant.ILLEGAL_ARGUMENT_EXCEPTION_HEADER); + System.out.println(errorMessage); + System.out.println(); + } + + public static void printErrorWithFormat(String errorFormat, String service){ + System.out.println(); + System.out.print(Constant.ILLEGAL_ARGUMENT_EXCEPTION_HEADER); + System.out.printf(errorFormat, service); + System.out.println(); + } + + public static void printStationList(List list, String service){ + System.out.println(); + if(list.isEmpty()){ + System.out.print(Constant.ILLEGAL_ARGUMENT_EXCEPTION_HEADER); + System.out.printf(Constant.FIND_EMPTY_LIST + "\n", service); + return; + } + + System.out.print(Constant.VIEW_HEADER); + System.out.println(Constant.STATION_LIST_HEADER); + for(Station station : list) { + System.out.println(Constant.RESULT_HEADER + station.getName()); + } + System.out.println(); + } + public static void printLineList(List list, String service){ + System.out.println(); + if(list.isEmpty()){ + System.out.print(Constant.ILLEGAL_ARGUMENT_EXCEPTION_HEADER); + System.out.printf(Constant.FIND_EMPTY_LIST + "\n", service); + return; + } + + System.out.print(Constant.VIEW_HEADER); + System.out.println(Constant.LINE_LIST_HEADER); + for(Line line : list) { + System.out.println(Constant.RESULT_HEADER + line.getName()); + } + System.out.println(); + } +}