軟工導(dǎo)論實驗報告-健康管理系統(tǒng)的設(shè)計與實現(xiàn)_第1頁
軟工導(dǎo)論實驗報告-健康管理系統(tǒng)的設(shè)計與實現(xiàn)_第2頁
軟工導(dǎo)論實驗報告-健康管理系統(tǒng)的設(shè)計與實現(xiàn)_第3頁
軟工導(dǎo)論實驗報告-健康管理系統(tǒng)的設(shè)計與實現(xiàn)_第4頁
軟工導(dǎo)論實驗報告-健康管理系統(tǒng)的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

西安交通大學(xué)軟件工程導(dǎo)論作業(yè)題目:健康管理系統(tǒng)的設(shè)計與實現(xiàn)軟件工程jdfohewk提交日期:2016/11/13目錄一、需求分析 41.項目目標(biāo)概述 42.問題初始分析 42.1場景描述 42.2初始功能提取 43.系統(tǒng)功能分析建模論述 53.1系統(tǒng)流程圖 53.2功能模型(數(shù)據(jù)流圖) 63.3數(shù)據(jù)模型(實體-關(guān)系圖) 63.4行為模型(狀態(tài)轉(zhuǎn)換圖) 73.5層次方框圖(描繪產(chǎn)品的數(shù)據(jù)結(jié)構(gòu)) 74.系統(tǒng)性能需求 84.1時間要求 84.2空間要求 85.系統(tǒng)界面與接口需求 85.1界面需求 85.2接口需求 96.可行性分析 9二、系統(tǒng)設(shè)計 91.引言 91.1目的 91.2命名規(guī)則 102.系統(tǒng)設(shè)計 102.1方案設(shè)計 102.2軟件結(jié)構(gòu)設(shè)計 102.3數(shù)據(jù)庫設(shè)計 112.4詳細設(shè)計 11三、系統(tǒng)實現(xiàn) 151、 編程環(huán)境概述 152、 程序源代碼 152.1三餐安排功能模塊源代碼 152.1登錄功能模塊源代碼 22四、系統(tǒng)測試 251.概述 252.測試 252.1單元測試 252.2測試報告 253.系統(tǒng)主要運行界面 274.系統(tǒng)測試結(jié)論 29五、實驗總結(jié) 29參考文獻: 29一、需求分析1.項目目標(biāo)概述該系統(tǒng)旨在為長期工作在電腦前的用戶提供日常的作息安排,進而改善用戶的作息,從而將生物鐘調(diào)整至最佳狀態(tài),更好地迎接每一天的工作。2.問題初始分析2.1場景描述目前越來越多的白領(lǐng)型工作人員由于缺乏健康管理意識,身體素質(zhì)大幅度下降,以致于出現(xiàn)各種健康問題。合理的安排每天的日常行為,可以很有效地改善身體的各種調(diào)節(jié),從而能夠正常地作息,用最好的狀態(tài)去完成每天的工作。因此,開發(fā)一種能夠幫助長期工作在電腦前的朋友進行自我健康管理的軟件是很有必要的。2.2初始功能提取本系統(tǒng)意圖實現(xiàn)以下功能:初步判斷用戶的基本身體狀況,即根據(jù)身高、體重、年齡、性別來判斷。幫助用戶合理地安排一日三餐。幫助用戶合理地安排每天的運動,以達到健身的功效。實時提醒用戶進行身體放松。待完善。3.系統(tǒng)功能分析建模論述3.1系統(tǒng)流程圖開始由用戶輸入個人信息,經(jīng)過處理保存到個人信息數(shù)據(jù)庫,再分別調(diào)用三餐安排和運動安排程序。由運動安排程序生成并顯示運動安排,三餐生成程序調(diào)用數(shù)據(jù)庫中的內(nèi)容,顯示三餐安排。3.2功能模型(數(shù)據(jù)流圖)3.3數(shù)據(jù)模型(實體-關(guān)系圖)每一個用戶都擁有一個賬戶,包含賬號和密碼,而用戶本身信息即他的身體信息,包含年齡、性別、身高、體重。多個用戶可以同時使用一個系統(tǒng)。3.4行為模型(狀態(tài)轉(zhuǎn)換圖)打開系統(tǒng),最初處于登錄界面(即閑置),登錄成功后,進入主界面。如果用戶第一次使用,會提示用戶進行信息登記。當(dāng)?shù)竭_特定時間時,會提示當(dāng)前應(yīng)做的事。當(dāng)用戶修改了他的信息之后,系統(tǒng)會實時的進行相應(yīng)調(diào)整。3.5層次方框圖(描繪產(chǎn)品的數(shù)據(jù)結(jié)構(gòu))4.系統(tǒng)性能需求4.1時間要求(1)響應(yīng)時間:150ms。(2)數(shù)據(jù)庫更新時間:2~4s。4.2空間要求(1)支持的終端數(shù):1。(2)支持的并行操作的使用者數(shù):3-10,根據(jù)計算機內(nèi)存和CPU決定。(3)處理的文件和記錄數(shù):數(shù)據(jù)庫文件*1,記錄根據(jù)操作決定。(4)根據(jù)軟件提示進行輸入,否則會提示出錯5.系統(tǒng)界面與接口需求5.1界面需求界面的原則要求,如方便、簡潔、美觀、一致等。整個系統(tǒng)的界面風(fēng)格定義,某些功能模塊的特殊的界面要求。(1)輸入設(shè)備:鍵盤、鼠標(biāo);(2)輸出設(shè)備:顯示器;(3)顯示風(fēng)格:對話框;(4)顯示方式:1024*768;(5)輸出格式:對話框中的字符集。5.2接口需求(1)用戶接口采用對話框式的界面,結(jié)合菜單設(shè)計,并且采用智能提示,給用戶提供最大的便利和最好的操作可行性。支持用鍵盤和鼠標(biāo)同時操作。(2)軟件接口運行環(huán)境:windowsxp/windows7/windows8數(shù)據(jù)庫連接:access2007、ADO動態(tài)鏈接庫6.可行性分析1、技術(shù)可行性目前能夠通過VC++6.0進行系統(tǒng)的程序編寫;能夠通過ADO方法連接ACCESS數(shù)據(jù)庫,并且對其進行操作(增刪改查);2、操作可行性系統(tǒng)能夠提示第一次使用本系統(tǒng)的用戶如何操作,并且界面簡單大方,因此具有很好的操作可行性。3、經(jīng)濟可行性開發(fā)成本忽略不計。二、系統(tǒng)設(shè)計1.引言本章對該文檔的目的、功能范圍、術(shù)語、相關(guān)文檔、參考資料、版本更新進行說明。1.1目的本文檔的目旨在推動軟件工程的規(guī)范化,使設(shè)計人員遵循統(tǒng)一的概要設(shè)計書寫規(guī)范,節(jié)省制作文檔的時間,降低系統(tǒng)實現(xiàn)的風(fēng)險,做到系統(tǒng)設(shè)計資料的規(guī)范性與全面性,以利于系統(tǒng)的實現(xiàn)、測試、維護、版本升級等。1.2命名規(guī)則變量對象命名規(guī)則:根據(jù)變量的實際意義命名,如姓名:name;年齡:age;身高:height;體重:weight。數(shù)據(jù)庫對象命名規(guī)則:根據(jù)字段的實際意義命名,但不能使用數(shù)據(jù)庫的保留關(guān)鍵字(否則會出錯)。如賬號:username;密碼:password1(防止使用保留關(guān)鍵字)。2.系統(tǒng)設(shè)計2.1方案設(shè)計選擇方案1.2.2軟件結(jié)構(gòu)設(shè)計層次圖:本系統(tǒng)包含兩個主要模塊,用戶管理模塊和健康管理模塊。用戶管理模塊包含賬戶管理和個人信息管理,賬戶管理包含三個功能:注冊、登錄、改密碼;個人信息管理提供一個功能:更改個人信息。健康管理模塊提供三個功能:安排三餐、安排運動、實時提醒。2.3數(shù)據(jù)庫設(shè)計1、數(shù)據(jù)庫文件:一個文件:user.mdb;2、表:用戶信息表一張、三餐安排表若干、運動安排表一張、日程安排表若干;3、用戶信息表包括7個字段:賬號、密碼、姓名、性別、年齡、身高、體重;4、三餐安排表各包含3個字段:早餐、午餐、晚餐;5、運動安排表各包含個字段:身高、體重、年齡、性別、運動消耗卡路里量。2.4詳細設(shè)計各個功能模塊間傳遞用戶賬號的方式:建立臨時的TXT文件,在登錄成功時保存賬號,進而在調(diào)用其他模塊時尋找到賬號。三、系統(tǒng)實現(xiàn)編程環(huán)境概述編程環(huán)境:VC++6.0(MFC程序)數(shù)據(jù)庫:access2007(連接方法:ADO)操作系統(tǒng):windows7程序源代碼2.1三餐安排功能模塊源代碼1.描述1.1代碼功能描述:實時更新對用戶安排的三餐信息以及BMI指數(shù)。1.2代碼描述:(自然語言)開始;讀取用戶賬號;打開數(shù)據(jù)庫;讀取數(shù)據(jù)庫中用戶信息表的內(nèi)容;讀取所有的用戶信息;If(用戶第一次使用本軟件)打開用戶信息更改界面;If(身高或體重數(shù)據(jù)為空)返回,結(jié)束;根據(jù)身高體重計算BMI指數(shù);在主界面顯示BMI指數(shù);根據(jù)BMI指數(shù)打開對應(yīng)的三餐安排數(shù)據(jù)庫表;讀取安排信息,并且寫入對應(yīng)的列表控件中;關(guān)閉數(shù)據(jù)庫和其他文件;結(jié)束。2.代碼(共154行,包括必要的空行) voidCMyDlg::OnTimer(UINTnIDEvent){ CStringfilename="D:\\user.txt"; CStdioFilefile; file.Open(filename,CFile::modeRead);//用只讀方式打開臨時TXT文件,以便讀取user的ID CStringuser; file.ReadString(user); _ConnectionPtrm_pConnection; _variant_tRecordsAffected; _RecordsetPtrm_pRecordset;//設(shè)置操作數(shù)據(jù)庫的ADO對象指針 //下面是打開數(shù)據(jù)庫 try {m_pConnection.CreateInstance(__uuidof(Connection));m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=user.mdb","","",adModeUnknown);} catch(_com_errore){CStringerrormessage;errormessage.Format("打開數(shù)據(jù)庫失敗!\r錯誤信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);return;} //下面讀取數(shù)據(jù)庫(用戶信息)中的內(nèi)容 try { m_pRecordset.CreateInstance("ADODB.Recordset"); charstrcmd[1024]; sprintf(strcmd,"select*fromusertable"); m_pRecordset=m_pConnection->Execute(strcmd,&RecordsAffected,adCmdText); //將usertable表里面的所有數(shù)據(jù)讀取到recordset這個東西里面,以后就直接用這個東西操作表了 } catch(_com_errore){CStringerrormessage;errormessage.Format("錯誤!\r錯誤信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);return;} //下面尋找對應(yīng)的用戶信息 _variant_ttheuser,theheight,theweight,theage,thename,thesex; CStringtuser,theight,tweight,tname,tage,tsex; while(!m_pRecordset->adoEOF)//用while循環(huán)直到把這個表讀完,即做一次遍歷 { theuser=m_pRecordset->GetCollect("username"); theheight=m_pRecordset->GetCollect("身高(厘米)"); theweight=m_pRecordset->GetCollect("體重(斤)"); theage=m_pRecordset->GetCollect("年齡"); thesex=m_pRecordset->GetCollect("性別");//先用_variant_t這個變量讀取數(shù)據(jù)庫中的字符串 thename=m_pRecordset->GetCollect("姓名"); if(theuser.vt==VT_NULL)tuser=""; elsetuser=theuser.bstrVal; if(thename.vt==VT_NULL)tname=""; elsetname=thename.bstrVal; if(theheight.vt==VT_NULL)theight=""; elsetheight=theheight.bstrVal; if(theweight.vt==VT_NULL)tweight=""; elsetweight=theweight.bstrVal; if(thesex.vt==VT_NULL)tsex=""; elsetsex=thesex.bstrVal; if(theage.vt==VT_NULL)tage=""; elsetage=theage.bstrVal;//然后把_variant_t類型強制轉(zhuǎn)換為CString類 if(tuser==user)break;//退出循環(huán) m_pRecordset->MoveNext();//如果當(dāng)前所指的用戶名不對,就指向下一個,直到最后一個 } if(tweight==""&&theight==""&&tage==""&&tsex==""&&tname=="") { KillTimer(1); MessageBox(""); file.Close(); CInformationdlg; dlg.DoModal(); SetTimer(1,150,NULL); file.Open(filename,CFile::modeRead); file.ReadString(user); } if(tweight==""||theight=="")return; intheight,weight; height=_ttoi(theight); weight=_ttoi(tweight); //BMI指數(shù)單位:kg/m^2 bmi=((float)weight/2)/pow((float)height/100,2); CStringstr; str.Format("%f",bmi); SetDlgItemText(IDC_EDIT2,str); //把數(shù)據(jù)庫中的三餐表格插入表格中(按三個等級分) //先讀取數(shù)據(jù)庫(安排一日三餐的表格)中的內(nèi)容 try { m_pRecordset.CreateInstance("ADODB.Recordset"); charstrcmd[1024]; if(bmi<18.5)sprintf(strcmd,"select*frommealsforthin"); if(bmi<22.9&&bmi>18.5)sprintf(strcmd,"select*frommealsfornormal"); if(bmi>22.9)sprintf(strcmd,"select*frommealsforfat"); m_pRecordset=m_pConnection->Execute(strcmd,&RecordsAffected,adCmdText); //將usertable表里面的所有數(shù)據(jù)讀取到recordset這個東西里面,以后就直接用這個東西操作表了 } catch(_com_errore){CStringerrormessage;errormessage.Format("錯誤!\r錯誤信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);return;} //下面把三餐安排寫入列表控件 intn=0; m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { n++;//記錄的總數(shù),用n表示 m_pRecordset->MoveNext(); }//記錄表的總記錄數(shù),為以后的添加功能做準(zhǔn)備 _variant_tthebreakfast,thenoon,thedinner; CStringtbreakfast,tnoon,tdinner; m_pRecordset->MoveFirst(); intindex=0; m_list.DeleteAllItems(); while(!m_pRecordset->adoEOF) { thebreakfast=m_pRecordset->GetCollect("breakfast"); thenoon=m_pRecordset->GetCollect("noon"); thedinner=m_pRecordset->GetCollect("dinner"); if(thebreakfast.vt==VT_NULL)tbreakfast=""; elsetbreakfast=thebreakfast.bstrVal; if(thenoon.vt==VT_NULL)tnoon=""; elsetnoon=thenoon.bstrVal; tdinner=thedinner.bstrVal; if(thedinner.vt==VT_NULL)tdinner=""; elsetdinner=thedinner.bstrVal; m_list.InsertItem(index,tbreakfast); m_list.SetItemText(index,0,tbreakfast); m_list.SetItemText(index,1,tnoon); m_list.SetItemText(index,2,tdinner); index++; m_pRecordset->MoveNext(); }//用這個循環(huán)往列表中寫入數(shù)據(jù) file.Close();}2.1登錄功能模塊源代碼1.描述1.1代碼功能描述:通過訪問數(shù)據(jù)庫中的用戶信息進行登錄。1.2代碼描述(自然語言)開始;讀取輸入的賬號和密碼;打開賬戶信息數(shù)據(jù)庫;讀取數(shù)據(jù)庫中所有的賬號和對應(yīng)的密碼;在所有賬號中尋找用戶輸入的賬號;If(沒有找到匹配的賬號)提示,返回;If(密碼正確)提示成功,打開主程序,將賬號寫入user.txt用于后續(xù)操作;Else提示密碼錯誤,返回;關(guān)閉數(shù)據(jù)庫;結(jié)束。2.代碼(78行,無空行)voidCLogin::OnOK(){ CStringuser; CStringpassword; GetDlgItemText(IDC_user,user); GetDlgItemText(IDC_password,password); _ConnectionPtrm_pConnection; _variant_tRecordsAffected; _RecordsetPtrm_pRecordset;//設(shè)置操作數(shù)據(jù)庫的ADO對象指針 //打開數(shù)據(jù)庫 try {m_pConnection.CreateInstance(__uuidof(Connection));m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=user.mdb","","",adModeUnknown); //這兩行代碼用來打開數(shù)據(jù)庫,具體含義不懂,但是文件名要寫對,打開方式不用管}catch(_com_errore){CStringerrormessage;errormessage.Format("打開數(shù)據(jù)庫失敗!\r錯誤信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);return;//如果出錯則返回} //讀取數(shù)據(jù)庫的內(nèi)容 try { m_pRecordset.CreateInstance("ADODB.Recordset"); charstrcmd[1024]; sprintf(strcmd,"select*fromusertable"); m_pRecordset=m_pConnection->Execute(strcmd,&RecordsAffected,adCmdText); //將usertable表里面的所有數(shù)據(jù)讀取到recordset這個東西里面,以后就直接用這個東西操作表了 } catch(_com_errore){CStringerrormessage;errormessage.Format("錯誤!\r錯誤信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);return;} _variant_ttheuser,thepassword; CStringtuser,tpassword; while(!m_pRecordset->adoEOF)//用while循環(huán)直到把這個表讀完,即做一次遍歷 { theuser=m_pRecordset->GetCollect("username"); thepassword=m_pRecordset->GetCollect("password1"); tuser=(TCHAR*)(_bstr_t)theuser; tpassword=(TCHAR*)(_bstr_t)thepassword; if(tuser==user)break; //如果找到用戶名,則退出循環(huán) m_pRecordset->MoveNext();//如果當(dāng)前所指的用戶名不對,就指向下一個,直到最后一個 } if(tuser!=user){MessageBox("此用戶不存在!","提示");return;} if(tpassword==password)//如果密碼正確就打開程序 { CStringfilename="D:\\user.txt"; CStdioFilefile; file.Open(filename,CFile::modeCreate|CFile::modeWrite);//創(chuàng)建TXT文件 file.SeekToBegin(); file.WriteString(user);//把用戶名寫入txt//如果沒有找到輸入的用戶名,則說明用戶還沒有注冊,或者用戶名輸錯了 file.Close();//必須關(guān)閉,不然沒有保存,會出現(xiàn)致命錯誤! MessageBox("successed"); CDialog::OnOK(); CMyDlgdlg; dlg.DoModal(); } else { MessageBox("密碼錯誤!","提示");return;}m_pRecordset->Close();m_pRecordset=NULL;m_pConnection->Close();m_pConnection=NULL;}四、系統(tǒng)測試1.概述本次測試將對兩個功能模塊進行詳細測試,分別是修改密碼模塊和安排三餐模塊。2.測試2.1單元測試表5-1測試模塊清單編號模塊中文名模塊功能簡述接口簡述M1-3修改密碼提供修改密碼的功能對話框M2-1安排三餐為用戶安排三餐對話框2.2測試報告模塊一程序流程如下圖環(huán)形復(fù)雜度:3測試用例設(shè)計(已有用戶名為admin,密碼為123456的賬戶)輸入數(shù)據(jù)預(yù)期輸出說明測試用例1舊密碼:123,新密碼:jdfohewk,確認密碼:jdfohewk提示:密碼錯誤舊密碼為123456,輸入錯誤測試用例2舊密碼:123456,新密碼:jdfohewk,確認密碼:jdfohewk提示:修改成功舊密碼正確,新密碼=確認密碼測試用例3舊密碼:123456,新密碼:jdfohewk,確認密碼:123提示:修改失敗,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論