版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
南京郵電大學(xué)通信與信息工程學(xué)院軟件設(shè)計(jì)報(bào)告學(xué)生學(xué)號(hào)B08020221學(xué)生姓名孟祥熙二零一零年九月目錄TOC\o"1-3"\h\z前言 2題目一P030M 21、問題分析。 22、設(shè)計(jì)方案。 33、流程圖。 44、測(cè)試數(shù)據(jù)、測(cè)試成果、成果分析。 45、有關(guān)運(yùn)營界面。 56、核心代碼 5題目二W003E 81、問題分析。 82、設(shè)計(jì)方案。 83、流程圖。 94、測(cè)試數(shù)據(jù)、測(cè)試成果、成果分析。 105、有關(guān)運(yùn)營界面。 106、核心代碼 11題目三R018M 121、問題分析。 122、設(shè)計(jì)方案。 123、流程圖。 134、測(cè)試數(shù)據(jù)、測(cè)試成果、成果分析。 155、有關(guān)運(yùn)營界面。 156、核心代碼 16題目四P033H 201、問題分析。 212、設(shè)計(jì)方案。 213、流程圖。 224、測(cè)試數(shù)據(jù)、測(cè)試成果、成果分析。 235、有關(guān)運(yùn)營界面。 256、核心代碼 26小結(jié) 26附錄 37前言這次軟件設(shè)計(jì)課程兩周時(shí)間里,不但使我編程水平在實(shí)用方面有了很大提高,更重要是,讓我對(duì)編程,c++有了更遼闊和進(jìn)一步結(jié)識(shí)。理解了mfc,理解了可視化窗口建立,及控件實(shí)用辦法。Mfc學(xué)習(xí),能將咱們編程知識(shí)真正應(yīng)用到實(shí)用中去,例如我本人日后做單片機(jī)串口顯示溫度上位機(jī),就運(yùn)用了MSCOMM插件。在選題,搜索查找資料過程中,咱們接觸到了之前在課堂中并未接觸過方向。通過圖書館,網(wǎng)絡(luò),咱們對(duì)資料查找能力得到鍛煉,學(xué)到了諸多關(guān)于算法和編程辦法,讓咱們得到了這樣意識(shí),學(xué)會(huì)跟資料溝通跟學(xué)好基本知識(shí)同樣重要,并且是咱們編程思想源泉。并且,在這個(gè)新技術(shù)層出不窮年代,僅僅掌握一套東西是不夠,要大膽去嘗試,去學(xué)習(xí)新東西,才干不被裁減。好程序,只有想到所有也許發(fā)生狀況才干達(dá)到完美,通過一遍遍測(cè)試,考慮各種狀況,調(diào)試,一種程序才干被人信任。一種學(xué)生才干有底氣像驗(yàn)收教師演示自己程序。雖然我還是考慮了諸多狀況,但是由于初識(shí)mfc,時(shí)間緊促,因此有狀況雖然想到了但實(shí)現(xiàn)起來還是有些力不從心,我會(huì)運(yùn)用課余時(shí)間繼續(xù)這段時(shí)間來對(duì)mfc學(xué)習(xí)。題目一P030M1、問題分析。一,題目:編程實(shí)現(xiàn)一種簡易計(jì)算器,實(shí)現(xiàn)基本加減乘除運(yùn)算功能。在計(jì)算器面板上,有0—9數(shù)字按鈕,同步尚有加減乘除運(yùn)算按鈕已經(jīng)清空運(yùn)算框按鈕,顧客可以直接點(diǎn)擊面板進(jìn)行輸入數(shù)字并計(jì)算。輸入和輸出成果數(shù)據(jù)共用一種文本框,同步,當(dāng)進(jìn)行除法運(yùn)算時(shí)當(dāng)除數(shù)為0,計(jì)算器會(huì)給出錯(cuò)誤提示。二,實(shí)現(xiàn)辦法:建立一種mfc工程,添加一種編輯框及按鈕若干,分別表達(dá)加,減,乘,除,及清除,等于,及0-9數(shù)字鍵,通過鼠標(biāo)點(diǎn)擊數(shù)字button或者用鍵盤上數(shù)字鍵直接在編輯框中輸入需要運(yùn)算數(shù);用鼠標(biāo)點(diǎn)擊窗口上運(yùn)算符號(hào)來輸入需要進(jìn)行運(yùn)算,并在編輯框中顯示輸入及輸出成果?;蛘甙础扒宄辨I重置之前輸入。由于編輯框輸入數(shù)據(jù)不能賦給一種整形變量,因此咱們需要用字符型一維數(shù)組用來保存需要在編輯框輸入輸出數(shù)據(jù),在進(jìn)行運(yùn)算時(shí)候,咱們還要將數(shù)組轉(zhuǎn)化成整形整數(shù)才干進(jìn)行正常加減乘除運(yùn)算。因此,需要用到atoi,和itoa兩個(gè)轉(zhuǎn)換函數(shù)。計(jì)算器應(yīng)當(dāng)有除零報(bào)錯(cuò)功能,例如windowsxp中計(jì)算器除零后輸出:除數(shù)不能為零。因此,這個(gè)是計(jì)算器所必要有功能,雖然在給教師驗(yàn)收中,這個(gè)功能并沒有實(shí)現(xiàn),但是通過修改代碼,當(dāng)前這個(gè)功能可以實(shí)現(xiàn)了。三,拓展:考慮到程序健壯性,咱們應(yīng)當(dāng)考慮到有不按“數(shù)—符號(hào)—數(shù)—等于”按鍵組合,一次運(yùn)算之后會(huì)不會(huì)對(duì)背面計(jì)算產(chǎn)生影響等,這個(gè)咱們要在詳細(xì)設(shè)計(jì)之中考慮2、設(shè)計(jì)方案。定義三個(gè)字符型數(shù)組ch[1],ch[2]ch[3],用來存儲(chǔ)兩個(gè)在編輯框中輸入運(yùn)算數(shù),和一種要在編輯框中輸出成果。定義一種字符型m-FH,用來保存操作符號(hào),定義三個(gè)整形整數(shù)num1,num2,num3,用來進(jìn)行運(yùn)算中加減。在對(duì)話框中添加一種編輯框控件,button控件若干,分別表達(dá)加,減,乘,除,及清除,等于,及0-9數(shù)字鍵。并編輯有關(guān)函數(shù),用ReplaceSel函數(shù)來使之表達(dá)有關(guān)數(shù)字輸入,并且在運(yùn)算符號(hào)函數(shù)中用atoi將第一種輸入數(shù)轉(zhuǎn)化成整形,并清屏。在等于函數(shù)中加入運(yùn)算過程:一方面,咱們先用ch2[]保存輸入第二個(gè)數(shù),并且用atoi將ch2數(shù)組轉(zhuǎn)換成num2,通過switch函數(shù)將m_FH中保存運(yùn)算符號(hào)選出,并且將num2,跟之前在運(yùn)算符號(hào)函數(shù)中已經(jīng)轉(zhuǎn)換好第一種輸入數(shù)num1,進(jìn)行相應(yīng)運(yùn)算,得到成果num3。這里有一種特殊狀況,就是當(dāng)運(yùn)算符號(hào)為“/”時(shí)候,這里咱們可以用if來判斷除數(shù)——num2與否為零。因此咱們對(duì)成果就差生了兩種解決方式。這樣咱們需要定義一種flag,默以為0。當(dāng)除數(shù)num2等于0,就令flag=0,然后用SetDlgItemText函數(shù)直接輸出“dividercannotbe0”,用if(!flag)來控制正常成果輸出過程,使之不被運(yùn)營。當(dāng)除數(shù)num2不為0時(shí)候,所有運(yùn)算都可以正常運(yùn)營,并且在switch中用num3來保存兩個(gè)數(shù)運(yùn)算成果,這時(shí)flag沒有變化。然后咱們用atoi函數(shù)將num3轉(zhuǎn)化為能在編輯框中輸出數(shù)組格式ch3,最后用SetDlgItemText函數(shù)將成果顯示到編輯框上,運(yùn)算完畢。此外,當(dāng)咱們按下“清空”鍵時(shí)候,將編輯框上數(shù)字或者錯(cuò)誤提示清空,這樣再按下符號(hào)鍵或者等于時(shí)候不會(huì)有反映。流程圖。開始開始存入輸入框內(nèi)數(shù)字存入輸入框內(nèi)數(shù)字ch1與否按清空 Y與否按清空 N將運(yùn)算鍵保存到m_FH將ch1數(shù)轉(zhuǎn)換為num1,清屏 Y將運(yùn)算鍵保存到m_FH將ch1數(shù)轉(zhuǎn)換為num1,清屏與否按清空與否按清空在編輯框上輸出Dividercannotbe0 N在編輯框上輸出Dividercannotbe0存入輸入框內(nèi)數(shù)字ch2,將ch2轉(zhuǎn)換為num2存入輸入框內(nèi)數(shù)字ch2,將ch2轉(zhuǎn)換為num2num2=0m_FH='/'Ynum2=0m_FH='/'Num3=num2(m_FH)num1將num3轉(zhuǎn)化為ch3 N YNum3=num2(m_FH)num1將num3轉(zhuǎn)化為ch3N在編輯框上輸出ch3在編輯框上輸出ch3結(jié)束結(jié)束4、測(cè)試數(shù)據(jù)、測(cè)試成果、成果分析。顧客輸入:“69”“/”“3”“=”輸出成果:23顧客輸入:“10000000”“*”“清空”“”“64”“/”“8”“=”輸出成果:8顧客輸入:“5096”“*”“564”“-”“550”“=”輸出成果:14顧客輸入:“12”“/”“0”“=”輸出成果:dividercannotbe0成果分析:當(dāng)除數(shù)為零時(shí)候成果輸出dividercannotbe0,提示顧客輸入錯(cuò)誤,當(dāng)輸入“數(shù)字——運(yùn)算符號(hào)——數(shù)字——運(yùn)算符號(hào)——等于”時(shí)候,第二個(gè)輸入數(shù)被作為正常輸入模式第一種輸入數(shù)進(jìn)行運(yùn)算,成果是第二個(gè)數(shù)和第三個(gè)數(shù)之間運(yùn)算成果。5、有關(guān)運(yùn)營界面。普通計(jì)算:除數(shù)為0:6、核心代碼數(shù)字鍵函數(shù)示例:voidCDlgDlg::OnButton1(){ m_edit.ReplaceSel("1");}voidCDlgDlg::OnButton2(){ m_edit.ReplaceSel("2");}……運(yùn)算符號(hào)鍵函數(shù)示例:voidCDlgDlg::OnBtnadd()//點(diǎn)擊加法操作在這里進(jìn)行{ CStringstr; if(GetDlgItemText(IDC_BTNADD,str),str=="+") { m_FH='+';//將“+”號(hào)操作符保存 } GetDlgItemText(IDC_EDIT1,ch1,10); num1=atoi(ch1); SetDlgItemText(IDC_EDIT1,"");} voidCDlgDlg::OnBtndiv()//點(diǎn)擊除法操作{ CStringstr; if(GetDlgItemText(IDC_BTNDIV,str),str=="/") { m_FH='/'; } GetDlgItemText(IDC_EDIT1,ch1,10); num1=atoi(ch1); SetDlgItemText(IDC_EDIT1,"");}等號(hào)鍵運(yùn)算函數(shù):voidCDlgDlg::OnBtnequ()//在這里進(jìn)行運(yùn)算選取,輸出計(jì)算成果{ UpdateData(); intflag=0;//作為判斷除數(shù)與否為0標(biāo)記 GetDlgItemText(IDC_EDIT1,ch2,10); num2=atoi(ch2);//轉(zhuǎn)換ch2為num2 switch(m_FH) { case'+': num3=num1+num2; break; case'-': num3=num1-num2; break; case'*': num3=num1*num2; break; case'/': if(num2==0)//判斷除數(shù)與否為0 { flag=1; SetDlgItemText(IDC_EDIT1,"dividercannotbe0");//輸出錯(cuò)誤提示 } else num3=num1/num2; break; } if(!flag)//判斷與否浮現(xiàn)0除數(shù),如果不是,進(jìn)行成果輸出 { itoa(num3,ch3,10); SetDlgItemText(IDC_EDIT1,ch3); }//把num3轉(zhuǎn)化成字符串ch3 UpdateData(false);}清空鍵函數(shù):voidCDlgDlg::OnBtncls(){ SetDlgItemText(IDC_EDIT1,"");}題目二W003E1、問題分析。一,題目:編制程序?qū)崿F(xiàn)字符串逆轉(zhuǎn)功能。規(guī)定具備和諧輸入、輸出界面。如輸入Thisisatest輸出tsetasisihT。這是一種簡樸題,咱們?cè)谶@道題中需要將字符串順序逆轉(zhuǎn)。二,實(shí)現(xiàn)辦法:這道題咱們可以從三個(gè)方面入手:1,咱們可以將一種編輯框輸入字符串或數(shù)字串賦給這個(gè)數(shù)組,然后計(jì)算這個(gè)字符串長度(strlen),互換首尾字符,最后在另一種編輯框中輸出。2,咱們可以定義兩個(gè)一維字符型數(shù)組,計(jì)算輸入編輯框內(nèi)字符長度,并將輸入框內(nèi)字符串倒敘賦給第二個(gè)字符串,在編輯框中輸出第二個(gè)數(shù)組。3,最后辦法是最簡樸也是最省系統(tǒng)資源,由于主線用不到算法,咱們只需將輸出編輯框光標(biāo)始終在最前端,這樣咱們輸入正字符就直接被轉(zhuǎn)換成倒敘了。三,拓展:題目規(guī)定字符串逆轉(zhuǎn),如果咱們定義char話,同樣可以實(shí)現(xiàn)數(shù)字串逆轉(zhuǎn)和數(shù)字字符混合字串逆轉(zhuǎn)。固然,如果用第三種辦法話可以實(shí)現(xiàn)任意語句逆轉(zhuǎn)。2、設(shè)計(jì)方案。一方面新建一種mfc單窗口工程,然后添加兩個(gè)窗口,并加字標(biāo)注:輸入窗口,輸出窗口。辦法1:定義兩個(gè)一維字符型數(shù)組buf1[100],buf2[100],分別用于存儲(chǔ)輸入及倒敘之后字符語句,輸入后,計(jì)算buf1所存字符長度大小,定義i,j,用for循環(huán)將buf[i]從最后一種字節(jié)往前,懂得第一種,順序賦給buf2[j]。然后在輸出框更新buf2。辦法2:只定義一種字符型數(shù)組buf,和字符變量temp。用于存儲(chǔ)輸入字符語句,和參加完畢互換運(yùn)算,定義i,j,用for循環(huán)按順序?qū)⒆詈笠环N和第一種互換,用第二個(gè)和倒數(shù)第二個(gè)互換..到中間一種數(shù)時(shí)停止操作,并輸出新buf。辦法3:在重載函數(shù)OnChangeEdit1()加入屬性,讓光標(biāo)始終停留在最前邊,這樣直接顯示倒敘字符,并且能倒敘所有語句。3、流程圖。辦法1:開始 開始輸入字符串輸入字符串N長度合格長度合格YBuf1=字符串Buf1=字符串i=strlen(buf1)J=0 YI>=jBuf1(i)buf(j)互換i--,j++I>=jBuf1(i)buf(j)互換i--,j++輸出字符串buf1輸出字符串buf1結(jié)束結(jié)束辦法2:開始開始輸入字符串輸入字符串N長度合格長度合格YBuf1=字符串Buf1=字符串i=strlen(buf1)J=0 Y I>=0Buf2(i)=buf2(j)i--,j++I>=0Buf2(i)=buf2(j)i--,j++n輸出字符串buf2 輸出字符串buf2結(jié)束結(jié)束4、測(cè)試數(shù)據(jù)、測(cè)試成果、成果分析。依照辦法2:顧客輸入:ThisisTEST輸出成果:tseTsisihT顧客輸入:輸出成果:顧客輸入:!@#$%^&*()_+輸出成果:+_)(*&^%$#@!成果分析:顧客輸入除中文以外字符都被存儲(chǔ)在buf1內(nèi),倒敘存入buf2中輸出。5、有關(guān)運(yùn)營界面。核心代碼辦法1:charbuf1[100],temp;//定義中間變量 m_x.GetWindowText(buf1,100); UpdateData(false);intj=0; for(inti=strlen(buf1)-1;i>=j;i--) { temp=buf1[j]; buf1[j]=buf1[i]; buf1[i]=temp; j++; }m_y=buf1; UpdateData(false);辦法2:charbuf1[100],buf2[100];//定義兩個(gè)數(shù)組 m_x.GetWindowText(buf1,100);//將輸入賦給buf1 UpdateData(false);intj=0;for(inti=strlen(buf1)-1;i>=0;i--)//從后道前將buf1值賦給buf2 { buf2[j]=buf1[i]; j++; }buf2[j]='\0';m_y=buf2;//輸出 UpdateData(false);辦法3:在函數(shù)OnChangeEdit1()中加入如下語句CEdit*edit=(CEdit*)GetDlgItem(IDC_EDIT1);edit->SetSel(0,0,TRUE);題目三P031M問題分析。一,題目:運(yùn)用VC中Treeview和Listview,做一種自己資源管理器,左側(cè)樹狀目錄可以關(guān)閉,當(dāng)點(diǎn)擊一種文獻(xiàn)夾時(shí)右側(cè)Listview中會(huì)顯示文獻(xiàn)夾內(nèi)容。盡量模仿windows資源管理器功能,例如左側(cè)文獻(xiàn)夾圖標(biāo)變化和右側(cè)listview中可以顯示“列表”,“詳細(xì)資料”。二,實(shí)現(xiàn)方式:咱們可以建立一種mfcsdi,然后在其中加入treeview和listview控件,并且設(shè)立其起始點(diǎn)為我電腦及桌面,按照windows資源管理器,咱們應(yīng)當(dāng)設(shè)立一種我電腦起始位置,但是為了以便,咱們應(yīng)當(dāng)加上桌面位置。這樣咱們可以在左側(cè)樹狀構(gòu)造中觀測(cè)當(dāng)前所處途徑,并在右側(cè)窗口查看當(dāng)前文獻(xiàn)夾中內(nèi)容。這樣,就實(shí)現(xiàn)了一種簡易資源管理器。三,擴(kuò)展:在資源管理器中咱們不能只能用來看,應(yīng)當(dāng)在listview里面加入粘貼,復(fù)制,剪切,刪除功能,這才是一種可以稱得上實(shí)用資源管理器,為了實(shí)現(xiàn)這個(gè)功能,咱們應(yīng)當(dāng)重載listview控件。加入粘貼,復(fù)制,剪切,刪除函數(shù),并且在菜單里面加入有關(guān)借口,這樣才干達(dá)到實(shí)用另一方面,咱們可以加入一種編輯框,令其有如下功能:當(dāng)輸入途徑并按下旁邊轉(zhuǎn)到按鈕,就可以在右側(cè)listview顯示輸入途徑內(nèi)內(nèi)容,并且在左側(cè)treeview中顯示所輸入途徑節(jié)點(diǎn)。2、設(shè)計(jì)方案。建立一種mfcsdi,創(chuàng)立TreeView控件,通過設(shè)立屬性與調(diào)用辦法對(duì)各Node對(duì)象進(jìn)行操作,由于這些操作涉及添加、刪除、對(duì)齊和其他操作,咱們可以恰當(dāng)修改使其符合咱們規(guī)定??梢跃幊陶归_與折回Node對(duì)象來顯示或隱藏所有子節(jié)點(diǎn)。咱們可以用Collapse、Expand和NodeClick三個(gè)事件實(shí)現(xiàn)此功能。Node對(duì)象使用Root、Parent、Child、FirstSibling、Next、Previous和LastSibling屬性。在代碼中可通過檢索對(duì)Node對(duì)象引用,從而在樹上定位。也可以使用鍵盤定位。UPARROW鍵和DOWNARROW鍵向下循環(huán)穿過所有展開Node對(duì)象。從左到右、從上到下地選取Node對(duì)象。若在樹底部,選取便跳回樹頂部,必要時(shí)滾動(dòng)窗口。RIGHTARROW鍵和LEFTARROW鍵也穿過所有展開Node對(duì)象,但是如果選取了未展開Node之后再按RIGHTARROW鍵,該Node便展開;第二次按該鍵,選取將移向下一種Node。相反,若擴(kuò)展Node有焦點(diǎn),這時(shí)再按LEFTARROW鍵,該Node便折回。如果按下ANSI字符集中鍵,焦點(diǎn)將跳轉(zhuǎn)至以那個(gè)字母開頭近來Node。后續(xù)按該鍵動(dòng)作將使選取向下循環(huán),穿過以那個(gè)字母開頭所有展開節(jié)點(diǎn)。ListView控件可使用四種不同視圖顯示項(xiàng)目。通過此控件,可將項(xiàng)目構(gòu)成帶有或不帶有列標(biāo)頭列,并顯示隨著圖標(biāo)和文本??墒褂肔istView控件將稱作ListItem對(duì)象列表?xiàng)l目組織成下列四種不同視圖之一:1.大(原則)圖標(biāo)2.小圖標(biāo)3.列表4.報(bào)表View屬性決定在列表中控件使用何種視圖顯示項(xiàng)目。還可用LabelWrap屬性控制列表中與項(xiàng)目關(guān)聯(lián)標(biāo)簽與否可換行顯示。此外,還可管理列表中項(xiàng)目排序辦法和選定項(xiàng)目外觀。流程圖。文獻(xiàn)操作示例:刪除一種文獻(xiàn)流程圖開始開始按下右鍵刪除鍵按下右鍵刪除鍵strSrcPath=strSelItemPath;strSrcPath=strSelItemPath;將刪除文獻(xiàn)地址賦給strSrcPath刪除strSelItemPath下節(jié)點(diǎn)內(nèi)容刪除strSelItemPath下節(jié)點(diǎn)內(nèi)容彈出對(duì)話框,顯示“文獻(xiàn)刪除失敗”彈出對(duì)話框,顯示“文獻(xiàn)刪除失敗”彈出對(duì)話框,顯示“文獻(xiàn)刪除成功”strSrcPath==0YN結(jié)束結(jié)束在輸入框中輸入地址,并轉(zhuǎn)到:開始開始在編輯框中取輸入地址,賦給在編輯框中取輸入地址,賦給m_strURL Ym_strURL==0m_strURL==0Nm_btnReDirect.EnableWindow(m_btnReDirect.EnableWindow(TURE);m_strURL存入字符串url[i][j],i=0,j=0沒有遇到'/0'沒有遇到'/0'I++J++ NI++J++沒遇到'/'Y 沒遇到'/' Ya=0;檢查url[a]存在Na=0;檢查url[a]存在 YA==j? NA==j? YN報(bào)錯(cuò):“報(bào)錯(cuò):“URLisn'texist!”清空編輯框設(shè)立Tree.SetFolder函數(shù)變量為strURL,將當(dāng)前位置變?yōu)檩斎險(xiǎn)RL結(jié)束結(jié)束測(cè)試數(shù)據(jù)、測(cè)試成果、成果分析。操作一:輸入:打開左側(cè)我電腦打開c盤打開haha文獻(xiàn)夾在一種文獻(xiàn)上點(diǎn)擊復(fù)制再點(diǎn)擊左面桌面點(diǎn)擊菜單欄編輯——粘貼成果:彈出對(duì)話框——黏貼成功操作二:打開桌面點(diǎn)擊剛才復(fù)制到桌面文獻(xiàn)點(diǎn)擊右鍵刪除成果:彈出對(duì)話框——?jiǎng)h除成功操作三:在編輯框輸入:“c:/360download”點(diǎn)擊轉(zhuǎn)到成果:右側(cè)展開360download文獻(xiàn)夾中內(nèi)容測(cè)試分析:規(guī)定成果和自己添加功能都能正常實(shí)現(xiàn)。有關(guān)運(yùn)營界面。轉(zhuǎn)到:右鍵:刪除示例:6、核心代碼編輯框函數(shù):voidCMyExplorerDlg::OnChangeUrl(){ UpdateData(TRUE); if(m_strURL.GetLength()==0)//編輯框內(nèi)無內(nèi)容{ m_btnReDirect.EnableWindow(FALSE); } else{ m_btnReDirect.EnableWindow(TRUE);//編輯框內(nèi)有內(nèi)容,則打開 }}“轉(zhuǎn)到”按鈕函數(shù):voidCMyExplorerDlg::OnRedirect(){ UpdateData(TRUE); if(m_strURL.GetLength()){ m_wndTree.SetFolder(m_strURL);//將當(dāng)前目錄設(shè)為m_strURL}}重載treeview函數(shù),加入如下操作函數(shù):voidCDirListCtrl::OnEditCopy()//復(fù)制{ strSrcPath=strSelItemPath; strDesPath=""; nOption=1;}voidCDirListCtrl::OnEidtCut()//剪切{ strSrcPath=strSelItemPath; strDesPath=""; nOption=2; }voidCDirListCtrl::OnEditPaste()//粘貼{ strDesPath=m_strPath; CStringmsg; msg+="源文獻(xiàn):"; msg+=strSrcPath; msg+="\n"; msg+="目的文獻(xiàn):"; msg+=strDesPath; msg+="\n"; if(nOption==1){ if(CopyFile(strSrcPath,strDesPath,FALSE)){ msg+="文獻(xiàn)拷貝成功!"; MessageBox(msg); } else{ msg+="文獻(xiàn)拷貝失敗!"; MessageBox(msg); } } elseif(nOption==2){ if(MoveFile(strSrcPath,strDesPath)){ msg+="文獻(xiàn)移動(dòng)成功!"; MessageBox(msg); } else{ msg+="文獻(xiàn)移動(dòng)失敗!"; MessageBox(msg); } }}voidCDirListCtrl::OnEditDelete()//刪除{ strSrcPath=strSelItemPath; CStringmsg; msg+="源文獻(xiàn):"; msg+=strSrcPath; msg+="\n"; if(DeleteFile(strSrcPath)){ msg+="文獻(xiàn)刪除成功!"; MessageBox(msg); } else{ msg+="文獻(xiàn)刪除失敗!"; MessageBox(msg); }}在OnInitDialog函數(shù)中加入://添加菜單 CMenu*m_Menu=newCMenu; m_Menu->LoadMenu(IDR_MENU_MAINFRAME); SetMenu(m_Menu);//變化窗口位置 CRectrect(0,0,800,600); MoveWindow(&rect); m_wndTree.MoveWindow(10,40,250,490); m_wndList.MoveWindow(260,40,520,490); m_wndTree.Initialize();Treeview初始函數(shù):voidCDirTreeCtrl::Initialize(){ LPITEMIDLISTitemlist; charbuf[256]; intiDesktopIcon; intiComputerIcon; DeleteAllItems(); SetImageList(NULL,0); SHGetSpecialFolderLocation(this->m_hWnd,CSIDL_DESKTOP,&itemlist); SHGetPathFromIDList(itemlist,buf); m_DesktopPath=buf; m_ImageList.Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR24,50,50); m_ImageList.SetBkColor(GetSysColor(COLOR_WINDOW)); iDesktopIcon=m_ImageList.Add(ExtractIcon(AfxGetApp()->m_hInstance,"shell32.dll",34)); iComputerIcon=m_ImageList.Add(ExtractIcon(AfxGetApp()->m_hInstance,"shell32.dll",15)); m_DrivesRoot=InsertItems("我電腦",TVI_ROOT,true,iComputerIcon,iComputerIcon); m_DesktopRoot=AddItem(m_DesktopPath,TVI_ROOT,true,iDesktopIcon,iDesktopIcon);}題目四P033H1、問題分析。一,題目:編寫一種時(shí)鐘實(shí)用工具,規(guī)定該時(shí)鐘可圖形化顯示時(shí)間,同步顯示日期、星期等。并且要具備音樂報(bào)時(shí)功能。這個(gè)題目需要能實(shí)現(xiàn)一種鬧鐘,這個(gè)鬧鐘能顯示時(shí)間,日期,星期幾,并且具備報(bào)時(shí)功能,并且這個(gè)報(bào)時(shí)功能還要能同步播放音樂。困難重要在這幾種方面:如何獲取系統(tǒng)當(dāng)前時(shí)間,如何校對(duì)系統(tǒng)時(shí)間與鬧鐘時(shí)間,如何報(bào)時(shí).此外由于程序是基于MFC,在引入某些函數(shù)時(shí)與否需要做某些特殊解決?二,實(shí)現(xiàn)辦法:依照查找,獲取時(shí)間可以用API函數(shù)GetSystemTime,也可以用CTime函數(shù)GetCurrentTime都比較簡樸。同步,咱們需要用PlaySound函數(shù)來播放系統(tǒng)音樂,作為鬧鐘鈴聲,這里,咱們也可以應(yīng)用之前編資源管理器經(jīng)驗(yàn)來解決自定義鈴聲選取。一方面,咱們要定義個(gè)窗口:其一,顯示時(shí)間,日期,年月(calendarcontrol),時(shí)間跟系統(tǒng)時(shí)間同步其二,通過菜單欄彈出設(shè)立鬧鐘時(shí)間窗口,這里咱們加入自定義鈴聲功能,咱們就要加入一種編輯框,和按鈕。將鬧鐘位置存入變量。其三,鬧鐘時(shí)間屆時(shí)候彈出用來提示顧客“時(shí)間到”彈出窗口。其四,咱們可以設(shè)計(jì)一種窗口,通過她咱們可以讓顧客看到之前設(shè)立鬧鐘時(shí)間。三,擴(kuò)展:題目中需要咱們鬧鐘應(yīng)當(dāng)音樂報(bào)時(shí),為了增強(qiáng)軟件功能,咱們可以在程序設(shè)計(jì)中加入自定義鈴聲功能。另一方面,咱們可以設(shè)計(jì)一種窗口,通過點(diǎn)擊菜單中相應(yīng)項(xiàng),能讓咱們查看到之前設(shè)立鬧鐘時(shí)間。最后,咱們還可以加入設(shè)立各種鬧鈴功能,讓顧客能設(shè)立幾種鬧鐘時(shí)間。設(shè)計(jì)方案。鬧鐘一共可分為三個(gè)模塊:1、設(shè)立鬧鐘,2、提示,3、退出;而設(shè)立鬧鐘又可分為:1、設(shè)立鬧鐘音樂,2、設(shè)立鬧鐘時(shí)間;設(shè)立鬧鐘時(shí)間又有添加,刪除和修改三種操作。鬧鐘鬧鐘設(shè)立鬧鐘提示設(shè)立鬧鐘時(shí)間設(shè)立鬧鐘音樂添加修改刪除退出通過函數(shù)調(diào)用獲取系統(tǒng)時(shí)間,在主頁面相應(yīng)編輯區(qū)顯示,調(diào)用子函數(shù)鬧鐘設(shè)定模塊錄入鬧鐘時(shí)間,通過設(shè)立計(jì)時(shí)器定期比較設(shè)立時(shí)間與系統(tǒng)時(shí)間,并擬定響應(yīng)函數(shù),實(shí)現(xiàn)鬧鐘發(fā)聲,彈出提示頁面。依照查找,獲取時(shí)間可以用API函數(shù)GetSystemTime,或者CTime函數(shù)GetCurrentTime同步,咱們需要用PlaySound函數(shù)來播放系統(tǒng)音樂,作為鬧鐘鈴聲,這里,咱們也可以應(yīng)用之前編資源管理器經(jīng)驗(yàn)來解決自定義鈴聲選取。3、流程圖。主頁面主頁面設(shè)定鬧鐘顯示模仿時(shí)鐘顯示時(shí)間響應(yīng)鬧鐘北京時(shí)間西安時(shí)間關(guān)系視圖:CLOCKCLOCK類視圖資源視圖文獻(xiàn)視圖關(guān)于鬧鐘應(yīng)用主頁模版主頁關(guān)于框一鬧鐘主頁框一主流程圖4、測(cè)試數(shù)據(jù)、測(cè)試成果、成果分析。操作1:打開程序打開菜單——時(shí)鐘設(shè)立鬧鐘時(shí)間設(shè)立時(shí)間為14:00:00設(shè)立鬧鈴?fù)緩降却?4:00:00彈出對(duì)話框提示顧客,鬧鈴時(shí)間到了!并且播放鬧鈴操作2:打開程序打開菜單——時(shí)鐘設(shè)立鬧鐘時(shí)間設(shè)立時(shí)間為14:00:00打開“查看鬧鈴設(shè)立時(shí)間”程序提示顧客“鬧鐘時(shí)間設(shè)立為14:00:00”操作3:打開程序打開菜單——時(shí)鐘設(shè)立鬧鐘時(shí)間設(shè)立時(shí)間為14:05:00擬定,彈出對(duì)話框“擬定不設(shè)立鬧鈴?”等待到14:05:00彈出對(duì)話框提示顧客,鬧鈴時(shí)間到了!并且不播放鬧鈴操作4:打開程序打開菜單——時(shí)鐘設(shè)立鬧鐘時(shí)間設(shè)立時(shí)間為14:10:00設(shè)立鬧鈴?fù)緩皆O(shè)立鬧鈴聲音關(guān)閉等待到14:10:00彈出對(duì)話框提示顧客,鬧鈴時(shí)間到了!并且不播放鬧鈴成果分析:程序可以正常運(yùn)營,能正常設(shè)立鬧鈴時(shí)間跟鈴聲,并能精確報(bào)時(shí),跟系統(tǒng)時(shí)間同步。并且隨意設(shè)立鬧鈴聲音開關(guān)。有局限性就是程序沒有默認(rèn)設(shè)立鈴聲,這樣每次設(shè)立鬧鐘時(shí)間都要設(shè)立一下鈴聲途徑,導(dǎo)致了不便,這點(diǎn)有待改進(jìn)。5、有關(guān)運(yùn)營界面。1,鬧鐘外觀2,鬧鈴時(shí)間及聲音途徑設(shè)立:3,鬧鐘時(shí)間到彈出窗口:6、核心代碼一,主框架BOOLCClock2App::InitInstance()//主頁面初始化CClock2Module_Module;//建立模板LONGCClock2Module::Unlock()//撤銷BOOLCClock2App::InitATL()//初始化ATLCAdd_Alarm::CAdd_Alarm(CWnd*pParent/*=NULL*/) :CDialog(CAdd_Alarm::IDD,pParent)//構(gòu)造函數(shù),以基本對(duì)話框?yàn)榛悾{(diào)用其構(gòu)造函數(shù)。BOOLCClock2Dlg::OnInitDialog()//初始化對(duì)話框voidCAdd_Alarm::DoDataExchange(CDataExchange*pDX)//傳入父類文獻(xiàn)指針,實(shí)現(xiàn)對(duì)數(shù)據(jù)校驗(yàn)。BEGIN_MESSAGE_MAP(CAdd_Alarm,CDialog)//獲取消息voidCAdd_Alarm::OnOK()//主頁面OK鍵消息響應(yīng)voidCClock2Dlg::OnSysCommand(UINTnID,LPARAMlParam)//消息傳遞及響應(yīng)voidCClock2Dlg::OnButton2()//按鈕響應(yīng)實(shí)現(xiàn)鬧鐘設(shè)定voidCClock2Dlg::OnButton3()//按鈕響應(yīng)實(shí)現(xiàn)鬧鐘刪除二,系統(tǒng)重要實(shí)當(dāng)代碼簡介(選用代碼片段)1,檢測(cè)鬧鐘與否設(shè)立voidCClock3Dlg::OnClockCheck(){ //TODO:Addyourcommandhandlercodehere //用對(duì)話框提示鬧鈴未設(shè)立 /*if(!dlg.st) { //MessageBox("鬧鈴尚未設(shè)立!","溫馨提示",MB_OK|MB_ICONEXCLAMATION); GetMenu()->GetSubMenu(1)->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED); } else { cdlg.DoModal(); }*/ if(dlg.st)//鬧鈴已經(jīng)設(shè)立 { cdlg.DoModal(); } }2,設(shè)立鬧鈴時(shí)間voidCClock3Dlg::OnClockSettime(){ //TODO:Addyourcommandhandlercodehere dlg.DoModal(); if(dlg.st)//鬧鈴已經(jīng)設(shè)立,激活查看鬧鈴時(shí)間菜單項(xiàng) { GetMenu()->GetSubMenu(1)->EnableMenuItem(1,MF_BYPOSITION|MF_ENABLED); //保存鬧鈴時(shí)間,便于查看 cdlg.m_c_hour=dlg.m_hour; cdlg.m_c_minute=dlg.m_minute; cdlg.m_c_second=dlg.m_second; }}3,退出設(shè)立鬧鈴對(duì)話框voidCClock3Dlg::OnEXIT(){ //TODO:Addyourcontrolnotificationhandlercodehere //OnSysCommand(SC_MINIMIZE,SC_SCREENSAVE);//framework中使用 //intsetmusic=MessageBox("您擬定不設(shè)立鈴聲?","溫馨提示",MB_ICONQUESTION|MB_OKCANCEL|MB_DEFBUTTON2); radioDlg.m_checked=0;//設(shè)立默認(rèn)選項(xiàng) radioDlg.DoModal(); //if(radioDlg.m_checked!=BST_CHECKED)//沒有被抑制 if(0==radioDlg.m_checked)//第一種單選按鈕被選中 { ShowWindow(SW_HIDE); } else { EndDialog(1); }}4,程序初始設(shè)立SetTimer(1,1000,0);//1000ms觸發(fā)一次 //鬧鈴尚未設(shè)立,禁用查看鬧鈴時(shí)間菜單項(xiàng) if(!dlg.st) { //MessageBox("鬧鈴尚未設(shè)立!","溫馨提示",MB_OK|MB_ICONEXCLAMATION); GetMenu()->GetSubMenu(1)->EnableMenuItem(1,MF_BYPOSITION|MF_DISABLED|MF_GRAYED); } //設(shè)立鈴聲開/關(guān)標(biāo)記菜單項(xiàng) bsound=TRUE; bend=FALSE;//鈴聲與否播放完 if(bsound) { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_CHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_UNCHECKED); } else { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_UNCHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_CHECKED); } //出錯(cuò)了 /*CTimedate; CStringdate1; date1.Format("%d%d%d",date.GetYear(),date.GetMonth(),date.GetDay()); SetDlgItemText(IDC_STATIC_DATE,date1);//把日期顯示在控件上*/ SYSTEMTIME sysTime;GetLocalTime(&sysTime);CStringstrMsg; strMsg.Format("今天是:%d年%d月%d日",sysTime.wYear,sysTime.wMonth,sysTime.wDay); //MessageBox(strMsg); SetDlgItemText(IDC_STATIC_DATE,strMsg);//把日期顯示在控件上*/5,關(guān)閉鬧鐘聲音菜單選項(xiàng)voidCClock3Dlg::OnSoundOff(){ //TODO:Addyourcommandhandlercodehere bsound=FALSE; if(!bsound) { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_CHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_UNCHECKED); } else { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_UNCHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_CHECKED); }}6,啟動(dòng)鬧鐘聲音菜單選項(xiàng)voidCClock3Dlg::OnSoundOn(){ //TODO:Addyourcommandhandlercodehere bsound=TRUE; if(bsound) { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_CHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_UNCHECKED); } else { GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_ON,MF_BYCOMMAND|MF_UNCHECKED); GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_SOUND_OFF,MF_BYCOMMAND|MF_CHECKED); }}7,鬧鈴時(shí)間到彈出窗口函數(shù)voidCClock3Dlg::OnTimer(UINTnIDEvent){ //TODO:Addyourmessagehandlercodehereand/orcalldefault CTimetime=CTime::GetCurrentTime(); CStringtime1; staticintcount=0; //inta=dlg.m_minute; //SetDlgItemInt(IDC_EDIT1,a,FALSE);//無符號(hào)數(shù)輸出 time1=time.Format("%H時(shí)%M分%S秒"); SetDlgItemText(IDC_STATIC_currenttime,time1);//把系統(tǒng)時(shí)間顯示在控件上 if(!bsound) { PlaySound(NULL,NULL,NULL);//關(guān)閉鈴聲 } if(time.GetHour()==dlg.m_hour&&time.GetMinute()==dlg.m_minute&&time.GetSecond()==dlg.m_second) { if(bsound) { bend=PlaySound(dlg.music,NULL,SND_FILENAME|SND_ASYNC); MessageBox("鬧鈴時(shí)間到了!\n\n鈴聲:"+dlg.music,"溫馨提示"); } else { PlaySound(NULL,NULL,NULL); MessageBox("鬧鈴時(shí)間到了!\n\n鈴聲已關(guān)!","溫馨提示"); } count=0;//從0開始計(jì)數(shù) } count++; if(bend&&(0==count%340)) { PlaySound(NULL,NULL,NULL);//鈴聲播放完,釋放內(nèi)存 bend=FALSE; } CDialog::OnTimer(nIDEvent);}8,calendarcontrol控件,光標(biāo)轉(zhuǎn)到今天voidCClock3Dlg::OnToday(){ //TODO:Addyourcontrolnotificationhandlercodehere //轉(zhuǎn)到今天 //withaCOleDateTime/*COleDateTimedt1(1998,3,15,0,0,0);m_monthc.SetCurSel(dt1);*///withaCTime/*CTimedt2(1998,3,15,0,0,0);m_monthc.SetCurSel(dt2);*///withaSYSTEMTIMEstructureSYSTEMTIMEsysTime;//seteverythingtozeromemset(&sysTime,0,sizeof(sysTime));GetLocalTime(&sysTime);//exceptforthedatewewant//sysTime.wYear=1998;//sysTime.wMonth=3;//sysTime.wDay=15;m_monthc.SetCurSel(&sysTime);}9,初始化設(shè)立時(shí)間函數(shù)BOOLCSettimeDlg::OnInitDialog(){ CDialog::OnInitDialog(); //TODO:Addextrainitializationhere //長度限制/* m_sthour.SetLimitText(2); m_stminute.SetLimitText(2); m_stsecond.SetLimitText(2);*//* m_hour=0; m_minute=0; m_second=0;*/ m_btnSetMusic.SetIcon(IDI_ICON2,(int)BTNST_AUTO_GRAY); m_btnSetMusic.DrawBorder(FALSE); music=""; bsetmusic=FALSE; CStringstr=""; for(inti=0;i<24;i++) { str.Format("%02d",i); m_cmbHour.AddString(str); } m_cmbHour.SetCurSel(0); for(intj=0;j<60;j++) { str.Format("%02d",j); m_cmbMinute.AddString(str); } m_cmbMinute.SetCurSel(0); for(i
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國伏格列波糖數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025-2030年(全新版)中國纖維食品市場(chǎng)未來發(fā)展趨勢(shì)及前景調(diào)研分析報(bào)告
- 2025-2030年中國順酐市場(chǎng)運(yùn)行動(dòng)態(tài)分析與營銷策略研究報(bào)告
- 2025-2030年中國防水建材市場(chǎng)運(yùn)行現(xiàn)狀及發(fā)展前景預(yù)測(cè)報(bào)告
- 2025-2030年中國輪轂電機(jī)驅(qū)動(dòng)電動(dòng)汽車行業(yè)未來發(fā)展趨勢(shì)及前景調(diào)研分析報(bào)告
- 塑料在通訊設(shè)備材料的應(yīng)用考核試卷
- 園林金屬工具企業(yè)文化建設(shè)考核試卷
- 傳動(dòng)軸的扭轉(zhuǎn)振動(dòng)分析與控制考核試卷
- 2025年度文化創(chuàng)意產(chǎn)業(yè)園區(qū)運(yùn)營勞務(wù)合同
- 供應(yīng)鏈案例分析模板考核試卷
- 《如何存款最合算》課件
- 2023年全國統(tǒng)一高考數(shù)學(xué)甲卷【文科+理科】試題及答案解析
- 社區(qū)團(tuán)支部工作計(jì)劃
- 廢品處置招標(biāo)書
- GA/T 1280-2024銀行自助設(shè)備安全性規(guī)范
- 數(shù)據(jù)標(biāo)注基地項(xiàng)目實(shí)施方案
- 教培行業(yè)研究系列(七):出國考培的再研究供需變化的新趨勢(shì)
- 靜脈治療??谱o(hù)士競聘
- 2024年第一季度醫(yī)療安全(不良)事件分析報(bào)告
- 中醫(yī)課件英語教學(xué)課件
- 《哪吒鬧?!冯娪百p析
評(píng)論
0/150
提交評(píng)論