# 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 | 將目前行程內容保存 | ### 類別圖關聯性 <!--  -->  ## Sequence diagram <!--  -->  ## Activity diagram <!--  -->  ## 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 ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up