【摘要】本文以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)为常数,变量名能够定为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,甚至是其它语言,其它开发环境的序幕!

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

C++“窗体”程序设计启蒙的更多相关文章

  1. C++“窗体”程序设计启蒙(之二)

    [摘要]本文适合已经完整学习了C++面向对象机制,但在开发窗体程序方面还是零基础的同学.通过本文的引导进行实践体验,目的是消除同学们开发窗体程序的神奇感,为下一步的自学找到感觉.同一时候,能更深入地体 ...

  2. C#窗体-猜数字

    1.用到的控件:groupbox.label.textbox.button.menustrip等 2.实现的功能,随机产生一个数字,输入自己猜的答案,判断是否猜对. 3.运行结果 4.代码 using ...

  3. C#窗体控件简介ListBox(需整理)

    ListBox 控件 ListBox 控件又称列表框,它显示一个项目列表供用户选择.在列表框中,用户 一次可以选择一项,也可以选择多项. 1.常用属性: (1) Items属性: 用于存放列表框中的列 ...

  4. C#窗体控件简介ListBox

    ListBox 控件 ListBox 控件又称列表框,它显示一个项目列表供用户选择.在列表框中,用户 一次可以选择一项,也可以选择多项. 1.常用属性: (1) Items属性: 用于存放列表框中的列 ...

  5. C#常用控件介绍

                                                  目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTe ...

  6. winFrom 常用控件属性及方法介绍

    目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTextBox控件 5.NumericUpDown控件 6.Button(按钮)控件 7.Gro ...

  7. C#控件及常用设计整

    C#控件及常用设计整 1.窗体    1 2.Label 控件    3 3.TextBox 控件    4 4.RichTextBox控件    5 5.NumericUpDown 控件    7 ...

  8. WWF3事件类型活动<第三篇>

    WWF将工作流分为两大类: 面向Human:在工作流运行时通过用户对外部应用程序的操作来影响工作流的业务流转. 面向System:应用程序控制流程. 工作流与应用程序都是可以单独存在的,因此它们之间的 ...

  9. C# 常用控件及单击事件

    1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2)WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三种: No ...

随机推荐

  1. OpenCV Haar AdaBoost源代码改进(比EMCV快6倍)

    这几天研究了OpenCV源代码 Haar AdaBoost算法,作了一下改进 1.去掉了全部动态分配内存的操作.对嵌入式系统有一定的速度提升 2.凝视覆盖了大量关键代码 3.降低了代码一半的体积,而且 ...

  2. Enum变量值的Discretion

    有些时候,某个方法的返回值是个枚举类型,比如描述登录结果: public enum LoginResult { Success, WrongPassword, } 当前段UI获取到登陆方法的返回结果时 ...

  3. [ACM] hdu 5045 Contest (减少国家Dp)

    Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...

  4. javascript 的bind/apply/call性能

    javascript有两种使用频率非常高的三个内置的功能:bind/apply/call.许多技术是基于高点,这些功能实现.这三个功能被用来改变的功能运行环境.从而达到代码复用的目的. 先来所说bin ...

  5. js匀速运动停止条件

    匀速运动,怎么让它到达指定位置时停止呢? 原理: 1,物体和目标的差值距离小于等于速度时,即停止 2,接着让物体移动位置等于目标位置 示例:匀速运动停止 html部分 <input type=& ...

  6. 隐藏快捷方式扩展名(.lnk)

    自从装了Windows 7操作系统以后,有一个问题一直困扰着我.当我去掉“目录选项中”的“隐藏已知文件类型的扩展名”选项的“√”之后,桌面上的快捷方式的扩展名也出来了,看上去非常不爽.记得在XP.Vi ...

  7. java: org.luaj.vm2.LuaError:XXX module not found lua脚本初始化出错(转)

    我遇到这个错误是因为在引用脚本目录时,设置错了位置.设置成脚本所在目录的上级目录. lua使用和加载初始化方法 在java中使用lua,使用需要引用 luaj-jse-2.0.2.jar 同时需要使用 ...

  8. 【iOS】文件上传小记

    iOS由该系统提供API可以实现可以实现文件的上传和下载,有两种方法来. NSURLConnection与NSURLSession. 当中NSURLConnection是使用非常久的的一种方式.NSU ...

  9. 离PACKET_INp获取信息acket data

         于Floodlight模块假设要packet in消息,就对对应的消息类型进行监听就可以.然后在receive方法中就能够操纵这个上传上来的packet_in.      关键代码:   E ...

  10. Vc6.0打开该文件坠毁

    这是一个微软bug,下面是用户给出的溶液: http://blog.163.com/wjatnx@yeah/blog/static/12758622820138110530322/ http://bl ...