中南大学C++计算机课程设计实践报告2016.docx
《中南大学C++计算机课程设计实践报告2016.docx》由会员分享,可在线阅读,更多相关《中南大学C++计算机课程设计实践报告2016.docx(13页珍藏版)》请在冰豆网上搜索。
![中南大学C++计算机课程设计实践报告2016.docx](https://file1.bdocx.com/fileroot1/2022-10/19/67b097eb-a361-4011-8a3b-36372b329572/67b097eb-a361-4011-8a3b-36372b3295721.gif)
中南大学
本科生课程设计(实践)报告
计算机程序设计基础(C++)
题目
学生学号
学生姓名
指导教师
学院
专业班级
计算机基础教学实验中心
2016年7月7日
“计算机程序设计基础(C++)”课程设计报告
1引言
本次设计目标是参照windows系统提供的计算器,设计一个科学型计算器,为此我们需要掌握好MFC基础,掌握C++应用系统的开发方法和技巧。
课程设计实践教程提供的步骤比较标准和准确,但实际操作性不是很强,所以我们应该通过对科学计算机设计来实现对过程的分析,从而掌握利用C++开发的一般设计方法与实现步骤。
对帮助我们全面牢固地掌握课堂教学内容、培养学生的实践能力、为今后应用计算机打下良好基础具有重要的意义。
在面对errors的解决过程中,培养独立分析问题和解决问题的能力,在生产实践中向卓越工程师的培养目标靠近。
2总体设计
本次实践的主要目的是了解和掌握运用MFC编程的一般思想和具体操作步骤。
基于MFC库进行对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。
生成应用软件。
首先需要设计0,1,2,3,4,5,6,7,8,9,0十个数字按钮,其次是+,-,*,/,.,AC,=运算符号,再进行特殊运算符号的设计,流程图如下。
数字0—9
界面设计
处理数字输入
按钮:
+,-,*,/,x*x,n!
sin,sinh.
=,AC;
计算
输出显示
3详细设计
界面设计
通过按住Ctrl建,复制出统一大小的按钮,框选多个同时移动,使得界面排列有序,整齐。
数字键函数编写
m_result+=_T("N")对每个数字按钮进行赋值;updatedata(false)作用为当你使用了ClassWizard建立了控件和变量之间的联系后:
当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调UpdateData(FALSE);
voidCMy0308150317Dlg:
:
OnButton7()
{m_result+=_T("1");
UpdateData(false);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCMy0308150317Dlg:
:
OnButton8()
{m_result+=_T("2");
UpdateData(false);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCMy0308150317Dlg:
:
OnButton9()
{
m_result+=_T("3");
UpdateData(false);
}
voidCMy0308150317Dlg:
:
OnButton4()
{m_result+=_T("4");
UpdateData(false);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCMy0308150317Dlg:
:
OnButton5()
{
m_result+=_T("5");
UpdateData(false);
}
voidCMy0308150317Dlg:
:
OnButton6()
{
m_result+=_T("6");
UpdateData(false);
}
voidCMy0308150317Dlg:
:
OnButton2()
{m_result+=_T("8");
UpdateData(false);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
voidCMy0308150317Dlg:
:
OnButton3()
{
m_result+=_T("9");
UpdateData(false);
}
voidCMy0308150317Dlg:
:
OnButton10()
{
m_result+=_T("0");
UpdateData(false);
}
voidCMy0308150317Dlg:
:
OnButton11()
{
m_result+=_T(".");
UpdateData(false);
}
+,-,*,/普通运算符号的函数
通过对n的不同取值,来实现对函数的调用,方便简单易于操作。
函数atof将字串转换为浮点型数,可以将其他型数据转为double型,提高运算精度。
voidCMy0308150317Dlg:
:
OnButton13()
{
n=0;
data=atof(m_result);
m_result=_T("");
}
voidCMy0308150317Dlg:
:
OnButton14()
{
n=1;
data=atof(m_result);
m_result=_T("");
}
voidCMy0308150317Dlg:
:
OnButton15()
{
n=2;
data=atof(m_result);
m_result=_T("");
}
voidCMy0308150317Dlg:
:
OnButton16()
{
n=3;
data=atof(m_result);
m_result=_T("");
}
对“=”按钮函数编写
用多分支的if...elseif语句,实现两个数字与运算符的连接.Format是CString类的一个成员函数,它通过格式操作使任意类型的数据转换成一个字符串.
voidCMy0308150317Dlg:
:
OnButton12()
{
if(n==0)
{
data+=atof(m_result);
m_result.Format(_T("%lf"),data);
UpdateData(false);
}
elseif(n==1)
{
data-=atof(m_result);
m_result.Format(_T("%lf"),data);
UpdateData(false);
}
elseif(n==2)
{
data*=atof(m_result);
m_result.Format(_T("%lf"),data);
UpdateData(false);
}
elseif(n==3)
{
data/=atof(m_result);
m_result.Format(_T("%lf"),data);
UpdateData(false);
特殊运算符n!
,x*x,sin,sinh的设计
由于特殊字符只需要实现单个数字的运算,与普通运算符实现两个运算符不同,在经过多次调试和同学的指导之后,发现只保留特殊运算符函数按钮的调用语句“n=”,将其他代码放到if...elseif语句中,可以实现逻辑上的调用。
对于特殊运算,在外部另外设计了对应函数,使函数界面可读性加强。
Sin运用了级数展开式,这样可以不用调用math.h函数库的函数,在同类方法中最易操作。
Sinh则在网上搜到了公式,并且自己编写了x次方的函数,进行调用。
n!
和x*x则运用了本学期所学,顺利编写。
voidCMy0308150317Dlg:
:
OnButton17()
{n=4;
}
voidCMy0308150317Dlg:
:
OnButton18()
{
n=5;
}
voidCMy0308150317Dlg:
:
OnButton19()
{
n=6;
}
voidCMy0308150317Dlg:
:
OnButton20()
{
n=7;
}
elseif(n==4)
{
data=atof(m_result);
data=liancheng(data);
m_result.Format(_T("%lf"),data);
UpdateData(false);
}
elseif(n==5)
{
data=atof(m_result);
data=pinfang(data);
m_result.Format(_T("%lf"),data);
UpdateData(false);
}
elseif(n==6)
{
data=atof(m_result);
data=sin(data);
m_result.Format(_T("%lf"),data);
UpdateData(false);
}
elseif(n==7)
{
data=atof(m_result);
data=sinh(data);
m_result.Format(_T("%lf"),data);
UpdateData(false);
doubledata,data1;
intn,i;
doublefabs(doublex)
{
doubley;
if(x<0)
y=-x;
else
y=x;
returny;
}
doublesin(doublex)
{ doubley=0,t=x;
intn=2;
while(fabs(t)>1e-5)
{
y+=t;
t=-t*x*x/(n*(n+1));
n+=2;
}
returny;
}
doubleliancheng(doublex)
{doublea;
doubles
(1);
for(a=1;a{s=s*a;
}
returns;
}
doublepinfang(doublex)
{doubley;
y=x*x;
returny;
}
doublecifang(doublex,inty)
{
doublez=1;
for(i=0;i {
z*=x;
}
returnz;
}
doublesinh(doublex)
{
doubley=0,e=2.71828;
y=(cifang(e,x)-cifang(e,-x))/2;
returny;
}
}
4设计总结
本计算机的优点是通过ctrl复制使界面友好,整齐,易于操作;程序设计上,结构清晰,简单,便于制作,交互性强,便于未来添加新的符号;用新方法使得单个数字计算缩短。
本计算机的缺点是界面原始,与ios平台上的设计性相比欠缺,背景颜色都没有;功能不够完善