C++“窗体”程序设计启蒙

【摘要】本文以C++菜菜鸟(仅仅须要学习了C++数据类型和控制结构就可以)为目标读者,用求解一元二次方程作为实例,展示窗体式程序的开发过程,获得初步体验。写作目的包含:(1)让学生通过模仿,开发出类似风格的窗体程序;(2)以此为起点,课外通过案例教程等參考资料,学习开发很多其它的功能有用的程序;(3)体会到程序设计能力的核心并不在界面,从而能潜心提高程序设计的基本功和认真学习计算机科学的基础理论。

【相关博文】C++“窗体”程序设计启蒙(之二)


  在程序设计学习过程中,尤其对于计算机相关专业的学生,总是从语言、程序结构、算法等学起,然后再结合project实际,逐渐涉及窗体、界面的设计。不少同学失去耐心,甚至很伤心:“为什么要让我们面对黑洞洞的DOS窗体。

  假设从表面上,制作一个窗体程序并不是难事。于是有了本文,目的就在于让零基础的童鞋们体验一次,过把瘾,然后能将主要精力投入到程序设计课中去,认认真真地打好编程序的基本功。大学学习有非常强的阶段性,这个阶段能够不将设计窗体程序作为目标。

  实际上,随着对程序设计技术的深入学习,尤其是学习了面向对象程序设计技术之后,我们的眼光将放在理解和运用MFC去开发系统。将来,这些由系统自己主动生成的程序你能够自己手工编写出来。C++是讲究效率的,手工编写而非由IDE自己主动生成,是C++程序猿的追求。专业和非专业的差别就在这里。可能将来你会从事并不强调效率的一些应用开发,但精湛的程序设计技术、扎实的算法功底、良好的编程风格,是基本功,是看家本领。

  无论怎么说,程序员菜鸟们还是猴急猴急的。那就用一个样例将开发这样的程序的过程演示一下。同学们能够模仿着做一遍。以后的作业、上机任务也能够照葫芦画瓢做成窗体版的。想要继续深入?能够借些书自学了。有了课堂中程序设计技术的支撑,不须要什么其它基础,仅仅要能改变学习观念,你能够先行一步,体会很多其它的乐趣。在大学里,环绕课堂,展开自学,其力无穷。

  以下,以VC++6.0为开发平台,開始这趟体验之旅。


  一、问题:求一元二次方程式ax2+bx+c=0的根。a,b,c的值在执行时由键盘输入。

  能够写出例如以下的程序完毕求解:

#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、新建MFCAPPproject

  新建project,选择MFC APPWizard[exe],点确定:

  

  选择基本对话框

  

  下一步

  

  再下一步

  

  完毕

  

  IDE会显示project骨架。点确定

  

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

  出现设计界面

  

  在对话框中加入和编辑控件:将”控件”拖到窗体中,点右键改动属性,下图将拖入的静态文本的“标题”改为a,后将放置一个编辑辑框,用于输入a的值。静态文本起提示的作用。

  

  增加3个静态文本控件和编辑框控件,分别用于输入方程的三个系数;1个“求解”button,将来点击后能够完毕求解;增加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、为button设置将来点击后要运行的程序

  切换到Message Maps标签页

  

  为button加入BN_CLICKED消息映射:点击Messages:框中的BN_CLICKED,再单击右側的“Add Function…”button,在新出现的弹出式窗体中点OK。

   

   之后能够看到增加了Member Functions


  双击新添加的成员函数,如今须要输入程序了

   

   输入的程序这种,程序设计的方法还是老一套,只是是添加了控件与变量传值的要求,变量用的是与控件绑定的变量:

  

  5、执行程序

  执行程序,结果是

  

  结果还能够是:

  

  界面事实上还不好看,到图书馆借些书,按着样例做几个就有感觉了。

  结语

  看一个业界大牛的界面:

  

  界面、窗体并不是应用的核心。编程思想和方法是核心,现阶段优先解决编程方法的提高,假设时间有限,窗体程序能够以后解决。

  还有,打好基础,有利于你理解向导生成的架构,这是我们的长期目标。


  三、练习

  1、用if语句编写选择结构的程序,完毕以下的分段函数的求值

  

  (提示:x1(1)x1(2)为常数,变量名能够定为x1x2。)

  设计成的窗体版程序能够例如以下图(两个常量的值也能够调整):

  

  2、编写多分支选择结构程序,输入个人月收入总额,计算出他本月应缴税款和税后收入。

  所得税计算方法:从201191日起,我国调整个人所得税起征点。基数上调为3500元,超出部分按下面7级计算。

序号

收入范围

税率

速算扣除数

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

 

  个人所得税计算方法:个人所得税=应纳税所得额*税率-速算扣除数,当中:应纳税所得额=收入总额-不征税收入-免税收入-各项扣除。

  本题中忽略免税收入和各项扣除,不征税收入即起征点基数3500元,所以有:个人所得税=(收入总额-3500)*税率-速算扣除数

  比如:王某月收入总额3600元,个人所得税=3600-3500*3%=3元,李某月收入13500元,个人所得税=13500-3500*25%-1005=2500-1005=1495元。

  本题的关键是怎样依据应纳税所得额,确定税率和速算扣除数。

  个人所得税窗体版程序能够形如:

  

   【拓展背影——速算扣除数】与解题已无太关系,可是能够了解一下

  速算扣除数是指用快捷方法计算税款时,能够扣除的数额。个人所得税的计算,能够将应纳税所得额分成不同级距和对应的税率来计算。如扣除3500元后的应纳税所得额在1500元以内的,按3%税率计算,15004500元之间的部分(即3000元),按10%的税率计算。

  如某人工资扣除3500元后的应纳税所得额是2200元,则税款计算方法为:1500*3%+700*10% =115元。个人所得税的计算,也能够将应纳税所得额直接按相应的税率来速算,但要扣除一个速算扣除数,否则会多计算税款。

  如某人工资扣除3500元后的应纳税所得额是2200元,2200元相应的税率是10%,则税款速算方法为:2200*10%-105=115元。这里的105就是速算扣除数,由于2200元中,有1500元多计算了7%的税款,须要减去。其它税率所相应的速算扣除数各自是:20%55525%100530%275535%550545%13505


  四、后记

  此文初成于2011年10月,感受到了同学们刚学了几天C++,就不满足于黑框框,不理解为何不把他们带入窗体世界。我当时想,是须要让同学们通过体验知道一下黑框框和窗体中世界的关系了。但限于刚開始学习的人的背景,这项工作不是讲讲就做通得,须要的是同学们的体验。基于此文的实践表明,这样的体验让同学们安静了一些。

  用黑框框的目的自然是在黑框框之外的。即使同学们已经和黑框框有了深厚的感情,说声ByeBye仅仅是迟早的事情。近日,面向对象的程序设计学习已经到了尾声,我准备再次拟一个适合同学们眼下水平(了解了面向对象机制,但无不论什么开发经验和经历)的指导书,在窗体式程序开发和面向对象机制方面让同学们有很多其它的体验,也借此揭开课外自学MFC,甚至是其它语言,其它开发环境的序幕!

  请关注最近将出炉的《增强版C++窗体程序设计启蒙》。


原文地址:https://www.cnblogs.com/mfrbuaa/p/4089077.html