C++“窗口”程序設(shè)計(jì)啟蒙(案例詳細(xì)說明)
發(fā)表時(shí)間:2023-07-22 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]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?
- #include<iostream>
- #include<cmath>
- usingnamespace std;
- int main( )
- {
- float a,b,c,x1,x2;
- cin>>a>>b>>c;
- if ((b*b-4*a*c)>=0)
- {
- if((b*b-4*a*c)>0)
- {
- x1=(-b+sqrt(b*b-4*a*c))/(2*a);
- x2=(-b-sqrt(b*b-4*a*c))/(2*a);
- cout<<"兩個(gè)不相等的實(shí)根分別是:x1="<<x1<<",""x2="<<x2<<endl;
- }
- else
- {
- x1=-b/(2*a);
- cout<<"兩個(gè)相等的實(shí)根,x1=x2="<<x1<<endl;
- }
- }
- else
- cout<<"方程無實(shí)根"<<endl;
- return 0;
- }
-
二、開發(fā)窗口版程序
1、新建MFCAPP工程
新建工程,選擇MFC APPWizard[exe],點(diǎn)確定:
選擇基本對(duì)話框
下一步
再下一步
完成
IDE會(huì)顯示工程骨架。點(diǎn)確定
2、安排窗口界面中的控件
出現(xiàn)設(shè)計(jì)界面
在對(duì)話框中添加和編輯控件:將”控件”拖到窗口中,點(diǎn)右鍵修改屬性,下圖將拖入的靜態(tài)文本的“標(biāo)題”改為a,后將放置一個(gè)編輯輯框,用于輸入a的值。靜態(tài)文本起提示的作用。
加入3個(gè)靜態(tài)文本控件和編輯框控件,分別用于輸入方程的三個(gè)系數(shù);1個(gè)“求解”按鈕,將來點(diǎn)擊后可以完成求解;加入2個(gè)靜態(tài)文本控件和編輯框控件,分別用于輸出方程的解。
在控件上點(diǎn)右鍵,查看屬性,本例中不做修改,確認(rèn)輸入a、b、c的編輯框的ID分別為IDC_EDIT1、IDC_EDIT2和IDC_EDIT3,用于輸出結(jié)果的兩個(gè)編輯框的ID分別為IDC_EDIT4、和IDC_EDIT5。
測(cè)試對(duì)話框:在layout(布局)菜單中,選擇tset(測(cè)試)命令,可以看到將來運(yùn)行時(shí)的外觀。
3、將編輯框控件與變量綁定
下面需要完成核心的功能,如何求解方程。
為了讓程序從窗口的編輯框中提取出輸入的值,要設(shè)置變量,并與控件綁定。
在設(shè)計(jì)窗口中點(diǎn)右鍵,選擇ClassWizard(建立類向?qū)В?/p>
點(diǎn)擊MemberVariables標(biāo)簽,設(shè)置各個(gè)控件對(duì)應(yīng)的變量
雙擊IDC_EDIT1,為其添加對(duì)應(yīng)的變量,變量名為m_a,變量類型為double,按下圖輸入。
同法為其他控件設(shè)置變量
4、為按鈕設(shè)置將來點(diǎn)擊后要執(zhí)行的程序
切換到Message Maps標(biāo)簽頁
為按鈕添加BN_CLICKED消息映射:點(diǎn)擊Messages:框中的BN_CLICKED,再單擊右側(cè)的“Add Function…”按鈕,在新出現(xiàn)的彈出式窗口中點(diǎn)OK。
之后可以看到加入了Member Functions
雙擊新增加的成員函數(shù),現(xiàn)在需要輸入程序了
輸入的程序這樣的,程序設(shè)計(jì)的方法還是老一套,不過是增加了控件與變量傳值的要求,變量用的是與控件綁定的變量:
5、運(yùn)行程序
運(yùn)行程序,結(jié)果是
結(jié)果還可以是:
界面其實(shí)還不好看,到圖書館借些書,按著例子做幾個(gè)就有感覺了。
結(jié)語
看一個(gè)業(yè)界大牛的界面:
界面、窗口并非應(yīng)用的核心。編程思想和方法是核心,現(xiàn)階段優(yōu)先解決編程方法的提高,如果時(shí)間有限,窗口程序可以以后解決。
還有,打好基礎(chǔ),有利于你理解向?qū)傻募軜?gòu),這是我們的長期目標(biāo)。
三、練習(xí)
1、用if語句編寫選擇結(jié)構(gòu)的程序,完成下面的分段函數(shù)的求值
。ㄌ崾荆x1(1)、x1(2)為常數(shù),變量名可以定為x1和x2。)
設(shè)計(jì)成的窗口版程序可以如下圖(兩個(gè)常量的值也可以調(diào)整):
2、編寫多分支選擇結(jié)構(gòu)程序,輸入個(gè)人月收入總額,計(jì)算出他本月應(yīng)繳稅款和稅后收入。
所得稅計(jì)算方法:從2011年9月1日起,我國調(diào)整個(gè)人所得稅起征點(diǎn);鶖(shù)上調(diào)為3500元,超出部分按以下7級(jí)計(jì)算。
序號(hào)
|
收入范圍
|
稅率
|
速算扣除數(shù)
|
1
|
超過0至1500
|
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è)人所得稅窗口版程序可以形如:
【拓展背影——速算扣除數(shù)】與解題已無太關(guān)系,但是可以了解一下
速算扣除數(shù)是指用快捷方法計(jì)算稅款時(shí),可以扣除的數(shù)額。個(gè)人所得稅的計(jì)算,可以將應(yīng)納稅所得額分成不同級(jí)距和相應(yīng)的稅率來計(jì)算。如扣除3500元后的應(yīng)納稅所得額在1500元以內(nèi)的,按3%稅率計(jì)算,1500-4500元之間的部分(即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%:2755,35%: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í)