---
# System prepended metadata

title: Week 5 更新

---

# Week 5 更新
## Scenario
- 宜臻坐在書桌前，使用平板開啟「旅遊小幫手」App。
- 她點選主畫面的「AI 行程規劃」圖示。
- 系統切換至設定頁面，她輸入：
  - 出發地：「台北」
  - 目的地：「花蓮」
  - 天數：「4天」
  - 日期：「7月5日～7月8日」
  - 偏好：「自然風景」、「歷史建築」
- 點擊「開始規劃」，系統顯示提示「為您規劃中……」。
- 幾秒後，畫面顯示四日行程，包括每個景點卡片、推薦時間與交通安排。
- 她點選第一天的「松園別館」卡片，進入詳細資訊頁面，查看：
  - 景點介紹
  - 熱門評論摘要（由 AI 歸納）
  - 圖片與實用資訊（開放時間、交通方式等）
- 點選「← 返回」，她回到行程卡片瀏覽模式。
- 她發現「花蓮文化創意產業園區」排在第一天晚上過於普通，點選右上角垃圾桶圖示。
  - 系統彈出確認：「是否刪除此行程？將重新計算路線與時間」→ 她點選「確定」
  - 景點被移除，系統即時重排路線與交通時間。
- 她覺得「七星潭」更適合第一天下午：
  - 長按「七星潭」卡片 → 拖曳至第一天下午。
  - 放手後畫面更新順序與地圖路線。
- 她想到朋友推薦的「石梯坪」：
  - 點選「新增景點」→ 輸入「石梯坪」→ 點擊加入 → 拖曳排入「第二天下午」。
  - 景點成功加入行程，系統更新路線與預估交通時間。
- 修改完成後，宜臻檢視行程頁面，確認內容無誤。
- 她點選畫面下方的「完成規劃」按鈕，回到主畫面。

## Use case models
### Use case
- Planning and Landmark Navigation（行程規劃）

### Participating Actors
- 使用者（如旅遊規劃者、學生、觀光客）
- AI 規劃模組

### Entry Condition
- 使用者已開啟 App。

### Flow of Events
- 使用者點選「AI 行程規劃」。
- 使用者可以輸入出發地、目的地、日期、天數與偏好類型。
- 使用者確認資料後，點選「開始規劃」。
- 系統生成行程卡片，包含景點卡片、交通建議與時間安排。
- 使用者可以檢視、編輯、新增或刪除景點。
- 使用者完成行程編輯後，點選「完成規劃」，行程儲存。
- 返回主頁面。

### Exit Condition
- 行程成功儲存。

### Exceptions
- 網路中斷，無法下載或更新行程／景點資訊。
- 景點資料庫缺少地標或無法推薦。

### Nonfunctional Requirements
- 使用介面直覺與快速反應：介面須具備高直覺性，操作反應時間短。
- 多語系支援：支援中英文操作介面，語音導覽須支援在地語言與離線使用。
- 高效能行程規劃：行程規劃作業須於 5 秒內完成。
- 資訊計算準確性：行程與路線計算、景點資訊與交通時間需具備高準確度。

## Class identification from use case models
### Data dictionary
#### 名詞
| Example              | Part of speech | UML model component               | 型態    | 說明                                           |
|----------------------|----------------|-----------------------------------|---------|------------------------------------------------|
| 使用者               | 名詞           |  `User`                      | class   | 使用本系統進行旅遊規劃的使用對象                                |
| 旅遊介面                | 名詞           |  `TravelView`     | class   | 使用者進行操作與互動的主要畫面              |
| 系統                 | 名詞           |  `TravelAssistantSystem`     | class   | 執行行程規劃與景點管理的核心邏輯系統               |
| 行程                 | 名詞           |  `Itinerary`                 | class   | 包含多日景點與時間安排的完整旅遊規劃                 |
| 行程卡片             | 名詞           |  `ItineraryCard`             | class   | 	在介面中顯示單一景點的資訊卡片                  |
| 景點                 | 名詞           |  `Attraction`                | class   | 使用者將造訪的觀光位置                               |
| 公共景點                 | 名詞           |  `PublicAttraction`                | class   | 從外部來源擷取的開放式景點資料                               |
| 私人景點                 | 名詞           |  `PrivateAttraction`                | class   | 使用者自訂的景點資料                               |
| 景點安排                 | 名詞           |  `AttractionSchedule `                | class   | 指定景點於特定日與時間造訪的配置與交通建議                              |

#### 形容詞
| Example              | Part of speech | UML model component               | 型態       | 說明                                               |
|----------------------|----------------|-----------------------------------|------------|----------------------------------------------------|
| 行程標題           | 形容詞         | `Itinerary.title`                 | String   | 行程的名稱或主題標示   |
| 出發地               | 形容詞         | `Itinerary.startLocation`         | String     | 行程的起點                                         |
| 目的地               | 形容詞         | `Itinerary.destination`           | String     | 行程的終點                                         |
| 日期區間             | 形容詞         | `Itinerary.dateRange`             | DateTime  | 行程的開始與結束時間範圍                                     |
| 天數                 | 形容詞         | `Itinerary.days`                  | DateTime    | 行程所涵蓋的天數總計                                       |
| 行程偏好           | 形容詞         | `Itinerary.preference`                 | String   | 使用者偏好的旅遊類型或活動偏好   |
| 景點標題                 | 形容詞         | `Attraction.title`             | String       | 景點的標題                                           |
| 圖片                 | 形容詞         | `Attraction.image`             | Blob       | 景點的配圖                                           |
| 景點介紹             | 形容詞         | `Attraction.description`          | String     | 景點的官方簡介                                     |
| 熱門評論摘要         | 形容詞         | `Attraction.reviewSummary`        | String     | 系統彙整的熱門評論精華                                 |
| 景點實用資訊         | 形容詞         | `Attraction.practicalInfo`        | String     | 景點相關的實用參訪資訊                         |
| 資料來源         | 形容詞         | `PublicAttraction.source`        | String     | 景點資訊的來源                         |
| 建立者編號         | 形容詞         | `PrivateAttraction.createdBy`        | String     | 哪個使用者建立的景點                         |
| 景點順序             | 形容詞         | `AttractionSchedule.attractionOrder`       | Integer    | 景點在每日中的順序                                 |
| 推薦時間             | 形容詞         | `AttractionSchedule.displayTime`       | DateTime  | 建議參訪該景點的理想時間點                                     |
| 交通建議             | 形容詞         | `AttractionSchedule.transportationInfo`| String     | 各景點之間的移動方式與交通耗時建議                          |

#### 動詞
| Example              | Part of speech | UML model component                   | 型態     | 說明                                                     |
|----------------------|----------------|---------------------------------------|----------|----------------------------------------------------------|
| 顯示行程設定             | 動詞           | `TravelView.displayItinerarySetting()` | void    | 在畫面上呈現行程相關設定選項                     |
| 開始行程規劃         | 動詞           | `TravelView.planItinerary()` | Itinerary | 根據輸入自動產生初始行程                                |
| 顯示行程             | 動詞           | `TravelView.displayItinerary()` | void    | 呈現目前已建立的行程與細節資訊                      |
| 檢視景點         | 動詞           | `TravelView.searchAttraction()`| Attraction   |    尋找所選景點的詳細                     |
| 顯示景點詳情         | 動詞           | `TravelView.displayAttractionInfo()`| void    | 顯示所選景點的詳細資訊                        |
| 新增景點卡片         | 動詞           | `TravelView.addAttraction()`| Itinerary   | 新增景點卡片                    |
| 刪除景點卡片         | 動詞           | `TravelView.deleteAttraction()`| Itinerary   | 刪除景點卡片                    |
| 拖曳景點卡片         | 動詞           | `TravelView.moveAttraction()`| Itinerary   | 	重新排序景點卡片以調整參訪順序                    |
| 更新行程卡片         | 動詞           | `TravelView.displayUpdateItinerary()`| void   | 更新 UI 上對應景點卡片的顯示內容                        |
| 完成行程規劃         | 動詞           | `TravelView.saveItinerary()`| Boolean   | 儲存行程規劃                   |
| 返回主畫面        | 動詞           | `TravelView.returnToMainPage()`| void   | 返回主畫面                  |
| 新增行程             | 動詞           | `TravelAssistantSystem.createItinerary()` | Itinerary     | 新增行程                                     |
| 檢視景點         | 動詞           | `TravelAssistantSystem.searchAttraction()`| Attraction   |    尋找所選景點的詳細資訊                     |
| 新增景點         | 動詞           | `TravelAssistantSystem.addAttraction()`| Itinerary   | 新增景點                        |
| 刪除景點         | 動詞           | `TravelAssistantSystem.deleteAttraction()`| Itinerary   | 刪除景點                        |
| 編輯景點安排         | 動詞           | `TravelAssistantSystem.changeAttractionSchedule()`| Itinerary   | 調整景點在行程中的時間與順序安排                   |
| 儲存行程             | 動詞           | `TravelAssistantSystem.saveItinerary()` | Boolean     | 將目前行程內容保存                                       |

### 類別圖關聯性

<!-- ![image](https://hackmd.io/_uploads/BJm0XEbggx.png) -->
![image](https://hackmd.io/_uploads/BkVgkJKlgg.png)

## Sequence diagram

<!-- ![image](https://hackmd.io/_uploads/Hk5ZN4Zxll.png) -->
![圖片](https://hackmd.io/_uploads/r1q0HqKxlg.png)


## Activity diagram

<!--  ![未命名绘图2.drawio (4)](https://hackmd.io/_uploads/Skso4rbegx.png) -->
![image](https://hackmd.io/_uploads/r1bN1yKexg.png)

## StateChart Diagram

```plantuml
@startuml
' 全局樣式設定
skinparam State {
  BackgroundColor #E6F0FF
  BorderColor Black
  FontSize 12
}
skinparam ArrowColor DarkGreen
skinparam Shadowing false

' 初始狀態
[*] --> Idle : App啟動

' 主流程
Idle --> PlanningSetup : 點選「AI 行程規劃」
PlanningSetup --> PlanningInProgress : 點擊「開始規劃」
PlanningInProgress --> ItineraryDisplayed : 規劃完成，顯示行程卡片

' 行程顯示與編輯（以子狀態群組方式呈現）
state ItineraryDisplayed {
  [*] --> BrowseItinerary

  BrowseItinerary --> ViewAttractionDetail : 點選景點卡片
  ViewAttractionDetail --> BrowseItinerary : ← 返回

  BrowseItinerary --> DeleteAttractionConfirm : 點垃圾桶刪除景點
  DeleteAttractionConfirm --> BrowseItinerary : 確認刪除，系統重排

  BrowseItinerary --> DragReorder : 長按拖曳調整順序
  DragReorder --> BrowseItinerary : 放手更新路線

  BrowseItinerary --> AddAttraction : 新增景點
  AddAttraction --> BrowseItinerary : 輸入名稱並加入

  BrowseItinerary --> CompletePlanning : 完成規劃
}

CompletePlanning --> Idle : 行程儲存並返回主畫面
@enduml
```

## Navigation Path 
```plantuml
@startmindmap
* 主畫面
** AI 行程規劃
*** 輸入設定
**** 出發地、目的地
**** 天數、日期
**** 偏好類型
*** 開始規劃（顯示：為您規劃中...）
*** 規劃結果（行程卡片）
**** 點選景點卡片
***** 查看詳細資訊（介紹、評論、圖片、資訊）
***** 返回
**** 編輯行程
***** 刪除景點
****** 點選垃圾桶圖示
****** 彈出確認視窗
******* 點選「確定」→重排路線與時間
***** 拖曳景點
****** 長按景點卡片
****** 拖曳至新位置
****** 系統更新順序與地圖
***** 新增景點
****** 點選「新增景點」
****** 搜尋輸入關鍵字
****** 選擇結果並加入
****** 拖曳至特定日程
****** 系統更新路線與時間
*** 檢查行程內容
*** 完成規劃 → 回主畫面
@endmindmap
```
```plantuml
@startuml
title Navigation Path Example for Travel Assistant

[*] --> MainMenu : App 啟動

MainMenu : User selects "AI 行程規劃"

MainMenu --> ItinerarySetup : 填寫行程設定
ItinerarySetup : User inputs travel preferences

ItinerarySetup --> ItineraryGenerated : 點擊「開始規劃」
ItineraryGenerated : 系統生成行程

ItineraryGenerated --> ViewAttraction : 點擊景點卡片查看詳情
ViewAttraction : User views attraction details
ViewAttraction --> ItineraryGenerated : 返回行程頁面

ItineraryGenerated --> AddAttraction : 點擊新增景點
AddAttraction : User inputs attraction name
AddAttraction --> ItineraryGenerated : 景點新增完成

ItineraryGenerated --> DeleteAttraction : 點擊刪除景點
DeleteAttraction : User confirms deletion
DeleteAttraction --> ItineraryGenerated : 系統更新行程

ItineraryGenerated --> ReorderAttractions : 調整景點順序
ReorderAttractions : User drags and drops attractions
ReorderAttractions --> ItineraryGenerated : 順序調整完成

ItineraryGenerated --> SaveItinerary : 點擊保存行程
SaveItinerary : User confirms and saves itinerary
SaveItinerary --> MainMenu : 返回主畫面

@enduml
```
