iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
自我挑戰組

飲食營養追蹤 + 健康分析 Web 系統系列 第 13

寫計算單日總熱量的方法

  • 分享至 

  • xImage
  •  

目的

新增新功能:計算某使用者在某天攝取的總熱量。
把計算過程寫出。

1.主選單
新增選項5.計算單日總熱量。
https://ithelp.ithome.com.tw/upload/images/20251014/20178845c93yMIKNAA.jpg


2.Main
userId、date跟前面寫法一樣。

double totalCalories = dao.calculateTotalCalories(userId,date):呼叫calculateTotalCalories方法(後面會創),放入userId、date,把結果存入變數totalCalories。

System.out.printf():用來格式化輸出文字,比println更方便顯示數字格式。

(使用者%d在%s的總熱量為:%2f kcal%n,userId,date,totalCalories):%d會被替換成整數(userId);%s會被替換成字串(date);%.2f會被替換成浮點數,並保留兩位小數(totalCalories);%n換行符號。
https://ithelp.ithome.com.tw/upload/images/20251014/20178845dS1zM7tulq.jpghttps://ithelp.ithome.com.tw/upload/images/20251014/20178845S1FuhRQUvv.jpg


3.FoodLogDAO
SELECT f.name,f.calories,fl.quantity,(f.calories*fl.quantity) AS total:取出food表(在SQL的FROM/JOIN中的別名為f)的食物名...,fl為foodLog表的別名,()裡為每筆食物的總熱量,用AS用來給欄位/表格取別名total。

FROM food_log fl:指定查詢的資料表來源。

JOIN food f ON fl.food_id =f.food_id:連結(JOIN)另一個資料表food,指定連接條件(ON),只有符合條件的記錄才會被合併,這樣才能拿到fl的份量和f的熱量。

WHERE fl.id = ? AND fl.date = ? :指定查詢的條件為,某使用者在特定日期的食物記錄,避免抓到其他資料。

java.sql.Date.valueOf(date):將LocalDate或字串日期轉換成SQL可接受的形式。

totalCalories += total:將每筆食物熱量累加到每日總熱量。

%s被替換成字串(name),%.1f被替換成浮點數,保留1小數。

最後回傳總熱量。
https://ithelp.ithome.com.tw/upload/images/20251014/201788451eyCGlaTiw.jpg
https://ithelp.ithome.com.tw/upload/images/20251014/20178845F11Uh5KyFZ.jpg


4.結果
https://ithelp.ithome.com.tw/upload/images/20251014/20178845Iid4pjMOgN.jpg


上一篇
加入錯誤處理
下一篇
計算單日蛋白質、脂肪、碳水的方法。
系列文
飲食營養追蹤 + 健康分析 Web 系統15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言