스프링 과정 실습을 위한 지하철 노선도 애플리케이션
./gradlew bootRun
버그를 발견한다면, Issues 에 등록해주세요 :)
This project is MIT licensed.
- 지하철 역을 등록한다.
- 같은 역의 이름으로 중복될 수 없다.
- 역 이름은 10글자를 넘길 수 없다.
- 역 이름은 2글자 이상이어야 한다.
- 역 이름은 한글과 숫자의 조합이어야 한다.
- 지하철 역을 조회한다.
- 지하철 역을 삭제한다.
- 삭제할 역이 있어야 한다.
- 지하철 노선을 등록한다.
- 같은 노선의 이름으로 중복될 수 없다.
- 색깔은 중복 될 수 없다.
- 노선 이름은 10글자를 넘길 수 없다.
- 노선 이름은 3글자 이상이어야 한다.
- 노선 이름은 한글과 숫자의 조합이어야 한다.
- 이름과 색깔이 있어야 한다.
- 지하철 노선 목록을 조회한다.
- 지하철 노선 조회
- 조회할 노선이 있어야 한다.
- 지하철 노선 수정
- 같은 노선의 이름으로 중복될 수 없다.
- 색깔은 중복 될 수 없다.
- 노선 이름은 10글자를 넘길 수 없다.
- 노선 이름은 3글자 이상이어야 한다.
- 노선 이름은 한글이어야 한다.
- 이름과 색깔이 있어야 한다.
- 지하철 노선 삭제
- H2 설정하기
- DAO 에 JDBC Template 사용하여 DB 에 저장하기
- 스프링 빈으로 변경
- 기존 테스트코드를 DAO test 로 변경
- 노선을 등록한다.
- 상행 지점, 하행 지점, 거리가 있어야 한다.
- 노선을 조회한다.
- 노선이 가진 구간들을 정렬해서 반환한다.
- 노선 목록을 조회한다.
- 노선들이 가진 구간들을 정렬해서 반환한다.
- 구간을 등록한다.
- 존재하는 노선이어야 한다.
- 추가하려는 구간이 상행역이나 하행역이 있어야 한다.
- 상행역과 하행역이 둘다 존재할 수 없다.
- 추가하려는 거리가 기존 구간의 거리보다 짧아야 한다.
- 거리는 음수일 수 없다.
- 구간을 삭제한다.
- 삭제하려는 구간이 종점일 경우 이전역이 종점이 된다.
- 중간역이 삭제되는 경우 재배치된다.
- 구간이 2개 이상이어야 한다.
-
경로를 조회한다.
- jgrapht 라이브러리를 활용한다.
- 점(vertex)과 간선(edge), 그리고 가중치 개념을 이용
- 정점: 지하철역(Station)
- 간선: 지하철역 연결정보(Section)
- 가중치: 거리
- 최단 거리 기준 조회 시 가중치를 거리로 설정
- 점(vertex)과 간선(edge), 그리고 가중치 개념을 이용
- 최단 경로 및 거리를 반환한다.
- 경로가 존재하는지 검증한다.
- jgrapht 라이브러리를 활용한다.
-
요금을 계산한다.
- 기본운임(10㎞ 이내): 기본운임 1,250원
- 이용 거리 초과 시 추가운임 부과
- 10km~50km: 5km 까지 마다 100원 추가
- 50km 초과: 8km 까지 마다 100원 추가
- 지하철 운임은 거리비례제로 책정된다.
- 노선 등록시 추가요금을 받는다.
- 노선 수정시 추가요금을 받는다.
- 추가요금이 0원 미만인지 검증한다.
- 요금 계산시 추가 요금을 측정된 요금에 추가한다.
- 여러 노선을 이용할 경우 가장 높은 금액의 추가 요금을 추가한다.
- 나이가 13세 이상~19세 미만일 경우 350원을 공제한 금액의 20% 할인한다.
- 나이가 6세 이상~13세 미만 미만일 경우 350원을 공제한 금액의 50% 할인한다.