跳到主要內容

身體質量指數(Body Mass Index, BMI)計算程式範例

身體質量指數(Body Mass Index, BMI)計算程式範例
更新日期:2021/3/25

本頁內容會說明如何以Visual Studio、Visual C++,使用對話方塊形式,撰寫一個可以進行身體質量指數(Body Mass Index, BMI)計算的程式。

主題重點
  1. 了解與練習如何配置對話方塊的版面。
  2. 了解如何在對話方塊專案中加入能夠"連結版面元件"的成員變數。
  3. 了解如何設定成員變數的初始值。
  4. 了解如何取得與更新對話方塊版面上所顯示的數值(UpdataData)。
  5. 了解如何檢查輸入的數值是否在合理範圍。

準備工作

請先參考如何建立新的"對話方塊"專案的頁面內容,新建一個"所有選項都使用預設值"的對話方塊專案。

請注意:如果你需要繳交每週的練習成果,請記得將新的對話方塊的"專案名稱",設定成你的學號。以下的範例畫面,對話方塊的專案名稱會使用"MFCTest",你可以把"MFCTest"想像替換為你使用的專案名稱,來找到對應的檔案做修改與測試。


1. 如何配置對話方塊的版面


完成新增一個對話方塊專案後,如果沒有發生問題,Visual Studio的備妥畫面如下。



請切換到"資源檢視"視窗,開啟主對話方塊資源(這裡的範例為"IDD_MFCTEST_DIALOG",在你的專案中應該為"IDD_你的專案名稱_DIALOG"),程式編輯畫面會出現這個對話方塊的版面外觀,應該如下圖一樣。 


請用滑鼠選取對話方塊上的三個預設元件:"TODO:在此放置對話方塊控制項。"、"確定(按鈕)"、"取消(按鈕)",按下鍵盤的Delete鍵將他們刪除,因為在後續的範例撰寫中,不會再使用到他們。


刪除時可能會出現下圖的錯誤訊息,提示"錯誤的字體"。這是因為對話方塊預設的字型選取有問題,可以先按"確定"關掉這個警告訊息,先把上一個步驟要刪除的三個預設元件都刪除掉。


刪除所有對話方塊版面上的預設元件後,空白版面的畫面應該如下圖。


在刪除版面上的預設元件時,出現"錯誤的字體"的警告訊息,原因是對話方塊使用的預設字型無法被Visual Studio順利辨識。請選到這個主對話方塊本身,按下滑鼠右鍵,然後在彈出的功能表中選擇"屬性"選項,Visual Studio會切換到這個主對話方塊的"屬性"視窗。



在對話方塊可以設定的屬性中,請找到"Font(Size)"這一個項目,預設狀況應該如下圖,在屬性名稱右邊的欄位是出現代表無法辨識的"????(9)"。請按下"????(9)"右邊的"..."按鈕,呼叫出"字型"對話方塊。 


在字型對話方塊中,可以選擇我們正在編輯中的主對話方塊的預設字型。在下圖左方的選單中,有列出的字型都可以選用。建議使用歷代Windows作業系統都會內建的"細明體"、"新細明體"、"標楷體"等字型。這裡的範例是選擇使用"新細明體",字型大小選定為"12"(預設是9)。選擇完畢後,請按下"確定"按鈕,以完成字型設定。


自己選定了字型後,在主對話方塊的屬性視窗中,"Font(Size)"屬性就會出現剛剛在"字型"對話方塊中選定的結果,就不會再出現找不到預設字型的警告訊息。


接著請在空白的主對話方塊版面上,使用"工具箱"視窗,新增三個"Static Text"、三個"Edit Control"、一個"Button",新增完成的參考畫面如下。

請注意,新增三個"Static Text"、三個"Edit Control"時,請依序"由上而下"排列(最上面是第一個、中間是第二個、下面是第三個),以避免後面撰寫程式碼時可能發生的順序錯誤問題。


新增的三個"Static Text",將會用來顯示文字("身高(m)"、"體重(kg)"、"BMI"),新增的三個"Edit Control"前兩個會讓使用者輸入身高與體重數值,第三個則是用來顯示BMI的計算結果。新增的"Button"會用來執行BMI的計算。 



請選取第一個"Static Text",按滑鼠右鍵,在彈出的功能表中選擇"屬性"選項。注意:這個步驟將會重複執行三次(包含本次),只是每次選取不同的"Static Text"來變更屬性值!



找到這個"Static Text"屬性列表中,名稱為"Caption"的項目,將原本為"Static"的文字,修改為"身高(m)"。修改完畢後按下Enter鍵,就可以在主對話方塊上看到修改後的文字被顯示出來,如下圖。 



參照第一個"Static Text"修改"Caption"屬性的操作方法,將第二個"Static Text"的"Caption"屬性,修改為"體重(kg)"。 



參照第一個"Static Text"修改"Caption"屬性的操作方法,將第三個"Static Text"的"Caption"屬性,修改為"BMI"。 



三個"Static Text"的"Caption"屬性都修改完成後,如果文字有被遮蔽,可以用滑鼠選取這些文字(按著鍵盤的Shift或Control鍵可以連續選取多個元件),用滑鼠拖曳或鍵盤的上下左右按鍵,來調整他們的位置。



2. 如何在對話方塊專案中加入能夠"連結版面元件"的成員變數


請選取第一個"Edit Control",按滑鼠右鍵,在彈出的功能表中選擇"加入變數",會彈出"新增控制變數"的對話方塊。注意:這個步驟將會重複執行三次(包含本次),只是每次選取不同的"Edit Control"來加入變數!



在"新增控制變數"對話方塊中,請確定"控制項識別碼"顯示的資訊為"IDC_EDIT1",表示選取的是第一個"Edit Control"無誤。 



請點選"類別"的下拉選單,選取""的選項(預設原本是"控制項")。 



請在"名稱"的欄位輸入"m_fHeight","變數類型"欄位輸入"float","註解"欄位輸入"記錄身高(m)的變數"。 



參照第一個"Edit Control"新增控制變數的方式,選取第二個"Edit Control",將"新增控制變數"對話方塊的設定值調整成下圖所示。 



參照第一個"Edit Control"新增控制變數的方式,選取第三個"Edit Control",將"新增控制變數"對話方塊的設定值調整成下圖所示。 


完成上述步驟,我們替三個"Edit Control"都新增了對應的成員變數(member variable),這些成員變數的數值,可以跟這些"Edit Control"產生連結,做資料的相互交換。


請切換到"類別檢視"視窗,點選主對話方塊類別(這裏的範例是"CMFCTestDlg",你的應該會是"C你的專案名稱Dlg"),在下半段視窗顯示的資訊中,就可以看到剛剛新增的這三個成員變數(m_fBMI、m_fHeight、m_fWeight,預設是照英文字母排序)。 



如果在"類別檢視"視窗中,用滑鼠點選兩次剛剛新增的成員變數名稱(m_fBMI、m_fHeight、m_fWeight,任一個皆可),就會開啟主對話方塊所使用的"類別"的定義檔案(這裡的範例是"MFCTestDlg.h",你的應該會是"你的專案名稱Dlg.h"),可以在程式碼編輯視窗中看到這三個成員變數的"宣告(定義)"程式碼,以及輸入的註解,可參考下圖。 


此時如果按下Visual Studio畫面上方、中央的"本機Windows偵錯工具"按鈕,編譯執行這個修改過的對話方塊專案,成功的話應該會出現如下的執行畫面。


原本的"Static Text"文字顯示會變成剛才修改過的"身高(m)、"體重(kg)、BMI",原本空白的三個"Edit Control"則會填上預設的數值"0"。 



3. 如何設定成員變數的初始值
Visual Studio自動為"連結版面元件"的成員變數加入的初始值,有時候可能並不合適(例如:上面例子的"0",身高、體重都是"0",計算BMI就會造成錯誤),而我們可以為這些成員變數設定一個合適的初始值。

請開啟"類別檢視"視窗,點選主對話方塊類別(這裏的範例是"CMFCTestDlg",你的應該會是"C你的專案名稱Dlg"),在下半段視窗顯示的資訊中,找到"建構式"(這裏是名稱為"CMFCTestDlg"的函式,可參考"對話方塊程式的運作流程"的相關內容)。

在"類別檢視"視窗中,用滑鼠左鍵點選兩次建構式名稱,會在程式碼編輯視窗顯示建構式的程式碼,可參考下圖。我們可以在這裡看到"m_fHeight"、"m_fWeight"、"m_fBMI"這三個成員變數,後面還跟著"(0)",括號中的"0",就是預設給定的變數初始值。


請將"m_fHeight"、"m_fWeight"後面跟著的括號中的"0",修改成一個合適的數值,例如改成:m_fHeight(1.75)、m_Weight(65)。 


完成後在按Visual Studio畫面上方、中央的"本機Windows偵錯工具"按鈕,編譯執行這個修改過的專案,應該可以看到下面的畫面(前兩個Edit Control的顯示數值會是你剛剛修改的值)。代表已經成功完成"連結版面元件"的成員變數初始值的修改。



4. 如何取得與更新對話方塊版面上所顯示的數值(UpdataData)

請切換到主對話方塊版面編輯的畫面。如果已經被你關閉,可以從"資源檢視"視窗中,在"Dialog"資源類別中找到這個對話方塊(在你的專案中,這個主對話方塊的資源名稱應該是"IDD_你的專案名稱_DIALOG"),用滑鼠左鍵點兩下就可以將它開啟。


用滑鼠左鍵點一下選取"Button1"這個按鈕,再按右鍵會彈出功能表,選取"屬性"項目,來編輯按鈕的屬性。畫面應該會切換到"屬性"視窗。 


在"屬性"視窗中,請先確定名稱為"ID"的屬性,其內容是"IDC_BUTTON1",表示目前正在編輯的是畫面上僅有的這個按鈕。找到名稱為"Caption"的屬性,將原本預設的內容修改為"計算BMI"。按下Enter鍵後,可以立即在畫面上看到這個按鈕顯示的文字,已經改為剛剛輸入的"計算BMI"。


接著請用滑鼠左鍵,在主對話方塊版面上"點兩次"這個按鈕,為它加入對應要執行的函式。 



為按鈕加入對應要執行的函式後,Visual Studio會自動跳轉到程式碼編輯視窗,顯示這個函式的程式碼區塊,方便我們做後續的修改。加入的函式預設名稱為"OnBnClickedButton1",如果有多個按鈕,加入的函式名稱會依序跳號,例如:"OnBnClickedButton2"、"OnBnClickedButton3"、...。 


請將下圖中第168 - 173行的程式碼,輸入到"OnBnClickedButton1"函式中。

注意:如果你的畫面顯示的行號不太相同,請找到"OnBnClickedButton1"函式裡,預設已經有的唯一一行(綠色的註解那行,開頭是"TODO:..."),從這一行的結尾按Enter,然後開始輸入下圖的程式碼。

在輸入的程式碼中,主要是使用"UpdateData"這個函式,來連接主對話方塊面板上輸入的資料(在這個範例中是身高與體重兩個數值)與類別中的成員變數(在前面的步驟中建立的m_fHeight、m_fWeight、m_fBMI),在之間做資料的傳輸與交換。


使用"UpdateData(TRUE)"(下圖範例的第169行),意思是指把主對話方塊上輸入的資料,傳送到成員變數中。使用"UpdateData(FALSE)"(下圖範例的第173行),意思是指把成員變數中現存的資料,傳送到對話方塊上進行顯示。 


編輯完程式碼後,按下"本機Windows偵錯工具"按鈕,就可以測試剛剛完成輸入的計算BMI的程式碼功能。在主對話方塊顯示後,輸入一組身高、體重數值,按下"計算BMI"的按鈕,在BMI文字旁的"Edit Control"就會顯示出計算結果,請參考下圖。


如果我們想要以預設的身高與體重數值,先計算好BMI,然後在主對話方塊顯示在電腦螢幕上時,就顯示這個計算結果(目前代表BMI的Edit Control預設的顯示數值應該是"0"),可以依照下列步驟修改。

請在"類別檢視"視窗中選取主對話方塊的類別(此範例是"CMFCTestDlg",在你的專案中應該是"C你的專案名稱Dlg"),"類別檢視"視窗的下半段中找到"OnInitDialog"函式,用滑鼠左鍵點按兩下,會在程式碼編輯視窗開啟這段程式碼讓我們編輯。

請參考下圖,找到"TODO: ..."開頭的這行綠色註解文字(圖中是第109行),在它的下方輸入下圖第110-111行的程式。


在"對話方塊程式的運作流程"中,我們知道在主對話方塊被顯示在電腦螢幕前,"OnInitDialog"函式會先被執行過一次,在這裡加入"OnBnClickedButton1"的函式呼叫,意思就是說在主對話方塊被顯示在電腦螢幕前,先用預設的身高與體重數據,執行一次BMI的計算,然後將結果顯示在對話方塊上。 


編修完程式碼後,請再按下"本機Windows偵錯工具"按鈕,此時應該可以發現,在主對話方塊出現在電腦螢幕上時,BMI旁的Edit Control數值不會再顯示預設的"0",而是使用目前的身高與體重數據計算的結果,執行畫面如下圖。



5. 如何檢查輸入的數值是否在合理範圍

一般來說,我們撰寫的程式常常會需要讓使用者輸入數據,為了避免錯誤的數值造成錯誤的計算結果,或是更嚴重的造成程式崩潰,在取得使用者輸入的數據後,應該要做一些基本的檢查,確認數據是不是合理。通過檢查再來進行後續的計算,可以防止許多錯誤的發生。

在這個範例中需要讓使用者輸入身高與體重這兩個數據,身高的單位是m(米)、體重的單位是kg(公斤),而一般人的身高與體重大致有一個合理的範圍,我們可以把這個合理範圍的檢查,變成程式碼寫入到程式中,在每次計算BMI前都先檢查一次,就比較能夠確保得到合理的計算結果。


請開啟"OnBnClickedButton1"這個函式,將下圖中的第173 - 195行,輸入到"UpdateData(TRUE)"(圖中第171行)之後的位置。各行程式碼的說明,可以參考圖中的註解文字敘述。 


輸入完程式碼後,請請再按下"本機Windows偵錯工具"按鈕,重新編譯這個專案後,進行剛剛輸入的錯誤檢查程式碼的功能測試。


假設身高輸入的數值為"3.0",而剛剛程式碼中預設的合理數值應該是"0.5 ~ 2.5",輸入後按"計算BMI"按鈕。 


在畫面上應該會看到彈出一個MessageBox,標題是"身高的輸入數值不合理"(即程式碼中strTemp1字串的訊息),內容則是提示使用者要輸入"0.5 ~ 2.5"間的數值(程式碼中strTemp2字串的訊息)。按下確定後可以讓程式繼續運作。


接著再測試體重的輸入檢查是不是可以正常運作。假設輸入的體重值為300,按下"計算BMI"按鈕。


在畫面上應該會看到彈出一個MessageBox,標題是"體重的輸入數值不合理"(即程式碼中strTemp1字串的訊息),內容則是提示使用者要輸入"2.0 ~ 200.0"間的數值(程式碼中strTemp2字串的訊息)。按下確定後可以讓程式繼續運作。


如果輸入的身高與體重數值都在檢查標準的合理範圍內(剛剛輸入的程式碼的檢查標準為身高介於0.5 ~ 2.5m、體重介於2.0 ~ 200.0kg),程式就會立即顯示BMI計算結果,不會彈出錯誤提示的MessageBox。



本次的身體質量指數(Body Mass Index, BMI)計算程式範例到此結束。

如果你是修課同學,請將這個練習專案程式碼資料夾中不需要的檔案都刪除後(可參照"如何替專案"瘦身" & 備份專案"),把剩餘的程式碼以壓縮軟體(zip 或 rar 皆可)壓縮成一個檔案,再將這個檔案email給老師,當作你本週學習成果的確認。

本週的壓縮檔案email繳交的時限,**請在下一週的週五(2020/4/2) 13:00前完成逾時算缺交**,請把握時間完成。



歡迎社群分享。若要全文轉載,請先來信詢問。禁止修改內文,禁止商業使用,必須註明來自「太陽部落」及附上原文連結:https://sunblogsws.blogspot.com/2020/04/vs-bmi.html

留言

這個網誌中的熱門文章

Visual Studio 常用的視窗

Visual Studio 常用的視窗 更新日期:2020/3/24 使用Visual Studio進行程式撰寫常會使用的視窗有"方案總管"、"類別檢視"、"資源檢視"、"工具箱"跟"屬性"視窗。如果你的Visual Studio畫面上沒有看到這些視窗,可以在畫面上方的選單中,點選"檢視",在裡面可以找到並顯示這些視窗,如下圖。 如果你的Visual Studio正在編輯一個程式專案(例如 "對話方塊"專案 ),切換到"方案總管"、"類別檢視"、"資源檢視"、"工具箱"跟"屬性"視窗時,畫面應該會跟下列這些常用視窗的螢幕截圖相近。 方案總管:類似使用"檔案總管",可以檢視目前編輯中的程式專案有哪些檔案。畫面中會自動將檔案分成三類,"來源檔案"是副檔名為.cpp的主要程式碼檔案,"標頭檔”是副檔名為.h、用來宣告或定義類別、函數或變數的檔案,"資源檔"則是不歸屬上面兩類的其他檔案。  類別檢視:可以檢視目前的程式專案中有哪些類別,以及選定的類別中有哪些函數或變數。 資源檢視:可以檢視目前的程式專案中包含的資源項目,如:對話方塊、圖示、字串表、版本資訊等。 工具箱:在"資源檢視"視窗點選開啟"對話方塊"時,畫面會自動切換到"工具箱"視窗。在"工具箱"視窗中有常用的Windows元件,可以透過點選兩次,或是選擇後直接在"對話方塊"拖放,將這些元件新增到對話方塊的版面上。 屬性:當我們選取對話方塊版面上的任何一個元件時,像:按鈕、文字、對話方塊本身,切換到"屬性"視窗,就可以看到這個元件可供設定的屬性。 上面說到的這些視窗,都可以依照自己的喜好,按住滑鼠左鍵、拖曳到想放置的位置。拖曳的時候,畫面中間會顯示可以選擇放

Visual Studio Community 2019 下載 & 安裝

Visual Studio Community 2019 下載 & 安裝 更新日期:2020/3/13 下載網址  https://visualstudio.microsoft.com/zh-hant/downloads/ 安裝步驟 1.工作負載頁面:選取 通用Windows平台開發 & 使用C++的桌面開發 。  2.個別元件頁面:在搜尋框輸入" MFC x86 ",選取下列的安裝選項。 3.開始安裝:網路連線穩定的話,可能要花30-60分鐘。 4.安裝完成後可以在"開始"功能表中看到新增的圖示。 5.第一次啟動Visual Studio 2019。請將"開發設定"直接選定為” Visual C++ ”,方便之後練習範例程式使用,並選擇自己喜歡的色彩佈景主題。 6.選擇要執行的項目:可以選擇右下角的" 不使用程式碼繼續 ",應該會出現步驟7的畫面。也可以選擇"建立新的專案(N)",則會出現步驟8的畫面。  7.Visual Studio準備就緒的空白畫面。 在就緒畫面時,點選左上角功能表的"檔案/新增/專案",就會出現步驟8"建立新專案"的畫面。 8.建立新專案:在搜尋框輸入" MFC ",篩選出相關的專案開發選項。選擇" MFC應用程式 ”項目,按"下一步"按鈕。 9.設定新的專案:在這個頁面可以輸入自己要開發的" 專案名稱 ",並選擇程式碼資料要儲存在硬碟上的那個" 位置 "(請輸入自己便利找尋與管理的資料夾位置)。為方便管理所有程式碼資料,請勾選最下方的" 將解決方案與專案置於相同目錄中 "的選項(這樣會將"解決方案"的檔案跟其他程式碼放在同一個資料夾)。 10.MFC應用程式:請在" 應