Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
bf6ad31
docs(README.md): add plans for functions
AMYMEME Dec 15, 2020
f5db3ab
feat(Application): add class variables, mainScreenPrint method, isExi…
AMYMEME Dec 15, 2020
ec4b594
style(Application): isExit -> isExitAndValidate for explicit method m…
AMYMEME Dec 15, 2020
3b752ea
feat(Application): add initSetting method for pre setting
AMYMEME Dec 15, 2020
a9b8f98
feat(Application): do not use whitelist for validate mainInput and is…
AMYMEME Dec 15, 2020
b5cca08
style(Application): private -> public for only main using methods, etc
AMYMEME Dec 15, 2020
e32eb53
feat(StationManage): add Station logic and error handling
AMYMEME Dec 15, 2020
57d9024
docs(README.md): delete incorrect plan for error handling
AMYMEME Dec 15, 2020
7f1a6e9
feat(StationManage, StationRepository): for add Station error handlin…
AMYMEME Dec 15, 2020
4d25308
feat(StationManage): stationsDuplicate -> stationExists for using whe…
AMYMEME Dec 15, 2020
eab418e
style(StationManage): change class constant format
AMYMEME Dec 15, 2020
915a208
feat(StationRepository): fix bug for hasStation
AMYMEME Dec 15, 2020
ae1633d
feat(AllStationsPrint): add allStation show screen method
AMYMEME Dec 15, 2020
3714852
style(StationManage): remove validateFlag
AMYMEME Dec 15, 2020
b47dad8
feat(LineManage): add LineManage interface
AMYMEME Dec 15, 2020
53dac34
feat(LineManage): add Line method and error handling
AMYMEME Dec 15, 2020
6948401
feat(LineManage): add deleteLine method and error handling
AMYMEME Dec 15, 2020
ff1975e
feat(LineManage): show all lines names
AMYMEME Dec 15, 2020
8ce8d37
docs(README.md): add another plan
AMYMEME Dec 15, 2020
e2d04f7
feat(Line): add another generator for line
AMYMEME Dec 15, 2020
375a5b5
feat(Line): remove another generator for line
AMYMEME Dec 15, 2020
2af739e
feat(LineManage): show all line info print
AMYMEME Dec 15, 2020
dbd54c4
feat(routeMapPrint): show all lines station info (4)
AMYMEME Dec 15, 2020
aa0c70f
style(Manage): fix inputvalue variable name
AMYMEME Dec 15, 2020
c775c4e
feat(SectionManage): section add method
AMYMEME Dec 15, 2020
c37e0fb
feat(Logger, ErrorCase, Application): seperate log print from applica…
AMYMEME Dec 15, 2020
11989b6
feat(Line): add another generator parameter for LinkedList
AMYMEME Dec 15, 2020
62728c0
style(Application): shorten code line
AMYMEME Dec 15, 2020
d1118d5
feat(log): add guide print method and fix error body
AMYMEME Dec 15, 2020
447d49f
style(LineManage): System.out.println -> logger class print methods
AMYMEME Dec 15, 2020
8f20d96
style(StationManage): seperate manage screen print method, and logger…
AMYMEME Dec 15, 2020
aaf8c2c
fix(Application): remove error throw
AMYMEME Dec 15, 2020
71da82a
fix(StationManage): remove throw error handling and print -> control
AMYMEME Dec 15, 2020
75f0582
feat(Logger), fix(Application): seperate input screen from main
AMYMEME Dec 15, 2020
9eb5937
style(Logger, Application)
AMYMEME Dec 15, 2020
6fea827
feat(Application): seperate displayInputScreen from stationManage
AMYMEME Dec 15, 2020
230aeb4
fix(StationManage): return false when error generate
AMYMEME Dec 15, 2020
12f3d39
style(Logger, StationManage): logger formatting
AMYMEME Dec 15, 2020
e96eaa7
fix(initSetiing)
AMYMEME Dec 15, 2020
2276365
style(routeMap)
AMYMEME Dec 15, 2020
e64fc55
feat(ERrorCase): add error cases
AMYMEME Dec 16, 2020
cbc6413
style(LineManage): equaulsIgnoreCase -> equals
AMYMEME Dec 16, 2020
63cd450
feat(SectionManage): add section(terminal) method
AMYMEME Dec 16, 2020
1ef4b70
feat(Line, LIneRepository, StationRepository): for help section add m…
AMYMEME Dec 16, 2020
29c83f0
fix(Line): delete upwardTerminal, downwardTerminal instance variables
AMYMEME Dec 16, 2020
3a1c0cd
feat(Application, SectionManage): add delete terminal, fix init setting
AMYMEME Dec 16, 2020
7f8b006
style(Logger, Station)
AMYMEME 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
480 changes: 12 additions & 468 deletions README.md

Large diffs are not rendered by default.

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

public class ErrorCase {

public static final String FUNCTION_INPUT_ERROR = "선택할 수 없는 기능입니다. ";
public static final String ALREADY_EXIST_ERROR = "이미 등록된 역/노선 이름입니다. ";
public static final String NAME_LENGTH_ERROR = "역/노선의 이름은 최소 2자 이상이어야 합니다. ";
public static final String NO_SUCH_NAME_ERROR = "등록되지 않은 역/노선 이름입니다. ";
public static final String INVALID_POSITION_ERROR = "잘못된 위치값입니다. ";
public static final String HAS_IN_LINE_ERROR = "노선에 등록된 역은 삭제할 수 없습니다. ";
public static final String TERMINAL_LENGTH_ERROR = "노선의 역 수는 2개 이상이어야 합니다. ";
}
69 changes: 69 additions & 0 deletions src/main/java/log/Logger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package log;

import static log.ErrorCase.FUNCTION_INPUT_ERROR;

import java.util.List;
import java.util.Scanner;

public class Logger {
public static final String LEVEL_GUIDE = "\n## ";
public static final String LEVEL_ERROR = "\n[ERROR] ";
public static final String LEVEL_INFO = "\n[INFO] ";

public static void guidePrint(String errorBody) {
System.out.print(LEVEL_GUIDE + errorBody);
}

public static void errorPrint(String errorBody) {
System.out.println(LEVEL_ERROR + errorBody);
}

public static void infoPrint(String infoBody) {
System.out.print(LEVEL_INFO + infoBody);
}

public static void displayMainScreen() {
System.out.println("\n## 메인 화면\n"
+ "1. 역 관리\n"
+ "2. 노선 관리\n"
+ "3. 구간 관리\n"
+ "4. 지하철 노선도 출력\n"
+ "Q. 종료");
}

public static String displayInputScreen(Scanner scanner, List<String> whiteList) {
String input;
while (true) {
guidePrint("원하는 기능을 선택하세요.\n");
input = scanner.next();
if (whiteList.contains(input)) {
break;
}
errorPrint(FUNCTION_INPUT_ERROR);
}
return input;
}

public static void displayStationManageScreen() {
System.out.println("\n## 역 관리 화면\n"
+ "1. 역 등록\n"
+ "2. 역 삭제\n"
+ "3. 역 조회\n"
+ "B. 돌아가기");
}

public static void displayLineManageScreen() {
System.out.println("\n## 노선 관리 화면\n"
+ "1. 노선 등록\n"
+ "2. 노선 삭제\n"
+ "3. 노선 조회\n"
+ "B. 돌아가기");
}

public static void displaySectionManageScreen() {
System.out.println("\n## 구간 관리 화면\n"
+ "1. 구간 등록\n"
+ "2. 구간 삭제\n"
+ "B. 돌아가기");
}
}
67 changes: 66 additions & 1 deletion src/main/java/subway/Application.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,75 @@
package subway;

import static log.Logger.displayInputScreen;
import static log.Logger.displayMainScreen;
import static subway.LineManage.linaManage;
import static subway.SectionManage.sectionManage;
import static subway.StationManage.stationManage;
import static subway.domain.LineRepository.addLine;
import static subway.domain.StationRepository.addStation;
import static subway.domain.StationRepository.getStationByName;
import static subway.routeMap.routeMapPrint;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;
import subway.domain.Line;
import subway.domain.Station;

public class Application {

static final String STATION_MANAGE = "1";
static final String LINE_MANAGE = "2";
static final String SECTION_MANAGE = "3";
static final String ALL_INFO = "4";
static final String EXIT = "Q";

public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
// TODO: 프로그램 구현
initSetting();
boolean exitFlag = false;
while (!exitFlag) {
displayMainScreen();
exitFlag = isExit(scanner);
}
}

private static void initSetting() {
final ArrayList<String> initStations = new ArrayList<>(
Arrays.asList("교대역", "강남역", "역삼역", "남부터미널역", "양재역", "양재시민의숲역", "매봉역"));

for (String stationName : initStations) {
addStation(new Station(stationName));
}
addLine(new Line("2호선", new LinkedList<Station>(Arrays.asList(
getStationByName("교대역"), getStationByName("강남역"), getStationByName("역삼역")))));
addLine(new Line("3호선", new LinkedList<Station>(Arrays.asList(
getStationByName("교대역"), getStationByName("남부터미널역"), getStationByName("양재역"),
getStationByName("매봉역")))));
addLine(new Line("신분당선", new LinkedList<Station>(Arrays.asList(
getStationByName("강남역"), getStationByName("양재역"), getStationByName("양재시민의숲역")))));
}

private static boolean isExit(Scanner scanner) {
String input = displayInputScreen(scanner, new ArrayList<>(Arrays.asList(
STATION_MANAGE, LINE_MANAGE, SECTION_MANAGE, ALL_INFO, EXIT)));

if (input.equals(EXIT)) {
return true;
}
if (input.equals(STATION_MANAGE)) {
stationManage(scanner);
}
if (input.equals(LINE_MANAGE)) {
linaManage(scanner);
}
if (input.equals(SECTION_MANAGE)) {
sectionManage(scanner);
}
if (input.equals(ALL_INFO)) {
routeMapPrint();
}
return false;
}
}
126 changes: 126 additions & 0 deletions src/main/java/subway/LineManage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package subway;

import static log.ErrorCase.ALREADY_EXIST_ERROR;
import static log.ErrorCase.NAME_LENGTH_ERROR;
import static log.ErrorCase.NO_SUCH_NAME_ERROR;
import static log.Logger.displayInputScreen;
import static log.Logger.displayLineManageScreen;
import static log.Logger.errorPrint;
import static log.Logger.guidePrint;
import static log.Logger.infoPrint;
import static subway.domain.LineRepository.addLine;
import static subway.domain.LineRepository.deleteLineByName;
import static subway.domain.LineRepository.hasLine;
import static subway.domain.LineRepository.lines;
import static subway.domain.StationRepository.hasStation;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import subway.domain.Line;
import subway.domain.Station;

public class LineManage {

static final String ADD_LINE = "1";
static final String DELETE_LINE = "2";
static final String ALL_LINES = "3";
static final String BACK_SCREEN = "B";
static final int MIN_LINE_NAME_LENGTH = 2;

static public void linaManage(Scanner scanner) {
boolean exitFlag = false;
while (!exitFlag) {
displayLineManageScreen();
exitFlag = isExit(scanner);
}
}

private static boolean isExit(Scanner scanner) {
String input = displayInputScreen(scanner, new ArrayList<>(Arrays.asList(
ADD_LINE, DELETE_LINE, ALL_LINES, BACK_SCREEN)));
if (input.equals(ADD_LINE)) {
return addLineControl(scanner);
}
if (input.equals(DELETE_LINE)) {
return deleteLineControl(scanner);
}
if (input.equals(ALL_LINES)) {
return allLinesControl();
}
return input.equals(BACK_SCREEN);
}

private static boolean addLineControl(Scanner scanner) {
guidePrint("등록할 노선 이름을 입력하세요. \n");
String lineName = scanner.next();
if (!validateLineName(lineName)) {
return false;
}
guidePrint("등록할 노선의 상행 종점역 이름을 입력하세요. \n");
String upwardTerminal = scanner.next();
if (!validateTerminalName(upwardTerminal)) {
return false;
}
guidePrint("등록할 노선의 하행 종점역 이름을 입력하세요. \n");
String downWardTerminal = scanner.next();
if (!validateTerminalName(downWardTerminal)) {
return false;
}
addLine(new Line(lineName, new Station(upwardTerminal), new Station(downWardTerminal)));
infoPrint("지하철 노선이 등록되었습니다. \n");
return true;
}

private static boolean deleteLineControl(Scanner scanner) {
guidePrint("삭제할 노선 이름을 입력하세요. \n");
String lineName = scanner.next();
if (!lineExists(lineName)) {
errorPrint(NO_SUCH_NAME_ERROR);
return false;
}
deleteLineByName(lineName);
infoPrint("지하철 노선이 삭제되었습니다. \n");
return true;
}

private static boolean allLinesControl() {
guidePrint("노선 목록");
List<Line> allLines = lines();
for (Line line : allLines) {
line.printName();
}
System.out.println();
return true;
}

private static boolean validateLineName(String lineName) {
if (!lineNameLengthValidate(lineName)) {
errorPrint(NAME_LENGTH_ERROR);
return false;
}
if (lineExists(lineName)) {
errorPrint(ALREADY_EXIST_ERROR);
return false;
}
return true;
}

private static boolean validateTerminalName(String terminalName) {
if (!hasStation(terminalName)) {
errorPrint(NO_SUCH_NAME_ERROR);
return false;
}
return true;
}

private static boolean lineNameLengthValidate(String lineName) {
return lineName.length() >= MIN_LINE_NAME_LENGTH;
}

private static boolean lineExists(String lineName) {
return hasLine(lineName);
}

}
Loading