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

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

【相关博文】我写的C++“窗口”程序设计启蒙(之二)  ,我的学生刘畅的报告点击打开链接,对初用VC++6.0,以及对英文界面怕怕的童鞋,有参考价值;邵帅和辛彬自主尝试了在VS2013下的开发,见点击打开链接点击打开链接

  在程序设计学习过程中,尤其对于计算机相关专业的学生,总是从语言、程序结构、算法等学起,然后再结合工程实际,逐渐涉及窗口、界面的设计。不少同学失去耐心,甚至非常伤心:“为什么要让我们面对黑洞洞的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、新建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,甚至是其他语言,其他开发环境的序幕!

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

时间: 2024-10-07 19:04:31

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

C++“窗口”程序设计启蒙(之二)

[摘要]本文适合已经完整学习了C++面向对象机制,但在开发窗口程序方面还是零基础的同学.通过本文的引导进行实践体验,目的是消除同学们开发窗口程序的神秘感,为下一步的自学找到感觉.同时,能更深入地体会到编程基本功的根源所在,在今后能自觉地学好专业基础课,而不是只浮躁地追求开发平台和表面的技能.文章最后给出进一步实践的建议. [相关博文]C++"窗口"程序设计启蒙(之一),,我的学生刘畅的报告点击打开链接,对初用VC++6.0,以及对英文界面怕怕的童鞋,有参考价值:邵帅和辛彬自主尝试了在V

C++程序设计-第15周 数据结构扩展与GUI开发体验

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [目的] 1. 体验用面向对象的方法操作数组和动态链表2. 体验窗口程序的实现 第一部分 引言 大学中的学习死守着课本非常的没有劲.我不是说课本和课堂没用,而是说在课内的学习之余要有所拓展和扩充.大学的课程(和课本)成为一个体系,受到各种因素的制约,势必会形成一个框框,所涉及的内容可能就会形成"铁路警察,各管一段"的局面.课程和课本是有局限的,采用的是"

C++程序设计教学材料-2011级

本课2014级的方案更完整,且有完整讲课视频,请有需求的人士,移步到---->2014C++ 请看续集:C++程序设计教学材料-2012级 计114-34班学生,他们的博客地址:请[点击进入....]. 教师:贺利坚 CSDN博客首页 新浪博客 网络习题课--贺老师的视频教程,补齐课堂上落下的课,解除做题中的困扰. [课程总结] 我的总结,见<这一年,与84个写代码的菜鸟相伴而行> 大一菜鸟学习c++后的精彩总结,见<C++课上的作文题> 学生如何看待我们共同的经历,如何看待

C++程序设计课程主页-2012级

本课2014级的方案更完整,视频更清晰,请有需求的人士,请移步到---->2014C++ 看贺老师的所有课程的教学资源,就到----->贺利坚教学链接 这门课的主人 教师:贺利坚--为同学设计学习任务的人,为全班学习把握节奏的人,谁不往前走踢谁屁股的人.常混迹CSDN博客和新浪博客,也可以上人人网加我好友,我的<IT学子成长指导>博客专栏,或许有些观点能够对你有用. 学生--计124-3.4班56名同学,一群渴望有美好未来的同学,可能会吃点苦头,但不管是否愿意,将和贺老师一起享受这

学会写出"图形界面+数据库"的程序要多长时间?

[来信] 贺老师好,我也是在自学c++看了您写的启蒙一,感触很大,太谢谢了,我现在做网络运维,会接触到部份erp的内容,,想请老师指点下.从刚开始学c++到能写出个图形化界面并与数据库简单交互的,这样一个小程序,如果不考虑数据库方面的问题,正常要用多长时间,,? [回复] 第一个时间问题,我觉得是因人而异的.这要看个人以前的积累,以及学习能力.所以我无法为你做的估计,事实上,这确实因人而异. 我昨天在手机上看到你的私信时,想到的就是这些.今天开电脑要回复了,想想这是个很有意思的问题,多说一点.

《C++程序设计入门同步实践宝典 》可以下载了

<C++程序设计入门同步实践宝典>可以告一段落了.这是假期计划之外的事情,不小心又花了近二十天的时间,其他计划中的事情得一一落实了.将此版定为0.5版,以后还会有不小的改动. 下载地址:http://download.csdn.net/detail/sxhelijian/4482514 下载需要资源分5分,以对自己辛苦一番有所表示.常在CSDN泡的同学,也应该分享些你的原创挣点积分了.缺少积分的穷孩子,也可以给我留言,提供Email寄过去. 发个封皮: 有人提出上目录,好主意: 完工后写的前言

ThinkPHP后台首页index使用frameset时的注意事项分析_php实例

html的frameset标签在多窗口程序设计中有着广泛的应用,尤其是在项目后台页面部分.本文就来分析ThinkPHP后台首页index使用frameset时的注意事项.具体如下: 文件路径:aoli/admin/Lib/Action/IndexAction.class.php 代码如下: <?php class IndexAction extends Action{ public function index(){ $this->display(); } public function to

c语言-C语言实现学生宿舍管理系统

问题描述 C语言实现学生宿舍管理系统 对于C语言还有点基础,.NET和Java不太懂. 假期培训了iOS开发,才一个多月,本想用OC来做毕业设计的,现在要做开题报告了,不知道怎么写.所以决定用C来编写程序. 问题1:C语言怎么连接数据库,或是保证下次运行程序内容不会重置. 问题2:怎么用C语言构建图形界面(太难的话,就不用给我讲了) 解决方案 C语言过于原始和简陋,要学的东西很多.比如说,你用.net画画鼠标,界面就做好了.做网页也是一样.但是C语言必须手工去调用api创建界面. 好歹也得用下C

映射窗口句柄对象

话题引入:在C语言时代,当人们使用纯粹的C开发windows应用程序时,只需要通过窗口句柄HWND[HWND是WND的内存句柄,而WND是Windows是一个内部私有数据结构,存储着窗口的相关信息:尺寸信息.标题信息等.一般来说开发人员无法访问这个数据结构,不过可以以HWND为参数调用windows的API函数如:GetWindowRect.GetWindowText等获得对其的访问]即可完成有关窗口的操作.MFC类是C++类机制,MFC的类通过C++的对象方法将窗口的句柄封装起来.存在着窗口句