## 動機及目的 :small_blue_diamond:**習慣調查表可以幫助自己的生活習慣是否有助於健康,例如飲食、運動、睡眠等方面。透過了解自己的習慣,可以針對不良習慣做出改變,以自主的方式改善健康狀況,透過選單模式介面與使用者進行互動,可以讓使用者有一個良好的感受。** ## 環境 * Ubuntu 20.04 * dialog :::success sudo apt install dialog ::: ## 程式架構圖 :::success ::::::::::::::::::::::::::::![](https://hackmd.io/_uploads/SJfBiq6vh.png) ::: ## 運行程式視窗介面 dialog --stdout --title "請選擇一個" --backtitle "sean的問卷調查" --yesno "您是否願意填寫基本資料及習慣調查表?" 10 50 畫面一:詢問選擇是否填寫調查表 ![](https://hackmd.io/_uploads/r12bIvTPh.png) ## 填入基本資料 畫面二:填寫基本資料 ![](https://hackmd.io/_uploads/H1MtLvpv2.png) ## 習慣調查表選擇框 畫面三:選擇早晨會想喝什麼飲品 ![](https://hackmd.io/_uploads/r1x6tPTDn.png) 畫面四:選擇平均每天吃多少分水果 ![](https://hackmd.io/_uploads/S1-UpP6Ph.png) 畫面五:選擇平均每天吃幾次蔬菜 ![](https://hackmd.io/_uploads/rkxhaPaP3.png) 畫面六:選擇平均每天喝幾次含糖飲料 ![](https://hackmd.io/_uploads/HyTyAD6P2.png) 畫面七:選擇騎腳踏車時有沒有帶安全帽 ![](https://hackmd.io/_uploads/rJ73sw6w2.png) 畫面八:選擇坐汽車時有沒有繫安全帶 ![](https://hackmd.io/_uploads/rJy12waP2.png) 畫面九:顯示基本資料,並顯示調查結果 ![](https://hackmd.io/_uploads/rJqznvpw2.png) 畫面十:顯示填寫完成確定後並退出。 ![](https://hackmd.io/_uploads/ByKV3Ppvn.png) :::info ## 完整程式碼 habit="習慣調查表" answer_file="answer.txt" counter=1 new_answer_file="${answer_file%.*}($counter).${answer_file##*.}" while [ -f "$new_answer_file" ]; do ((counter++)) new_answer_file="${answer_file%.*}($counter).${answer_file##*.}" done show_menu() { dialog --stdout --title "請選擇一個" --backtitle "sean的問卷調查" --yesno "您是否願意填寫基本資料及習慣調查表?" 10 50 result=$? if [ $result -eq 0 ]; then fill_basic_info habit_survey if [ -f "$new_answer_file" ]; then show_answer fi elif [ $result -eq 1 ]; then echo "取消選擇,結束程式" exit 0 fi } fill_basic_info() { if [ -f "$new_answer_file" ]; then dialog --stdout --title "請填寫基本資料表" --backtitle "基本資料" --form "姓名(必填)" 10 50 3 \ "姓名:" 1 1 "" 1 15 25 0 \ "年齡:" 2 1 "" 2 15 25 0 \ "公司部門:" 3 1 "" 3 15 25 0 >> "$new_answer_file" else dialog --stdout --title "請填寫基本資料表" --backtitle "基本資料" --form "姓名(必填)" 10 50 3 \ "姓名:" 1 1 "" 1 15 25 0 \ "年齡:" 2 1 "" 2 15 25 0 \ "公司部門:" 3 1 "" 3 15 25 0 > "$new_answer_file" fi } habit_survey() { dialog --stdout --title "早晨飲品" --backtitle "$habit" --menu "請問早晨會想喝什麼飲品" 15 60 4 \ 1 "咖啡" \ 2 "運動飲料或其他甜飲" \ 3 "牛奶" \ 4 "水">> "$new_answer_file" echo >> "$new_answer_file" dialog --stdout --title "水果攝取量" --backtitle "$habit" --menu "一份水果約 1 個拳頭大小,過去7天內,請問您平均每天吃多少份水果?" 15 70 5 \ 1 "每天不到 1 份" \ 2 "每天 1 份" \ 3 "每天 2 份" \ 4 "每天 3 份" \ 5 "每天 4 份" >> "$new_answer_file" echo >> "$new_answer_file" dialog --stdout --title "蔬菜攝取量" --backtitle "$habit" --menu "請問您通常每天吃幾次蔬菜,如高麗菜、空心菜、花椰菜、竹筍、絲瓜等?" 15 65 5 \ 1 "都沒有吃" \ 2 "一天不到 1 次" \ 3 "每天 1 次" \ 4 "每天 2 次" \ 5 "每天 3 次" >> "$new_answer_file" echo >> "$new_answer_file" dialog --stdout --title "飲料攝取量" --backtitle "$habit" --menu "請問您通常每天喝幾次非碳酸含糖飲料,如手搖飲料、包裝非 100%純果汁、3 合 1 咖啡、乳酸飲料、泡沫紅茶等?" 15 65 6 \ 1 "每天 4 次以上" \ 2 "每天 3 次" \ 3 "每天 2 次" \ 4 "每天 1 次" \ 5 "一天不到 1 次"\ 6 "都沒有喝" >> "$new_answer_file" echo >> "$new_answer_file" dialog --stdout --title "騎腳踏車安全帽" --backtitle "$habit" --menu "您騎腳踏車時,有沒有戴安全帽?" 15 65 5 \ 1 "這段時間,我沒有騎過腳踏車" \ 2 "從來沒有戴" \ 3 "很少戴" \ 4 "有時戴" \ 5 "經常戴">> "$new_answer_file" echo >> "$new_answer_file" dialog --stdout --title "汽車安全帶" --backtitle "$habit" --menu "您乘坐汽車前座時,有沒有繫安全帶?" 15 65 5 \ 1 "這段時間,我不曾乘坐汽車前座" \ 2 "從來沒有繫" \ 3 "很少繫" \ 4 "有時繫" \ 5 "經常繫" >> "$new_answer_file" } show_answer() { line1=$(cat "$new_answer_file" | sed -n "1p") line2=$(cat "$new_answer_file" | sed -n "2p") line3=$(cat "$new_answer_file" | sed -n "3p") line4=$(cat "$new_answer_file" | sed -n "4,7p" | awk '{ sum += $1 } END { print sum }') line5=$(cat "$new_answer_file" | sed -n "8,9p" | awk '{ sum += $1 } END { print sum }') dialog --stdout --title "調查結果" --msgbox "你的名字是$line1 \n你今年$line2歲 \n你的部門是$line3\n飲食習慣調查指數(4~20分)$line4\n安全習慣調查(2~10分)$line5" 10 70 result=$? if [ $result -eq 0 ]; then dialog --stdout --title "填寫完成" --msgbox "您已完成填寫。" 10 50 result=$? if [ $result -eq 0 ]; then exit 0 fi fi } show_menu