軟工導論實驗報告-健康管理系統的設計與實現_第1頁
軟工導論實驗報告-健康管理系統的設計與實現_第2頁
軟工導論實驗報告-健康管理系統的設計與實現_第3頁
軟工導論實驗報告-健康管理系統的設計與實現_第4頁
軟工導論實驗報告-健康管理系統的設計與實現_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論