成都电子机械高等专科学校
专 周 报 告
课程名称
面向对象程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
专周
专周题目
计算器模拟程序
姓 名
陈兴
班 级
10572
学 号
27
指导教师
杨勇
设计时间
2010-6-7 至 2010-6-11
成都电子机械高等专科学校计算机工程系
目 录
一、题目和设计要求 2
专周题目 2
设计要求 2
二、设计与实现 3
1、
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
问题 3
2、 设计思路 3
3、流程图 4
4、功能实现 5
5、典型算法和技巧分析,调试体会 5
三、专周小结 7
四、参考文献 7
一、题目和设计要求
专周题目:
计算器模拟程序
设计要求:
该程序显示GUI用户界面,能实现整数和小数的加、减、乘、除四则运算,以及开方、阶乘,退格功能。如下图是我的设计界面:
图1 计算器模拟程序界面 图2 计算器模拟程序版本信息
二、设计与实现
1、分析问题
《一》首先,我得做一个界面,这我就不多说了,可是MFC默认生成的界面都是一个样,要想用户体验最佳的话就得有一个美观的界面,所以我想弄个好看点的界面,查阅了相关资料后,终于知道了修改背景色,这是在对话框初始化函数InitInstance 里实现的,代码如下:
COLORREF Color=RGB(0x0,0x0,0x0);//背景颜色
COLORREF Color1=RGB(0xfff,0x0,0x0);//编辑框颜色
SetDialogBkColor(Color,Color1);
《二》界面做好后,就可以写计算器程序的主要实现代码了,首先为编辑框连接一个变量用于输出结果。由于要用到数学函数,就在相应位置添加头文件:#include
。然后为对话框类添加数据成员和成员函数。
《三》添加按钮消息映射:在CMy10572_27Dlg.h相应位置添加代码:
Afx_msg void OnNumberKey(UINT nID); //单击数字键
Afx_msg void OnOperationKey(UINT nID); //单击操作键
讲按钮命令映射到指定函数上:
ON_COMMAND_RANGE(IDC_NUMBER0,IDC_NUMBER9,OnNumberKey)
ON_COMMAND_RANGE(IDC_OPESQRT,IDC_OPEFACTO,OnOperationKey)
2、 设计思路
先设计基本功能,设计好后要进行出错处理,首先除数不能为零,所以在除数为零的情况下弹出一个对话框如图3,并终止此操作。其次当用户按下小数后不能计算阶乘,这时也应该弹出一个对话框如图 4,并终止此操作。
如图 3 如图 4
3、流程图
4、功能实现
此程序的主要模块为三个函数:
void CMy10572_27Dlg::OnNumberKey(UINT nID) //单击数字键的处理函数
void CMy10572_27Dlg::OnOperationKey(UINT nID) //单击操作键的处理函数
void CMy10572_27Dlg::cal() //这也是操作键的处理函数,被OnOperationKey函数调用。
5、典型算法和技巧分析,调试体会
基本功能弄好后,先运行了程序试了下,结果很多不满意的地方,比如不可以同时连加功能比如:4+5+6+7再按下第二个加号后本意是想让程序输出结果9 ,可事实并不是这样的,想了很久要连加的话就只有每次按下操作符的时候就计算结果,以加法代码为例:
case IDC_OPEPLUS: //加
{
OperationState=3;
if(number2==0 )
{}
else
{
m_result=m_result+number2;
}
UpdateData(FALSE);
NumberState=2;
number1=0;
number2=0;
DYNAMETER=10;
break;
}
减法、乘法、除法也是以同样的
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
。
其次是退格按钮,整数退格可以直接让其操作数除以10即可,但是小数的退格就比较麻烦,基本思路是用操作数减去小数的最后一位数。以下是我写的代码:
case IDC_OPEBACK: //—>按钮
{
if(NumberState==3)//此时是小数
{
m_result=m_result-int(m_result*DYNAMETER/10)%10/DYNAMETER*10;
number1=m_result;
//int(m_result*DYNAMETER/10)%10 取最后一位小数位
}
}
然后是按下小数点按钮的处理代码:
if(NumberState==3)
{
if(number1==0) //右操作数
{
number2=number2+n/DYNAMETER;
}
else //左操作数
{
m_result=m_result+n/DYNAMETER;
number1=m_result;
}
DYNAMETER=DYNAMETER*10; //倍率增加
UpdateData(FALSE);
}
}
最后是阶乘按钮的实现代码,我是用的一个while循环实现的,代码如下:
while(--number1)
{
m_result=m_result*number1;
}
三、专周小结
1)此次程序设计遇到了很多困难,让我认识到了自己的太多不足,同时上网查资料的时候也让我知道了网络是个非常大的资料库,对于编程来说MSDN则是一个非常好的编程帮手,希望自己以后多多使用,也希望同学们多多使用。
2)在程序设计中遇到困难遇到错误是不可避免的,我们应该学会调试,一个会编程的人一定是会调试的人,同时调试是个非常乏味且烦躁的工作,所以我们应该在编程前尽量做好多的准备,尽量减少我们的调试时间。
3)写这个程序的时候才发现,原来做一些程序的时候,拿来就上机实现,而不做任何准备,那只能应付小程序,一旦像现在这样写一个很大的程序时,就发现在长长的一大块里面找一个小错误是多么的困难。
4) 如果调试很久也成功不了,就要考虑是不是自己储备的某些知识是错的,一直在误导你,这个时候就需要去重新认真的看看
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
,看看资料,之后就恍然大悟了。
四、参考文献
【1】 温秀梅 丁学钧主编 Visual C++ 面向对象程序设计教程与实验(第二版). 北京:清华大学出版社,2009.4
【2】 古超 赵丹主编 从零开始学 C++. 北京:电子工业出版社,2010.12
考核情况(由指导老师填写)
项目
平时
(20%)
验收
(40%)
报告
(30%)
总分
得分
考勤
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
考勤日期
出勤记录
验
收
情
况