C++“窗口”程序設計啟蒙(案例詳細說明)
發表時間:2023-07-22 來源:明輝站整理相關軟件相關文章人氣:
[摘要]C++“窗口”程序設計啟蒙(實例詳解)C++“窗口”程序設計啟蒙(實例詳解)想要繼續深入?可以借些書自學了。有了課堂中...
C++“窗口”程序設計啟蒙(實例詳解)
C++“窗口”程序設計啟蒙(實例詳解)想要繼續深入?可以借些書自學了。有了課堂中程序設計技術的支撐,不需要什么其他基礎,只要能改變學習觀念,你可以先行一步,體會更多的樂趣。在大學里,圍繞課堂,展開自學,其力無窮。
實際上,隨著對程序設計技術的深入學習,尤其是學習了面向對象程序設計技術之后,我們的眼光將放在理解和運用MFC去開發系統。將來,這些由系統自動生成的程序你可以自己手工編寫出來。C++是講究效率的,手工編寫而非由IDE自動生成,是C++程序員的追求。專業和非專業的區別就在這里。
用求解一元二次方程作為實例,展示窗口式程序的開發過程,獲得初步體驗。寫作目的包括:(1)讓學生通過模仿,開發出類似風格的窗口程序;(2)以此為起點,課外通過案例教程等參考資料,學習開發更多的功能實用的程序;(3)體會到程序設計能力的核心并不在界面,從而能潛心提高程序設計的基本功和認真學習計算機科學的基礎理論。本文以C++菜菜鳥(只需要學習了C++數據類型和控制結構即可)為目標讀者。
在程序設計學習過程中,尤其對于計算機相關專業的學生,總是從語言、程序結構、算法等學起,然后再結合工程實際,逐漸涉及窗口、界面的設計。不少同學失去耐心,甚至非常傷心:“為什么要讓我們面對黑洞洞的DOS窗口。
如果從表面上,制作一個窗口程序并非難事。于是有了本文,目的就在于讓零基礎的童鞋們體驗一次,過把癮,然后能將主要精力投入到程序設計課中去,認認真真地打好編程序的基本功。大學學習有很強的階段性,這個階段可以不將設計窗口程序作為目標。
可能將來你會從事并不強調效率的一些應用開發,但精湛的程序設計技術、扎實的算法功底、良好的編程風格,是基本功,是看家本領。
不管怎么說,程序猿菜鳥們還是猴急猴急的。那就用一個例子將開發這種程序的過程演示一下。同學們可以模仿著做一遍。以后的作業、上機任務也可以照葫蘆畫瓢做成窗口版的。
下面,以VC++6.0為開發平臺,開始這趟體驗之旅。
一、問題:求一元二次方程式ax2+bx+c=0的根。a,b,c的值在運行時由鍵盤輸入。
可以寫出如下的程序完成求解:
[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<<"兩個不相等的實根分別是:x1="<<x1<<",""x2="<<x2<<endl;
- }
- else
- {
- x1=-b/(2*a);
- cout<<"兩個相等的實根,x1=x2="<<x1<<endl;
- }
- }
- else
- cout<<"方程無實根"<<endl;
- return 0;
- }
-
二、開發窗口版程序
1、新建MFCAPP工程
新建工程,選擇MFC APPWizard[exe],點確定:

選擇基本對話框

下一步

再下一步

完成

IDE會顯示工程骨架。點確定

2、安排窗口界面中的控件
出現設計界面

在對話框中添加和編輯控件:將”控件”拖到窗口中,點右鍵修改屬性,下圖將拖入的靜態文本的“標題”改為a,后將放置一個編輯輯框,用于輸入a的值。靜態文本起提示的作用。

加入3個靜態文本控件和編輯框控件,分別用于輸入方程的三個系數;1個“求解”按鈕,將來點擊后可以完成求解;加入2個靜態文本控件和編輯框控件,分別用于輸出方程的解。

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

測試對話框:在layout(布局)菜單中,選擇tset(測試)命令,可以看到將來運行時的外觀。

3、將編輯框控件與變量綁定
下面需要完成核心的功能,如何求解方程。
為了讓程序從窗口的編輯框中提取出輸入的值,要設置變量,并與控件綁定。
在設計窗口中點右鍵,選擇ClassWizard(建立類向導)

點擊MemberVariables標簽,設置各個控件對應的變量

雙擊IDC_EDIT1,為其添加對應的變量,變量名為m_a,變量類型為double,按下圖輸入。

同法為其他控件設置變量

4、為按鈕設置將來點擊后要執行的程序
切換到Message Maps標簽頁

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

之后可以看到加入了Member Functions

雙擊新增加的成員函數,現在需要輸入程序了

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

5、運行程序
運行程序,結果是

結果還可以是:

界面其實還不好看,到圖書館借些書,按著例子做幾個就有感覺了。
結語
看一個業界大牛的界面:

界面、窗口并非應用的核心。編程思想和方法是核心,現階段優先解決編程方法的提高,如果時間有限,窗口程序可以以后解決。
還有,打好基礎,有利于你理解向導生成的架構,這是我們的長期目標。
三、練習
1、用if語句編寫選擇結構的程序,完成下面的分段函數的求值

(提示:x1(1)、x1(2)為常數,變量名可以定為x1和x2。)
設計成的窗口版程序可以如下圖(兩個常量的值也可以調整):

2、編寫多分支選擇結構程序,輸入個人月收入總額,計算出他本月應繳稅款和稅后收入。
所得稅計算方法:從2011年9月1日起,我國調整個人所得稅起征點。基數上調為3500元,超出部分按以下7級計算。
序號
|
收入范圍
|
稅率
|
速算扣除數
|
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
|
個人所得稅計算方法:個人所得稅=應納稅所得額*稅率-速算扣除數,其中:應納稅所得額=收入總額-不征稅收入-免稅收入-各項扣除。
本題中忽略免稅收入和各項扣除,不征稅收入即起征點基數3500元,所以有:個人所得稅=(收入總額-3500)*稅率-速算扣除數
例如:王某月收入總額3600元,個人所得稅=(3600-3500)*3%=3元,李某月收入13500元,個人所得稅=(13500-3500)*25%-1005=2500-1005=1495元。
本題的關鍵是如何根據應納稅所得額,確定稅率和速算扣除數。
個人所得稅窗口版程序可以形如:

【拓展背影——速算扣除數】與解題已無太關系,但是可以了解一下
速算扣除數是指用快捷方法計算稅款時,可以扣除的數額。個人所得稅的計算,可以將應納稅所得額分成不同級距和相應的稅率來計算。如扣除3500元后的應納稅所得額在1500元以內的,按3%稅率計算,1500-4500元之間的部分(即3000元),按10%的稅率計算。
如某人工資扣除3500元后的應納稅所得額是2200元,則稅款計算方法為:1500*3%+700*10% =115元。個人所得稅的計算,也可以將應納稅所得額直接按對應的稅率來速算,但要扣除一個速算扣除數,否則會多計算稅款。
如某人工資扣除3500元后的應納稅所得額是2200元,2200元對應的稅率是10%,則稅款速算方法為:2200*10%-105=115元。這里的105就是速算扣除數,因為2200元中,有1500元多計算了7%的稅款,需要減去。其他稅率所對應的速算扣除數分別是:20%:555,25%:1005,30%:2755,35%:5505,45%:13505。
四、后記
基于此文的實踐表明,這種體驗讓同學們安靜了一些。此文初成于2011年10月,感受到了同學們剛學了幾天C++,就不滿足于黑框框,不理解為何不把他們帶入窗口世界。用黑框框的目的自然是在黑框框之外的。即使同學們已經和黑框框有了深厚的感情,說聲ByeBye只是遲早的事情。我當時想,是需要讓同學們通過體驗知道一下黑框框和窗口中世界的關系了。但限于初學者的背景,這項工作不是講講就做通得,需要的是同學們的體驗。
近日,面向對象的程序設計學習已經到了尾聲,我準備再次擬一個適合同學們目前水平(了解了面向對象機制,但無任何開發經驗和經歷)的指導書,在窗口式程序開發和面向對象機制方面讓同學們有更多的體驗,也借此揭開課外自學MFC,甚至是其他語言,其他開發環境的序幕!
希望我的這個大家有所幫助,記得在這篇日志下面或者主頁的留言板中留下你們的建議和反饋,這些對我們是最寶貴的財富,預祝大家快樂!有問題大家積極回帖討論下哈!
學習教程快速掌握從入門到精通的電腦知識