安卓APP源碼和設(shè)計報告——體重檔案APP(含答辯PPT)
安卓APP源碼和設(shè)計報告——體重檔案APP(含答辯PPT)
1移動媒體程序設(shè)計實現(xiàn)課程設(shè)計報告
課題名稱:體重檔案APP小組
小組成員:xxx xxx xxx
目錄
1概述31.1項目背景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)平臺62.2.1Android開發(fā)環(huán)境介紹62.2.2Android開發(fā)平臺搭建63概要設(shè)計83.1總體設(shè)計83.1.1系統(tǒng)總體結(jié)構(gòu)83.1.2子系統(tǒng)系統(tǒng)接口93.2數(shù)據(jù)庫設(shè)計93.2.1數(shù)據(jù)庫E-R圖設(shè)計93.2.2數(shù)據(jù)表設(shè)計103.3相關(guān)技術(shù)介紹103.3.1Activity ……103.3.2Intent ……113.3.3Service ……113.3.4Layout布局……123.3.5控件介紹……134函數(shù)設(shè)計154.1函數(shù)列表154.2函數(shù)調(diào)用圖1錯誤!未定義書簽。5系統(tǒng)實現(xiàn)175.1設(shè)計過程175.1.1 “圖表”界面內(nèi)功能的實現(xiàn)……175.1.2 “數(shù)據(jù)”界面內(nèi)各功能的實施……185.1.3“診斷”界面內(nèi)各功能的實現(xiàn)……205.1.4 “更多”界面內(nèi)各功能的實現(xiàn)……216使用說明226.1.1 體重檔案軟件在電腦模擬環(huán)境下測試226.1.2 體重檔案軟件在Android手機(jī)下測試247項目總結(jié)268作業(yè)具體分工
摘要:
Window 操作系統(tǒng)的誕生成就了微軟帝國,同時也造就了 PC 時代的繁榮, 然而如今,以 Android 和 iPhone 手機(jī)為代表的智能移動設(shè)備的發(fā)明與互聯(lián)網(wǎng)云技術(shù)的興起預(yù)示著移動互聯(lián)網(wǎng)時代已經(jīng)來臨。
在這個互聯(lián)網(wǎng)繁榮的時代,有一顆超新星,以它獨特性能優(yōu)勢與人性化的 UI 設(shè)計使它在短短的幾年迅速的占領(lǐng)了智能移動設(shè)備的市場份額,它就是 Google 的 Android!這也意味著 Google 在移動互聯(lián)網(wǎng)時代開始搶跑并領(lǐng)跑。
Android 是基于 Linux 平臺完全開源的手機(jī)操作系統(tǒng),同時開發(fā)語言為 Java。在本次課程設(shè)計中我們組選擇了以 Android 為平臺的手機(jī)體重記錄app來作為我的課程設(shè)計,選擇體重記錄app不僅可以提升技術(shù),同時也很實用,為人們時刻了解自身的體重和健康帶來了方便。也有利于提升自己的氣質(zhì),健康生活
關(guān)鍵詞:
移動互聯(lián)網(wǎng)時代 Android 體重記錄app 健康生活
概述
項目背景
胖是歷來已久的一種多因素引起的代謝障礙疾病。早在1948年,世界衛(wèi)生組織已將“肥胖”列入疾病名單。隨著全球經(jīng)濟(jì)的快速發(fā)展,移動互聯(lián)網(wǎng)的興起、人民生活水平的提高,加上不合理的膳食結(jié)構(gòu)、不良生活方式等出現(xiàn),肥胖已成為公共衛(wèi)生焦點問題。隨著人們對肥胖危害的認(rèn)知度提高,減重的治療方法也在歷久彌新,健康生活,控制體重已日益成為人們所重視的問題。與此同時,大眾審美觀念的趨勢也促使了人們對自身體重的高度重視。隨著移動互聯(lián)網(wǎng)和智能手機(jī)的發(fā)展和不斷進(jìn)步,當(dāng)今市場上已出現(xiàn)各種五花八門的健康記錄APP,幾乎所有人的智能手機(jī)上都會有一款檢測身體狀況的APP,這些APP可以很好的幫助人們了解自身身體狀況,及時做出調(diào)整。
系統(tǒng)目標(biāo)
根據(jù)用戶對該類軟件的使用要求,我們組制定了如下系統(tǒng)目標(biāo):
操作簡單、易于掌握、界面簡潔清爽。
方便對屏幕進(jìn)行觸摸操作。
要包含對身體狀況的評估,并記錄長時間內(nèi)的數(shù)據(jù)。
App占用內(nèi)存不應(yīng)過大。
系統(tǒng)運行穩(wěn)定,不能和手機(jī)固有的軟件沖突。
保密性好,安全可靠。
需求分析
系統(tǒng)功能分析
該系統(tǒng)具有的功能有:
可以長時間保存體重狀況
根據(jù)數(shù)據(jù)顯示出散點圖,直觀反映體重變化情況
可以查找出某一天的數(shù)據(jù)
可以根據(jù)輸入的身高、體重、性別判斷出身體狀況
給出合理飲食建議
介紹一些與身高體重相關(guān)的指標(biāo)
數(shù)據(jù)保存
建立了一個數(shù)據(jù)庫用來記錄長期的數(shù)據(jù)。如圖:

圖表功能
通過圖表直觀的反映出體重變化情況。如圖:

診斷功能
可以根據(jù)輸入的身高、體重、性別判斷出身體狀況,如圖:

系統(tǒng)平臺
Android開發(fā)環(huán)境介紹
Android平臺使用Java編程語言來開發(fā)應(yīng)用程序,而Android提供了對Java的核心支持。考慮到Java虛擬機(jī)的執(zhí)行效率和占用資源情況,Google重新設(shè)計了Java的編譯器,命名為Dalvik。Dalvik是經(jīng)過優(yōu)化的Java編譯器,允許在有限的內(nèi)存中同時運行多個虛擬機(jī)的實例,并且每一個Dalvik應(yīng)用作為一個獨立的Linux進(jìn)程執(zhí)行,獨立的進(jìn)程可以防止在虛擬機(jī)崩潰的時候所有程序都被關(guān)閉。
項目的開發(fā)在Eclipse環(huán)境中進(jìn)行,由于進(jìn)行的是Android應(yīng)用程序的開發(fā),
由以上分析可知,Android平臺的搭建需要Android SDK、Java SDK、和AVD三個軟件。
Android開發(fā)平臺搭建
①Java JDK的安裝;(選擇適合自己電腦配置的版本)
②下載完成后,開始安裝
③配置java的環(huán)境變量
(1)新建變量名為”JAVA_HOME”,變量值為JDK的安裝路徑
(2)(若變量中沒有則新建)變量名為”PATH”,在原變量名字后加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”
(3)(若變量中沒有則新建)變量名為”CLASSPATH”,變量值“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”
④確認(rèn)環(huán)境配置是否正確
⑤Androidstudio的下載,鏈接:http://tools.android-studio.org/。
⑥下載完成后開始安裝
概要設(shè)計
數(shù)據(jù)庫設(shè)計
數(shù)據(jù)庫E-R圖設(shè)計
數(shù)據(jù)庫的概念設(shè)計,即利用數(shù)據(jù)模型進(jìn)行概念數(shù)據(jù)庫的模式設(shè)計。根據(jù)體重檔案系統(tǒng)的需求,設(shè)計出以下的實體-關(guān)系模型(E-R)圖如圖。
性別
體重
身高
生日
用戶
1
計算
1
身體狀況
BMI
BMR
數(shù)據(jù)表設(shè)計
數(shù)據(jù)庫的邏輯設(shè)計,即把概念設(shè)計得到的概念數(shù)據(jù)庫模式變?yōu)檫壿嫈?shù)據(jù)模式,它依賴于DBMS。根據(jù)體重檔案系統(tǒng)的需求分析及數(shù)據(jù)庫的概念設(shè)計,建立數(shù)據(jù)庫了info_db。
建庫語句:create database info_db;
用戶信息表(usertbl)
列名數(shù)據(jù)類型是否允許為空說明birthdate是出身日期weightfloat是體重heightfloat是身高sexbool否性別
表3.5 身體狀況信息表(healtbl)
列名數(shù)據(jù)類型是否允許為空說明BMIfloat否BMI值BMRfloat是BMR值
相關(guān)技術(shù)介紹
Activity
在Android應(yīng)用程序中,一個活動Activity通常就是一個單獨的界面。每一個界面都被實現(xiàn)為一個獨立的類,并且從Activity基類中繼承而來,Activity將會顯示由空間組成的用戶接口,并對事件做出響應(yīng)。大多數(shù)的應(yīng)用都是由多個Activity顯示組成。
簡單的說,Activity代表一個用戶所能看到的界面,主要用于處理應(yīng)用程序的整體性工作,例如,監(jiān)聽系統(tǒng)事件如按鍵事件、觸摸屏事件等,為用戶顯示指定的View,啟動其他Activity等。所有應(yīng)用的Activity都繼承于android.app.Activity類,該類是Android提供的基層類,其他的Activity繼承該父類后,通過父類的方法實現(xiàn)各種功能,這種設(shè)計在其他領(lǐng)域也較為常見。
3.3.2 Intent
Android基本的設(shè)計理念是鼓勵減少組件間的耦合,因此Android提供了Intent,Intent提供了一種通用的消息系統(tǒng),它允許在你的應(yīng)用程序與其他的應(yīng)用程序間傳遞Intent來執(zhí)行動作和產(chǎn)生時間。使用Intent可以激活A(yù)ndroid應(yīng)用的三個核心組件:活動、服務(wù)和廣播接收器。
Intent可以劃分為顯示意圖和隱式意圖。顯示意圖調(diào)用Intent,SetClass方法明確制定了組件名的Intent為顯示意圖,顯示意圖明確制定了Intent應(yīng)該傳遞給那個組件,在同一個應(yīng)用內(nèi)部使用的。隱式意圖沒有明確指定組件名的Intent為隱式意圖,Android系統(tǒng)會根據(jù)隱式意圖中設(shè)置的動作(action)、類別(category)、數(shù)據(jù)(URI和數(shù)據(jù)類型)找到最合適的組件來處理這個意圖。
Intent負(fù)責(zé)對應(yīng)用中一次操作的動作、動作涉及數(shù)據(jù)和附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對應(yīng)的組件,將 Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。因此,Intent在這里起著一個媒體中介的作用,專門提供組件互相調(diào)用的相關(guān)信息,實現(xiàn)調(diào)用者與被調(diào)用者之間的結(jié)構(gòu)。
3.3.3 Service
如果把Activity比喻為前臺程序,那么Service就是后臺程序,Service的整個生命周期都只會在后臺執(zhí)行。Service跟 Activity一樣也由Intent調(diào)用,由于Service在后臺運行,所以沒有界面,用來處理耗時比較長,而且Service不是一個單獨的進(jìn)程,也不是一個單獨的線程。Service有兩種類型:
本地服務(wù)(Local Service):用于應(yīng)用程序內(nèi)部;
遠(yuǎn)程服務(wù)(Remote Sercie):用于android系統(tǒng)內(nèi)部的應(yīng)用程序之間。
前者用于實現(xiàn)應(yīng)用程序自己的一些耗時任務(wù),比如查詢升級信息,并不占用應(yīng)用程序比如Activity所屬線程,而是單開線程后臺執(zhí)行,這樣用戶體驗比較好。后者可被其他應(yīng)用程序復(fù)用,例如天氣預(yù)報服務(wù),其他應(yīng)用程序不需要再寫這樣的服務(wù),調(diào)用已有的即可。
Service的生命周期,Service有startService和bindService兩種啟動Service方法,每種方法Service的生命周期是不一樣的。
通過startService()——Service會經(jīng)歷 onCreate –> onStartCommand(),stopService的時候直接onDestroy,如果是調(diào)用者直接退出而沒有調(diào)用stopService的話,Service會一直在后臺運行,下次調(diào)用者再起來仍然可以stopService;
通過bindService()——Service只會運行onCreate()–>onBind() 這個時候調(diào)用者和Service綁定在一起 unbindService的時候onUnbind() –> onDestroyed(),調(diào)用者退出了,Srevice就會調(diào)用onUnbind() –> onDestroyed()。在這里需要注意的是Service的onCreate的方法只會被調(diào)用一次,就是你無論多少次的startService又 bindService,Service只被創(chuàng)建一次。如果先是bind了,那么start的時候就直接運行Service的onStart方法,如果先是start,那么bind的時候就直接運行onBind方法。如果你先bind上了,就stop不掉了,只能先UnbindService, 再StopService,所以是先start還是先bind行為是有區(qū)別的。
3.3.4 Layout布局
布局方式有很多種,比如線性布局(Linear Layout)、相對布局(Relative Layout)、表格布局(Table Layout)、網(wǎng)格視圖(Grid View)、標(biāo)簽布局(Tab Layout)、列表視圖(List View)和絕對布局(Absolute Layout)。本文設(shè)計主要采用相對布局(Relative Layout)、線性布局(Linear Layout),所以就相對布局和線性布局我們來做簡單地介紹。
相對布局 Relative:里面可以放多個控件,允許子元素指定它們相對于父元素或其他元素的位置(通過ID指定)。因此你可以按正確的順序?qū)R兩個元素,或者讓一個視圖在另外一個下面,居于屏幕中間,左邊的中間,等等。元素通過給定順序來繪制,因此如果第一個元素在屏幕中間,其他以它對齊的元素都會對齊到屏幕中間。同樣,因為這個順序,如果使用XML來指定這個布局,你將引用的元素(為了定位其它視圖對象)必須被列在XML文件中,在你通過引用ID從其他視圖中引用它之前。其中一些特性直接由元素支持,另外一些由它的LayoutParams成員變量支持(為所有這個屏幕中的元素子類化RelativeLayout,因為所有元素都是RelativeLayout父對象的子元素)。已定義的相對布局RelativeLayout參數(shù)是:width,height,below,alignTop,toLeft以及
padding[Bottom|Left|Right|Top]和margin[Bottom|Left|Right|Top]。注意其中一些參數(shù)明確是相對于其他元素的布局位置,所以它們的數(shù)值必須是你的相對位置元素的ID。
線性布局 LinearLayout:線性布局是所用布局中最常用的方式之一,RadioGroup, TabWidget,TableLayout,TableRow,ZoomControls類的父類。LinearLayout可以讓它的子元素垂直或水平的方式排成一行(不設(shè)置方向的時候默認(rèn)按照垂直方向排列)。LinearLayout以你為它設(shè)置的垂直或水平的屬性值,來排列所有的子元素。所有的子元素都被堆放在其它元素之后,因此一個垂直列表的每一行只會有一個元素,而不管他們有多寬,而一個水平列表將會只有一個行高(高度為最高子元素的高度加上邊框高度)。LinearLayout保持子元素之間的間隔以及互相對齊(相對一個元素的右對齊、中間對齊或者左對齊)。
LinearLayout還支持為單獨的子元素指定weight 。好處就是允許子元素可以填充屏幕上的剩余空間。這也避免了在一個大屏幕中,一串小對象擠成一堆的情況,而是允許他們放大填充空白。子元素指定一個weight 值,剩余的空間就會按這些子元素指定的weight比例分配給這些子元素。默認(rèn)的weight值為0。例如,如果有三個文本框,其中兩個指定了weight值為1,那么,這兩個文本框?qū)⒌缺壤胤糯?,并填滿剩余的空間,而第三個文本框不會放大。
控件介紹
1、TextView——文本控件,可以用它來顯示文字,就像一個標(biāo)簽一樣,對TextView是怎么設(shè)置顯示的文本,怎樣設(shè)置字體的大小,字體的顏色,字體的樣式。TextView包含以下子類:Button, CheckedTextView,Chronometer,DigitalClock,EditText。
android:id——控件的標(biāo)識符
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)容,比如文本或或多媒體。例如,我們可以在按鈕中包括了一個圖像和相關(guān)的文本,用它們在按鈕中創(chuàng)建一個吸引人的標(biāo)記圖像。不過button禁止使用的元素是圖像映射,因為它對鼠標(biāo)和鍵盤敏感的動作會干擾表單按鈕的行為。下面是Button的部分屬性:
android:id——控件的標(biāo)識符
android:layout_width——設(shè)置按鈕的寬度
android:layout_height——設(shè)置按鈕的高度
android:textSize——設(shè)置按鈕里文字的大小
android:layout_marginTop——設(shè)置按鈕的上外邊距
android:text——設(shè)置按鈕中的文字
android:visibility——設(shè)置按鈕里的元素是否可見
3、EditText——文本框,TextView的直接子類,所以EditText會繼成父類TextView的一些方法。在布局中配置EditText也需同時配置一個Button,這樣可以在代碼中監(jiān)聽Button的事件,以便獲取當(dāng)前在EditView中輸入的內(nèi)容并且顯示出來。在EditView可以限制輸入的字符串類型。下面是EditText的部分屬性:
android:id——控件的標(biāo)識符
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類可以加載各種來源的圖片,需要計算圖像的尺寸,以便它可以在其他布局中使用,并提供例如縮放和著色等各種顯示選項,在本文用來顯示城市圖片。下面是ImageView的部分屬性:
android:id——設(shè)置圖片的標(biāo)識符
android:layout_width——設(shè)置圖片的寬度
android:layout_height——設(shè)置圖片的高度
android:visibility——設(shè)置圖片是否可見性
函數(shù)設(shè)計
函數(shù)列表
返回類型方 法簡 述booleanclipRect (int left,int top,int,right,int,bottom)裁剪一個矩形區(qū)域SetStorkeWidtg(float width)設(shè)置筆刷的寬度onKeyDown(int keyCode, KeyEvent event)點擊后觸發(fā)事件intgetAudioSessionId()返回體重的會話IDgetCurrentPosition()取得當(dāng)前顯示的位置點getDuration()取得文件的長度static WeightMakercreate(Context context, int resid)從指定的源id中創(chuàng)建一個WeightMaker對象create(Context context, Uri uri)從指定的Uri中創(chuàng)建一個WeightMaker對象create(Context context, Uri uri, SurfaceHolder holder)從指定的Uri中創(chuàng)建一個WeightMaker對象,并在Surfaceview中顯示voidDrawPoint(float[]pts,int offset,int count,Paint paint)繪制多個點addSettingItem(int layout_id, String title)添加下拉選項onDateSelected()搜索前異步準(zhǔn)備release()釋放此WeightMaker對象占用的資源reset()重置WeightMaker到未初始化狀態(tài)seekTo(int msec)尋找特定日期的體重start()開始計算stop()停止計算
4.2函數(shù)調(diào)用圖

系統(tǒng)實現(xiàn)
設(shè)計開發(fā)過程
“圖表”界面內(nèi)功能的實現(xiàn)

頁面的設(shè)計
整體采用線性布局(LinearLayout ),并且有用作圖的的類函數(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ù)據(jù)的添加、刪減、和查找。
主要的代碼實現(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)各功能的實現(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;
}
}

項目總結(jié)
經(jīng)過這幾周的代碼及開發(fā)文檔書寫,課程設(shè)計也隨之進(jìn)入收尾階段,體重檔案系統(tǒng)的基本功能也逐個完成了。
在這次課程設(shè)計中,經(jīng)過與隊友的協(xié)同配合,通過學(xué)習(xí)與思考并實踐,加強了我們的團(tuán)隊協(xié)作意識,并且提高了我們的學(xué)習(xí)水平,使我們對Google Android開發(fā)及Java等相關(guān)的技術(shù)初步了解,同時,由于我們做的是移動軟件的開發(fā),從起初資料的查詢,讓我們在有限的時間內(nèi)豐富了對Android開發(fā)的認(rèn)知,積累了理論上的知識。需求分析,可行性分析,再到后來的Java配置環(huán)境,書寫代碼及其調(diào)試,讓我們作為用戶對該類系統(tǒng)的需求和軟件運行的環(huán)境有了一定了解。將之前學(xué)過的數(shù)據(jù)庫知識跟Java技術(shù)結(jié)合在一起,理論聯(lián)系實際,在實踐中鍛煉了我們分析處理問題的能力并激發(fā)了這方面的興趣。
這次課程設(shè)計的過程中,還讓我們鞏固了并加深了對軟件工程這門學(xué)科的認(rèn)識,尤其讓我在使用工程流程的各個階段有了進(jìn)一步的了解,并相對獨立地完成各個階段的任務(wù)。通過這次設(shè)計還讓我們明白了需求分析和總體設(shè)計是系統(tǒng)真正開發(fā)的關(guān)鍵,它規(guī)劃出系統(tǒng)的大致模塊和業(yè)務(wù)接口,流程轉(zhuǎn)換以及模塊之間的關(guān)系。如果總體設(shè)計規(guī)劃不科學(xué),將會導(dǎo)致之后的詳細(xì)設(shè)計工作出現(xiàn)冗余,目標(biāo)不明確甚至失去方向。雖然在開發(fā)過程中受水平和時間所限,在設(shè)計中還有些欠缺或考慮不周全的地方,但這次課程設(shè)計的經(jīng)歷將對我們今后的學(xué)習(xí)和工作都將產(chǎn)生重大意義。
2體重檔案App設(shè)計
用戶研究
各年齡段都有用戶
體重高于正常標(biāo)準(zhǔn),并且自身情況想要有所改變的人群
B.體重較為正常,但是想要保持體形的人群;
C.關(guān)心自身身體情況的。
(二)主要用戶定位
用戶目標(biāo):希望能再APP上清楚的了解自己身體近期的體重變化,并能通過體重曲線圖更直觀地反映,清楚自己所需要達(dá)到的正常值。
體驗?zāi)繕?biāo):使用戶能制定更合理適合自身的運動計劃,知道自身體重的近期變化情況,逐步增強自信。
最終目標(biāo):督促體重超標(biāo)人群完成健身目標(biāo),增強信心,身體更加健康。
人生目標(biāo):表達(dá)了對美好生活的憧憬與向往
概要設(shè)計
需求定義
前景綜述
使用戶對自身體重有即時的了解,更加清楚自己身體的健康狀況。采取相應(yīng)的措施改善現(xiàn)狀。
(2)人物角色的期望
對自身體重有更多的了解;
能隨時直觀、方便地,了解自身體重變化情況;
能了解當(dāng)前體重與正常值的差距;
登錄、登記時間,體重信息過程簡單,管理方便。情境場景劇本
小K是個體重超標(biāo)的孩子,小的時候不以為意,可隨著年齡的增長,漸漸感受到了同學(xué)們的異樣眼觀,這讓他的自尊心受到了傷害。所以他給自己定下了一系列的減肥計劃。
一個陽光明媚的早晨,小K像往常一樣來到了操場上開始自己的晨練。他打開了手機(jī)上的體重檔案,設(shè)置好今天的日期,以及當(dāng)前體重。然后開始了新的一天的鍛煉。晨練結(jié)束后看了一眼體重檔案上顯示的步數(shù)以及消耗的卡路里,滿意地點了點頭,去食堂簡單地吃過早飯準(zhǔn)備上課。
下午下課之后,小K和朋友約好一起去健身房健身。一套組合下來讓他大汗淋漓,洗過澡之后習(xí)慣性地去稱量一下體重,身體雖然有些虛弱感,但臉上漸漸浮現(xiàn)出了滿意的笑容,沒錯,自己體重今天又降低了一些,距離自己目標(biāo)的正常值又近了一步。并將當(dāng)前體重登記到體重檔案,看了一眼自己近期的體重變化曲線,他更加清楚自己是應(yīng)該加強鍛煉量還是適當(dāng)休息調(diào)理一下,畢竟物極必反太大的運動量也不一定是好事??粗饾u體重逐漸降低的曲線,信心也在逐步提高,他堅信自己總有一天能變成正常身材,并且身體越來越健康。確定需求
在主頁注冊和登陸用戶賬號;
在“圖表欄”更直觀反映自身體重的近期變化;
在“診斷”知道自身與正常值得差距;
在“更多”了解更多健康小常識
2.框架定義
(1)輸入法:鍵盤、觸屏點擊。
(2)數(shù)據(jù)與功能元素:界面中主要展現(xiàn)給用戶的數(shù)據(jù)和功能。
A.主要數(shù)據(jù)元素:
主頁——用戶名,密碼;
圖表——體重曲線:x軸日期,y軸體重;
數(shù)據(jù)——日期,體重;
診斷——當(dāng)前身體指標(biāo),診斷結(jié)果;
更多——健康小常識;
B.主要功能元素:
對數(shù)據(jù)元素的操作及其在界面上的表達(dá)(比如需用控件、工具、位置等)。
滿足主頁需求的主要功能元素如下
在“用戶”輸入框中輸入用戶名;
在“密碼”輸入框中輸入密碼;
通過點擊“登錄”按鈕進(jìn)行登錄。
滿足體重檔案需求的主要功能元素如下:
從首頁點擊數(shù)據(jù)進(jìn)入數(shù)據(jù)列表界面,;
從數(shù)據(jù)列表界面點擊某一類別數(shù)據(jù)進(jìn)行對時間以及體重的登記;
(3)決定功能組及層次(順序)
把數(shù)據(jù)和功能元素按需求之間的關(guān)聯(lián)程度、相互之間的比較關(guān)系等,在屏幕(頁面)中利用網(wǎng)絡(luò)、標(biāo)簽頁、組框等方式進(jìn)行分組、聚合并組織好功能組之間的層次關(guān)系。
(4)勾畫大致的交互框架
根據(jù)需求、數(shù)據(jù)信息元素與功能元素歸納結(jié)果以及功能組與層次劃分,勾畫大致的交互框架草圖。
構(gòu)建關(guān)鍵線路場景劇本
第二天,小K依舊來到操場上進(jìn)行晨練,他在“更多”里了解到了一些新的健康小常識,于是改進(jìn)了鍛煉方式,同時飲食方面也更加注重合理搭配了,這對他起到了事半功倍的效果??匆谎邸皥D表”里他近期體重變化情況,發(fā)現(xiàn)最近體重變化過快,他并不急于求成,知道這樣下去會對身體造成負(fù)擔(dān),這并不是件好事,于是決定先穩(wěn)固下現(xiàn)階段身體情況再開始下個階段的鍛煉。在“診斷”里輸入自己現(xiàn)在的體重,并與正常值作對比,一系列計劃也漸漸在他腦海中成型,深深地吸了一口氣目光堅定地看了一眼操場上還在晨練的人們,轉(zhuǎn)身離開了。































