




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
西安交通大學(xué)軟件工程導(dǎo)論作業(yè)題目:健康管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)軟件工程jdfohewk提交日期:2016/11/13目錄一、需求分析 41.項(xiàng)目目標(biāo)概述 42.問題初始分析 42.1場景描述 42.2初始功能提取 43.系統(tǒng)功能分析建模論述 53.1系統(tǒng)流程圖 53.2功能模型(數(shù)據(jù)流圖) 63.3數(shù)據(jù)模型(實(shí)體-關(guān)系圖) 63.4行為模型(狀態(tài)轉(zhuǎn)換圖) 73.5層次方框圖(描繪產(chǎn)品的數(shù)據(jù)結(jié)構(gòu)) 74.系統(tǒng)性能需求 84.1時(shí)間要求 84.2空間要求 85.系統(tǒng)界面與接口需求 85.1界面需求 85.2接口需求 96.可行性分析 9二、系統(tǒng)設(shè)計(jì) 91.引言 91.1目的 91.2命名規(guī)則 102.系統(tǒng)設(shè)計(jì) 102.1方案設(shè)計(jì) 102.2軟件結(jié)構(gòu)設(shè)計(jì) 102.3數(shù)據(jù)庫設(shè)計(jì) 112.4詳細(xì)設(shè)計(jì) 11三、系統(tǒng)實(shí)現(xiàn) 151、 編程環(huán)境概述 152、 程序源代碼 152.1三餐安排功能模塊源代碼 152.1登錄功能模塊源代碼 22四、系統(tǒng)測試 251.概述 252.測試 252.1單元測試 252.2測試報(bào)告 253.系統(tǒng)主要運(yùn)行界面 274.系統(tǒng)測試結(jié)論 29五、實(shí)驗(yàn)總結(jié) 29參考文獻(xiàn): 29一、需求分析1.項(xiàng)目目標(biāo)概述該系統(tǒng)旨在為長期工作在電腦前的用戶提供日常的作息安排,進(jìn)而改善用戶的作息,從而將生物鐘調(diào)整至最佳狀態(tài),更好地迎接每一天的工作。2.問題初始分析2.1場景描述目前越來越多的白領(lǐng)型工作人員由于缺乏健康管理意識(shí),身體素質(zhì)大幅度下降,以致于出現(xiàn)各種健康問題。合理的安排每天的日常行為,可以很有效地改善身體的各種調(diào)節(jié),從而能夠正常地作息,用最好的狀態(tài)去完成每天的工作。因此,開發(fā)一種能夠幫助長期工作在電腦前的朋友進(jìn)行自我健康管理的軟件是很有必要的。2.2初始功能提取本系統(tǒng)意圖實(shí)現(xiàn)以下功能:初步判斷用戶的基本身體狀況,即根據(jù)身高、體重、年齡、性別來判斷。幫助用戶合理地安排一日三餐。幫助用戶合理地安排每天的運(yùn)動(dòng),以達(dá)到健身的功效。實(shí)時(shí)提醒用戶進(jìn)行身體放松。待完善。3.系統(tǒng)功能分析建模論述3.1系統(tǒng)流程圖開始由用戶輸入個(gè)人信息,經(jīng)過處理保存到個(gè)人信息數(shù)據(jù)庫,再分別調(diào)用三餐安排和運(yùn)動(dòng)安排程序。由運(yùn)動(dòng)安排程序生成并顯示運(yùn)動(dòng)安排,三餐生成程序調(diào)用數(shù)據(jù)庫中的內(nèi)容,顯示三餐安排。3.2功能模型(數(shù)據(jù)流圖)3.3數(shù)據(jù)模型(實(shí)體-關(guān)系圖)每一個(gè)用戶都擁有一個(gè)賬戶,包含賬號(hào)和密碼,而用戶本身信息即他的身體信息,包含年齡、性別、身高、體重。多個(gè)用戶可以同時(shí)使用一個(gè)系統(tǒng)。3.4行為模型(狀態(tài)轉(zhuǎn)換圖)打開系統(tǒng),最初處于登錄界面(即閑置),登錄成功后,進(jìn)入主界面。如果用戶第一次使用,會(huì)提示用戶進(jìn)行信息登記。當(dāng)?shù)竭_(dá)特定時(shí)間時(shí),會(huì)提示當(dāng)前應(yīng)做的事。當(dāng)用戶修改了他的信息之后,系統(tǒng)會(huì)實(shí)時(shí)的進(jìn)行相應(yīng)調(diào)整。3.5層次方框圖(描繪產(chǎn)品的數(shù)據(jù)結(jié)構(gòu))4.系統(tǒng)性能需求4.1時(shí)間要求(1)響應(yīng)時(shí)間:150ms。(2)數(shù)據(jù)庫更新時(shí)間:2~4s。4.2空間要求(1)支持的終端數(shù):1。(2)支持的并行操作的使用者數(shù):3-10,根據(jù)計(jì)算機(jī)內(nèi)存和CPU決定。(3)處理的文件和記錄數(shù):數(shù)據(jù)庫文件*1,記錄根據(jù)操作決定。(4)根據(jù)軟件提示進(jìn)行輸入,否則會(huì)提示出錯(cuò)5.系統(tǒng)界面與接口需求5.1界面需求界面的原則要求,如方便、簡潔、美觀、一致等。整個(gè)系統(tǒng)的界面風(fēng)格定義,某些功能模塊的特殊的界面要求。(1)輸入設(shè)備:鍵盤、鼠標(biāo);(2)輸出設(shè)備:顯示器;(3)顯示風(fēng)格:對(duì)話框;(4)顯示方式:1024*768;(5)輸出格式:對(duì)話框中的字符集。5.2接口需求(1)用戶接口采用對(duì)話框式的界面,結(jié)合菜單設(shè)計(jì),并且采用智能提示,給用戶提供最大的便利和最好的操作可行性。支持用鍵盤和鼠標(biāo)同時(shí)操作。(2)軟件接口運(yùn)行環(huán)境:windowsxp/windows7/windows8數(shù)據(jù)庫連接:access2007、ADO動(dòng)態(tài)鏈接庫6.可行性分析1、技術(shù)可行性目前能夠通過VC++6.0進(jìn)行系統(tǒng)的程序編寫;能夠通過ADO方法連接ACCESS數(shù)據(jù)庫,并且對(duì)其進(jìn)行操作(增刪改查);2、操作可行性系統(tǒng)能夠提示第一次使用本系統(tǒng)的用戶如何操作,并且界面簡單大方,因此具有很好的操作可行性。3、經(jīng)濟(jì)可行性開發(fā)成本忽略不計(jì)。二、系統(tǒng)設(shè)計(jì)1.引言本章對(duì)該文檔的目的、功能范圍、術(shù)語、相關(guān)文檔、參考資料、版本更新進(jìn)行說明。1.1目的本文檔的目旨在推動(dòng)軟件工程的規(guī)范化,使設(shè)計(jì)人員遵循統(tǒng)一的概要設(shè)計(jì)書寫規(guī)范,節(jié)省制作文檔的時(shí)間,降低系統(tǒng)實(shí)現(xiàn)的風(fēng)險(xiǎn),做到系統(tǒng)設(shè)計(jì)資料的規(guī)范性與全面性,以利于系統(tǒng)的實(shí)現(xiàn)、測試、維護(hù)、版本升級(jí)等。1.2命名規(guī)則變量對(duì)象命名規(guī)則:根據(jù)變量的實(shí)際意義命名,如姓名:name;年齡:age;身高:height;體重:weight。數(shù)據(jù)庫對(duì)象命名規(guī)則:根據(jù)字段的實(shí)際意義命名,但不能使用數(shù)據(jù)庫的保留關(guān)鍵字(否則會(huì)出錯(cuò))。如賬號(hào):username;密碼:password1(防止使用保留關(guān)鍵字)。2.系統(tǒng)設(shè)計(jì)2.1方案設(shè)計(jì)選擇方案1.2.2軟件結(jié)構(gòu)設(shè)計(jì)層次圖:本系統(tǒng)包含兩個(gè)主要模塊,用戶管理模塊和健康管理模塊。用戶管理模塊包含賬戶管理和個(gè)人信息管理,賬戶管理包含三個(gè)功能:注冊(cè)、登錄、改密碼;個(gè)人信息管理提供一個(gè)功能:更改個(gè)人信息。健康管理模塊提供三個(gè)功能:安排三餐、安排運(yùn)動(dòng)、實(shí)時(shí)提醒。2.3數(shù)據(jù)庫設(shè)計(jì)1、數(shù)據(jù)庫文件:一個(gè)文件:user.mdb;2、表:用戶信息表一張、三餐安排表若干、運(yùn)動(dòng)安排表一張、日程安排表若干;3、用戶信息表包括7個(gè)字段:賬號(hào)、密碼、姓名、性別、年齡、身高、體重;4、三餐安排表各包含3個(gè)字段:早餐、午餐、晚餐;5、運(yùn)動(dòng)安排表各包含個(gè)字段:身高、體重、年齡、性別、運(yùn)動(dòng)消耗卡路里量。2.4詳細(xì)設(shè)計(jì)各個(gè)功能模塊間傳遞用戶賬號(hào)的方式:建立臨時(shí)的TXT文件,在登錄成功時(shí)保存賬號(hào),進(jìn)而在調(diào)用其他模塊時(shí)尋找到賬號(hào)。三、系統(tǒng)實(shí)現(xiàn)編程環(huán)境概述編程環(huán)境:VC++6.0(MFC程序)數(shù)據(jù)庫:access2007(連接方法:ADO)操作系統(tǒng):windows7程序源代碼2.1三餐安排功能模塊源代碼1.描述1.1代碼功能描述:實(shí)時(shí)更新對(duì)用戶安排的三餐信息以及BMI指數(shù)。1.2代碼描述:(自然語言)開始;讀取用戶賬號(hào);打開數(shù)據(jù)庫;讀取數(shù)據(jù)庫中用戶信息表的內(nèi)容;讀取所有的用戶信息;If(用戶第一次使用本軟件)打開用戶信息更改界面;If(身高或體重?cái)?shù)據(jù)為空)返回,結(jié)束;根據(jù)身高體重計(jì)算BMI指數(shù);在主界面顯示BMI指數(shù);根據(jù)BMI指數(shù)打開對(duì)應(yīng)的三餐安排數(shù)據(jù)庫表;讀取安排信息,并且寫入對(duì)應(yīng)的列表控件中;關(guān)閉數(shù)據(jù)庫和其他文件;結(jié)束。2.代碼(共154行,包括必要的空行) voidCMyDlg::OnTimer(UINTnIDEvent){ CStringfilename="D:\\user.txt"; CStdioFilefile; file.Open(filename,CFile::modeRead);//用只讀方式打開臨時(shí)TXT文件,以便讀取user的ID CStringuser; file.ReadString(user); _ConnectionPtrm_pConnection; _variant_tRecordsAffected; _RecordsetPtrm_pRecordset;//設(shè)置操作數(shù)據(jù)庫的ADO對(duì)象指針 //下面是打開數(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錯(cuò)誤信息:%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這個(gè)東西里面,以后就直接用這個(gè)東西操作表了 } catch(_com_errore){CStringerrormessage;errormessage.Format("錯(cuò)誤!\r錯(cuò)誤信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);return;} //下面尋找對(duì)應(yīng)的用戶信息 _variant_ttheuser,theheight,theweight,theage,thename,thesex; CStringtuser,theight,tweight,tname,tage,tsex; while(!m_pRecordset->adoEOF)//用while循環(huán)直到把這個(gè)表讀完,即做一次遍歷 { theuser=m_pRecordset->GetCollect("username"); theheight=m_pRecordset->GetCollect("身高(厘米)"); theweight=m_pRecordset->GetCollect("體重(斤)"); theage=m_pRecordset->GetCollect("年齡"); thesex=m_pRecordset->GetCollect("性別");//先用_variant_t這個(gè)變量讀取數(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類型強(qiáng)制轉(zhuǎn)換為CString類 if(tuser==user)break;//退出循環(huán) m_pRecordset->MoveNext();//如果當(dāng)前所指的用戶名不對(duì),就指向下一個(gè),直到最后一個(gè) } 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ù)庫中的三餐表格插入表格中(按三個(gè)等級(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這個(gè)東西里面,以后就直接用這個(gè)東西操作表了 } catch(_com_errore){CStringerrormessage;errormessage.Format("錯(cuò)誤!\r錯(cuò)誤信息:%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(); }//用這個(gè)循環(huán)往列表中寫入數(shù)據(jù) file.Close();}2.1登錄功能模塊源代碼1.描述1.1代碼功能描述:通過訪問數(shù)據(jù)庫中的用戶信息進(jìn)行登錄。1.2代碼描述(自然語言)開始;讀取輸入的賬號(hào)和密碼;打開賬戶信息數(shù)據(jù)庫;讀取數(shù)據(jù)庫中所有的賬號(hào)和對(duì)應(yīng)的密碼;在所有賬號(hào)中尋找用戶輸入的賬號(hào);If(沒有找到匹配的賬號(hào))提示,返回;If(密碼正確)提示成功,打開主程序,將賬號(hào)寫入user.txt用于后續(xù)操作;Else提示密碼錯(cuò)誤,返回;關(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對(duì)象指針 //打開數(shù)據(jù)庫 try {m_pConnection.CreateInstance(__uuidof(Connection));m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=user.mdb","","",adModeUnknown); //這兩行代碼用來打開數(shù)據(jù)庫,具體含義不懂,但是文件名要寫對(duì),打開方式不用管}catch(_com_errore){CStringerrormessage;errormessage.Format("打開數(shù)據(jù)庫失敗!\r錯(cuò)誤信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);return;//如果出錯(cuò)則返回} //讀取數(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這個(gè)東西里面,以后就直接用這個(gè)東西操作表了 } catch(_com_errore){CStringerrormessage;errormessage.Format("錯(cuò)誤!\r錯(cuò)誤信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);return;} _variant_ttheuser,thepassword; CStringtuser,tpassword; while(!m_pRecordset->adoEOF)//用while循環(huán)直到把這個(gè)表讀完,即做一次遍歷 { 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)前所指的用戶名不對(duì),就指向下一個(gè),直到最后一個(gè) } 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//如果沒有找到輸入的用戶名,則說明用戶還沒有注冊(cè),或者用戶名輸錯(cuò)了 file.Close();//必須關(guān)閉,不然沒有保存,會(huì)出現(xiàn)致命錯(cuò)誤! MessageBox("successed"); CDialog::OnOK(); CMyDlgdlg; dlg.DoModal(); } else { MessageBox("密碼錯(cuò)誤!","提示");return;}m_pRecordset->Close();m_pRecordset=NULL;m_pConnection->Close();m_pConnection=NULL;}四、系統(tǒng)測試1.概述本次測試將對(duì)兩個(gè)功能模塊進(jìn)行詳細(xì)測試,分別是修改密碼模塊和安排三餐模塊。2.測試2.1單元測試表5-1測試模塊清單編號(hào)模塊中文名模塊功能簡述接口簡述M1-3修改密碼提供修改密碼的功能對(duì)話框M2-1安排三餐為用戶安排三餐對(duì)話框2.2測試報(bào)告模塊一程序流程如下圖環(huán)形復(fù)雜度:3測試用例設(shè)計(jì)(已有用戶名為admin,密碼為123456的賬戶)輸入數(shù)據(jù)預(yù)期輸出說明測試用例1舊密碼:123,新密碼:jdfohewk,確認(rèn)密碼:jdfohewk提示:密碼錯(cuò)誤舊密碼為123456,輸入錯(cuò)誤測試用例2舊密碼:123456,新密碼:jdfohewk,確認(rèn)密碼:jdfohewk提示:修改成功舊密碼正確,新密碼=確認(rèn)密碼測試用例3舊密碼:123456,新密碼:jdfohewk,確認(rèn)密碼:123提示:修改失敗,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 西北政法大學(xué)《水生生物分子生物學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 吉林航空職業(yè)技術(shù)學(xué)院《藥物研究儀器操作及分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 揭陽職業(yè)技術(shù)學(xué)院《美術(shù)鑒賞與審美》2023-2024學(xué)年第二學(xué)期期末試卷
- 口腔診所聘用勞動(dòng)合同
- 承租電梯房屋合同
- 金融借款合同及分析
- 工程轉(zhuǎn)讓合同協(xié)議
- 二手房買賣居間合同
- 基礎(chǔ)打樁工程泥漿外運(yùn)承包合同
- 全新采購合同的管理制度
- 擔(dān)保合同范本
- 《油藏物理》西安石油大學(xué)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 鋼結(jié)構(gòu)吊裝技術(shù)交底
- 二年級(jí)上冊(cè)《勞動(dòng)教育》教材分析
- n3護(hù)士崗位競聘范文
- 中國普通食物營養(yǎng)成分表(修正版)
- (新版)高級(jí)考評(píng)員職業(yè)技能鑒定考試題庫(含答案)
- 貨款欠款條范本
- DG-TJ 08-2242-2023 民用建筑外窗應(yīng)用技術(shù)標(biāo)準(zhǔn)
- 大學(xué)介紹清華大學(xué)宣傳
- 薇旖美三型膠原蛋白培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論