Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
4767800
feat: 기능 목록 작성
JUNGHOJONG Dec 15, 2020
a68fa77
feat: 역 정보 초기 설정하는 기능 구현
JUNGHOJONG Dec 15, 2020
14b3ba3
feat: 메인 화면 조회 및 메뉴 선택하는 기능 구현
JUNGHOJONG Dec 15, 2020
3822331
feat: 1 - 4, Q만 선택 가능한 예외 처리 기능 구현(메인 화면)
JUNGHOJONG Dec 15, 2020
1422cc7
feat: 역 관리 선택 기능 구현
JUNGHOJONG Dec 15, 2020
28f12aa
feat: 지하철 역 등록하는 기능 구현
JUNGHOJONG Dec 15, 2020
580b87e
feat: 지하철 역 삭제하는 기능 구현
JUNGHOJONG Dec 15, 2020
3e75c78
feat: 지하철 역 목록 조회하는 기능 구현
JUNGHOJONG Dec 15, 2020
5bffe28
feat: 기능 구현 리스트 추가
JUNGHOJONG Dec 15, 2020
823eb84
feat: 메인 화면으로 되돌아가는 기능 구현
JUNGHOJONG Dec 15, 2020
d0bcb00
feat: 노선 관리 선택 기능 구현
JUNGHOJONG Dec 15, 2020
aaeb26e
feat: 지하철 노선 등록하는 기능 구현
JUNGHOJONG Dec 15, 2020
5b85b0d
feat: 노선 등록 시, 상행 종점역과 하행 종점역을 등록하는 기능 구현
JUNGHOJONG Dec 15, 2020
9d1d5e2
feat: 기능 리스트 추가
JUNGHOJONG Dec 15, 2020
37d9db5
feat: 지하철 노선 삭제하는 기능 구현
JUNGHOJONG Dec 15, 2020
8eb364b
feat: 지하철 노선 목록 조회하는 기능 구현
JUNGHOJONG Dec 15, 2020
df99664
feat: 메인 화면으로 되돌아가는 기능 구현
JUNGHOJONG Dec 15, 2020
ab4433f
move: README파일 docs 폴더로 이동
JUNGHOJONG Dec 15, 2020
d947fae
feat: 구간 관리 선택 기능 구현
JUNGHOJONG Dec 15, 2020
75bd1eb
feat: 지하철 구간 등록중 노선 입력 기능 구현
JUNGHOJONG Dec 15, 2020
035e901
feat: 구간 등록 시, 역을 등록하는 기능 구현
JUNGHOJONG Dec 15, 2020
6d45b36
feat: 구간 등록 시, 선택한 역을 넣을 인덱스를 지정하는 기능 구현
JUNGHOJONG Dec 15, 2020
4779b8d
feat: 지하철 구간 삭제하는 기능 구현
JUNGHOJONG Dec 15, 2020
867fbb6
feat: 선택한 노선의 역을 삭제하는 기능 구현
JUNGHOJONG Dec 15, 2020
81bba84
feat: 메인 화면으로 되돌아가는 기능 구현
JUNGHOJONG Dec 15, 2020
f2c6cf5
feat: 지하철 노선도 출력하는 기능 구현
JUNGHOJONG Dec 15, 2020
b5d4fcf
move: 모든 클래스의 상수들을 Constants클래스로 이동
JUNGHOJONG Dec 15, 2020
6456510
test: 사용자 자료구조 테스트
JUNGHOJONG Dec 15, 2020
e3f8cde
feat: 시작주석 추가
JUNGHOJONG Dec 15, 2020
578e790
refactor: 폴더구조 변경
JUNGHOJONG Dec 15, 2020
96885ce
refactor: 비즈니스 로직과 UI로직 분리
JUNGHOJONG Dec 16, 2020
227b222
refactor: 양의 정수 예외처리 수정
JUNGHOJONG Dec 16, 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
470 changes: 0 additions & 470 deletions README.md

This file was deleted.

65 changes: 65 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# 지하철 노선도 미션

## 🚀 기능 요구사항

- [X] 역 정보 초기 설정하는 기능

- [X] 메인 화면 조회

- [X] 메인 기능 선택
- [X] 예외사항: 선택할 기능은 1 - 4, Q만 가능

- [X] 지하철 역 관리 기능 선택
- [X] 예외사항: 선택할 기능은 1 - 3, B만 가능

- [X] 지하철 역을 등록
- [X] 예외사항: 역 이름은 2글자 이상이어야 한다.
- [X] 예외사항: 지하철 역 이름은 중복될 수 없다.

- [X] 지하철 역을 삭제
- [X] 예외사항: 노선에 등록된 역은 삭제할 수 없다.
- [X] 예외사항: 삭제할 역이 역 목록에 있어야 한다.

- [X] 지하철 역 목록 조회

- [X] 메인 화면으로 되돌아가기

- [X] 지하철 노선 관리 기능 선택
- [X] 예외사항: 선택할 기능은 1 - 3, B만 가능

- [X] 지하철 노선 등록
- [X] 예외사항: 노선 이름은 2글자 이상이어야 한다.
- [X] 예외사항: 노선 이름은 중복될 수 없다.

- [X] 노선 등록 시 상행 종점역과 하행 종점역을 등록
- [X] 예외사항: 상행 종점역과 하행 종점역은 2글자 이상이어야 한다.
- [X] 예외사항: 상행 종점역과 하행 종점역이 같지 않다.
- [X] 예외사항: 등록할 역이 역 목록에 있어야한다.

- [X] 지하철 노선 삭제
- [X] 예외사항: 삭제할 역은 등록된 노선이어야 한다.

- [X] 지하철 노선 조회

- [X] 메인 화면으로 되돌아가기

- [X] 지하철 구간 관리 기능 선택
- [X] 예외사항: 선택할 기능은 1 - 2, B만 가능


- [X] 지하철 구간 등록
- [X] 예외사항: 노선 당 중복된 역을 허용하지 않는다.
- [X] 예외사항: 입력할 노선은 등록된 노선이어야 한다.
- [X] 예외사항: 입력할 역이름은 2글자 이상이어야 한다.
- [X] 예외사항: 입력할 역이름은 등록된 역이어야 한다.
- [X] 예외사항: 입력할 순서는 1 - (노선에 배정된 역 개수)만 허용한다.

- [X] 지하철 구간 삭제
- [X] 예외사항: 등록된 노선만 삭제할 수 있다.
- [X] 예외사항: 삭제할 역은 2글자 이상이어야한다.
- [X] 예외사항: 삭제할 역은 선택한 노선에 등록된 역 이어야한다.
- [X] 예외사항: 노선에 포함된 역이 2개 이하일 때는 삭제할 수 없다.

- [X] 메인 화면으로 되돌아가기

- [ ] 지하철 노선도 출력
14 changes: 13 additions & 1 deletion src/main/java/subway/Application.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
package subway;
/*
* Application
*
* version 1.0
*
* 2020.12.15
*
* Copyright (c) by Davinci.J
*/
import subway.controller.Subway;
import subway.view.InputView;

import java.util.Scanner;

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

public class Constants {
public static final String APPLICATION_QUIT = "Q";
public static final String SUBWAY_LINEMAP_MENU = "4";
public static final String LINE_MAIN_MENU = "## 노선 관리 화면\n1. 노선 등록\n" +
"2. 노선 삭제\n3. 노선 조회\nB. 돌아가기\n";
public static final String WRONG_STATE_TRY_AGAIN = "[ERROR] 선택할 수 없는 기능입니다.";
public static final String INPUT_LINE_TO_ENROLL = "## 등록할 노선 이름을 입력하세요.";
public static final String DUPLICATED_TRY_AGAIN = "[ERROR] 중복됩니다.";
public static final String INPUT_START_STATION_TO_ENROLL = "## 등록할 노선의 상행 종점역 " +
"이름을 입력하세요.";
public static final String LINE_MENU = "2";
public static final String LINE_ENROLLED = "\n[INFO] 지하철 노선이 등록되었습니다.\n";
public static final String NOTHING_TRY_AGAIN = "[ERROR] 해당 역이 없습니다.";
public static final String NOTHING_OR_START_END_SAME_TRY_AGAIN = "[ERROR] 해당 역이 없거나 " +
"상행 종점, 하행 종점역이 같습니다.";
public static final String INPUT_END_STATION_TO_ENROLL = "## 등록할 노선의 하행 종점역 " +
"이름을 입력하세요.";
public static final String INPUT_LINE_TO_DELETE = "## 삭제할 노선 이름을 입력하세요.";
public static final String NOTHING_TO_DELETE_TRY_AGAIN = "[ERROR] 삭제할 노선이 없습니다.";
public static final String LINE_DELETED = "\n[INFO] 지하철 노선이 삭제되었습니다.\n";
public static final String SECTION_MAIN_MENU = "## 구간 관리 화면\n1. 구간 등록\n2. 구간 삭제\n" +
"B. 돌아가기\n";
public static final String INPUT_LINE = "## 노선을 입력하세요.";
public static final String SECTION_ENROLLED = "\n[INFO] 구간이 등록되었습니다.\n";
public static final String LINE_NOTHING_TRY_AGAIN = "[ERROR] 해당 노선이 없습니다.";
public static final String SECTION_MENU = "3";
public static final String INPUT_STATION = "## 역이름을 입력하세요.";
public static final String NOTHING_OR_ALREADY_ENROLLED_TRY_AGAIN = "[ERROR] 해당 역이 없거나" +
" 이미 노선에 등록되어 있습니다.";
public static final String INPUT_ORDER = "## 순서를 입력하세요.";
public static final String INDEX_OUT_OF_BOUNDS_TRY_AGAIN = "[ERROR] 인덱스가 초과되었습니다.";
public static final String INPUT_LINE_OF_SECTION_TO_DELETE = "## 삭제할 구간의 노선을 입력하세요.";
public static final String SECTION_DELETED = "\n[INFO] 구간이 삭제되었습니다.\n";
public static final String INPUT_STATION_OF_SECTION_TO_ENROLL = "## 삭제할 구간의 역을 입력하세요.";
public static final String STATION_NOTHING_OR_LINE_LENGTH_LIMIT_TRY_AGAIN = "[ERROR] " +
"해당 역이 없거나 현재 노선의 길이가 2이하여서 삭제 할 수 없습니다.";
public static final int LINE_MIN_LENGTH = 2;
public static final String STATION_MAIN_MENU = "## 역 관리 화면\n1. 역 등록\n" +
"2. 역 삭제\n3. 역 조회\nB. 돌아가기\n";
public static final String INPUT_STATION_TO_ENROLL = "## 등록할 역 이름을 입력하세요.";
public static final String STATION_ENROLLED = "\n[INFO] 지하철 역이 등록되었습니다.\n";
public static final String INPUT_STATION_TO_DELETE = "## 삭제할 역 이름을 입력하세요.";
public static final String STATION_DELETED = "\n[INFO] 지하철 역이 삭제되었습니다.\n";
public static final String STATION_MENU_NUMBER = "1";
public static final String MAIN_MENU = "## 메인 화면\n1. 역 관리\n2. 노선 관리\n3. 구간 관리\n" +
"4. 지하철 노선도 출력\nQ. 종료\n";
public static final String ONE = "1";
public static final String TOW = "2";
public static final String THREE = "3";
public static final String FOUR = "4";
public static final String INFORMATION = "[INFO] ";
public static final String NAME_LENGTH_LIMIT_ERROR = "[ERROR] 이름은 2글자 이상입니다.";
public static final int NAME_LENGTH_LIMIT = 2;
public static final String LINE_LIST = "\n## 노선 목록";
public static final String INFORMATION_BAR = "\n[INFO] ---";
public static final String ERROR_ONLY_POSITIVE_NUMBER = "[ERROR] 양의 정수만 가능합니다.";
public static final int SINGLE_DIGIT_MIN = 0;
public static final int SINGLE_DIGIT_MAX = 9;
public static final String STATION_LIST = "\n## 역 목록";
public static final String ERROR_NOT_NUMBER = "[ERROR] 숫자가 아닙니다.";
}
70 changes: 70 additions & 0 deletions src/main/java/subway/controller/Subway.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package subway.controller;
/*
* Subway
*
* version 1.0
*
* 2020.12.15
*
* Copyright (c) by Davinci.J
*/
import subway.Constants;
import subway.domain.LineRepository;
import subway.domain.StationRepository;
import subway.manager.LineManager;
import subway.manager.SectionManager;
import subway.manager.StationManager;
import subway.view.InputView;
import subway.view.OutputView;

import java.util.Arrays;

public class Subway {
static {
StationRepository.init();
LineRepository.init();
}

private enum Menu {
STATION("1", StationManager::selectMenu),
LINE("2", LineManager::selectMenu),
SECTION("3", SectionManager::selectMenu),
SUBWAY_LIST("4", OutputView::printLineAndStation),
QUIT("Q", new Subway()::exit);

private final String name;
private final Runnable runnable;

Menu(String name, Runnable runnable) {
this.name = name;
this.runnable = runnable;
}

public static void execute(String input) {
Arrays.stream(values())
.filter(value -> value.name.equals(input))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException(Constants.WRONG_STATE_TRY_AGAIN))
.runnable.run();
}

}

public static void run() {
try {
String state = InputView.inputMainMenu();
Menu.execute(state);
if (!state.equals(Constants.APPLICATION_QUIT)) {
run();
}
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
run();
}
}

private void exit() {
System.exit(0);
}

}
50 changes: 46 additions & 4 deletions src/main/java/subway/domain/Line.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,57 @@
package subway.domain;

import subway.Constants;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class Line {
private String name;
private LineName name;
private List<Station> stations = new ArrayList<>();

public Line(String name) {
public Line(LineName name) {
this.name = name;
}

public String getName() {
public LineName getName() {
return name;
}

// 추가 기능 구현
public void addStations(Station station) {
station.setRegister(true);
stations.add(station);
}

@Override
public boolean equals(Object object) {
if (object instanceof Line) {
Line anotherStation = (Line) object;
return name.equals(anotherStation.name);
}
return false;
}

@Override
public int hashCode() {
return Objects.hash(name);
}

@Override
public String toString() {
return Constants.INFORMATION + name;
}

public List<Station> getStations() {
return stations;
}

public int size() {
return stations.size();
}

public void addStations(int index, Station station) {
stations.add(index, station);
}

}
43 changes: 43 additions & 0 deletions src/main/java/subway/domain/LineName.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package subway.domain;
/*
* LineName
*
* version 1.0
*
* 2020.12.15
*
* Copyright (c) by Davinci.J
*/
import subway.Constants;

import java.util.Objects;

public class LineName {
private String name;

public LineName(String name) {
if (name.length() < Constants.NAME_LENGTH_LIMIT) {
throw new IllegalArgumentException(Constants.NAME_LENGTH_LIMIT_ERROR);
}
this.name = name;
}

@Override
public boolean equals(Object object) {
if (object instanceof LineName) {
LineName anotherName = (LineName) object;
return name.equals(anotherName.name);
}
return false;
}

@Override
public int hashCode() {
return Objects.hash(name);
}

@Override
public String toString() {
return name;
}
}
Loading