中南大学本科生课程设计(实践)报告计算机程序设计基础(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,=运算符号,再进行特殊运算符号的设计,流程图如下。
3 详细设计界面设计通过按住Ctrl建,复制出统一大小的按钮,框选多个同时移动,使得界面排列有序,整齐。
数字键函数编写m_result+=_T("N")对每个数字按钮进行赋值;updatedata(false)作用为当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调UpdateData(FALSE);void CMy0308150317Dlg::OnButton7(){m_result+=_T("1");UpdateData(false);// TODO: Add your control notification handler code here}void CMy0308150317Dlg::OnButton8(){m_result+=_T("2");UpdateData(false);// TODO: Add your control notification handler code herevoid CMy0308150317Dlg::OnButton9(){m_result+=_T("3");UpdateData(false);}void CMy0308150317Dlg::OnButton4(){m_result+=_T("4");UpdateData(false);// TODO: Add your control notification handler code here }void CMy0308150317Dlg::OnButton5(){m_result+=_T("5");UpdateData(false);}void CMy0308150317Dlg::OnButton6(){m_result+=_T("6");UpdateData(false);}void CMy0308150317Dlg::OnButton2(){m_result+=_T("8");UpdateData(false);// TODO: Add your control notification handler code here }void CMy0308150317Dlg::OnButton3(){m_result+=_T("9");UpdateData(false);}void CMy0308150317Dlg::OnButton10(){m_result+=_T("0");UpdateData(false);void CMy0308150317Dlg::OnButton11(){m_result+=_T(".");UpdateData(false);}+,-,*,/普通运算符号的函数通过对n的不同取值,来实现对函数的调用,方便简单易于操作。
函数atof将字串转换为浮点型数,可以将其他型数据转为double型,提高运算精度。
void CMy0308150317Dlg::OnButton13(){n=0;data=atof(m_result);m_result=_T("");}void CMy0308150317Dlg::OnButton14(){n=1;data=atof(m_result);m_result=_T("");}void CMy0308150317Dlg::OnButton15(){n=2;data=atof(m_result);m_result=_T("");}void CMy0308150317Dlg::OnButton16(){n=3;data=atof(m_result);m_result=_T("");}对“=”按钮函数编写用多分支的if...else if语句,实现两个数字与运算符的连接.Format 是CString类的一个成员函数,它通过格式操作使任意类型的数据转换成一个字符串.void CMy0308150317Dlg::OnButton12(){if(n==0){data+=atof(m_result);m_result.Format(_T("%lf"),data);UpdateData(false);}else if(n==1){data-=atof(m_result);m_result.Format(_T("%lf"),data);UpdateData(false);}else if(n==2){data*=atof(m_result);m_result.Format(_T("%lf"),data);UpdateData(false);}else if(n==3){data/=atof(m_result);m_result.Format(_T("%lf"),data);UpdateData(false);特殊运算符n!,x*x,sin,sinh的设计由于特殊字符只需要实现单个数字的运算,与普通运算符实现两个运算符不同,在经过多次调试和同学的指导之后,发现只保留特殊运算符函数按钮的调用语句“n=”,将其他代码放到if...else if语句中,可以实现逻辑上的调用。
对于特殊运算,在外部另外设计了对应函数,使函数界面可读性加强。
Sin运用了级数展开式,这样可以不用调用math.h函数库的函数,在同类方法中最易操作。
Sinh则在网上搜到了公式,并且自己编写了x次方的函数,进行调用。
n!和x*x则运用了本学期所学,顺利编写。
void CMy0308150317Dlg::OnButton17(){n=4;}void CMy0308150317Dlg::OnButton18(){n=5;}void CMy0308150317Dlg::OnButton19(){n=6;}void CMy0308150317Dlg::OnButton20(){n=7;}else if(n==4){data=atof(m_result);data=liancheng(data);m_result.Format(_T("%lf"),data);UpdateData(false);}else if(n==5){data=atof(m_result);data=pinfang(data);m_result.Format(_T("%lf"),data);UpdateData(false);}else if(n==6){data=atof(m_result);data=sin(data);m_result.Format(_T("%lf"),data);UpdateData(false);}else if(n==7){data=atof(m_result);data=sinh(data);m_result.Format(_T("%lf"),data);UpdateData(false);double data,data1;int n,i;double fabs(double x){double y;if(x<0)y=-x;elsey=x;return y;}double sin(double x){ double y=0,t=x;int n=2;while(fabs(t)>1e-5){y+=t;t=-t*x*x/(n*(n+1));n+=2;}return y;}double liancheng(double x){double a;double s(1);for(a=1;a<x+1;a++){s=s*a;}return s;}double pinfang(double x){double y;y=x*x;return y;}double cifang(double x,int y){double z=1;for(i=0;i<y;i++){z*=x;}return z;}double sinh(double x){double y=0,e=2.71828;y=(cifang(e,x)-cifang(e,-x))/2;return y;}}4 设计总结本计算机的优点是通过ctrl复制使界面友好,整齐,易于操作;程序设计上,结构清晰,简单,便于制作,交互性强,便于未来添加新的符号;用新方法使得单个数字计算缩短。
本计算机的缺点是界面原始,与ios平台上的设计性相比欠缺,背景颜色都没有;功能不够完善,常用符号欠缺,小数点后几位问题未解决;编程方法不够规范,可能与其他代码出现兼容性的问题。
进一步优化思路:学习相关平面设计知识,MFC知识,使用户界面更加友好。
根据卡西欧科学计算机,进行运算符号的增加。
进行菜单的设计,能让用户自主调节小数点数,几进制等。
收获与体会:刚开始面对一个全新的系统,手足无措,但是通过老师,同学的帮助下,逐渐掌握了基本技能。