---
# System prepended metadata

title: CTPS Final Project - How To Book Train Tickets More Easily

---

# CTPS Final Project - How To Book Train Tickets More Easily

## CodiMD Document
https://playlab.computing.ncku.edu.tw:3001/21LtXVIYT2KhUDfCDcNhug

## Presentation Slides
![](https://i.imgur.com/K9zlGZA.jpg)
![](https://i.imgur.com/banEFnx.png)
![](https://i.imgur.com/rgi9hLT.jpg)
![](https://i.imgur.com/HGmSdzi.png)
![](https://i.imgur.com/qH4zsmg.png)
![](https://i.imgur.com/eIMtxkt.png)
![](https://i.imgur.com/eCBEO5Y.png)
![](https://i.imgur.com/fcnhsXT.png)
![](https://i.imgur.com/0ZWUyUF.jpg)
![](https://i.imgur.com/jn03Brg.jpg)
![](https://i.imgur.com/WAMDYmT.png)
![](https://i.imgur.com/oiESWhZ.png)
![](https://i.imgur.com/Wsverht.png)
![](https://i.imgur.com/TH7D8Hm.png)
![](https://i.imgur.com/Ln6NByT.png)
![](https://i.imgur.com/oZMr4Ca.png)
![](https://i.imgur.com/BXPsIb3.png)
![](https://i.imgur.com/VHCaMRo.png)
![](https://i.imgur.com/6cSe8qD.png)
![](https://i.imgur.com/rXvFNEM.png)
![](https://i.imgur.com/dOKsz23.png)
![](https://i.imgur.com/HHB2rWc.png)
![](https://i.imgur.com/Tk4eJPC.png)
![](https://i.imgur.com/0Zam4fl.png)
![](https://i.imgur.com/DVY79mJ.png)
![](https://i.imgur.com/ZUqAn9T.png)
![](https://i.imgur.com/vKQr2CE.png)
![](https://i.imgur.com/423HQzU.jpg)

## Introduction to API Functions
### TimeFunction
- 匯入方式：
    ```python
    import TimeFunction
    ```
- Constant：
    - string->資料庫的起始日
        ```python
        DATABASE_FIRST_DAY
        ```
    - string->當下即時日期
        ```python
        TODAY
        ```
- Function：
    - 傳入兩個時間 A、B，判斷 A 是否早於 B
        ```python
        is_time_early(Time1, Time2)
        ```
        - 傳入值：string->時間A(Time1)、string->時間B(Time2)
        - 回傳值：boolean->True/False
    - 傳入兩個時間 A、B，判斷 A 是否晚於 B
        ```python
        is_time_late(Time1, Time2)
        ```
        - 傳入值：string->時間A(Time1)、string->時間B(Time2)
        - 回傳值：boolean->True/False
    - 傳入兩個時間，求得時間差（分鐘）
        ```python
        time_difference(Time1, Time2) # 若時間１晚於時間２，將以跨日計算
        ```
        - 傳入值：string->時間(Time1)、string->時間(Time2)
        - 回傳值：integer->時間長
    - 傳入某日期，獲取後一日之日期
        ```python
        get_tomorrow(Day)
        ```
        - 傳入值：string->日期(Day)
        - string->後一日日期
    - 傳入某日期，獲取前一日之日期
        ```python
        get_yesterday(Day)
        ```
        - 傳入值：string->日期(Day)
        - string->前一日日期
    - 傳入兩個日期 A、B，判斷 A 是否早於 B
        ```python
        is_date_early(Day1, Day2)
        ```
        - 傳入值：string->日期A(Day1)、string->日期B(Day2)
        - 回傳值：boolean->True/False
    - 傳入兩個日期 A、B，判斷 A 是否晚於 B
        ```python
        is_date_late(Day1, Day2)
        ```
        - 傳入值：string->日期A(Day1)、string->日期B(Day2)
        - 回傳值：boolean->True/False
    - 傳入兩個日期，獲得期間所有日期的清單
        ```python
        get_between_dates(Day1, Day2)
        ```
        - 傳入值：string->日期(Day1)、string->日期(Day2)
        - 回傳值：list->日期清單[string->日期]
            ```python
            [ '2020-10-30' , '2020-10-31' , '2020-11-01' ]
            ```
    - 傳入兩個日期，求出兩日期相減的結果
        ```python
        dates_difference(Day1, Day2)
        ```
        - 傳入值：string->日期(Day1)、string->日期(Day2)
        - 回傳值：integer->日期差
    - 傳入日期，求該日期是星期幾
        ```python
        get_day_in_week(Day)
        ```
        - 傳入值：string->日期(Day)
        - 回傳值：integer->星期幾
    - 傳入時間及增加分鐘數，回傳增加後的時間
        ```python
        add_time(time, add_minutes)
        ```
        - 傳入值：string->時間(time)、integer->分鐘數(add_minutes)
        - string->時間

### RemainingSeats_API
- 匯入方式： 
    ```python
    import RemainingSeats_API
    ```
- Function：
    - 檢查資料庫是否可查詢到該日期
        ```python
        in_database_range(date)
        ```
        - 傳入值：string->日期(date)
        - 回傳值：boolean->True/False
    - 傳入日期、車次、起站、迄站，求得剩餘座位數
        ```python
        get_remaining_seats(date, train_no, start_station, dest_station)
        ```
        - 傳入值：string->日期(date)、string->車次(train_no)、string->起站編號(start_station)、string->迄站編號(dest_station)
        - 回傳值：integer->剩餘座位數

### StationList_API
- 匯入方式：
    ```python
    import StationList_API
    ```
- Function：
    - 傳入起站、迄站，求得所有自起站前往迄站的路徑（行經的車站）
        ```python
        get_through_stop_list(start_station, dest_station)
        ```
        - 傳入值：string->起站編號(start_station)、string->迄站編號(dest_station)
        - 回傳值：list->路線清單 [ list->路線一 [string->車站編號] , list->路線二 [string->車站編號] ]
            ```python
            [ ['1000', '4420', '6000'] , ['1000', '7000', '6000'] ]
            ```
    - 傳入車站編號，譯為中文站名
        ```python
        get_station_name(station_code)
        ```
        - 傳入值：string->車站編號(station_code)
        - 回傳值：string->中文站名
    - 傳入中文站名，譯為車站編號：
        ```python
        get_station_code(station_name)
        ```
        - 傳入值：string->中文站名(station_name)
        - 回傳值：string->車站編號

### TimeTable_API
- 匯入方式：
    ```python
    import TimeTable_API
    ```
    - 檢查資料庫內是否可查詢到該日期
        ```python
        in_database_range(Day)
        ```
        - 傳入值：string->日期(date)
        - 回傳值：boolean->True/False
    - 獲取時刻表資料可查詢的最新日期
        ```python
        get_latest_exist_date()
        ```
        - 傳入值：無
        - 回傳值：string->可查詢的最後一天的日期
    - 傳入日期、車次，檢查是否存在該班車
        ```python
        train_exist(Day, TrainNo)
        ```
        - 傳入值：string->日期(Day)、string->車次(TrainNo)
        - 回傳值：boolean->True/False
    - 傳入日期、車次，獲取該班車停靠站
        ```python
        stop_stations(Day, TrainNo)
        ```
        - 傳入值：string->日期(Day)、string->車次(TrainNo)
        - 回傳值：list->停靠站列表[string->車站編號]
            ```python
            [ '1000' , '1010' , '1020' ]
            ```
    - 傳入日期、車次、起站、迄站，求得出發及抵達的時間
        ```python
        get_run_time(Day, TrainNo, Stop1, Stop2)
        ```
        - 傳入值：string->日期(Day)、string->車次(TrainNo)、string->起站(Stop1)、string->迄站(Stop2)
        - 回傳值：list->出發／抵達時間列表[string->時間]
            ```python
            [ '10:00' , '10:20' ]
            ```
    - 傳入日期、車次、起站、迄站，求得搭乘的時間長度
        ```python
        get_taking_time(Day, TrainNo, Stop1, Stop2)
        ```
        - 傳入值：string->日期(Day)、string->車次(TrainNo)、string->起站(Stop1)、string->迄站(Stop2)
        - 回傳值：integer->乘車時間（分鐘）
    - 傳入日期、起站、迄站，找出所有行經的班次
        ```python
        stop_trains(Day, Stop1, Stop2)
        ```
        - 傳入值：string->日期(Day)、string->起站(Stop1)、string->迄站(Stop2)
        - 回傳值：list->列車清單[string->列車車次]
            ```python
            [ '127' , '206' , '438' ]
            ```
    - 傳入日期、車次、起站、迄站，回傳全票票價
        ```python
        get_Price(Day, TrainNo, Stop1, Stop2)
        ```
        - 傳入值：string->日期(Day)、string->車次(TrainNo)、string->起站(Stop1)、string->迄站(Stop2)
        - 回傳值：integer->票價
    - 傳入日期、車次、起站、迄站，獲取歷史資料庫內截至當日該班車運行的日期清單
        ```python
        get_available_date(Day, TrainNo, Stop1, Stop2)
        ```
        - 傳入值：string->日期(Day)、string->車次(TrainNo)、string->起站(Stop1)、string->迄站(Stop2)
        - 回傳值：list->日期清單[string->日期]
            ```python
            [ '2020-10-30' , '2020-11-07' , '2020-11-25' ]
            ```


