计算器程序设计报告.docx
《计算器程序设计报告.docx》由会员分享,可在线阅读,更多相关《计算器程序设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
计算器程序设计报告
计算机科学与技术学部
面向对象程序课程设计
题目计算器
学部计算机科学与技术
班级
指导教师
姓名
2011年6月16日
课程设计任务分配表
姓名
工作安排
组长
程序设计
组员
实验报告书的制作
VisualC++的课程设计成绩表
姓名
学号
成绩
摘要
随着当今社会的发展,越来越多的人开始使用电子商品,新的高考制度也允许使用计算器,而作为一名计算机专业的学生,在使用工具的同时也应该学会制作这类工具。
该系统则是与Windows附件里的计算器相仿的一个计算器。
计算器的产生和发展是建立在电子计算机基础之上的。
硬件方面,自1946年第一台电子计算机诞生以来,计算机技术的发展可谓日新月异,从庞大的只能在实验室里供研究使用的计算机到如今能适应不同环境满足不同需求的各种各样的计算机;运算速度从每秒几千次到每秒几百亿次;处理器从焊有上百万个电子管的大的惊人的电子板到只有指甲大小的集成电路;现在计算机在硬件方面的发展已达到了每三个月更新换代一次的惊人速度。
软件方面,也已从机器语言、汇编语言、高级语言发展到现如今的第四代语言——非结构化、面向对象、可视化的语言。
在这个计算器里面,我们实现了简单的四则运算以及更高功能的科学计算,它的外观简洁明了,使人员能快捷简单的操作。
能准确的得到计算结果,大大减少了数字计算所需要的时间,为人们的生活带来便利。
此系统在WindowsXP环境下,使用VC++6.0进行编写。
简单计算器包括双目运算和单目运算功能。
双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,对数,开方,阶乘,倒数等运算。
可对其输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。
并且包含清除,退格功能以及有与所有按钮相对应的菜单项。
通过C++课程设计,将学到的面相对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解,提高学生分析问题,解决问题从而运用所学知识解决实际问题的能力。
关键词:
计算器,运算,VC++等。
第1章前言
1.1简介说明
1.1.1研究目的
制作此工具主要有四个目的:
1、熟悉掌握基于对话框的程序编写。
2、熟练掌握放置控件及control工具条的使用。
3、掌握控件摆放的基本方法,熟练掌握Dialog工具条的使用。
4、熟悉建立对话框步骤。
1.1.2可行性分析
伴随着经济全球化,计算机的普及发展,软件行业在社会占着举足轻重的作用。
我们在学校生活中常会遇到一些繁杂的数值运算,我们必须要用到科学计算器,所以便着手开发了这个计算器程序,既紧随科技发展的前沿,又方便了我们的生活,具有一定的现实意义。
1.1.3关于VisualC++6.0
VisualC++6.0是Microsoft公司在1998年推出的基于Windows9X和WindowsNT的优秀集成开发环境。
该环境为用户提供了良好的可视化编程环境,程序员可以利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。
VisualC++6.0不仅包括编辑器,还包括许多有用组件,通过这些组件的协同工作,可以在VisualC++6.0集成环境中轻松地完成创建源文件、编辑资源以及对程序的编译、连接和调试等各项工作。
VC++6.0是Windows95/98、XP或WindowsNT下的一个应用程序,本身对软件没有特殊要求。
就是说它对环境的要求与Windows95/98、WindowsNT的要求是一致的。
VC++6.0系统可以在一张CD盘上,也可以在“VisualStudio(VisualC++、VisualFoxpro)”等产品的第一张CD盘上。
一般都有一个VC的
自动安装程序,也可以执行VC++6.0目录下的Setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。
在安装好VC6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行Setup.exe安装程序,安装程序会检测当前系统安装VC6.0的组件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要与一般的应用软件一样,有以下两种启动方式:
(1)通过“开始”按钮,选择“程序”菜单,然后打开“MicrosoftVisualC++6.0中文版”子菜单中的“MicrosoftVisualC++6.0中文版”程序。
(2)用户也可以使用命令行启动VC,单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入C:
\programFiles\MicrosoftVisualStudio\VC98\VC6.exe(按默认盘符和路径安装即可)。
1.2题目要求
所编写的计算器是基于对话框的程序,能够进行加减乘除的运算,开方,立方,三角函数,反三角函数等功能。
仿照Windows自带的计算器进行编写。
1.3设计思路
<1>首先考虑所有按键分为两类,即数字键和符号类,0、1、2、3、4、5、6、7、8、9为数字键,其余均为符号键,如’+’、’-’、’C’等等。
数字在计算的过程中最多需要保存两个,所以定义了两个double型变量m_first和m_second来进行存储。
符号用一个CString型变量m_operator来存储。
<2>其次,考虑在计算的过程中,m_first和m_second的存储状态有三种,一种是m_first==0&&m_second==0也就是程序刚开始运行还没有开始录入数字的状态;第二种是m_first!
=0&&m_second==0也就是第一个数字已经录入,符号也已经录入的时候,直接将其值赋给m_first,并通过UpdateDisplay()函数输出;第三种是m_first!
=0&&m_second!
=0,其表示可以通过m_operator的计算把两个数合并为一个数。
<3>考虑到所有的计算结果必须在按下’=’按钮后都会将其数据进行计算,并显示到编辑框,因此,将符号判断放在’=’按钮的函数体内,当其按下时逐一判
断此数据应当进行何种操作。
<4>考虑到数字全部使用的都是double型,键入的数字必须通过一定的处理达到其计算的效果,特别是当其数据有小数和整数处理时,其差异性大,所以分别用m_coff来判断小数和整数。
<5>考虑到科学型计算器的使用,和科学型计算器与标准型计算器之间的切换,在其菜单中通过菜单的调用间接调用其科学型计算器对话框,所以使用了非模式对话框的调用。
第2章系统功能分析
2.1系统总体功能分析
此程序采用VC++编写,是一个基于对话框的应用程序,当用户在对话框点击相应按钮时,先执行输出按钮对应字符串,用户可以在对话框上选择相应地科学计算操作按钮,通过程序内相关代码完成相应地科学计算功能。
它的设计按软件工程的方法进行,系统具有良好的界面,必要的交互信息,简约的美观效果。
使用人员能快捷简单地进行操作,,即可单机按钮进行操作,也可直接通过键盘输入。
即时准确地获取所需要的计算结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定帮助。
其具体的功能有:
(1)包含的功能有:
加、减、乘、除运算,开方、求倒数等功能。
(2)计算器上数字0-9为一个控件数组,加、减、乘、除为一个控件数组,其余的为单一控件。
(3)给对话框添加菜单。
(4)输入的原始数据、运算的中间数据和结果都显示在窗口顶部的同一个标签中。
(5)实现对话框的扩展功能。
(6)计算功能基本上是用系统内部函数。
(7)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点以0开头等不正常现象。
(8)“C”按钮可以清除所有已输出的数据从头计算。
2.1.1控件定义
如表2.1.1
ID
CAPTION
MessageHandler
IDC_0
0
On0
IDC_1
1
On1
IDC_2
2
On2
IDC_3
3
On3
IDC_4
4
On4
IDC_5
5
On5
IDC_6
6
On6
IDC_7
7
On7
IDC_8
8
On8
IDC_9
9
On9
IDC_ADD
+
OnAdd
IDC_SIGN
+/-
OnSign
IDC_POINT
.
OnPoint
IDC_3Equal
=
On3Equal
IDC_Daoshu
x/1
OnDaoshu
IDC_MINUS
-
OnMinus
IDC_QUYU
%
OnQuyu
IDC_MULTIPLY
*
OnMultiply
IDC_SQRT
sqrt
OnSqrt
IDC_DIVID
/
OnDivid
IDC_M
M
OnM
IDC_MS
MS
OnMs
IDC_MR
MR
OnMr
IDC_MC
MC
OnMc
IDC_CE
CE
OnCe
IDC_C
C
OnC
IDC_BACKSPACE
Backspace
OnBackspace
IDC_Ln
ln
OnLn
IDC_Log
Log
OnLog
IDC_Sin
sin
OnSin
IDC_Cos
cos
OnCos
IDC_Tan
tan
OnTan
IDC_Jiecheng
n!
OnJiecheng
IDC_Lifang
x^3
OnLifang
IDC_Pingfang
x^2
OnPingfang
IDC_MI
x^y
OnMi
IDC_Exp
exp
OnExp
IDC_Equal
=
OnEqual
2.1.2变量的定义
doublem_coff;//保存小数点的位置
doublem_first;//保存计算过程中的前一个数字
doublem_second;//保存计算过程中的第二个数字
CStringm_operator;//记录当前的计算符号
CStringm_display;//保存编辑框上需要显示的数字
voidUpdateDisplay(doublelval);//将需要输出的数据格式化处理
2.1.3变量的初始化
m_second=0.0;
m_coff=1.0;
mm_first=0.0;
_operator="+";
m_display=_T("");
2.2程序核心代码
2.2.1数字键和符号键的核心代码
voidCSecondDlg:
:
Num(intn)
{
if(m_coff==1.0)
m_second=m_second*10+n;
else
{
m_second=m_second+m_coff*n;
m_coff*=0.1;
}
UpdateDisplay(m_second);
}
voidCMyCalculatorDlg:
:
On1()//数字1的处理
{
Num
(1);
}
2.2.2调用科学型、标准计算器的核心代码
voidCMyCalculatorDlg:
:
OnScience()//调用科学型计算器
{
CSecondDlg*pDlg2=newCSecondDlg;
pDlg2->Create(IDD_DIALOG2);
pDlg2->ShowWindow(SW_SHOW);
}
voidCMyCalculatorDlg:
:
OnNormal()//调用标准型计算器
{
CMyCalculatorDlg*pDlg=newCMyCalculatorDlg;
pDlg->Create(IDD_DIALOG1);
pDlg->ShowWindow(SW_SHOW);
}
2.2.3退格键的核心代码
voidCMyCalculatorDlg:
:
OnBackspace()//退格键的实现
{
charbuffer[15];
if(m_second-(int)m_second==0)//如果是整数,则以除以10的方式退格
m_second=(int)m_second/10;
else//小数方式的退格
{
*gcvt(m_second,sizeof(m_second),buffer);//将输入的浮点数转换为字符串
for(inti=0;i<15;i++)
if(buffer[i]==0)
{
buffer[i-1]=0;
m_second=strtod(buffer,NULL);//将字符串转换回为浮点数
break;
}
}
UpdateDisplay(m_second);
m_coff=1.0;
}
2.2.4进制和弧度的核心代码
voidCSecondDlg:
:
OnBa()//八进制的实现
{
charstring[8]={'0','1','2','3','4','5','6','7'};
chardis[20]="",temp[20];
for(inti=0;;i++)
{
if((int)m_second!
=0)
{
dis[i]=string[(int)m_second%8];
m_second=m_second/8;
}
elsebreak;
}
dis[i]='\0';
for(intk=0,j=i-1;j>=0;j--)
temp[k++]=dis[j];
temp[k]='\0';
m_display.Format(_T("%s"),temp);
intm=m_display.GetLength();
while(m_display.GetAt(m-1)=='\0')
{
m_display.Delete(m-1);
m--;
}
UpdateData(false);
}
voidCSecondDlg:
:
OnJiaoDu()//角度制的实现
{
HUDU=0;
}
voidCSecondDlg:
:
OnHudu()//弧度制的实现
{
HUDU=1;
}
voidCSecondDlg:
:
OnPi()//∏
{
m_second=3.1415926535897932384626433832795;
UpdateDisplay(m_second);
}
voidCSecondDlg:
:
OnSin()//sin的实现
{
if(HUDU==1)
m_first=sin(m_second);
else
m_first=sin(m_second*(PI/180));
UpdateDisplay(m_first);
m_second=0.0;
}
第3章系统测试
3.1程序变量添加
3.1.1显示变量的添加截图
图3.1.1
3.1.2相关按键的实现截图
图3.1.2
3.2程序运行测试
3.2.1程序主界面截图
图3.2.1
3.2.2数字键和符号键截图
当用户按下数字键和符号键时显示如下界面:
图3.1.2
图3.2.2
3.2.3科学型计算器截图
当用户选择科学型计算器时显示如下界面:
图3.2.3
3.2.4退格键截图
当用户按下退格键前后显示界面:
图3.2.4.1图3.2.4.2
3.2.5进制和弧度截图
当用户选择相应的进制或者弧度之间的转换时显示如下界面:
图3.2.5.1图3.2.5.2
第4章总结
经过多番测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。
经过几个星期的VC++课程设计,我们顺利完成该课程设计,并收获良多。
我们大体总结了以下几点:
基本功要过硬,不能马虎经常犯的小错误。
提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。
要善于查找资料,提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。
开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么,这些问题这要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。
有了明确的目的,就可以发挥自己的头脑来完成它了。
要善于思考,程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。
只有这样才能纠正程序的不足,并使其更加人性化。
这次课程设计让我们学到了很多,不仅巩固了MFC程序设计知识,而且也培养了我们的动手能力,令我们的创造性思维得到拓展。
期待今后有更多类似的锻炼机会。
通过这次课程设计,可以明显的感觉到它弥补了课程教学的和实验中知识的深度和广度方面的不足,也让我们进一步掌握了面向对象程序设计的基本方法和编程技巧,同时也巩固所学理论知识,似然花费了不止一点点的时间和精力,不过那确实挺值得的,既让我们认识到自己知识方面的缺陷,又培养了我独立分析问题、解决问题的能力。
课程设计是需要大量时间去动手练习才能体验到它的内涵的,同时还需要用心地投入,时间和情感花下去之后,的确感受到有所收获,增加了对编程的兴趣。
通过这次课程设计,掌握了对话框的相关操作,也体会到书写代码一定要仔细,有时候一小点拼写错误会浪费很多调试程序的时间,再有一点就是要好好学习英语,对编程有很大帮助。
总之,这次课程设计学到了很多,通过实践真正的做到了学有所用。
参考文献
[1]VisualC++实用程序100例人民邮电出版社段兴主编
刘元刚、宋雷、张敬韶、张轩编著