




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2013/6/22作者编写的科学强大的易懂的新手入门的科学计算器,基于MFC编写的科学计算器指导教师对课程设计的评定意见搞 要 本课程设计是在基于对话框的应用程序中模拟一个计算器,本计算器可以进行十进制下的四则运算(加、减、乘、除)和四则混合运算,可以把十进制转化为二进制或十六进制,可以进行一些常用的函数运算(比如sin、cos、tan、cot、sqrt、ln等),还可以支持带“(”,“)”符号的表达式的计算。系统开发平台为Windows XP,程序设计设计语言采用Visual C+6.0,程序运行平台为Windows 98/2000/XP。程序通过调试运行,初步实现了设计目标。关键词 程序设计;计算器;C+;1 引言 在现代社会中,计算器已经进入了每一个家庭,人们在生活和学习中经常需要使用到计算器,它的出现大大减少了人们在计算方面的工作量,可以说它在人们生活和学习中是不可缺少的。1.1 C+介绍C+语言的主要特点表现在两个方面,一是全面兼容C语言,二是支持面向对象的程序设计方法1。(1) C+是一个更好的C,它保持了C语言的优点,大多数的C程序代码略作修改或不作修改就可在C+的集成环境下调试和运行。这对于继承和开发当前已在广泛的软件是非常重要的,可以节省大量的人力和物力。(2) C+是一种面向对象的程序设计语言它使得程序的各个模块的独立性更强,程序的可读性和可移植性更强,程序代码的结构更加合理,程序的扩充性更强。这对于设计、编制和调试一些大型的软件尤为重要。 (3) C+集成环境不仅支持C+程序的编译和调试,而且也支持C程序的编译和调试。通常,C+程序环境约定:当源程序文件的扩展名为c时,则为C程序;而当源程序文件的扩展名为cpp时,则为C+程序。(4) C+语句非常简练,对语法限制比较宽松,因此C+语法非常灵活。其优点是给用户编程带来书写上的方便。其缺点是由于编译时对语法限制比较宽松,许多逻辑上的错误不容易发现,给用户编程增加了难度。3以下是详尽的代码在C*Dlg添加下面代码,这个自己一定要看懂,里面是各个按钮的响应函数,不是叫你直接复制粘贴,而是一个个双击按钮添加代码,最后成了以下的样式。/ text2Dlg.cpp : 实现文件/#include stdafx.h#include text2.h#include text2Dlg.h#include afxdialogex.h#includeatlsimpstr.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogExpublic:CAboutDlg();/ 对话框数据enum IDD = IDD_ABOUTBOX ;protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现protected:DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialogEx(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()/ Ctext2Dlg 对话框Ctext2Dlg:Ctext2Dlg(CWnd* pParent /*=NULL*/): CDialogEx(Ctext2Dlg:IDD, pParent), m_strResult(_T(), OperatorPressed(false), Restarted(false), s(0), m_Edit3(_T(), L(0), L1(0), PB(0), radio(0), m_strout(_T(), m_MM3(_T(), m_Inv(false)m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void Ctext2Dlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_strResult);DDX_Text(pDX, IDC_EDIT3, m_Edit3);DDX_Text(pDX, IDC_MM3, m_MM3);BEGIN_MESSAGE_MAP(Ctext2Dlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_0, &Ctext2Dlg:OnBnClicked0)ON_BN_CLICKED(IDC_1, &Ctext2Dlg:OnBnClicked1)ON_BN_CLICKED(IDC_2, &Ctext2Dlg:OnBnClicked2)ON_BN_CLICKED(IDC_3, &Ctext2Dlg:OnBnClicked3)ON_BN_CLICKED(IDC_4, &Ctext2Dlg:OnBnClicked4)ON_BN_CLICKED(IDC_5, &Ctext2Dlg:OnBnClicked5)ON_BN_CLICKED(IDC_6, &Ctext2Dlg:OnBnClicked6)ON_BN_CLICKED(IDC_7, &Ctext2Dlg:OnBnClicked7)ON_BN_CLICKED(IDC_8, &Ctext2Dlg:OnBnClicked8)ON_BN_CLICKED(IDC_9, &Ctext2Dlg:OnBnClicked9)ON_BN_CLICKED(IDC_POINT, &Ctext2Dlg:OnBnClickedPoint)ON_BN_CLICKED(IDC_ADD, &Ctext2Dlg:OnBnClickedAdd)ON_BN_CLICKED(IDC_SUB, &Ctext2Dlg:OnBnClickedSub)ON_BN_CLICKED(IDC_mul, &Ctext2Dlg:OnBnClickedmul)ON_BN_CLICKED(IDC_DIV, &Ctext2Dlg:OnBnClickedDiv)ON_BN_CLICKED(IDC_EQUAL, &Ctext2Dlg:OnBnClickedEqual)ON_BN_CLICKED(IDC_BACKSPACE, &Ctext2Dlg:OnBnClickedBackspace)ON_BN_CLICKED(IDC_C, &Ctext2Dlg:OnBnClickedC)ON_BN_CLICKED(IDC_SIN, &Ctext2Dlg:OnBnClickedSin)ON_BN_CLICKED(IDC_COS, &Ctext2Dlg:OnBnClickedCos)ON_BN_CLICKED(IDC_TAN, &Ctext2Dlg:OnBnClickedTan)ON_BN_CLICKED(IDC_SQRT, &Ctext2Dlg:OnBnClickedSqrt)ON_BN_CLICKED(IDC_LKOUHAO, &Ctext2Dlg:OnBnClickedLkouhao)ON_BN_CLICKED(IDC_RKOUHAO, &Ctext2Dlg:OnBnClickedRkouhao)ON_BN_CLICKED(IDC_PI, &Ctext2Dlg:OnBnClickedPi)ON_BN_CLICKED(IDC_INT, &Ctext2Dlg:OnBnClickedInt)ON_BN_CLICKED(IDC_MOD, &Ctext2Dlg:OnBnClickedMod)ON_BN_CLICKED(IDC_CE, &Ctext2Dlg:OnBnClickedCe)ON_BN_CLICKED(IDC_DAOSHU, &Ctext2Dlg:OnBnClickedDaoshu)ON_BN_CLICKED(IDC_JIAJIAN, &Ctext2Dlg:OnBnClickedJiajian)ON_BN_CLICKED(IDC_N, &Ctext2Dlg:OnBnClickedN)ON_BN_CLICKED(IDC_SQUARE, &Ctext2Dlg:OnBnClickedSquare)ON_BN_CLICKED(IDC_CUBE, &Ctext2Dlg:OnBnClickedCube)ON_BN_CLICKED(IDC_TENX, &Ctext2Dlg:OnBnClickedTenx)ON_BN_CLICKED(IDC_EXP, &Ctext2Dlg:OnBnClickedExp)ON_BN_CLICKED(IDC_LOG, &Ctext2Dlg:OnBnClickedLog)ON_BN_CLICKED(IDC_SINH, &Ctext2Dlg:OnBnClickedSinh)ON_BN_CLICKED(IDC_COSH, &Ctext2Dlg:OnBnClickedCosh)ON_BN_CLICKED(IDC_TANH, &Ctext2Dlg:OnBnClickedTanh)ON_BN_CLICKED(IDC_IN, &Ctext2Dlg:OnBnClickedIn)ON_BN_CLICKED(IDC_XY, &Ctext2Dlg:OnBnClickedXy)ON_BN_CLICKED(IDC_KAILIFANG, &Ctext2Dlg:OnBnClickedKailifang)ON_BN_CLICKED(IDC_RADIO1, &Ctext2Dlg:OnBnClickedRadio1)ON_BN_CLICKED(IDC_RADIO2, &Ctext2Dlg:OnBnClickedRadio2)ON_BN_CLICKED(IDC_FE, &Ctext2Dlg:OnBnClickedFe)ON_BN_CLICKED(IDC_YX, &Ctext2Dlg:OnBnClickedYx)ON_BN_CLICKED(IDC_INV, &Ctext2Dlg:OnBnClickedInv)ON_BN_CLICKED(IDC_MC, &Ctext2Dlg:OnBnClickedMc)ON_BN_CLICKED(IDC_MR, &Ctext2Dlg:OnBnClickedMr)ON_BN_CLICKED(IDC_MS, &Ctext2Dlg:OnBnClickedMs)ON_BN_CLICKED(IDC_MADD, &Ctext2Dlg:OnBnClickedMadd)ON_BN_CLICKED(IDC_MSUB, &Ctext2Dlg:OnBnClickedMsub)ON_BN_CLICKED(IDC_SIN2, &Ctext2Dlg:OnBnClickedSin2)ON_BN_CLICKED(IDC_COS2, &Ctext2Dlg:OnBnClickedCos2)ON_BN_CLICKED(IDC_TAN2, &Ctext2Dlg:OnBnClickedTan2)ON_BN_CLICKED(IDC_PI2, &Ctext2Dlg:OnBnClickedPi2)END_MESSAGE_MAP()/ Ctext2Dlg 消息处理程序BOOL Ctext2Dlg:OnInitDialog()CDialogEx:OnInitDialog();/ 将“关于.”菜单项添加到系统菜单中。/ IDM_ABOUTBOX 必须在系统命令范围内。ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动/ 执行此操作SetIcon(m_hIcon, TRUE);/ 设置大图标SetIcon(m_hIcon, FALSE);/ 设置小图标/ TODO: 在此添加额外的初始化代码return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid Ctext2Dlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialogEx:OnSysCommand(nID, lParam);/ 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void Ctext2Dlg:OnPaint()if (IsIconic()CPaintDC dc(this); / 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0);/ 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ 绘制图标dc.DrawIcon(x, y, m_hIcon);elseCDialogEx:OnPaint();/当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR Ctext2Dlg:OnQueryDragIcon()return static_cast(m_hIcon);void Ctext2Dlg:OnBnClicked0() /以下19和“.”都是一个道理,在此写一个说明一下UpdateData(TRUE); /把编辑框显示的字符串传给相应的变量m_strResultif(OperatorPressed=true|Restarted=true) /如果按下了=,AC,sqrt,tan,sin等按忸时,m_strResult=0; /变量m_strResult的值为按下的按忸0(否则下面会出现03.的情况出现)else m_strResult+=0; /在按下数字键的情况下,则在m_strResult后加0OperatorPressed=false; / OperatorPressed是bool型的变量 Restarted=false; / Restarted是bool型的变量 UpdateData(FALSE); /把字符串变量m_strResult传给编辑框void Ctext2Dlg:OnBnClicked1()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=1; else m_strResult+=1;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked2()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=2; else m_strResult+=2;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked3()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=3; else m_strResult+=3;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked4()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=4; else m_strResult+=4;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked5()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=5; else m_strResult+=5;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked6()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=6; else m_strResult+=6;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked7()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=7;else m_strResult+=7;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked8()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=8; else m_strResult+=8;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClicked9()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=9; else m_strResult+=9;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClickedPoint()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=.; else m_strResult+=.;OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClickedAdd() /以下“- * /”都是一个道理,在此写一个说明一下UpdateData(TRUE); /把编辑框显示的字符串传给相应的变量m_strResult m_strResult+=+; /在变量m_strResult后加+ OperatorPressed=false; Restarted=false; /把bool变量OperatorPressed和Restarted的值改为falseUpdateData(FALSE); /把字符串变量m_strResult传给编辑框 void Ctext2Dlg:OnBnClickedSub()UpdateData(TRUE); m_strResult+=-; OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClickedmul()UpdateData(TRUE); m_strResult+=*; OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClickedDiv()UpdateData(TRUE); m_strResult+=/; OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:OnBnClickedEqual() UpdateData(TRUE);L1=true;int p=0,i=0,g10=0,k=0,j;for(;im_strResult.GetLength();i+)if(m_strResult.GetAt(i)=()j=p;gj=i;p+;for(;k1) /判断编辑框是否只剩下“0”或者是否有字符在编辑框上m_strResult=m_strResult.Left(m_strResult.GetLength()-1); /把m_strResult左边的数(长度已经减一)重新赋给m_strResultelseRestarted=true; /把bool变量Restarted的值改为truem_strResult=0; /变量m_strResult的值为按下的按忸0UpdateData(FALSE);/把字符串变量m_strResult传给编辑框 void Ctext2Dlg:OnBnClickedC()Restarted=true; /把bool变量Restarted的值改为truem_strResult=0; /变量m_strResult的值为按下的按忸0UpdateData(FALSE);/把字符串变量m_strResult传给编辑框 void Ctext2Dlg:OnBnClickedSin() /以下“cos tan sinh cosh tanh”都是一个道理,在此写一个说明一下UpdateData(TRUE);/把编辑框显示的字符串传给相应的变量m_strResult double result; /定义一个局部变量double型的result if(radio=1) /判断是否按下度(这里还没有设置梯度的消息命令响应函数)result=sin(_wtof(m_strResult)*6.2831853071795864769/360.0); /计算sin(度)的公式else result=sin(_wtof(m_strResult);/计算sin(弧度)的公式m_Edit3.Format(_T(%1f),result);/将result的double型数据转换成字符串,并传递给编辑框2的变量m_Edit3ClearZero(m_Edit3); /清零m_strResult=m_Edit3; /将编辑框2的变量m_Edit3上的字符串赋值给编辑框1的变量m_strResultOperatorPressed=true; /把bool变量OperatorPressed的值改为true UpdateData(FALSE); /把字符串变量m_strResult,m_Edit3传给各自的编辑框 void Ctext2Dlg:OnBnClickedCos()UpdateData(TRUE);double result;if(radio=1)result=cos(_wtof(m_strResult)*6.2831853071795864769/360.0);else result=cos(_wtof(m_strResult);m_Edit3.Format(_T(%1f),result);ClearZero(m_Edit3);m_strResult=m_Edit3;OperatorPressed=true; UpdateData(FALSE);void Ctext2Dlg:OnBnClickedTan()UpdateData(TRUE);double result; if(radio=1)result=tan(_wtof(m_strResult)*6.2831853071795864769/360.0);else result=tan(_wtof(m_strResult);m_Edit3.Format(_T(%1f),result);ClearZero(m_Edit3);m_strResult=m_Edit3;OperatorPressed=true; UpdateData(FALSE);void Ctext2Dlg:OnBnClickedSqrt()UpdateData(TRUE); /把编辑框显示的字符串传给相应的变量m_strResult double result; /定义一个局部变量double型的result result=sqrt(_wtof(m_strResult);/计算sqrtm_Edit3.Format(_T(%1f),result);/将result的double型数据转换成字符串,并传递给编辑框2的变量m_Edit3ClearZero(m_Edit3); /清零OperatorPressed=true;/把bool变量OperatorPressed的值改为true UpdateData(FALSE);/把字符串变量m_Edit3传给编辑框double Ctext2Dlg:GetaStr(CString str) /这个函数的作用是将只有数字和.的字符串转成double的数值,即相当于_wtof()这个函数/这个函数也是自己添加int i=0;double rate=10.0,itemp=0.0;for(;istr.GetLength();i+) if(isdigit(str.GetAt(i) /如果字符串str.GetAt(i)的内容是整数 if(rate=10.0) /整数部分itemp=itemp*rate+(str.GetAt(i)-0);/获得整数else /小数部分itemp=itemp+rate*(str.GetAt(i)-0);/获得小数rate=rate/10; /每次让rate小10倍else if(str.GetAt(i)=.) /如果str.GetAt(i)是小数点rate=0.1; /让rate=0.1,开始计算小数部分 return (itemp);void Ctext2Dlg:OnBnClickedLkouhao()UpdateData(TRUE); /把编辑框显示的字符串传给相应的变量m_strResult if(OperatorPressed=true|Restarted=true)m_strResult=(; /变量m_strResult的值为按下的按忸( else m_strResult+=(; /在按下数字键的情况下,则在m_strResult后加(OperatorPressed=false; Restarted=false; /把bool变量OperatorPressed和Restarted的值改为falseUpdateData(FALSE); /把字符串变量m_strResult传给编辑框 void Ctext2Dlg:OnBnClickedRkouhao()UpdateData(TRUE); if(OperatorPressed=true|Restarted=true)m_strResult=); else m_strResult+=);OperatorPressed=false; Restarted=false;UpdateData(FALSE); void Ctext2Dlg:Bracket(CString str0,int *h)/这个代码也是自己添加CString str1=_T(),str2=_T(),str3=_T();int i=0;for(;istr0.GetLength();i+) if(*h=i) /如果碰到了左括号 i+; /i自加一次,用来跳过左括号 for(;istr0.GetLength();i+)if(str0.GetAt(i)=) break; /如果碰到右括号,跳出循环 str2+=str0.GetAt(i); /把括号内的表达式赋给str2i+; /i自加一次,用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版科技园区廉洁从业自律合作协议
- 二零二五年大理石石材市场调研与分析服务协议
- 二零二五年度旅游服务标准化合同协议
- 2025版南通市区人才公寓租赁管理协议
- 2025版艺术品担保答辩状范本编制合同
- 2025至2030年中国抗菌肽生物兽药行业发展监测及市场发展潜力预测报告
- 二零二五版智能化设备租赁与操作培训合同
- 二零二五年度仓储物流场地租赁协议范本
- 二零二五年度专业二手车买卖及售后服务合作协议
- 二零二五年度土地储备使用权转让合同
- 鼓胀中医护理
- 2024年青海省门源回族自治县事业单位公开招聘村务工作者笔试题带答案
- 设备整厂出售合同协议
- 2025-2030中国高k和ALD和和CVD金属前体行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国缝纫机器人行业市场发展趋势与前景展望战略研究报告
- 2025年4月12日衢州事业单位及市直遴选(选调)笔试真题及答案解析
- 油气仓储物流优化-全面剖析
- 妊娠剧吐护理查房
- 机械设备维护手册
- 广东省五校(朝汕实验、高州中学、石门、湛江一中等)2024-2025学年高三上学期开学联考数学试题(解析版)
- 城市轨道交通列车司机初级工理论习题集
评论
0/150
提交评论