中南大学(C++实践报告) 下载本文

内容发布更新时间 : 2024/12/31 3:52:03星期一 下面是文章的全部内容请认真阅读。

中南大学

本科生课程设计(实践)设计报告 (程序设计基础) 题目

MFC课程设计 学生学号 学生姓名

指导教师 学院

专业班级

计算机基础教学实验中心 2015年 06月 14 日 一、引言

MFC(Microsoft Foundation Class Library, 微软基础类库)是微软基Windows平台下的C++类库集合。MFC包含了所有与系统相关的类,其中封装了大多数的API(Application Program Interface)函数,提供了应用程序框架和开发应用程序的工具,如应用程序向导、类向导、可视化资源设计等高效工具,用消息映射处理消息响应,大大简化了Windows应用程序的开发工作,使程序员可以从繁重的编程工作中解脱出来,提高了工作效率。

程序设计实践旨在课堂学习的基础上帮助学生掌握C++应用系统的开发方法和技巧。在系统学习完《C++程序设计》这门课程后,通过实践对几个小型C++应用程序实例设计与实现过程分析,帮助学生利用C++开发应用系统的一般方法和步骤,掌握MFC的基本知识。

这次实践采用学生上机与老师集体辅导的方式,以完成老师下发的《C++语言课程设计任务书》为要求和目的,运用课堂上学习的C++基础知识,采用Visual C++ MFC编程系统,以全新的角度和感知去认识C++语言在编程方面的优越性。在实践过程中,基于对话框的MFC

应用程序,达到了解基本控件,如静态文本框、命令按钮、编辑框、列表框、组合框等的使用的目的。还有理解Windows应用程序采用“消息传递、事件驱动”的运行机制。 本次实践的任务主要分为两个部分: 使用Visual C++ MFC编程实现以下功能:

输入一元二次方程ax2+bx+c=0 的系数a、b、c,计算并输出两个根x1、x2. 编写一个能对列表框进行项目添加、修改和删除操作的应用程序。 编写一个程序,绘制-2π~2π之间的sin曲线。 用定时器控制蝴蝶在窗口中飞舞。等共10道。

将第一部分中选择3~5题,做一个综合程序,要求有登陆界面和调用各部分的功能。 总体设计

本次实践的主要目的就是了解和掌握运用MFC编程的一般思想和具体的操作步骤。实践主要是基于MFC的多文档对话框和单文档视图,通过实践完成第一大部分的任务之后,还要完成第二部分的综合题目。第二部分的任务由学生自主发挥,自主找资料,询问同学和老师。 第一部分的任务比较简单,具体的就不再描述。关于第二部分,我做了一个基于对文档对话框。首页为一个登陆页面,需要输入用户名和密码才能登陆,登陆后的页面是把第一大部分的几个题目连接起来。达到预览的目的。 三、详细设计

实践前首先要认识AppWizard的工作环境。其项目工作区一共有三个选项卡分别为“ResourceView”“ClassView”“FileView”,中间是对话框设计界面,右边是控件工具栏。 实践过程中,我们是先完成第一大部分的任务。虽然在第一次上机实践前,我仔细地阅读了老师给我们下发的资料,并且结合《C++程序设计实践教程》了解相关知识,但是在实践时结果不理想。主要是对创建对话框程序的步骤没有掌握。在经过几次尝试失败后,总结其一般步骤为:(1)建立基于对话框的MFC应用程序框架;(2)放置控件;(3)设置控件属性;(4)为控件连接变量,即为控件命名;(5)添加并且编写消息处理函数。

基于对话框的MFC程序设计,对各种控件的了解和使用显得特别重要。这里就不一一详细介绍它们的功能。控件控制栏一个有26个控件图标,每一个图标都可以看做一个对象,消息便是通过函数对它们进行操作。每一个控件都有两个重要而且必不可少的基本属性:ID和标题。ID便是该控件的标识,某些函数需要通过ID对控件进行操作。 了解一定相关知识后,对课程实践有了很大的帮助。其中“输入一元二次方程ax2+bx+c=0 的系数a、b、c,计算并输出两个根x1、x2”这个题目比较复杂,而且与C++连续很紧密。其中的有这样的语句m_x1=(-b+sqrt(b*b-4*a*c))/(2*a); m_x2=(-b-sqrt(b*b-4*a*c))/(2*a),这就是我们在课堂上学习的C++基本语句,在实践过程中考验学生的灵活运用能力。完成这个题目的关键是把每个编辑框(控件)连接好变量和选的数据类型,接下来的就是编写消息处理函数。这道题很全面地体现了MFC的“消息传递、事件驱动”的思想,在操作步骤方面也在很多地方得到了实践。

MFC编程除了基于多文本对话框以外,还有很重要的一部分是基于单文档界面的应用程序,如Windows自带的Notepad程序。在本次实践的第一大部分的后5个小题就是基于单文档的。那么首先要对其有一定的了解:文档/视图结构的思想是将数据的管理与显示分离,其中文档用于管理应用程序的数据,而视图是用户界面,用于显示、打印文档中的数据,并管理与用户的交互。SDI具有文档/视图结构的应用程序框架,该框架包括应用程序类、窗口框架类、文档类和视图类,编程的任务是在文档类和视图类中添加适当的代码。其中文档类中一个重要的成员函数是OnNewDocument(),用户在此添加代码完成对数据的初始化;而视图类中最重要的成员函数是OnDraw(),通过在该函数中添加代码实现窗口内容的输出。 本次实践是对单文档的典型实例,包括:

? 利用画笔、画刷等工具及位图处理的方法实现文字和图形的输出。 ? 利用定时器控件制作动画程序。 ? 对鼠标和键盘进行编程的基本方法。

? 文件、字体、颜色等几种通用对话框的使用方法及自定义对话框的设计、调用方法。 ? 菜单的设计方法。

虽然进行充分的准备,实践中还是遇到了很多的困难和问题。在完成题目“用定时器控制蝴蝶在窗口中飞舞”时,主要的问题就是在插入蝴蝶图片的,尝试了几次都没有编译成功。最终再询问同学后,才知道是要把GIF格式的图片分割成一帧一帧,然后才能插入。最后用定时器控制,达到动态的效果。 在完成了第一大部分的任务后,第二部分的综合题是一个不小的挑战对我来说。要靠自己去网上或者图书馆查找资料。在经过一番准备后,最终决定做一个相对简单的基于多文档对话框的登陆界面,把几个原来的程序文件连接起来。但是在这个过程中,完全要靠自己一步一步去探索,当然也遇到了各种各样的困难和挑战。 关键是在连接各部分对话框,经过不断的实验,不断的调试程序,总结的操作步骤如下:(1)创建工程,MFC Application(exe),工程命名按要求命名;(2)工程建立后有如图对话框,将途中的静态文本框和按钮都删掉,留下空白,再使用静态文本,编辑框,按钮和静态图片重新排版,并进行命名。注意静态图框应该第一个布置,不然运行时图片会将其他控件覆盖;(3)右击密码对应的编辑框,选择属性,选样式中的密码;(4)在Dialog上右击选择插入DIG,重复插入4个,依次作为菜单,题目1,题目2和题目3的对话框,并对其分别创建类,以菜单对话框为例,改一下表头为“菜单”,在对话框空白处双击,点OK创建类,并对其命名(假如命名为MyMenu);(5)回到登录界面的对话框,双击登录控件,出现如图按钮,点击OK,在顶端添加#include”MyMenu.h”,并OnButton1下添加以下代码CString c_user,c_password; m_user.GetWindowText(c_user); m_password.GetWindowText(c_password); if(c_user.IsEmpty()||c_password.IsEmpty()) { MessageBox(\用户名或密码不能为空\用户登录信息\ return; } if(c_user==\ { CMyMenu dlg; dlg.DoModal();//这两段代码是用于调用菜单对话框 } else { MessageBox(\用户名或密码不正确\提示\ return;

对对话框添加背景图片。在如下图文件上右击,选择引入,然后导入已准备好的bmp格式的图片,然后选择登录界面的静态图框右击,进行如图操作,这样图片就加入了,它会改掉按钮和编辑框,这没关系,运行后会显示出来的;(7)通过以上操作,已经做好了登录界面和实现和登录界面与菜单对话框的连接,现在进行菜单对话框的编辑。将原有的按钮删除,自己加入按钮并命名;(8)双击题目1,点OK,在代码页的顶端加入如图代码,并在OnButton1

下加入以下代码 CT1 dlg; dlg.DoModal();其他的按相同操作。 四、设计总结

为期为两周的课程实践中,我体会颇多,学到的东西也很多。我懂得了如何运用MFC编写可视化界面的应用程序,加强了对C++的认识,复习了以前的知识,自己的逻辑思考能力,解决问题的能力也提高了不少。从而对Microsoft Visual C++有了更加深刻的认识和体会!在这次课程设计实践过程中我还懂得了一些程序开发的重要步骤,总之,在这次课程设计实践中,我收获颇丰。

对于对任务的完成情况,第一部分主要按老师的步骤完成。第二部分,由学生自主选题,自主设计完成。总的来说,我个人对自己的完成情况感觉良好。当然,老师的悉心指导和同学的帮助是不能忽视的,在此感谢所有在本次课程设计实践过程中对我细心指导的老师和不断鼓励和帮助我的同学们。

总之,此次课程实践是对学生动手动脑的一次很好的锻炼,为学生的今后发展奠定基础。