明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

C++“窗口”程序設(shè)計(jì)啟蒙(案例詳細(xì)說明)

[摘要]C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)想要繼續(xù)深入?可以借些書自學(xué)了。有了課堂中...

C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)

C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)想要繼續(xù)深入?可以借些書自學(xué)了。有了課堂中程序設(shè)計(jì)技術(shù)的支撐,不需要什么其他基礎(chǔ),只要能改變學(xué)習(xí)觀念,你可以先行一步,體會(huì)更多的樂趣。在大學(xué)里,圍繞課堂,展開自學(xué),其力無窮。

實(shí)際上,隨著對(duì)程序設(shè)計(jì)技術(shù)的深入學(xué)習(xí),尤其是學(xué)習(xí)了面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)之后,我們的眼光將放在理解和運(yùn)用MFC去開發(fā)系統(tǒng)。將來,這些由系統(tǒng)自動(dòng)生成的程序你可以自己手工編寫出來。C++是講究效率的,手工編寫而非由IDE自動(dòng)生成,是C++程序員的追求。專業(yè)和非專業(yè)的區(qū)別就在這里。

用求解一元二次方程作為實(shí)例,展示窗口式程序的開發(fā)過程,獲得初步體驗(yàn)。寫作目的包括:(1)讓學(xué)生通過模仿,開發(fā)出類似風(fēng)格的窗口程序;(2)以此為起點(diǎn),課外通過案例教程等參考資料,學(xué)習(xí)開發(fā)更多的功能實(shí)用的程序;(3)體會(huì)到程序設(shè)計(jì)能力的核心并不在界面,從而能潛心提高程序設(shè)計(jì)的基本功和認(rèn)真學(xué)習(xí)計(jì)算機(jī)科學(xué)的基礎(chǔ)理論。本文以C++菜菜鳥(只需要學(xué)習(xí)了C++數(shù)據(jù)類型和控制結(jié)構(gòu)即可)為目標(biāo)讀者。


 

  在程序設(shè)計(jì)學(xué)習(xí)過程中,尤其對(duì)于計(jì)算機(jī)相關(guān)專業(yè)的學(xué)生,總是從語言、程序結(jié)構(gòu)、算法等學(xué)起,然后再結(jié)合工程實(shí)際,逐漸涉及窗口、界面的設(shè)計(jì)。不少同學(xué)失去耐心,甚至非常傷心:“為什么要讓我們面對(duì)黑洞洞的DOS窗口。

  如果從表面上,制作一個(gè)窗口程序并非難事。于是有了本文,目的就在于讓零基礎(chǔ)的童鞋們體驗(yàn)一次,過把癮,然后能將主要精力投入到程序設(shè)計(jì)課中去,認(rèn)認(rèn)真真地打好編程序的基本功。大學(xué)學(xué)習(xí)有很強(qiáng)的階段性,這個(gè)階段可以不將設(shè)計(jì)窗口程序作為目標(biāo)。

  可能將來你會(huì)從事并不強(qiáng)調(diào)效率的一些應(yīng)用開發(fā),但精湛的程序設(shè)計(jì)技術(shù)、扎實(shí)的算法功底、良好的編程風(fēng)格,是基本功,是看家本領(lǐng)。

  不管怎么說,程序猿菜鳥們還是猴急猴急的。那就用一個(gè)例子將開發(fā)這種程序的過程演示一下。同學(xué)們可以模仿著做一遍。以后的作業(yè)、上機(jī)任務(wù)也可以照葫蘆畫瓢做成窗口版的。

  下面,以VC++6.0為開發(fā)平臺(tái),開始這趟體驗(yàn)之旅。


 

  一、問題:求一元二次方程式ax2+bx+c=0的根。a,b,c的值在運(yùn)行時(shí)由鍵盤輸入。

  可以寫出如下的程序完成求解:

[cpp] view plaincopyprint?
  1. #include<iostream>
  2. #include<cmath>
  3. usingnamespace std;
  4. int main( )
  5. {
  6. float a,b,c,x1,x2;
  7. cin>>a>>b>>c;
  8. if ((b*b-4*a*c)>=0)
  9. {
  10. if((b*b-4*a*c)>0)
  11. {
  12. x1=(-b+sqrt(b*b-4*a*c))/(2*a);
  13. x2=(-b-sqrt(b*b-4*a*c))/(2*a);
  14. cout<<"兩個(gè)不相等的實(shí)根分別是:x1="<<x1<<",""x2="<<x2<<endl;
  15. }
  16. else
  17. {
  18. x1=-b/(2*a);
  19. cout<<"兩個(gè)相等的實(shí)根,x1=x2="<<x1<<endl;
  20. }
  21. }
  22. else
  23. cout<<"方程無實(shí)根"<<endl;
  24. return 0;
  25. }
  26.  


 


 

  二、開發(fā)窗口版程序

  1、新建MFCAPP工程

  新建工程,選擇MFC APPWizard[exe],點(diǎn)確定:

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  選擇基本對(duì)話框

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  下一步

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  再下一步

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  完成

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  IDE會(huì)顯示工程骨架。點(diǎn)確定

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  2、安排窗口界面中的控件

  出現(xiàn)設(shè)計(jì)界面

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  在對(duì)話框中添加和編輯控件:將”控件”拖到窗口中,點(diǎn)右鍵修改屬性,下圖將拖入的靜態(tài)文本的“標(biāo)題”改為a,后將放置一個(gè)編輯輯框,用于輸入a的值。靜態(tài)文本起提示的作用。

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  加入3個(gè)靜態(tài)文本控件和編輯框控件,分別用于輸入方程的三個(gè)系數(shù);1個(gè)“求解”按鈕,將來點(diǎn)擊后可以完成求解;加入2個(gè)靜態(tài)文本控件和編輯框控件,分別用于輸出方程的解。

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  在控件上點(diǎn)右鍵,查看屬性,本例中不做修改,確認(rèn)輸入a、b、c的編輯框的ID分別為IDC_EDIT1、IDC_EDIT2和IDC_EDIT3,用于輸出結(jié)果的兩個(gè)編輯框的ID分別為IDC_EDIT4、和IDC_EDIT5。

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  測(cè)試對(duì)話框:在layout(布局)菜單中,選擇tset(測(cè)試)命令,可以看到將來運(yùn)行時(shí)的外觀。

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  3、將編輯框控件與變量綁定

  下面需要完成核心的功能,如何求解方程。

  為了讓程序從窗口的編輯框中提取出輸入的值,要設(shè)置變量,并與控件綁定。

  在設(shè)計(jì)窗口中點(diǎn)右鍵,選擇ClassWizard(建立類向?qū)В?/p>

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  點(diǎn)擊MemberVariables標(biāo)簽,設(shè)置各個(gè)控件對(duì)應(yīng)的變量

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  雙擊IDC_EDIT1,為其添加對(duì)應(yīng)的變量,變量名為m_a,變量類型為double,按下圖輸入。

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  同法為其他控件設(shè)置變量

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)

  4、為按鈕設(shè)置將來點(diǎn)擊后要執(zhí)行的程序

  切換到Message Maps標(biāo)簽頁

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  為按鈕添加BN_CLICKED消息映射:點(diǎn)擊Messages:框中的BN_CLICKED,再單擊右側(cè)的“Add Function…”按鈕,在新出現(xiàn)的彈出式窗口中點(diǎn)OK。

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)

  之后可以看到加入了Member Functions

C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  雙擊新增加的成員函數(shù),現(xiàn)在需要輸入程序了

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)

  輸入的程序這樣的,程序設(shè)計(jì)的方法還是老一套,不過是增加了控件與變量傳值的要求,變量用的是與控件綁定的變量:

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  5、運(yùn)行程序

  運(yùn)行程序,結(jié)果是

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  結(jié)果還可以是:

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  界面其實(shí)還不好看,到圖書館借些書,按著例子做幾個(gè)就有感覺了。

  結(jié)語

  看一個(gè)業(yè)界大牛的界面:

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

  界面、窗口并非應(yīng)用的核心。編程思想和方法是核心,現(xiàn)階段優(yōu)先解決編程方法的提高,如果時(shí)間有限,窗口程序可以以后解決。

  還有,打好基礎(chǔ),有利于你理解向?qū)傻募軜?gòu),這是我們的長期目標(biāo)。


 

  三、練習(xí)

  1、用if語句編寫選擇結(jié)構(gòu)的程序,完成下面的分段函數(shù)的求值

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)
 

 。ㄌ崾荆x1(1)、x1(2)為常數(shù),變量名可以定為x1x2。)

  設(shè)計(jì)成的窗口版程序可以如下圖(兩個(gè)常量的值也可以調(diào)整):

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)

  2、編寫多分支選擇結(jié)構(gòu)程序,輸入個(gè)人月收入總額,計(jì)算出他本月應(yīng)繳稅款和稅后收入。

  所得稅計(jì)算方法:從201191日起,我國調(diào)整個(gè)人所得稅起征點(diǎn);鶖(shù)上調(diào)為3500元,超出部分按以下7級(jí)計(jì)算。

序號(hào)

收入范圍

稅率

速算扣除數(shù)

1

超過01500

3%

0

2

超過1500元至4500元的部分

10%

105

3

超過4500元至9000元的部分

20%

555

4

超過9,000元至35,000元的部分

25%

1005

5

超過35,000元至55,000元的部分

30%

2755

6

超過55,000元至80,000元的部分

35%

5505

7

超過80,000以上

45%

13505

  個(gè)人所得稅計(jì)算方法:個(gè)人所得稅=應(yīng)納稅所得額*稅率-速算扣除數(shù),其中:應(yīng)納稅所得額=收入總額-不征稅收入-免稅收入-各項(xiàng)扣除。

  本題中忽略免稅收入和各項(xiàng)扣除,不征稅收入即起征點(diǎn)基數(shù)3500元,所以有:個(gè)人所得稅=(收入總額-3500)*稅率-速算扣除數(shù)

  例如:王某月收入總額3600元,個(gè)人所得稅=3600-3500*3%=3元,李某月收入13500元,個(gè)人所得稅=13500-3500*25%-1005=2500-1005=1495元。

  本題的關(guān)鍵是如何根據(jù)應(yīng)納稅所得額,確定稅率和速算扣除數(shù)。

  個(gè)人所得稅窗口版程序可以形如:

  C++“窗口”程序設(shè)計(jì)啟蒙(實(shí)例詳解)

  【拓展背影——速算扣除數(shù)】與解題已無太關(guān)系,但是可以了解一下

  速算扣除數(shù)是指用快捷方法計(jì)算稅款時(shí),可以扣除的數(shù)額。個(gè)人所得稅的計(jì)算,可以將應(yīng)納稅所得額分成不同級(jí)距和相應(yīng)的稅率來計(jì)算。如扣除3500元后的應(yīng)納稅所得額在1500元以內(nèi)的,按3%稅率計(jì)算,15004500元之間的部分(即3000元),按10%的稅率計(jì)算。

  如某人工資扣除3500元后的應(yīng)納稅所得額是2200元,則稅款計(jì)算方法為:1500*3%+700*10% =115元。個(gè)人所得稅的計(jì)算,也可以將應(yīng)納稅所得額直接按對(duì)應(yīng)的稅率來速算,但要扣除一個(gè)速算扣除數(shù),否則會(huì)多計(jì)算稅款。

  如某人工資扣除3500元后的應(yīng)納稅所得額是2200元,2200元對(duì)應(yīng)的稅率是10%,則稅款速算方法為:2200*10%-105=115元。這里的105就是速算扣除數(shù),因?yàn)?/span>2200元中,有1500元多計(jì)算了7%的稅款,需要減去。其他稅率所對(duì)應(yīng)的速算扣除數(shù)分別是:20%555,25%1005,30%275535%5505,45%13505。
 


 

  四、后記

  基于此文的實(shí)踐表明,這種體驗(yàn)讓同學(xué)們安靜了一些。此文初成于2011年10月,感受到了同學(xué)們剛學(xué)了幾天C++,就不滿足于黑框框,不理解為何不把他們帶入窗口世界。用黑框框的目的自然是在黑框框之外的。即使同學(xué)們已經(jīng)和黑框框有了深厚的感情,說聲ByeBye只是遲早的事情。我當(dāng)時(shí)想,是需要讓同學(xué)們通過體驗(yàn)知道一下黑框框和窗口中世界的關(guān)系了。但限于初學(xué)者的背景,這項(xiàng)工作不是講講就做通得,需要的是同學(xué)們的體驗(yàn)。

近日,面向?qū)ο蟮某绦蛟O(shè)計(jì)學(xué)習(xí)已經(jīng)到了尾聲,我準(zhǔn)備再次擬一個(gè)適合同學(xué)們目前水平(了解了面向?qū)ο髾C(jī)制,但無任何開發(fā)經(jīng)驗(yàn)和經(jīng)歷)的指導(dǎo)書,在窗口式程序開發(fā)和面向?qū)ο髾C(jī)制方面讓同學(xué)們有更多的體驗(yàn),也借此揭開課外自學(xué)MFC,甚至是其他語言,其他開發(fā)環(huán)境的序幕!

希望我的這個(gè)大家有所幫助,記得在這篇日志下面或者主頁的留言板中留下你們的建議和反饋,這些對(duì)我們是最寶貴的財(cái)富,預(yù)祝大家快樂!有問題大家積極回帖討論下哈!
 


學(xué)習(xí)教程快速掌握從入門到精通的電腦知識(shí)