移動(dòng)媒體程序設(shè)計(jì)實(shí)現(xiàn)課程設(shè)計(jì)
1移動(dòng)媒體程序設(shè)計(jì)實(shí)現(xiàn)課程設(shè)計(jì)報(bào)告
課題名稱:體重檔案APP小組
小組成員:xxx xxx xxx
目錄
1概述31.1項(xiàng)目背景31.2系統(tǒng)目標(biāo)32需求分析42.1系統(tǒng)功能分析42.1.1數(shù)據(jù)保存42.1.2圖標(biāo)功能42.1.3診斷功能52.1.4更多功能52.2系統(tǒng)平臺(tái)62.2.1Android開(kāi)發(fā)環(huán)境介紹62.2.2Android開(kāi)發(fā)平臺(tái)搭建63概要設(shè)計(jì)83.1總體設(shè)計(jì)83.1.1系統(tǒng)總體結(jié)構(gòu)83.1.2子系統(tǒng)系統(tǒng)接口93.2數(shù)據(jù)庫(kù)設(shè)計(jì)93.2.1數(shù)據(jù)庫(kù)E-R圖設(shè)計(jì)93.2.2數(shù)據(jù)表設(shè)計(jì)103.3相關(guān)技術(shù)介紹103.3.1Activity ……103.3.2Intent ……113.3.3Service ……113.3.4Layout布局……123.3.5控件介紹……134函數(shù)設(shè)計(jì)154.1函數(shù)列表154.2函數(shù)調(diào)用圖1錯(cuò)誤!未定義書(shū)簽。5系統(tǒng)實(shí)現(xiàn)175.1設(shè)計(jì)過(guò)程175.1.1 “圖表”界面內(nèi)功能的實(shí)現(xiàn)……175.1.2 “數(shù)據(jù)”界面內(nèi)各功能的實(shí)施……185.1.3“診斷”界面內(nèi)各功能的實(shí)現(xiàn)……205.1.4 “更多”界面內(nèi)各功能的實(shí)現(xiàn)……216使用說(shuō)明226.1.1 體重檔案軟件在電腦模擬環(huán)境下測(cè)試226.1.2 體重檔案軟件在Android手機(jī)下測(cè)試247項(xiàng)目總結(jié)268作業(yè)具體分工
摘要:
Window 操作系統(tǒng)的誕生成就了微軟帝國(guó),同時(shí)也造就了 PC 時(shí)代的繁榮, 然而如今,以 Android 和 iPhone 手機(jī)為代表的智能移動(dòng)設(shè)備的發(fā)明與互聯(lián)網(wǎng)云技術(shù)的興起預(yù)示著移動(dòng)互聯(lián)網(wǎng)時(shí)代已經(jīng)來(lái)臨。
在這個(gè)互聯(lián)網(wǎng)繁榮的時(shí)代,有一顆超新星,以它獨(dú)特性能優(yōu)勢(shì)與人性化的 UI 設(shè)計(jì)使它在短短的幾年迅速的占領(lǐng)了智能移動(dòng)設(shè)備的市場(chǎng)份額,它就是 Google 的 Android!這也意味著 Google 在移動(dòng)互聯(lián)網(wǎng)時(shí)代開(kāi)始搶跑并領(lǐng)跑。
Android 是基于 Linux 平臺(tái)完全開(kāi)源的手機(jī)操作系統(tǒng),同時(shí)開(kāi)發(fā)語(yǔ)言為 Java。在本次課程設(shè)計(jì)中我們組選擇了以 Android 為平臺(tái)的手機(jī)體重記錄app來(lái)作為我的課程設(shè)計(jì),選擇體重記錄app不僅可以提升技術(shù),同時(shí)也很實(shí)用,為人們時(shí)刻了解自身的體重和健康帶來(lái)了方便。也有利于提升自己的氣質(zhì),健康生活
關(guān)鍵詞:
移動(dòng)互聯(lián)網(wǎng)時(shí)代 Android 體重記錄app 健康生活
概述
項(xiàng)目背景
胖是歷來(lái)已久的一種多因素引起的代謝障礙疾病。早在1948年,世界衛(wèi)生組織已將“肥胖”列入疾病名單。隨著全球經(jīng)濟(jì)的快速發(fā)展,移動(dòng)互聯(lián)網(wǎng)的興起、人民生活水平的提高,加上不合理的膳食結(jié)構(gòu)、不良生活方式等出現(xiàn),肥胖已成為公共衛(wèi)生焦點(diǎn)問(wèn)題。隨著人們對(duì)肥胖危害的認(rèn)知度提高,減重的治療方法也在歷久彌新,健康生活,控制體重已日益成為人們所重視的問(wèn)題。與此同時(shí),大眾審美觀念的趨勢(shì)也促使了人們對(duì)自身體重的高度重視。隨著移動(dòng)互聯(lián)網(wǎng)和智能手機(jī)的發(fā)展和不斷進(jìn)步,當(dāng)今市場(chǎng)上已出現(xiàn)各種五花八門的健康記錄APP,幾乎所有人的智能手機(jī)上都會(huì)有一款檢測(cè)身體狀況的APP,這些APP可以很好的幫助人們了解自身身體狀況,及時(shí)做出調(diào)整。
系統(tǒng)目標(biāo)
根據(jù)用戶對(duì)該類軟件的使用要求,我們組制定了如下系統(tǒng)目標(biāo):
操作簡(jiǎn)單、易于掌握、界面簡(jiǎn)潔清爽。
方便對(duì)屏幕進(jìn)行觸摸操作。
要包含對(duì)身體狀況的評(píng)估,并記錄長(zhǎng)時(shí)間內(nèi)的數(shù)據(jù)。
App占用內(nèi)存不應(yīng)過(guò)大。
系統(tǒng)運(yùn)行穩(wěn)定,不能和手機(jī)固有的軟件沖突。
保密性好,安全可靠。
需求分析
系統(tǒng)功能分析
該系統(tǒng)具有的功能有:
可以長(zhǎng)時(shí)間保存體重狀況
根據(jù)數(shù)據(jù)顯示出散點(diǎn)圖,直觀反映體重變化情況
可以查找出某一天的數(shù)據(jù)
可以根據(jù)輸入的身高、體重、性別判斷出身體狀況
給出合理飲食建議
介紹一些與身高體重相關(guān)的指標(biāo)
數(shù)據(jù)保存
建立了一個(gè)數(shù)據(jù)庫(kù)用來(lái)記錄長(zhǎng)期的數(shù)據(jù)。如圖:
圖表功能
通過(guò)圖表直觀的反映出體重變化情況。如圖:
診斷功能
可以根據(jù)輸入的身高、體重、性別判斷出身體狀況,如圖:
更多功能
個(gè)人信息的設(shè)置和系統(tǒng)功能的設(shè)置等,如圖:
系統(tǒng)平臺(tái)
Android開(kāi)發(fā)環(huán)境介紹
Android平臺(tái)使用Java編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,而Android提供了對(duì)Java的核心支持??紤]到Java虛擬機(jī)的執(zhí)行效率和占用資源情況,Google重新設(shè)計(jì)了Java的編譯器,命名為Dalvik。Dalvik是經(jīng)過(guò)優(yōu)化的Java編譯器,允許在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)的實(shí)例,并且每一個(gè)Dalvik應(yīng)用作為一個(gè)獨(dú)立的Linux進(jìn)程執(zhí)行,獨(dú)立的進(jìn)程可以防止在虛擬機(jī)崩潰的時(shí)候所有程序都被關(guān)閉。
項(xiàng)目的開(kāi)發(fā)在Eclipse環(huán)境中進(jìn)行,由于進(jìn)行的是Android應(yīng)用程序的開(kāi)發(fā),
由以上分析可知,Android平臺(tái)的搭建需要Android SDK、Java SDK、和AVD三個(gè)軟件。
Android開(kāi)發(fā)平臺(tái)搭建
①Java JDK的安裝;(選擇適合自己電腦配置的版本)
②下載完成后,開(kāi)始安裝
③配置java的環(huán)境變量
(1)新建變量名為”JAVA_HOME”,變量值為JDK的安裝路徑
(2)編輯(若變量中沒(méi)有則新建)變量名為”PATH”,在原變量名字后加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”
(3)編輯(若變量中沒(méi)有則新建)變量名為”CLASSPATH”,變量值“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”
④確認(rèn)環(huán)境配置是否正確
⑤Androidstudio的下載,鏈接:http://tools.android-studio.org/。
⑥下載完成后開(kāi)始安裝
概要設(shè)計(jì)
總體設(shè)計(jì)
系統(tǒng)總體結(jié)構(gòu)
在這里說(shuō)明系統(tǒng)的總體結(jié)構(gòu)流程圖如下圖所示。
子系統(tǒng)系統(tǒng)接口
數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)E-R圖設(shè)計(jì)
數(shù)據(jù)庫(kù)的概念設(shè)計(jì),即利用數(shù)據(jù)模型進(jìn)行概念數(shù)據(jù)庫(kù)的模式設(shè)計(jì)。根據(jù)體重檔案系統(tǒng)的需求,設(shè)計(jì)出以下的實(shí)體-關(guān)系模型(E-R)圖如圖。
性別
體重
身高
生日
用戶
1
計(jì)算
1
身體狀況
BMI
BMR
數(shù)據(jù)表設(shè)計(jì)
數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì),即把概念設(shè)計(jì)得到的概念數(shù)據(jù)庫(kù)模式變?yōu)檫壿嫈?shù)據(jù)模式,它依賴于DBMS。根據(jù)體重檔案系統(tǒng)的需求分析及數(shù)據(jù)庫(kù)的概念設(shè)計(jì),建立數(shù)據(jù)庫(kù)了info_db。
建庫(kù)語(yǔ)句:create database info_db;
用戶信息表(usertbl)
列名數(shù)據(jù)類型是否允許為空說(shuō)明birthdate是出身日期weightfloat是體重heightfloat是身高sexbool否性別
表3.5 身體狀況信息表(healtbl)
列名數(shù)據(jù)類型是否允許為空說(shuō)明BMIfloat否BMI值BMRfloat是BMR值
相關(guān)技術(shù)介紹
Activity
在Android應(yīng)用程序中,一個(gè)活動(dòng)Activity通常就是一個(gè)單獨(dú)的界面。每一個(gè)界面都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并且從Activity基類中繼承而來(lái),Activity將會(huì)顯示由空間組成的用戶接口,并對(duì)事件做出響應(yīng)。大多數(shù)的應(yīng)用都是由多個(gè)Activity顯示組成。
簡(jiǎn)單的說(shuō),Activity代表一個(gè)用戶所能看到的界面,主要用于處理應(yīng)用程序的整體性工作,例如,監(jiān)聽(tīng)系統(tǒng)事件如按鍵事件、觸摸屏事件等,為用戶顯示指定的View,啟動(dòng)其他Activity等。所有應(yīng)用的Activity都繼承于android.app.Activity類,該類是Android提供的基層類,其他的Activity繼承該父類后,通過(guò)父類的方法實(shí)現(xiàn)各種功能,這種設(shè)計(jì)在其他領(lǐng)域也較為常見(jiàn)。
3.3.2 Intent
Android基本的設(shè)計(jì)理念是鼓勵(lì)減少組件間的耦合,因此Android提供了Intent,Intent提供了一種通用的消息系統(tǒng),它允許在你的應(yīng)用程序與其他的應(yīng)用程序間傳遞Intent來(lái)執(zhí)行動(dòng)作和產(chǎn)生時(shí)間。使用Intent可以激活A(yù)ndroid應(yīng)用的三個(gè)核心組件:活動(dòng)、服務(wù)和廣播接收器。
Intent可以劃分為顯示意圖和隱式意圖。顯示意圖調(diào)用Intent,SetClass方法明確制定了組件名的Intent為顯示意圖,顯示意圖明確制定了Intent應(yīng)該傳遞給那個(gè)組件,在同一個(gè)應(yīng)用內(nèi)部使用的。隱式意圖沒(méi)有明確指定組件名的Intent為隱式意圖,Android系統(tǒng)會(huì)根據(jù)隱式意圖中設(shè)置的動(dòng)作(action)、類別(category)、數(shù)據(jù)(URI和數(shù)據(jù)類型)找到最合適的組件來(lái)處理這個(gè)意圖。
Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)和附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對(duì)應(yīng)的組件,將 Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。因此,Intent在這里起著一個(gè)媒體中介的作用,專門提供組件互相調(diào)用的相關(guān)信息,實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的結(jié)構(gòu)。
3.3.3 Service
如果把Activity比喻為前臺(tái)程序,那么Service就是后臺(tái)程序,Service的整個(gè)生命周期都只會(huì)在后臺(tái)執(zhí)行。Service跟 Activity一樣也由Intent調(diào)用,由于Service在后臺(tái)運(yùn)行,所以沒(méi)有界面,用來(lái)處理耗時(shí)比較長(zhǎng),而且Service不是一個(gè)單獨(dú)的進(jìn)程,也不是一個(gè)單獨(dú)的線程。Service有兩種類型:
本地服務(wù)(Local Service):用于應(yīng)用程序內(nèi)部;
遠(yuǎn)程服務(wù)(Remote Sercie):用于android系統(tǒng)內(nèi)部的應(yīng)用程序之間。
前者用于實(shí)現(xiàn)應(yīng)用程序自己的一些耗時(shí)任務(wù),比如查詢升級(jí)信息,并不占用應(yīng)用程序比如Activity所屬線程,而是單開(kāi)線程后臺(tái)執(zhí)行,這樣用戶體驗(yàn)比較好。后者可被其他應(yīng)用程序復(fù)用,例如天氣預(yù)報(bào)服務(wù),其他應(yīng)用程序不需要再寫(xiě)這樣的服務(wù),調(diào)用已有的即可。
Service的生命周期,Service有startService和bindService兩種啟動(dòng)Service方法,每種方法Service的生命周期是不一樣的。
通過(guò)startService()——Service會(huì)經(jīng)歷 onCreate –> onStartCommand(),stopService的時(shí)候直接onDestroy,如果是調(diào)用者直接退出而沒(méi)有調(diào)用stopService的話,Service會(huì)一直在后臺(tái)運(yùn)行,下次調(diào)用者再起來(lái)仍然可以stopService;
通過(guò)bindService()——Service只會(huì)運(yùn)行onCreate()–>onBind() 這個(gè)時(shí)候調(diào)用者和Service綁定在一起 unbindService的時(shí)候onUnbind() –> onDestroyed(),調(diào)用者退出了,Srevice就會(huì)調(diào)用onUnbind() –> onDestroyed()。在這里需要注意的是Service的onCreate的方法只會(huì)被調(diào)用一次,就是你無(wú)論多少次的startService又 bindService,Service只被創(chuàng)建一次。如果先是bind了,那么start的時(shí)候就直接運(yùn)行Service的onStart方法,如果先是start,那么bind的時(shí)候就直接運(yùn)行onBind方法。如果你先bind上了,就stop不掉了,只能先UnbindService, 再StopService,所以是先start還是先bind行為是有區(qū)別的。
3.3.4 Layout布局
布局方式有很多種,比如線性布局(Linear Layout)、相對(duì)布局(Relative Layout)、表格布局(Table Layout)、網(wǎng)格視圖(Grid View)、標(biāo)簽布局(Tab Layout)、列表視圖(List View)和絕對(duì)布局(Absolute Layout)。本文設(shè)計(jì)主要采用相對(duì)布局(Relative Layout)、線性布局(Linear Layout),所以就相對(duì)布局和線性布局我們來(lái)做簡(jiǎn)單地介紹。
相對(duì)布局 Relative:里面可以放多個(gè)控件,允許子元素指定它們相對(duì)于父元素或其他元素的位置(通過(guò)ID指定)。因此你可以按正確的順序?qū)R兩個(gè)元素,或者讓一個(gè)視圖在另外一個(gè)下面,居于屏幕中間,左邊的中間,等等。元素通過(guò)給定順序來(lái)繪制,因此如果第一個(gè)元素在屏幕中間,其他以它對(duì)齊的元素都會(huì)對(duì)齊到屏幕中間。同樣,因?yàn)檫@個(gè)順序,如果使用XML來(lái)指定這個(gè)布局,你將引用的元素(為了定位其它視圖對(duì)象)必須被列在XML文件中,在你通過(guò)引用ID從其他視圖中引用它之前。其中一些特性直接由元素支持,另外一些由它的LayoutParams成員變量支持(為所有這個(gè)屏幕中的元素子類化RelativeLayout,因?yàn)樗性囟际荝elativeLayout父對(duì)象的子元素)。已定義的相對(duì)布局RelativeLayout參數(shù)是:width,height,below,alignTop,toLeft以及
padding[Bottom|Left|Right|Top]和margin[Bottom|Left|Right|Top]。注意其中一些參數(shù)明確是相對(duì)于其他元素的布局位置,所以它們的數(shù)值必須是你的相對(duì)位置元素的ID。
線性布局 LinearLayout:線性布局是所用布局中最常用的方式之一,RadioGroup, TabWidget,TableLayout,TableRow,ZoomControls類的父類。LinearLayout可以讓它的子元素垂直或水平的方式排成一行(不設(shè)置方向的時(shí)候默認(rèn)按照垂直方向排列)。LinearLayout以你為它設(shè)置的垂直或水平的屬性值,來(lái)排列所有的子元素。所有的子元素都被堆放在其它元素之后,因此一個(gè)垂直列表的每一行只會(huì)有一個(gè)元素,而不管他們有多寬,而一個(gè)水平列表將會(huì)只有一個(gè)行高(高度為最高子元素的高度加上邊框高度)。LinearLayout保持子元素之間的間隔以及互相對(duì)齊(相對(duì)一個(gè)元素的右對(duì)齊、中間對(duì)齊或者左對(duì)齊)。
LinearLayout還支持為單獨(dú)的子元素指定weight 。好處就是允許子元素可以填充屏幕上的剩余空間。這也避免了在一個(gè)大屏幕中,一串小對(duì)象擠成一堆的情況,而是允許他們放大填充空白。子元素指定一個(gè)weight 值,剩余的空間就會(huì)按這些子元素指定的weight比例分配給這些子元素。默認(rèn)的weight值為0。例如,如果有三個(gè)文本框,其中兩個(gè)指定了weight值為1,那么,這兩個(gè)文本框?qū)⒌缺壤胤糯螅⑻顫M剩余的空間,而第三個(gè)文本框不會(huì)放大。
控件介紹
1、TextView——文本控件,可以用它來(lái)顯示文字,就像一個(gè)標(biāo)簽一樣,對(duì)TextView是怎么設(shè)置顯示的文本,怎樣設(shè)置字體的大小,字體的顏色,字體的樣式。TextView包含以下子類:Button, CheckedTextView,Chronometer,DigitalClock,EditText。
android:id——控件的標(biāo)識(shí)符
android:layout_width——設(shè)置控件的寬度
android:layout_height——設(shè)置控件的高度
android:layout_marginTop——設(shè)置文本的上外邊距
android:textSize——設(shè)置文本文字的的大小
android:paddingLeft——設(shè)置元素左內(nèi)邊距
2、Button——按鈕控件,在button內(nèi)部可以放置內(nèi)容,比如文本或圖像。<button>與</button>標(biāo)簽之間的所有內(nèi)容都是按鈕的內(nèi)容,其中包括任何可接受的正文內(nèi)容,比如文本或或多媒體。例如,我們可以在按鈕中包括了一個(gè)圖像和相關(guān)的文本,用它們?cè)诎粹o中創(chuàng)建一個(gè)吸引人的標(biāo)記圖像。不過(guò)button禁止使用的元素是圖像映射,因?yàn)樗鼘?duì)鼠標(biāo)和鍵盤敏感的動(dòng)作會(huì)干擾表單按鈕的行為。下面是Button的部分屬性:
android:id——控件的標(biāo)識(shí)符
android:layout_width——設(shè)置按鈕的寬度
android:layout_height——設(shè)置按鈕的高度
android:textSize——設(shè)置按鈕里文字的大小
android:layout_marginTop——設(shè)置按鈕的上外邊距
android:text——設(shè)置按鈕中的文字
android:visibility——設(shè)置按鈕里的元素是否可見(jiàn)
3、EditText——文本編輯框,TextView的直接子類,所以EditText會(huì)繼成父類TextView的一些方法。在布局中配置EditText也需同時(shí)配置一個(gè)Button,這樣可以在代碼中監(jiān)聽(tīng)Button的事件,以便獲取當(dāng)前在EditView中輸入的內(nèi)容并且顯示出來(lái)。在EditView可以限制輸入的字符串類型。下面是EditText的部分屬性:
android:id——控件的標(biāo)識(shí)符
android:layout_width——設(shè)置輸入框的寬度
android:layout_height——設(shè)置輸入框的高度
android:layout_weight——設(shè)置輸入框占父控件的比例
android:inputType——設(shè)置輸入框內(nèi)的字符串類型
android:hint——設(shè)置在輸入框輸入內(nèi)容前默認(rèn)的文字
4、ImageView——標(biāo)簽可以顯示任意圖像,例如圖標(biāo),圖片等。ImageView類可以加載各種來(lái)源的圖片,需要計(jì)算圖像的尺寸,以便它可以在其他布局中使用,并提供例如縮放和著色等各種顯示選項(xiàng),在本文用來(lái)顯示城市圖片。下面是ImageView的部分屬性:
android:id——設(shè)置圖片的標(biāo)識(shí)符
android:layout_width——設(shè)置圖片的寬度
android:layout_height——設(shè)置圖片的高度
android:visibility——設(shè)置圖片是否可見(jiàn)性
函數(shù)設(shè)計(jì)
函數(shù)列表
返回類型方 法簡(jiǎn) 述booleanclipRect (int left,int top,int,right,int,bottom)裁剪一個(gè)矩形區(qū)域SetStorkeWidtg(float width)設(shè)置筆刷的寬度onKeyDown(int keyCode, KeyEvent event)點(diǎn)擊后觸發(fā)事件intgetAudioSessionId()返回體重的會(huì)話IDgetCurrentPosition()取得當(dāng)前顯示的位置點(diǎn)getDuration()取得文件的長(zhǎng)度static WeightMakercreate(Context context, int resid)從指定的源id中創(chuàng)建一個(gè)WeightMaker對(duì)象create(Context context, Uri uri)從指定的Uri中創(chuàng)建一個(gè)WeightMaker對(duì)象create(Context context, Uri uri, SurfaceHolder holder)從指定的Uri中創(chuàng)建一個(gè)WeightMaker對(duì)象,并在Surfaceview中顯示voidDrawPoint(float[]pts,int offset,int count,Paint paint)繪制多個(gè)點(diǎn)addSettingItem(int layout_id, String title)添加下拉選項(xiàng)onDateSelected()搜索前異步準(zhǔn)備release()釋放此WeightMaker對(duì)象占用的資源reset()重置WeightMaker到未初始化狀態(tài)seekTo(int msec)尋找特定日期的體重start()開(kāi)始計(jì)算stop()停止計(jì)算
4.2函數(shù)調(diào)用圖
系統(tǒng)實(shí)現(xiàn)
設(shè)計(jì)開(kāi)發(fā)過(guò)程
“圖表”界面內(nèi)功能的實(shí)現(xiàn)
頁(yè)面的設(shè)計(jì)
整體采用線性布局(LinearLayout ),并且有用作圖的的類函數(shù)來(lái)實(shí)現(xiàn)曲線的繪制。
主要代碼具體如下:
public static interface OnChartModeChangeListener {
public void onChartModeChanged(int chartmode);
}
public static void initialize(Context context) {
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
}
public static void setOnChartModeChangeListener(OnChartModeChangeListener listener) {
mChartModeChangeListener = listener;
}
public static boolean isFirstStart() {
return mSharedPreferences.getBoolean(CONFIG_FIRST_START,true);
}
“數(shù)據(jù)”界面內(nèi)各功能的實(shí)施
該界面主要功能為數(shù)據(jù)的添加、刪減、和查找。
主要的代碼實(shí)現(xiàn)如下:
//查找
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data);
mDataSummary = (LinearLayout)findViewById(R.id.DataSummary);
mCondition = getIntent().getStringExtra(“Condition”);
if (mCondition != null && !””.equals(mCondition)) {
getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_bg));
getActionBar().setTitle(getString(R.string.activity_title_search_result));
mDataSummary.setVisibility(View.GONE);
}
mTextContinuousDays = (TextView)findViewById(R.id.TextContinuousDays);
mTextReduceWeek = (TextView)findViewById(R.id.TextReduceWeek);
mTextReduceMonth = (TextView)findViewById(R.id.TextReduceMonth);
updateDataSummary();
mWeightListView = (ListView)findViewById(R.id.WeightDataListView);
mWeightDataAdapter = new WeightDataAdapter(this,mCondition);
mWeightListView.setAdapter(mWeightDataAdapter);
registerForContextMenu(mWeightListView);
OnItemLongClickListener longListener = new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) {
mSelectedPosition = position;
mWeightListView.showContextMenu();
return true;
}
};
mWeightListView.setOnItemLongClickListener(longListener);
}
添加和刪除:protected void?updateDataSummary() {
mTextContinuousDays.setText(WeightDBHelper.getContinuousDays()+“天”);
Double reduced = 0.0;
reduced = WeightDBHelper.getWeightReduceThisWeek();
if?(reduced > 0) {
mTextReduceWeek.setText(“+”?+?new?DecimalFormat(“0.00”).format(reduced) +?” kg”);
}
else?{
mTextReduceWeek.setText(reduced +?” kg”);
}
reduced = WeightDBHelper.getWeightReduceThisMonth();
if?(reduced > 0) {
mTextReduceMonth.setText(“+”?+?new?DecimalFormat(“0.00”).format(reduced) +?” kg”);
}
else?{
mTextReduceMonth.setText(reduced +?” kg”);
}
}
“診斷”界面內(nèi)各功能的實(shí)現(xiàn)
public void onClick(View v) {
Intent intent = null;
switch (v.getId()) {
case R.id.MoreAccount:
intent = new Intent(this,PersonalActivity.class);
startActivity(intent);
break;
case R.id.MoreBackupOrRestore:
break;
case R.id.MoreSetting:
intent = new Intent(this,SettingActivity.class);
startActivity(intent);
break;
case R.id.MoreWhatBMI:
intent = new Intent(this,WhatActivity.class);
intent.putExtra(“What”, “BMI”);
startActivity(intent);
break;
case R.id.MoreWhatBMR:
intent = new Intent(this,WhatActivity.class);
intent.putExtra(“What”, “BMR”);
startActivity(intent);
break;
case R.id.MoreAboutUs:
intent = new Intent(this,AboutActivity.class);
startActivity(intent);
break;
default:
return;
}
}
“更多”界面內(nèi)各功能的實(shí)現(xiàn)
該界面主要實(shí)現(xiàn)各個(gè)頁(yè)面間的跳轉(zhuǎn),比較簡(jiǎn)單,就不附源代碼了。
測(cè)試說(shuō)明
體重檔案軟件在電腦模擬環(huán)境下測(cè)試
軟件編寫(xiě)完成,對(duì)其進(jìn)行測(cè)試,首先將手機(jī)體重檔案系統(tǒng)在電腦模擬環(huán)境下測(cè)試的方案,以下是對(duì)系統(tǒng)進(jìn)行測(cè)試,在Android 的菜單欄中用鼠標(biāo)點(diǎn)擊運(yùn)行按鈕,在彈出的窗口中選擇”Run As”→”Android Application”安裝該應(yīng)用程序到Android 模擬器并啟動(dòng)它,如圖4所示:
等待模擬器啟動(dòng)完成軟件的安裝,然后單擊圖表,就會(huì)顯示近期的體重變化情況,電腦模擬測(cè)試結(jié)果如圖所示:
通過(guò)數(shù)據(jù)按鈕可添加當(dāng)下的體重,和查詢歷史體重,如圖所示
通過(guò)診斷按鈕可查詢身體的狀況,如圖所示
在更多的界面里可以設(shè)置個(gè)人信息、系統(tǒng)設(shè)置等,如圖所示:
體重檔案軟件在Android手機(jī)下測(cè)試
該測(cè)試說(shuō)明開(kāi)發(fā)的體重檔案軟件可以獨(dú)立在Android設(shè)備運(yùn)行,滿足設(shè)計(jì)要求的獨(dú)立性,通過(guò)觀察其所占內(nèi)存,可以發(fā)現(xiàn),體重檔案軟件十分小,獲取的數(shù)據(jù)的準(zhǔn)確性很高,實(shí)時(shí)性;滿足設(shè)計(jì)要求。
項(xiàng)目總結(jié)
經(jīng)過(guò)這幾周的代碼及開(kāi)發(fā)文檔書(shū)寫(xiě),課程設(shè)計(jì)也隨之進(jìn)入收尾階段,體重檔案系統(tǒng)的基本功能也逐個(gè)完成了。
在這次課程設(shè)計(jì)中,經(jīng)過(guò)與隊(duì)友的協(xié)同配合,通過(guò)學(xué)習(xí)與思考并實(shí)踐,加強(qiáng)了我們的團(tuán)隊(duì)協(xié)作意識(shí),并且提高了我們的學(xué)習(xí)水平,使我們對(duì)Google Android開(kāi)發(fā)及Java等相關(guān)的技術(shù)初步了解,同時(shí),由于我們做的是移動(dòng)軟件的開(kāi)發(fā),從起初資料的查詢,讓我們?cè)谟邢薜臅r(shí)間內(nèi)豐富了對(duì)Android開(kāi)發(fā)的認(rèn)知,積累了理論上的知識(shí)。需求分析,可行性分析,再到后來(lái)的Java配置環(huán)境,書(shū)寫(xiě)代碼及其調(diào)試,讓我們作為用戶對(duì)該類系統(tǒng)的需求和軟件運(yùn)行的環(huán)境有了一定了解。將之前學(xué)過(guò)的數(shù)據(jù)庫(kù)知識(shí)跟Java技術(shù)結(jié)合在一起,理論聯(lián)系實(shí)際,在實(shí)踐中鍛煉了我們分析處理問(wèn)題的能力并激發(fā)了這方面的興趣。
這次課程設(shè)計(jì)的過(guò)程中,還讓我們鞏固了并加深了對(duì)軟件工程這門學(xué)科的認(rèn)識(shí),尤其讓我在使用工程流程的各個(gè)階段有了進(jìn)一步的了解,并相對(duì)獨(dú)立地完成各個(gè)階段的任務(wù)。通過(guò)這次設(shè)計(jì)還讓我們明白了需求分析和總體設(shè)計(jì)是系統(tǒng)真正開(kāi)發(fā)的關(guān)鍵,它規(guī)劃出系統(tǒng)的大致模塊和業(yè)務(wù)接口,流程轉(zhuǎn)換以及模塊之間的關(guān)系。如果總體設(shè)計(jì)規(guī)劃不科學(xué),將會(huì)導(dǎo)致之后的詳細(xì)設(shè)計(jì)工作出現(xiàn)冗余,目標(biāo)不明確甚至失去方向。雖然在開(kāi)發(fā)過(guò)程中受水平和時(shí)間所限,在設(shè)計(jì)中還有些欠缺或考慮不周全的地方,但這次課程設(shè)計(jì)的經(jīng)歷將對(duì)我們今后的學(xué)習(xí)和工作都將產(chǎn)生重大意義。
作業(yè)分工
xx:代碼+world+ppt制作
xxx:app設(shè)計(jì)+ppt制作
2體重檔案App設(shè)計(jì)
用戶研究
各年齡段都有用戶
體重高于正常標(biāo)準(zhǔn),并且關(guān)注自身情況想要有所改變的人群
B.體重較為正常,但是想要保持體形的人群;
C.關(guān)心自身身體情況的。
(二)主要用戶定位
用戶目標(biāo):希望能再APP上清楚的了解自己身體近期的體重變化,并能通過(guò)體重曲線圖更直觀地反映,清楚自己所需要達(dá)到的正常值。
體驗(yàn)?zāi)繕?biāo):使用戶能制定更合理適合自身的運(yùn)動(dòng)計(jì)劃,知道自身體重的近期變化情況,逐步增強(qiáng)自信。
最終目標(biāo):督促體重超標(biāo)人群完成健身目標(biāo),增強(qiáng)信心,身體更加健康。
人生目標(biāo):表達(dá)了對(duì)美好生活的憧憬與向往
概要設(shè)計(jì)
需求定義
前景綜述
使用戶對(duì)自身體重有即時(shí)的了解,更加清楚自己身體的健康狀況。采取相應(yīng)的措施改善現(xiàn)狀。
(2)人物角色的期望
對(duì)自身體重有更多的了解;
能隨時(shí)直觀、方便地,了解自身體重變化情況;
能了解當(dāng)前體重與正常值的差距;
登錄、登記時(shí)間,體重信息過(guò)程簡(jiǎn)單,管理方便。情境場(chǎng)景劇本
小K是個(gè)體重超標(biāo)的孩子,小的時(shí)候不以為意,可隨著年齡的增長(zhǎng),漸漸感受到了同學(xué)們的異樣眼觀,這讓他的自尊心受到了傷害。所以他給自己定下了一系列的減肥計(jì)劃。
一個(gè)陽(yáng)光明媚的早晨,小K像往常一樣來(lái)到了操場(chǎng)上開(kāi)始自己的晨練。他打開(kāi)了手機(jī)上的體重檔案,設(shè)置好今天的日期,以及當(dāng)前體重。然后開(kāi)始了新的一天的鍛煉。晨練結(jié)束后看了一眼體重檔案上顯示的步數(shù)以及消耗的卡路里,滿意地點(diǎn)了點(diǎn)頭,去食堂簡(jiǎn)單地吃過(guò)早飯準(zhǔn)備上課。
下午下課之后,小K和朋友約好一起去健身房健身。一套組合下來(lái)讓他大汗淋漓,洗過(guò)澡之后習(xí)慣性地去稱量一下體重,身體雖然有些虛弱感,但臉上漸漸浮現(xiàn)出了滿意的笑容,沒(méi)錯(cuò),自己體重今天又降低了一些,距離自己目標(biāo)的正常值又近了一步。并將當(dāng)前體重登記到體重檔案,看了一眼自己近期的體重變化曲線,他更加清楚自己是應(yīng)該加強(qiáng)鍛煉量還是適當(dāng)休息調(diào)理一下,畢竟物極必反太大的運(yùn)動(dòng)量也不一定是好事??粗饾u體重逐漸降低的曲線,信心也在逐步提高,他堅(jiān)信自己總有一天能變成正常身材,并且身體越來(lái)越健康。確定需求
在主頁(yè)注冊(cè)和登陸用戶賬號(hào);
在“圖表欄”更直觀反映自身體重的近期變化;
在“診斷”知道自身與正常值得差距;
在“更多”了解更多健康小常識(shí)
2.框架定義
(1)輸入法:鍵盤、觸屏點(diǎn)擊。
(2)數(shù)據(jù)與功能元素:界面中主要展現(xiàn)給用戶的數(shù)據(jù)和功能。
A.主要數(shù)據(jù)元素:
主頁(yè)——用戶名,密碼;
圖表——體重曲線:x軸日期,y軸體重;
數(shù)據(jù)——日期,體重;
診斷——當(dāng)前身體指標(biāo),診斷結(jié)果;
更多——健康小常識(shí);
B.主要功能元素:
對(duì)數(shù)據(jù)元素的操作及其在界面上的表達(dá)(比如需用控件、工具、位置等)。
滿足主頁(yè)需求的主要功能元素如下
在“用戶”輸入框中輸入用戶名;
在“密碼”輸入框中輸入密碼;
通過(guò)點(diǎn)擊“登錄”按鈕進(jìn)行登錄。
滿足體重檔案需求的主要功能元素如下:
從首頁(yè)點(diǎn)擊數(shù)據(jù)進(jìn)入數(shù)據(jù)列表界面,;
從數(shù)據(jù)列表界面點(diǎn)擊某一類別數(shù)據(jù)進(jìn)行對(duì)時(shí)間以及體重的登記;
(3)決定功能組及層次(順序)
把數(shù)據(jù)和功能元素按需求之間的關(guān)聯(lián)程度、相互之間的比較關(guān)系等,在屏幕(頁(yè)面)中利用網(wǎng)絡(luò)、標(biāo)簽頁(yè)、組框等方式進(jìn)行分組、聚合并組織好功能組之間的層次關(guān)系。
(4)勾畫(huà)大致的交互框架
根據(jù)需求、數(shù)據(jù)信息元素與功能元素歸納結(jié)果以及功能組與層次劃分,勾畫(huà)大致的交互框架草圖。
構(gòu)建關(guān)鍵線路場(chǎng)景劇本
第二天,小K依舊來(lái)到操場(chǎng)上進(jìn)行晨練,他在“更多”里了解到了一些新的健康小常識(shí),于是改進(jìn)了鍛煉方式,同時(shí)飲食方面也更加注重合理搭配了,這對(duì)他起到了事半功倍的效果??匆谎邸皥D表”里他近期體重變化情況,發(fā)現(xiàn)最近體重變化過(guò)快,他并不急于求成,知道這樣下去會(huì)對(duì)身體造成負(fù)擔(dān),這并不是件好事,于是決定先穩(wěn)固下現(xiàn)階段身體情況再開(kāi)始下個(gè)階段的鍛煉。在“診斷”里輸入自己現(xiàn)在的體重,并與正常值作對(duì)比,一系列計(jì)劃也漸漸在他腦海中成型,深深地吸了一口氣目光堅(jiān)定地看了一眼操場(chǎng)上還在晨練的人們,轉(zhuǎn)身離開(kāi)了。
3答辯PPT
源碼鏈接:https://yunjunet.cn/876902.html