CMFC计算器编程课程设计实践报告

时间:2020-11-02 09:25:13 手机站 来源:网友投稿

中南大学

本科生课程设计(实践)设计报告

(程序设计基础)

题 目

MFC编程科学计算器

学生学号

1104120502

学生姓名

郭斌繁

指导教师

蔡旭晖

学 院

交通运输工程学院

专业班级

交通运输类1205班

计算机基础教学实验中心

2013年7月1日

程序设计(C++实践报告

引言

C++语言的主要特点表现在两个方面,一是全面兼容c语言,二是支持面向对

象的程序:

C++是一个更好的C,它保持了 C语言的优点,大多数的C程序代码略作 修改或不作修改就可在C++的集成环境下调试和运行。这对于继承和开发当前已 在广泛的软件是非常重要的,可以节省大量的人力和物力。

C++ 是一种面向对象的程序设计语言它使得程序的各个模块的独立性更 强,程序的可读性和可移植性更强, 程序代码的结构更加合理, 程序的扩充性更 强。这对于设计、编制和调试一些大型的软件尤为重要。

C++集成环境不仅支持C++程序的编译和调试,而且也支持 C程序的编译 和调试。通常,C++!序环境 约定:当源程序文件的扩展名为c?时,则为C程 序;而当源程序文件的扩展名为cpp.时,则为C+4程序。

C++语句非常简练,对语法限制比较宽松,因此 C++语法非常灵活。其优 点是给用户编程带来书写上的方便。其缺点是由于编译时对语法限制比较宽松, 许多逻辑上的错误。

次课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量, 该程序即可以在简单计算器键面下进行简单运算, 也可以在科学计算器键面下进 行高级的科学计算。

 并且可以分别计算弧度、 角度的三角函数的计算等较为复杂 的运算。

. 设计目标

利用MFC程序开发工具设计一款可以进行简单计算及部分科学计算的计算 器。在设计当中将综合 “面向对象程序设计与结构化程序设计” 的思想方法和知 识点,编制一个小型的应用程序系统。通过此设计进一步提高自己的动手能力, 并能使自己清楚的知道开发一个应用程序的思想、方法和流程。

. 选题分析

此次实践所选题目中除了简单的加减乘除运算程序之外还包括了余弦函数、

双曲余弦函数、度分秒的转换和X的y次方及y次根号下x的运算程序。除去四 则基本运算程序之外, 其余程序不可以直接调用系统的库函数需要经过自己的思 考和查阅资料并结合迈克劳林等公式从源头开发相应运算的源代码, 因此必须熟 练掌握基本编程、 代码语言、 类运算及成员函数的设计、 按键功能设计和整体协 调等方面的相关知识。在此程序的设计过程中既锻炼了自己对 C+锹件的掌握程 度也服务了自己,尤其是装有WIN8的电脑,其本身的系统是不带计算器软件的, 通过此设计也算是实践于应用。

总体设计

体系设计 : 所要设计的程序是一个简单的计算器,能正确输入数据,能实现加、减、 乘、除等算术运算,能进行简单三角运算、次方开方及双曲函数的运算, 运算结果能正确显示,可以清除数据等。

设计思路 :

先在Visual C++ 6.0 中建立一个 MFC工程文件,名为calc_mfc。

在对话框中添加适当的编辑框、按钮、静态文件、单选框。

设计按钮,并修改其相应的ID与Caption。

选择和设置各控件的单击鼠标事件。

为编辑框添加 double 类型的关联变量 m_dNum.

在 calc_mfcDlg.h 中添加 math.h 头文件,然后添加 public 成员。

 打开 calc_mfcDlg.cpp 文件,在构造函数中, 进行成员初始化和完善各控件的响 应函数代码。

详细设计

.通过“开始”按钮,选择“程序”菜单,然后打开“Microsoft Visual studio 6.0 中文版”子菜单中的“ Microsoft Visual C++ 6.0 中文版”程序, 选择“工程”里面的 MFCAppWizard(exe) 程序,再选“基本对话框”选项按“确 定”建立文件名为“ calc_mfc ”的工程 .

. 将原界面的按钮删除并添加所需按钮及编辑框并将其按照一定规律排 列(如图 1 )

图1

(3).将各按键的属性按照相应的功能进行修改(如图 2)

图2

(4).向CCalc_mfcDlg类中添加以下变量(如图 3)

>37衞立划趺疏弐雯.

—一二

变矍类型 i 变量?哇

m nDotNo

int

public

mnDotSign

tnt

pub Ik

m dPre

double

public:

m dCur

double

puWic

m dNext

double

public

m strPre

CString

public

m strCur

CString

public

in strNext

CString

public

?」.……"亠7

图3

.在cale_mfcDlg.cpp 的OnlnitDialog ()函数中添加如下代码变量初

始化:

m_dPre=0;

m_dCur=0;

m_dNext=O;

m_strPre=_T("");

m_strCur=_T("");

m_strNext=_T("");

m_n DotSig n=0;

m_nDotNo=0;

.通过MFC的“建立类向导”向“ CCalc_mfcDlg”类添加各按钮的消息

处理函数。(如图4)因为程序中用到一些数学函数,所以在 calc_mfcDlg的开

始处添加包含语句#include <<cmath>>.

utld CCalc_rrFcBlg::SetNon(int 1)

图4strCur==,M,)

图4

{

(p 酬门% n_n?4tNo)); R flDDtH6++:

bIsb

■ijdCuran dCJur*10*i;

}

elist

{ n_dCur=B; if (pi nfiotslgn==l)

* dCur°n dtur+i/lfi; ■ijn&ntNot*;

y 一

C15E

?

PidiHuFPndiCui^

UpdateDdtdif-False);

■■吐沌■严」「J]

.在calc_mfcDlg.h 文件中的calc_mfcDlg类中添加成员函数的声明: void SetNum(int). 并在cale_mfcDlg.cpp 文件末尾添加数字键 0-9的公有处理

函数SetNum代码如图5。添加数字键处理函数,如数字键 1:

uoid CCalc_mFcDlg::0nButton4()

< _

// T0D0: Add your control notification handler cod? SetNum(1);

.计算器程序的关键是计算的顺序,当按下运算符键时,它的右操作符 还是未知的,因此要保存当前的运算符选择,然后键入要操作的数字,这一数字

也要保存,等到下一次按下某个运算符时再将原来的保存的运算符和数字进行运 算,如此循环直到按下“=”为止。所以在cale_mfcDlg.cpp文件末尾添加公有

成员函数process。.

成员函数process。.代码如图6:

|joid CCalc_nfeDig::process() < strPre==*,xky")

< _

if (R_dPre==B)

m dPre=0; else m_dPre=zuizhoDg();

if (m_strPre=='*xp,*)

n_dPre=ciFang();

if(m_strPre==<*+1*)

m_dPre+=fi_dCdr;

iF(m_str 叶电

m_dPre-=n dCur;

iF(in_strPre=-;'*,r)

n_dPre*=ii_dCur;

< _

if(m_dCur==0)

m dCur=1: m_dPre/=n_dCur;

void CCalc_nfcDLg::OnButtonAdd()

// TODO: Add you广 contPol not iF(m_dPre— D)

< _ in_dPre=[ii_dCur; u?_strPre^,,+"; n_5trCur=H_5trPre;

> - -

else

< process(); m 5trPre='",+,*: nstrCur-nstrPre;

>

in dHum= m dPre;

m _dCur= 8; nnDotSign-D; m_nDotHo=0; UpdateDataf Falsp):

图7

图7是“+”按钮的消息处理函数,其余

“*”、“/”、“二”只需将“ +”

换为相应的运算符即可。

图8图9分别为“.”和AC键的消息处理函数:

uuaJ.u_n+cl>J.g 二 illnHLittoinflci J

void CCalc nfcDLg: :D(iButtonDot()

// TODO: Add your control notiFication hai n_dPre=O;

H_dCur-H;

m_dNext=0;

iCst广Pre=_T「?“);

n-strCur--T('',,J:

m2strNext=_TC*"); n_nDotSign=O;

H_nDotHo-0;

// TODQ: Add your control natii n nDotSign=1;

njiDotNo=1;

m_dNum=0; UpdateData(False);

.将菜单与对话框关联,方法是右击对话框,选择快捷菜单中的属性,在“对

2X

2

X

话属性”窗口中选择“菜单”列表中所建立的 ID,如图

话属性”窗口中选择“菜单”列表中所建立的 ID,如图10:

图10

.保存所编辑的所有程序,调试运行正确后即可得到目标程序, 界面如下:

.几种按键的消息函数实现;

1) .cos:

由cos的迈克劳林公式

+

COS X = 1 - +— T p (-1)?———刑+1(%)

2( 41 (2问!

知相邻两项之间有如下关系:

(m 1)( m

(m 1)( m ■ 2)

tm

(m =0,2,4,6, )

故cos可以先将t赋值为1 ,再利用上式做累加得到,累加的上限是

(m

(m 1)( m 2)

<0.000001,x详细步骤如 以下代码:

OnButtonEqual():

1nt n= 9;

double 耳.t tcosx(0);

x^mdPre;

t=!:

?hile(fabs(t)>=8. eoeoioi )

<

cosx+=t;

t=-t*x*x/((n+1)*(n+2));

n=n+2;

>

n dNum-cosx ;|

UpdateDataffalsp);

TOC \o "1-5" \h \z > 注:t=1是将cos函数公式的第一项赋值于 t。

2 ) cosh:

Cosh函数是双曲余弦函数,由双曲余弦函数的计算公式

r2 兀3 丹

1 X X 『”=1十工十—— +——+…+——一丘罷W) x

cosh - ^(e e^)及…- ' (ex 的泰勒

公式)知,cosh函数可以有这两个公式调用实现,类比 cos的迈克劳林公式,ex

的相邻两项关系是:

, X 4

tm 1 tm,因此利用计算cos函数的方法编辑代码得到eX函数的计算代

(n+1)

码,然后定义一个double型的有返回值的函数,将其返回值设为 (ex e^),然后在cosh

函数的程序里面调用刚才定义的函数返回值即可。

3)Xy :

由于此用算属于双目运算,由(8)知此函数的代码需要调用到 process。

函数。首先自定义一个函数,里面包括一个 int型的变量j,两个double型的变 量k和s并给s赋初值1.0,将m_dPre的值赋给k,将m_dCu啲值赋给j。然后 用一个for语句for(j;j>0;j--){s*=k;} 实现次方的计算,将s作为返回值。在

process()函数中仿照其他语句添加Xy的语句(必须放在process函数的最前 面,否则无法使用),调用所定义函数的返回值赋给 m_dPre然后仿照图7的程 序将“ +”改为“xy” (Xy按钮的属性是xy)后输入到Xy的函数中作为计算代码 即可。

4)y X :

同xy函数一样,此函数也是双目运算,计算函数的代码实现步骤类似。先

1

将仮做如下变换:\[x = xy

1 ln x

=ey ,由ln( 1+x)的泰勒公式:

ln(l 十 x) = x + "

2 3

4 n

— + --+( I)"-1 X +o(xn\

4 n

知,Inx可由先将(m_dPre-1)赋值给m_dPre再将m_dPre赋值给x,类比 计算cos的方法设计计算Inx函数的自定义函数并将返回值赋给t,在定义一个 函数将m_dCur赋值给y,并让此函数调用t,将(1/y)*t的值赋给返回值h,然后 再调用2)中所定义过的函数ex,将h做为其参数得到结果 m并返回给s.在 process函数中类比其他语句定义y X的语句,最后通过调用函数将之前定义的 函数的返回值s赋给m_dPre在Vx对应的按钮的函数中仿照图7的 程序将“ +” 改为“ xky ” ( y x按钮的属性是xky)后输入到xy的函数中作为计算代码即可。

5)dms:

此按钮是将输入的度数按照度分秒的格式显示,先将 m_dPre赋值给x,禾U

用强制类型转换(int ) x,所以(int ) x即为所求的度数。用x- (int ) x所得 到的数乘以60然后继续做强制类型转换就得到分了,类比得到分的步骤再做一 次就得到了秒,最后将得到的度加上分除以100加上秒除以10000赋值给m_dNum 即可(不可能将度分秒分别显示在编辑框内)。

设计总结

经过两周的努力,课程设计基本完成了,在课程设计的实践中,我学到很多 有用的知识,也积累了不少宝贵的经验。课程设计是以一个计算器的实现为基础, 掌握一个基于对话框的应用程序的编程方法以及对话框常用控件的高级编程。 在

课程设计中我了解到到对话框应用程序的编程模式、 改变按钮的形状及有关按钮

函数计算程序代码的编写等知识。在此期间,遇上了不少的技术难题,但是经过 努力,咨询老师,通过查找资料,难题还是一个个被解决了,我从中学到了许多 课堂上没学到的东西,这使得我很高兴。

实践中我觉得自己的程序设计方法及顺序是优缺并存的, 比如在开始的时候 由于基本计算器的按钮已经设计排序完成了,到后面才知道要在添加一些按钮, 这样就只能手动的调节新添加的按钮的大小使其一致, 还有就是在编写函数程序 时候有些代码不够精炼等。

 但我能够自行设计部分函数的计算方式及代码的完全 自主完成, 这一点还是不错的。

 这次设计的计算器还不够完善, 还有很多功能没 有实现,在接下来的时间里我决定在完善和改进的基础上继续完成其他功能的运 算,使自己设计的计算器能够像一个真正的科学计算器一样进行各种运算, 虽然 这将需要很多的时间和精力,但我觉得依然值得自己去做。

经过设计的各个环节,我从中学到了很多, 锻炼了自己对系统的设计的能力, 从系统的需求到系统的功能, 到系统的测试, 再到系统的改进, 可以掌握到一个 完全的过程,这样对我们以后在工作中或学习中得到很好的锻炼,为用 VC+编

辑软件奠定了更好的基础。

推荐访问:实践报告 计算器 课程设计 实践 CMFC计算器编程课程设计实践报告

版权声明 :以上文章中选用的图片文字均来源于网络或用户投稿 ,如果有侵权请立即联系我们 , 我们立即删除 。