程序设计课题设计
计算器设计报告
电信
索引
概……………………………………………………………………………………3
.设计务目标…………………………………………………………………3
1基功………………………………………………………………………3
2附加功………………………………………………………………………3
二.方案设计功说明……………………………………………………………3
1程序界面总体规划……………………………………………………………3
2程序功实现…………………………………………………………………4
三.程序类图…………………………………………………………………………5
四.程序清单……………………………………………………………………6
1CCalculationDlg类……………………………………………………………6
2CSquare类……………………………………………………………………11
3XBitmapButton类……………………………………………………………13
五.程序运行测试分析………………………………………………………14
1测试基础加减功运算…………………………………………………14
2测试连加连连减连功…………………………………………14
3连等等号直接进行运算测试………………………………………14
4测试退格清0全清………………………………………………………14
5寄存器功测试………………………………………………………………14
616进制8进制2进制功测试…………………………………………14
六.负责完成容……………………………………………………………………14
七.结心……………………………………………………………………15
概
程序设计课程设计课程中选择Visual C++60作开发台两组设计开发模拟计算器量windows带计算器完成普通计算器科学计算器够满足般计算求提供二进制八进制十六进制四运算计算器外观做改进
. 设计务目标
1完成基功:
1)计算器窗口界面绘制基加减运算连续运算实现
2)寄存器存储读取清空显示寄存器容
3)运算程显示
5)等号重复次运算
6)退格清空全部清空
7)取反开根号倒数运算
2附加功
1)增加科学型计算功
2) 增加十六进制 二进制八进制数计算功
3)美化模拟计算器界面钮选中动改变颜色增加菜单栏根需选择类型计算器等
二. 方案设计功说明
1程序界面总体规划
创建CALCULATION_DIALOGSCIENCE_DIALOG两话框界面分显示普通型计算器科学型计算器两话框添加菜单供户选择需计算器类型(相应话框窗口)
(1)普通型计算器
数字09数点+x÷倒数取负根号百分号清零全部清零退格读寄存器存寄存器清寄存器 26钮户运算操作运算程编辑框寄存器编辑框结果读取编辑框3编辑框户返回信息
(2)科学型计算器
基功界面普通型计算器外添加开3次方开y次方sin()cos()tan()xy次幂x方x立方ln()nexp10^xlog()π 14功钮供户计算更复杂算式
科学型计算器添加进制选择钮初始默认10进制计算设置16进制2进制8进制钮供切换进制选择进制时相应钮动设置效(例选择2进制29钮动效)
(3)基界面设置添加钮变色效果钮通常灰色弹起视觉效果鼠标移动钮钮动变黄色住视觉效果鼠标移动效钮钮会变色变色效果提醒户否选中该钮钮否效
2程序功实现
两话框界面添加两类中钮添加消息响应函数添加字符串数字数组操作数数组保存操作数操作符运算结果UpdateData()接受显示
(1)操作数输入
户持续输入数字时数字插入字符串中碰户输入操作符时该字符串转化成double型数保存数字数组中
(2)操作符输入
户输入操作符操作符保存操作符数组操作符进行编号代char型操作符保存操作符应int型编号
(3)进制确定转换
进制设置标记符m_xflag确定前进制数添加进制转换函数(二进制转十进制十进制转二进制八进制转十进制十进制转八进制十六进制转十进制十进制转十六进制)计算时输入进制数转十进制进行计算计算转回相应进制
(4)计算功
等号消息映射函数中调计算函数函数中ifelse语句判断前计算进制根进制求进行进制转换ifelse语句实现判断时否连等连等时执行重复次运算相应语句需连等时优先级次计算×÷+
(5)进程显示
进程编辑框添加字符串保存进程输入时字符串中插入字符退格清空时删相应长度字符
(6)钮变色功
手动制作钮常外观变色外观位图钮属性改者绘制手动添加基CBitmapButtonXBitmapButton类设置bool变量表示鼠标否钮添加MouseOFF()MouseOn()函数执行相应钮位图加载通加载位图改变钮外观钮添加XBitmapButton类变量初始化调加载位图函数
三. 程序框图类图
类图
四. 程序清单函数功调关系
(1) CCalculationDlg类
全局变量:
int m_v 判断操作符sqrt等等操作符直接输入数原数覆盖
BOOL m_enable 判断菜单项效性
CMenu m_Menu 菜单变量
CString m_re 时存放操作数
CString s 时存放操作符
int lastoperation 存放计算式操作符代码
double lastnumber 存放计算式操作数
double m_number[15] 存放操作数
int m_operation[15] 存放操作符代码
int m_NumberCount 操作数序号代码
int m_OperationCount 操作符序号代码
XBitmapButton m_sub钮IDC_SUBTRACT成员变量加载位图重绘钮
XBitmapButton m_spot钮IDC_SPOT成员变量加载位图
XBitmapButton m_reci 钮IDC_RECIPROCAL成员变量加载位图
XBitmapButton m_quyu 钮IDC_QUYU成员变量加载位图
XBitmapButton m_muti 钮IDC_MULTIPLY成员变量加载位图
XBitmapButton m_divide 钮IDC_DIVIDE成员变量加载位图
XBitmapButton m_add 钮IDC_ADD成员变量加载位图
XBitmapButton m_res 钮IDC_RESULT成员变量加载位图
XBitmapButton m_sqrt 钮IDC_SQRT成员变量加载位图
XBitmapButton m_minus 钮IDC_MINUS成员变量加载位图
XBitmapButton m_ms 钮IDC_MEMORYSAVE成员变量加载位图
XBitmapButton m_mr 钮IDC_MEMORYREAD成员变量加载位图
XBitmapButton m_mc 钮IDC_MEMORYCLEAR成员变量加载位图
XBitmapButton m_ce 钮IDC_CE成员变量加载位图
XBitmapButton m_c 钮IDC_C成员变量加载位图
XBitmapButton m_back 钮IDC_BACK成员变量加载位图
XBitmapButton m_n0 钮IDC_NUMBER0成员变量加载位图
XBitmapButton m_n9 钮IDC_NUMBER9成员变量加载位图
XBitmapButton m_n8 钮IDC_NUMBER8成员变量加载位图
XBitmapButton m_n7 钮IDC_NUMBER7成员变量加载位图
XBitmapButton m_n6 钮IDC_NUMBER6成员变量加载位图
XBitmapButton m_n5 钮IDC_NUMBER5成员变量加载位图
XBitmapButton m_n3 钮IDC_NUMBER3成员变量加载位图
XBitmapButton m_n2 钮IDC_NUMBER2成员变量加载位图
XBitmapButton m_n1 钮IDC_NUMBER1成员变量加载位图
XBitmapButton m_n4 钮IDC_NUMBER4成员变量加载位图
CString m_result存放运算结果
CString m_process存放运算程
CString m_memory存放寄存器容
m_counts保存开根号次数(连续开根号时程正确显示第次进程中加入开根号字符串sqrt(n1)字符串先删重新加入新sqrt(n2)需记录否第次操作
m_count保存倒数次数避免连续倒数时者倒数结果非整时会精度丢失m_count1时正常计算倒数m_count2时回次计算结果6取倒数160167未加判断时取倒数599加入m_count取倒数旧6防止精度丢失
成员函数:
① void CCalculationDlgInsert(char s)
调关系:调系统函数Insert(int ichar s)Getlength()
功:结果字符串m_result插入新输入数字
② void CCalculationDlgInsertProcess(char s)
调关系:调系统函数Insert(int ichar s)Getlength()
功:进程字符串m_process插入新输入数字操作符
③ void CCalculationDlgDeleteProcess(int a)
调关系:调系统函数Left(int)
功:倒退者清零者全部清零时够删部分全部进程
④ void CCalculationDlgOnNumber1()
调关系:调Insert()InsertProcess()
功:结果字符串m_result插入数字1进程字符串m_process插入数字1
:
:
void CCalculationDlgOnNumber9()
调关系:调Insert()InsertProcess()
功:结果字符串m_result插入数字9进程字符串m_process插入数字9
⑤ void CCalculationDlgOnAdd() 加操作函数
调关系:调系统函数atof(char)(字符型m_result转double型)
功:add键前m_result作新操作数保存n_number[m_NumberCount++]中add键数字1代表作新操作符保存n_operation[m_OperationCount++]中m_result清空接受操作数作准备
void CCalculationDlgOnSubtract() 减操作函数
调关系:调系统函数atof(char)(字符型m_result转double型)
功:subtract键前m_result作新操作数保存n_number[m_NumberCount++]中键数字2代表作新操作符保存n_operation[m_OperationCount++]中m_result清空接受操作数作准备
void CCalculationDlgOnDivide() 操作函数
调关系:调系统函数atof(char)(字符型m_result转double型)
功:divide键前m_result作新操作数保存n_number[m_NumberCount++]中÷键数字4代表作新操作符保存n_operation[m_OperationCount++]中m_result清空接受操作数作准备
void CCalculationDlgOnMultiply() 操作函数
调关系:调系统函数atof(char)(字符型m_result转double型)
功:multiply键前m_result作新操作数保存n_number[m_NumberCount++]中x键数字3代表作新操作符保存n_operation[m_OperationCount++]中m_result清空接受操作数作准备
⑦ void CCalculationDlgOnMinus() 取正负函数
调关系:调InsertProcess()
功:前结果取负数根原数正负判断进程中插入 ’号删’号
⑧void CCalculationDlgOnQuyu() 取百分号函数
调关系:调InsertProcess()
功:前结果取百分进程中插入’
⑨void CCalculationDlgOnReciprocal() 取倒数函数
调关系:调InsertProcess()
功:前结果取倒数进程中插入reciprocal()’
⑩void CCalculationDlgOnSqrt() 求方根函数
调关系:调InsertProcess()
功:前结果取方根进程中插入sqrt()’
⑾void CCalculationDlgOnCe() 删操作数
调关系:调DeleteProcess(int)系统函数GetLength()
功:删操作数进程中删相应字符串
⑿void CCalculationDlgOnC() 恢复初始化状态
调关系:
功:数区域情况回初始状态
⒀void CCalculationDlgOnBack() 退格函数
调关系:调DeleteProcess(int)系统函数GetLength()
功:前输入前退格删新输入字符
⒁ void CCalculationDlgOnButton2() 调计算函数
调关系:调cal()
功:号键调计算函数执行计算结果
⒂ void CCalculationDlgcal() 计算函数
调关系:OnButton2()调
功:函数中ifelse语句判断前计算进制根进制求进行进制转换ifelse语句实现判断时否连等连等时执行重复次运算相应语句需连等时优先级次计算×÷+具体程:1判断否m_NumberCount1m_OperationCount1成立时等号连等果操作符1等号结果加操作数果操作符2等号结果减操作数次类推2连等操作数存lastnumber操作符存储lastoperation果操作符*操作数存两数相结果连号变前操作符符号结果外数变0(1+3*4*50+0+6013*4*510060)÷类似操作3 result函数赋值第操作数循环进行操作符加法减法运算4计算结果操作数操作符外数清
⒃void CCalculationDlgOnMemorysave() 寄存器存储
调:
功:m_result赋值m_memory存起
⒄void CCalculationDlgOnMemoryread() 寄存器读取
调:
功:m_memory存入m_number[]读取
⒅void CCalculationDlgOnMemoryclear() 寄存器清
调:
功:m_memory清空
⒆void CCalculationDlgOnMenuitem32772() 开科学型话框
调: CDialogEndDialog(IDOK) dlgDoModal()
功: 菜单科学型设效原话框关闭开科学型话框
⒇void CCalculationDlgOnUpdateMenuitem32771(CCmdUI* pCmdUI)
调: pCmdUI>Enable(m_enable)
功:菜单普通型设效
(2) CSquare类
科学型计算器中量代码重复普通型普通型功相里说明科学型普通型函数变量
全局变量:
bool m_slflag 判断否16进制
bool m_bflag 判断否8进制
bool m_eflag二进制标志
成员函数:
①double CSquareTransBjzToSjz(int a) 八进制转化十进制函数
调关系:调库函数pow()
功:输入八进制数a转十进制返回
CString CSquareTransSjzToBjz(double result CString m_result)
调关系:Insert()
功:十进制转化八进制函数逐位插入m_result字符串返回m_result
②double CSquareTransEjzToSjz(int a) 二进制转化十进制函数
调关系:调库函数pow()
功:输入二进制数a转十进制返回
CString CSquareTransSjzToEjz(double resultCString m_result)
调关系:Insert()
功:十进制转化二进制函数逐位插入m_result字符串返回m_result
③double CSquareTransSljzToSjz(CString a)
调关系:调库函数pow()
功:输入二进制数a转十进制返回
CString CSquareTransSjzToSljz(double result CString m_result)
调关系:调Insert()
功:十进制转化二进制函数逐位插入m_result字符串返回m_result
④void CSquareOn10x() 10^x函数
调关系:调DeleteProcess()InsertProcess()库函数pow()
功:10^x响应前结果换算10^x保存m_result写入程中
⑤void CSquareOnCos() cos函数
调关系:调DeleteProcess()InsertProcess()库函数cos()
功:cos(x)响应前结果换算cos(x)保存m_result写入程中
⑥void CSquareOnSin() sin函数
调关系:调DeleteProcess()InsertProcess()库函数sin()
功:sin(x)响应前结果换算sin(x)保存m_result写入程中
⑦void CSquareOnTan() tan函数
调关系:调DeleteProcess()InsertProcess()库函数tan()
功:tan(x)响应前结果换算tan(x)保存m_result写入程中
⑧void CSquareOnEjz() 二进制函数
调关系:GetDlgItem(IDC_)>EnableWindow(bool)
功:二进制键响应二进制标志置1进制标志置0进制字符串m_jz改2进制时二进制条件钮失效
void CSquareOnSjz()
调关系:GetDlgItem(IDC_)>EnableWindow(bool)
功:十进制键响应十进制标志置1进制标志置0进制字符串m_jz改10进制时失效钮恢复
void CSquareOnSljz() 十六进制函数
调关系:GetDlgItem(IDC_)>EnableWindow(bool)
功:16进制键响应16进制标志置1进制标志置0进制字符串m_jz改16进制时失效钮恢复ABCDEF
void CSquareOnBjz() 八进制函数
调关系:GetDlgItem(IDC_)>EnableWindow(bool)
功:8进制键响应8进制标志置1进制标志置0进制字符串m_jz改8进制时失效钮恢复8进制条件钮失效
⑨void CSquareOnExp() e幂函数
调关系:调关系:调DeleteProcess()InsertProcess()库函数exp()
功:exp(x)响应前结果换算exp(x)保存m_result写入程中
⑩void CSquareOnLn() ln()函数
调关系:调DeleteProcess()InsertProcess()库函数ln()
功:ln(x)响应前结果换算ln(x)保存m_result写入程中
⑾void CSquareOnLog() log10函数
调关系:调DeleteProcess()InsertProcess()库函数log()
功:log(x)响应前结果换算log(x)保存m_result写入程中
⑿void CSquareOnN() n阶
调关系:调DeleteProcess()InsertProcess()
功:n响应前结果换算n保存m_result写入程中
⒀void CSquareOnXk3g() x开3次函数
调关系:调DeleteProcess()InsertProcess()pow()
功:x^13响应前结果换算x^13保存m_result写入程中
⒁void CSquareOnXkyg() x开y次方
调关系:调DeleteProcess()InsertProcess()pow()
功:x^1y响应前结果换算x^1y保存m_result写入程中
⒂void CSquareOnXy() xy次方函数
调关系:调DeleteProcess()InsertProcess()pow()
功:x^y响应前结果换算x^y保存m_result写入程中
(3)XBitmapButton类
全局变量:
UINT m_O 鼠标滑时显示位图 ONMOUSEOVER
UINT m_U 常状态显示位图 NORMAL
BOOL m_over 鼠标位钮时该值TRUE反FALSE
BOOL m_track钮释放前TRUE反FALSE
成员函数:
①void XBitmapButtonOnMouseMove(UINT nFlags CPoint point)
调关系:调_TrackMouseEvent()
功:追踪鼠标移动
②LRESULT XBitmapButtonOnMouseON(WPARAM wParam LPARAM lParam)
调关系:调LoadBitmaps()
功:鼠标移动钮时加载位图
③LRESULT XBitmapButtonOnMouseOFF(WPARAM wParam LPARAM lParam)
调关系:调LoadBitmaps()
功:鼠标离开钮时加载位图
五. 程序运行测试分析
1测试基础加减功运算(例测试1+22*36262计算式):
分析:操作符加m_operation[m_OperationCount]1减m_operation[m_OperationCount]2m_operation[m_OperationCount]3m_operation[m_OperationCount]4通循环调if(m_operation[i]1)m_number[i]m_number[i+1]相加次类推
2测试连加连连减连功(测试计算式5*21*2*3+3*4255):
分析:例连号变前操作符符号结果外数变0结果保存法运算操作数余操作符类似连程
3连等等号直接进行运算测试(运算结束计算点击等号):
分析:通前运算式操作数操作符保存然判断否m_NumberCount1m_OperationCount1成立时等号连等果操作符1等号结果加操作数果操作符2等号结果减操作数次类推
4测试退格清0全清:
分析:利字符串长度减1功完成退格功利屏幕输入字符清m_result_T()语句完成清0功利初始化语句操作数操作符初始化实现全清功
5寄存器功测试:
分析:通保存语句(m_memorym_result)读取(m_number[]m_memory)删(m_memory_T())功测试寄存器功行性
616进制8进制2进制功测试(通普通二进制数相加相减进行测试二进制功类推):
分析:通TransSljzToSjz(CString a) TransEjzToSjz(int a)TransSjzToEjz(double resultCString m_result) 等等函数进行进制间转化实现进制功
程序界面:
六. 负责完成容
话框界面设计话框钮附加功(鼠标时钮变黄):倩雯
添加钮函数加减基功实现:林然然
添加进程编辑框完成进程插入功:倩雯
完成连加连等功退格请0全清功:林然然
完成寄存器储存读取清功:倩雯
菜单栏添加:林然然
完成16进制8进制2进制等等钮实现:倩雯
完成x^yx^2y√xn等等基操作钮实现:林然然
完成报告:倩雯(1234)林然然(567)
完成PPT:林然然
公开答辩:倩雯林然然
七. 结心
计算器功已完全实现完成项附加功测试通预期目标完成
通计算机编写程序MFC更深认识简单添加变量添加钮函数添加菜单栏添加位图变量实现拓展功(键变黄)两两相加相实现连加连实现基础功引申拓展功步进步程序天天中完善
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档