计算器设计报告.docx

上传人:b****7 文档编号:26243786 上传时间:2023-06-17 格式:DOCX 页数:21 大小:94.43KB
下载 相关 举报
计算器设计报告.docx_第1页
第1页 / 共21页
计算器设计报告.docx_第2页
第2页 / 共21页
计算器设计报告.docx_第3页
第3页 / 共21页
计算器设计报告.docx_第4页
第4页 / 共21页
计算器设计报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

计算器设计报告.docx

《计算器设计报告.docx》由会员分享,可在线阅读,更多相关《计算器设计报告.docx(21页珍藏版)》请在冰豆网上搜索。

计算器设计报告.docx

计算器设计报告

 

程序设计与课题设计

计算器设计报告

 

电信1302

何倩雯林然然

 

索引

概要……………………………………………………………………………………3

一.设计任务与目标…………………………………………………………………3

1.基本功能………………………………………………………………………3

2.附加功能………………………………………………………………………3

二.方案设计与功能说明……………………………………………………………3

1.程序界面总体规划……………………………………………………………3

2.程序功能实现…………………………………………………………………4

三.程序类图…………………………………………………………………………5

四.主要程序清单……………………………………………………………………6

1.CCalculationDlg类……………………………………………………………6

2.CSquare类……………………………………………………………………11

3.XBitmapButton类……………………………………………………………13

五.程序运行的测试与分析………………………………………………………14

1.测试基础加减乘除功能运算…………………………………………………14

2.测试连加,连乘,连减,连除功能…………………………………………14

3.连等以及等号后直接进行运算的测试………………………………………14

4.测试退格,清0,全清………………………………………………………14

5.寄存器功能测试………………………………………………………………14

6.16进制、8进制、2进制功能测试…………………………………………14

六.负责完成内容……………………………………………………………………14

七.结论与心得……………………………………………………………………15

 

概要

在《程序设计课程设计》课程中,我们选择VisualC++6.0作为开发平台,两人一组,设计开发一个模拟计算器。

尽量向windows自带计算器靠近。

完成了普通计算器以及科学计算器,能够满足一般计算要求,也提供了二进制、八进制、十六进制的四则运算。

在计算器外观上也做了改进。

一.设计任务与目标

1、完成基本功能:

1)计算器窗口界面的绘制以及基本加减乘除运算及其连续运算的实现

2)寄存器的存储,读取及清空,显示寄存器内容

3)运算过程的显示

  5)按等号重复最后一次运算

6)退格,清空及全部清空 

7)取反,开根号及倒数运算 

2、附加功能

1)增加科学型计算功能

 2) 增加十六进制,二进制,八进制数据计算功能;

 3)美化模拟计算器界面,如按钮被选中后自动改变颜色,增加菜单栏根据需要选择不同类型的计算器等。

二.方案设计与功能说明

1.程序界面总体规划

创建CALCULATION_DIALOG和SCIENCE_DIALOG两个对话框界面分别用于显示普通型计算器与科学型计算器。

为两个对话框添加菜单,供用户选择所需计算器类型(即相应的对话框窗口)。

(1)普通型计算器

数字0-9,小数点,+,-,x,÷,倒数,取负,根号,百分号,=,清零,全部清零,退格,读寄存器,存寄存器,清寄存器共26个按钮,用于用户的运算操作。

运算过程编辑框、寄存器编辑框、结果读取编辑框3个编辑框,用于对用户返回信息。

(2)科学型计算器

基本功能界面同普通型计算器。

除此之外,添加了开3次方,开y次方,sin(),cos(),tan(),x的y次幂,x的平方,x的立方,ln(),n!

,exp,10^x,log(),π14个功能按钮,可供用户计算更复杂的算式。

在科学型计算器上我们添加进制选择按钮,初始默认10进制计算。

设置有16进制、2进制、8进制按钮可供切换进制,并且在选择进制的同时有相应的按钮自动设置无效(例如选择2进制,则2-9按钮自动无效)。

(3)除了基本的界面设置,添加按钮变色效果,按钮通常为灰色,是弹起视觉效果,但当鼠标移动到按钮之上,按钮自动变黄色,并有按住的视觉效果。

当鼠标移动到无效的按钮之上按钮不会变色。

以此变色效果可以提醒用户是否选中该按钮,按钮是否有效。

2.程序功能实现

为两个对话框界面添加两个类,并在其中为按钮添加消息响应函数。

添加字符串和数字数组、操作数数组来保存操作数、操作符、运算结果。

并用UpdateData()来接受和显示。

(1)操作数的输入

在用户持续输入数字时,将数字插入到字符串中。

只有当碰到用户输入操作符时,该字符串被转化成double型数据保存到数字数组中。

(2)操作符的输入

在用户输入操作符后,将操作符保存到操作符数组。

可以对操作符进行编号,代替char型操作符保存的是的操作符对应int型编号。

(3)进制的确定与转换

为每一个进制设置标记符m_xflag,来确定当前的进制数。

并添加进制转换函数(二进制转十进制,十进制转二进制,八进制转十进制,十进制转八进制,十六进制转十进制,十进制转十六进制),计算时无论输入几进制数,将其转为十进制进行计算,计算后转回相应进制。

(4)计算功能

在等号的消息映射函数中调用计算函数。

函数中多用if-else语句来判断当前计算进制,并根据进制要求进行进制转换。

同用if-else语句实现判断此时是否连等,并在连等时执行重复上一次运算的相应语句,不需连等时按优先级依次计算×,÷,-,+。

(5)进程的显示

为进程编辑框添加字符串保存进程。

输入时在字符串中插入字符,退格或清空时删除相应长度的字符。

(6)按钮变色功能

手动制作每一个按钮平常的外观和变色后的外观位图。

将按钮属性改为所有者绘制。

手动添加一个基于CBitmapButton的XBitmapButton类,设置bool变量表示鼠标是否在按钮上。

添加MouseOFF(),MouseOn()函数来执行相应的按钮位图加载。

通过加载不同的位图可以改变按钮的外观。

为按钮添加XBitmapButton类的变量,初始化调用加载位图函数。

三.程序框图或类图

类图

 

四.主要程序清单,函数功能与调用关系

(1)CCalculationDlg类

全局变量:

intm_v;//用于判断操作符的,若为"=","sqrt"等等的操作符,直接输入数据将原数据覆盖

BOOLm_enable;//用于判断菜单项有效性

CMenum_Menu;//菜单的变量

CStringm_re;//用于临时存放操作数

CStrings;//用于临时存放操作符

intlastoperation;//用于存放计算式的最后一个操作符代码

doublelastnumber;//用于存放计算式的最后一个操作数

doublem_number[15];//用于存放操作数

intm_operation[15];//用于存放操作符代码

intm_NumberCount;//操作数的顺序号代码

intm_OperationCount;//操作符的顺序号代码

XBitmapButtonm_sub;//按钮IDC_SUBTRACT的成员变量,用于加载位图,重绘按钮

XBitmapButtonm_spot;//按钮IDC_SPOT的成员变量,用于加载位图

XBitmapButtonm_reci;//按钮IDC_RECIPROCAL的成员变量,用于加载位图

XBitmapButtonm_quyu;//按钮IDC_QUYU的成员变量,用于加载位图

XBitmapButtonm_muti;//按钮IDC_MULTIPLY的成员变量,用于加载位图

XBitmapButtonm_divide;//按钮IDC_DIVIDE的成员变量,用于加载位图

XBitmapButtonm_add;//按钮IDC_ADD的成员变量,用于加载位图

XBitmapButtonm_res;//按钮IDC_RESULT的成员变量,用于加载位图

XBitmapButtonm_sqrt;//按钮IDC_SQRT的成员变量,用于加载位图

XBitmapButtonm_minus;//按钮IDC_MINUS的成员变量,用于加载位图

XBitmapButtonm_ms;//按钮IDC_MEMORYSAVE的成员变量,用于加载位图

XBitmapButtonm_mr;//按钮IDC_MEMORYREAD的成员变量,用于加载位图

XBitmapButtonm_mc;//按钮IDC_MEMORYCLEAR的成员变量,用于加载位图

XBitmapButtonm_ce;//按钮IDC_CE的成员变量,用于加载位图

XBitmapButtonm_c;//按钮IDC_C的成员变量,用于加载位图

XBitmapButtonm_back;//按钮IDC_BACK的成员变量,用于加载位图

XBitmapButtonm_n0;//按钮IDC_NUMBER0的成员变量,用于加载位图

XBitmapButtonm_n9;//按钮IDC_NUMBER9的成员变量,用于加载位图

XBitmapButtonm_n8;//按钮IDC_NUMBER8的成员变量,用于加载位图

XBitmapButtonm_n7;//按钮IDC_NUMBER7的成员变量,用于加载位图

XBitmapButtonm_n6;//按钮IDC_NUMBER6的成员变量,用于加载位图

XBitmapButtonm_n5;//按钮IDC_NUMBER5的成员变量,用于加载位图

XBitmapButtonm_n3;//按钮IDC_NUMBER3的成员变量,用于加载位图

XBitmapButtonm_n2;//按钮IDC_NUMBER2的成员变量,用于加载位图

XBitmapButtonm_n1;//按钮IDC_NUMBER1的成员变量,用于加载位图

XBitmapButtonm_n4;//按钮IDC_NUMBER4的成员变量,用于加载位图

CStringm_result;//存放运算结果

CStringm_process;//存放运算过程

CStringm_memory;//存放寄存器内容

m_counts;//用于保存开根号的次数(为了再连续开根号时过程的正确显示,第一次要在进程中加入开根号字符串sqrt(n1),而之后就要将字符串先删除再重新加入新的sqrt(n2),因此需要记录是否第一次操作。

m_count;//用于保存倒数的次数,为了避免连续倒数时,或者倒数结果非整时,会有精度的丢失。

当m_count=1时正常计算倒数,m_count=2时回到上一次计算结果。

如6取倒数1/6得到0.167,未加判断时,再取倒数得到5.99。

加入m_count,再取倒数仍旧得到6,防止了精度丢失。

成员函数:

1voidCCalculationDlg:

:

Insert(chars)

调用关系:

调用系统函数Insert(inti,chars),Getlength()

功能:

为结果字符串m_result插入新输入的数字。

2voidCCalculationDlg:

:

InsertProcess(chars)

调用关系:

调用系统函数.Insert(inti,chars),.Getlength()

功能:

为进程字符串m_process插入新输入的数字或操作符

3voidCCalculationDlg:

:

DeleteProcess(inta)

调用关系:

调用系统函数.Left(int)

功能:

当按倒退或者清零或者全部清零时,能够删除部分或全部进程。

4voidCCalculationDlg:

:

OnNumber1()

调用关系:

调用Insert()和InsertProcess();

功能:

为结果字符串m_result插入数字1,为进程字符串m_process插入数字1。

voidCCalculationDlg:

:

OnNumber9()

调用关系:

调用Insert()和InsertProcess();

功能:

为结果字符串m_result插入数字9,为进程字符串m_process插入数字9。

5voidCCalculationDlg:

:

OnAdd()//加操作函数

调用关系:

调用系统函数atof(char)(将字符型m_result转为double型)

功能:

将按下add键以前的m_result作为一个新的操作数保存到n_number[m_NumberCount++]中;将add键用数字1代表,作为一个新的操作符保存到n_operation[m_OperationCount++]中;将m_result清空,为接受下一操作数作准备。

voidCCalculationDlg:

:

OnSubtract()//减操作函数

调用关系:

调用系统函数atof(char)(将字符型m_result转为double型)

功能:

将按下subtract键以前的m_result作为一个新的操作数保存到n_number[m_NumberCount++]中;将“-”键用数字2代表,作为一个新的操作符保存到n_operation[m_OperationCount++]中;将m_result清空,为接受下一操作数作准备。

voidCCalculationDlg:

:

OnDivide()//除操作函数

调用关系:

调用系统函数atof(char)(将字符型m_result转为double型)

功能:

将按下divide键以前的m_result作为一个新的操作数保存到n_number[m_NumberCount++]中;将“÷”键用数字4代表,作为一个新的操作符保存到n_operation[m_OperationCount++]中;将m_result清空,为接受下一操作数作准备。

voidCCalculationDlg:

:

OnMultiply()//乘操作函数

调用关系:

调用系统函数atof(char)(将字符型m_result转为double型)

功能:

将按下multiply键以前的m_result作为一个新的操作数保存到n_number[m_NumberCount++]中;将“x”键用数字3代表,作为一个新的操作符保存到n_operation[m_OperationCount++]中;将m_result清空,为接受下一操作数作准备。

⑦voidCCalculationDlg:

:

OnMinus()//取正负函数

调用关系:

调用InsertProcess()

功能:

将当前结果取负数,并根据原数据的正负判断在进程中插入‘-’号或删去‘-’号。

⑧voidCCalculationDlg:

:

OnQuyu()//取百分号函数

调用关系:

调用InsertProcess()

功能:

将当前结果取百分比,并在进程中插入‘%’。

⑨voidCCalculationDlg:

:

OnReciprocal()//取倒数函数

调用关系:

调用InsertProcess()

功能:

将当前结果取倒数,并在进程中插入‘reciprocal()’。

⑩voidCCalculationDlg:

:

OnSqrt()//求平方根函数

调用关系:

调用InsertProcess()

功能:

将当前结果取平方根,并在进程中插入‘sqrt()’。

⑾voidCCalculationDlg:

:

OnCe()//删除最后一个操作数

调用关系:

调用DeleteProcess(int)系统函数.GetLength(),

功能:

删除最后一个操作数,并且在进程中也删除相应字符串。

⑿voidCCalculationDlg:

:

OnC()//恢复初始化状态

调用关系:

功能:

将所有数据区域都情况,回到初始状态。

⒀voidCCalculationDlg:

:

OnBack()//退格函数

调用关系:

调用DeleteProcess(int)系统函数.GetLength(),

功能:

将当前输入往前退一格,即删除最新输入的一个字符。

⒁voidCCalculationDlg:

:

OnButton2()//调用计算函数

调用关系:

调用cal();

功能:

按下“=”号键后调用计算函数,执行计算结果。

⒂voidCCalculationDlg:

:

cal()//计算函数

调用关系:

被OnButton2()调用。

功能:

函数中多用if-else语句来判断当前计算进制,并根据进制要求进行进制转换。

同用if-else语句实现判断此时是否连等,并在连等时执行重复上一次运算的相应语句,不需连等时按优先级依次计算×,÷,-,+。

具体过程为:

1.判断是否m_NumberCount=1并且m_OperationCount=1,若成立,则此时按等号为连等,则如果最后一个操作符为1,则将等号后的结果加上最后一个操作数,如果最后一个操作符为2,则将等号后的结果减去最后一个操作数,依次类推。

2.不连等,将最后操作数存到lastnumber,将最后一个操作符存储到lastoperation,如果此操作符为*,则将下一个操作数存为两数相乘后的结果,即连乘以后,将所有乘号变为前一操作符符号,除乘后结果以外的乘数都变为0(如1+3*4*5=0+0+60,1-3*4*5=1-0-0-60)。

若为÷,也类似操作。

3.将result函数赋值为第一个操作数,再循环进行与下一操作符的加法或减法运算。

4.除了计算结果、最后操作数、最后操作符以外的数据清除。

⒃voidCCalculationDlg:

:

OnMemorysave()//寄存器存储

调用:

功能:

将m_result赋值给m_memory,存起来。

⒄voidCCalculationDlg:

:

OnMemoryread()//寄存器读取

调用:

功能:

将m_memory存入m_number[],即读取。

⒅voidCCalculationDlg:

:

OnMemoryclear()//寄存器清除

调用:

功能:

将m_memory清空。

⒆voidCCalculationDlg:

:

OnMenuitem32772()//打开科学型对话框

调用:

CDialog:

:

EndDialog(IDOK);dlg.DoModal();

功能:

将菜单科学型设为有效,将原对话框关闭,打开科学型对话框。

⒇voidCCalculationDlg:

:

OnUpdateMenuitem32771(CCmdUI*pCmdUI)

调用:

pCmdUI->Enable(m_enable);

功能:

将菜单普通型设为无效

(2)CSquare类。

在科学型计算器中,有大量代码重复普通型,与普通型功能相同。

因此这里只说明科学型与普通型不同的函数与变量。

全局变量:

boolm_slflag;//用于判断是否为16进制

boolm_bflag;//用于判断是否为8进制

boolm_eflag;//二进制标志

成员函数:

①doubleCSquare:

:

TransBjzToSjz(inta)//将八进制转化为十进制函数

调用关系:

调用库函数pow();

功能:

将输入八进制数a转为十进制返回。

CStringCSquare:

:

TransSjzToBjz(doubleresult,CStringm_result)

调用关系:

Insert()

功能:

将十进制转化为八进制函数并逐位插入到m_result字符串,返回m_result

②doubleCSquare:

:

TransEjzToSjz(inta)//将二进制转化为十进制函数

调用关系:

调用库函数pow();

功能:

将输入二进制数a转为十进制返回。

CStringCSquare:

:

TransSjzToEjz(doubleresult,CStringm_result)

调用关系:

Insert()

功能:

将十进制转化为二进制函数并逐位插入到m_result字符串,返回m_result

③doubleCSquare:

:

TransSljzToSjz(CStringa)

调用关系:

调用库函数pow();

功能:

将输入二进制数a转为十进制返回。

CStringCSquare:

:

TransSjzToSljz(doubleresult,CStringm_result)

调用关系:

调用Insert()

功能:

将十进制转化为二进制函数并逐位插入到m_result字符串,返回m_result

④voidCSquare:

:

On10x()//10^x的函数

调用关系:

调用DeleteProcess(),InsertProcess(),库函数pow();

功能:

10^x的响应,将当前结果换算为10^x保存到m_result,并写入过程中。

⑤voidCSquare:

:

OnCos()//cos函数

调用关系:

调用DeleteProcess(),InsertProcess(),库函数cos();

功能:

cos(x)的响应,将当前结果换算为cos(x)保存到m_result,并写入过程中。

⑥voidCSquare:

:

OnSin()//sin函数

调用关系:

调用DeleteProcess(),InsertProcess(),库函数sin();

功能:

sin(x)的响应,将当前结果换算为sin(x)保存到m_result,并写入过程中。

⑦voidCSquare:

:

OnTan()//tan函数

调用关系:

调用DeleteProcess(),InsertProcess(),库函数tan();

功能:

tan(x)的响应,将当前结果换算为tan(x)保存到m_result,并写入过程中。

⑧voidCSquare:

:

OnEjz()//二进制函数

调用关系:

GetDlgItem(IDC_)->EnableWindow(bool);

功能:

二进制按键的响应,将二进制标志置1,其他进制标志置0,进制字符串m_jz改为“2进制”。

同时,使在二进制条件下不可用按钮失效。

voidCSquare:

:

OnSjz()

调用关系:

GetDlgItem(IDC_)->EnableWindow(bool);

功能:

十进制按键的响应,将十进制标志置1,其他进制标志置0,进制字符串m_jz改为“10进制”。

同时,使失效按钮恢复使用。

voidCSquare:

:

OnSljz()//十六进制函数

调用关系:

GetDlgItem(IDC_)->EnableWindow(bool);

功能:

16进制按键的响应,将16进制标志置1,其他进制标志置0,进制字符串m_jz改为“16进制”。

同时,使失效按钮恢复使用,使能A,B,C,D,E,F。

voidCSqu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1