计算器的设计与实现.doc_第1页
计算器的设计与实现.doc_第2页
计算器的设计与实现.doc_第3页
计算器的设计与实现.doc_第4页
计算器的设计与实现.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows程序设计报告书(2013) J I A N G S U U N I V E R S I T Y科学计算器的的设计 windows窗体应用程序学 院:计算机科学与通信工程专业班级:计算机科学与技术1102班姓 名:戴桂明学 号: 3110602041指导老师:曹汉青 日期:2013年12月20日1目 录1 选题原因及理由32 设计思想及框架3一. 主体功能3二. 开发环境33相关表格和流程图4一. 系统功能表4二. 系统流程图54设计特点及关键算法55 测试结果及测试分析.6 6设计总结.77附录(源代码).83计算器的设计与实现 1 选题原因及理由 我们在学习生活中,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器, 所以便着手开发了这个计算器程序,以便用于自己的学习工作。要计算功能有以下几个方面:加法,减法,乘法,除法,求幂,求e的指数次方,求平方根,求Sin,求Cos,求Tan及其反函数等。 也可达到以下目的:1、巩固并加深学生对C+语言程序设计知识的理解;2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;3、进一步掌握和应用VC+ 2008集成开发环境;4、提高运用C+语言解决实际问题的能力; 5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的窗体应用系统;6、掌握书写程序设计开发文档的能力。2 设计思想及框架课题名称:高级计算器的实现说明:实现一个计算器。要求: 1)用“计算器”的标准视图执行简单的计算。2)用其科学型视图执行高级的科学计算。一主体功能1、十进制数的加、减、乘、除、乘方、取模等简单计算。2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算。3、以角度、弧度两种方式实现上述部分函数。二 开发环境VC+ 20083 相关表格和流程图一 系统功能表表3-1 系统功能表序号文件名主要功能备注1+加法求和两个操作数2-减法求差两个操作数3*乘法求积两个操作数4/除法求商两个操作数5x求x次方根两个操作数6求x的y次幂两个操作数7.小数点8Sin求正弦一个操作数9Cos求余弦一个操作数10Tan求正切一个操作数11acsin反正弦一个操作数12accos反余弦一个操作数13actan反正切一个操作数14ln求对数一个操作数15C清除当前操作数16=等于17CE寄存器清零18x-y科学计数法一个操作数 1) 假设执行操作“+”,先输入一个数,再输入“+”,再输入另一个数,最后输入“+”。整个功能“+”就执行完毕。2) 执行操作“Sin”,先输入一个数,在输入“Sin”,整个功能“Sin”就执行完毕。二 系统流程图加法减法乘法除法求幂求x次方根寄存器清零开方正弦余弦对数输入第二个操作数显示结果结束开始输入第一个操作数选择一种计算方法图3-1 系统流程图4 设计特点及关键算法此次的高级计算器设计利用了windows窗体程序的多样性和程序实现的实用性,巧妙地展现了c+程序语言的面向对象性,程序简洁但却功能齐全。关键算法为实现加减乘除等算法以及各种正弦余弦函数和科学计数法等,最主要是本计算器可以以角度和弧度两种度量方法进行计算。5 程序结果及测试分析经测试标准型计算器,进行简单的四则运算,结果均正确,如图5-1所示。图5-1 四则运算测试结果图 测试科学型计算器,进行sin,cos,tan,log,ln,等运算,结果均正确,求sin90(如图5-2所示)。图5-2 求sin90测试结果图 6 设计总结通过几个星期的准备,总算把程序设计给完成了。刚开始,可以说是完全没有头绪,于是上网查,觉得计算器这个题目不错。找到了些与我选定的题目相关的资料,再对照书本进行编写,测试,最后得到我这次课程设计所需要的代码.通过科学计算器的设计这一课题的设计和实现,我对简单的C+语言编程有了进一步的认识,对windows窗体应用程序更加熟练了,也对Microsoft Visual C+ 2008这个软件的操作更加熟练了一些。回顾此次的课题设计,我学到了很多东西不仅巩固了书本的知识并且与实践相结合提高具体操作能力,在设计的过程中发现自己的不足,有些知识掌握的不够牢靠,通过这次的课题设计之后我把前面所学的知识又重新温故了一遍。同时,在老师和同学身上我学到了很多非常实用的知识,在此对给过我帮助的同学和老师表示由衷的感谢! 附 录 源程序清单 #include stdafx.h#include Calculator.h#include CalculatorDlg.h#include ExpressionSolver.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ 用于应用程序“关于”菜单项的CAboutDlg 对话框class CAboutDlg : public CDialogpublic:CAboutDlg();/ 对话框数据enum IDD = IDD_ABOUTBOX ;protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现protected:DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()/ CCalculatorDlg 对话框CCalculatorDlg:CCalculatorDlg(CWnd* pParent /*=NULL*/): CDialog(CCalculatorDlg:IDD, pParent), m_IsScientific(0), m_IsRad(FALSE), m_nIndex(-2)m_Font.CreatePointFont(15,_T(微软雅黑);m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);for (UINT i = 0; i= 19; i+)m_PreviousExpressioni = _T();void CCalculatorDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Control(pDX, IDC_EDIT1, EditBox1);DDX_Radio(pDX, IDC_RADIO1, m_IsRad);BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_SQRT, &CCalculatorDlg:OnBnClickedSqrt)ON_BN_CLICKED(IDC_EQUAL, &CCalculatorDlg:OnBnClickedEqual)ON_BN_CLICKED(IDC_ADDE, &CCalculatorDlg:OnBnClickedAdde)ON_BN_CLICKED(IDC_ADDPI, &CCalculatorDlg:OnBnClickedAddpi)ON_BN_CLICKED(IDC_ARCSIN, &CCalculatorDlg:OnBnClickedArcsin)ON_BN_CLICKED(IDC_ARCCOS, &CCalculatorDlg:OnBnClickedArccos)ON_BN_CLICKED(IDC_ARCTAN, &CCalculatorDlg:OnBnClickedArctan)ON_BN_CLICKED(IDC_SIN, &CCalculatorDlg:OnBnClickedSin)ON_BN_CLICKED(IDC_COS, &CCalculatorDlg:OnBnClickedCos)ON_BN_CLICKED(IDC_LOG, &CCalculatorDlg:OnBnClickedLog)ON_BN_CLICKED(IDC_LN, &CCalculatorDlg:OnBnClickedLn)ON_BN_CLICKED(IDC_MULTISQRT, &CCalculatorDlg:OnBnClickedMultisqrt)ON_BN_CLICKED(IDC_TAN, &CCalculatorDlg:OnBnClickedTan)ON_BN_CLICKED(IDC_EF, &CCalculatorDlg:OnBnClickedEf)ON_BN_CLICKED(IDC_LEFTBRACKET, &CCalculatorDlg:OnBnClickedLeftbracket)ON_BN_CLICKED(IDC_RIGHTBRACKET, &CCalculatorDlg:OnBnClickedRightbracket)ON_BN_CLICKED(IDC_7, &CCalculatorDlg:OnBnClicked7)ON_BN_CLICKED(IDC_8, &CCalculatorDlg:OnBnClicked8)ON_BN_CLICKED(IDC_9, &CCalculatorDlg:OnBnClicked9)ON_BN_CLICKED(IDC_4, &CCalculatorDlg:OnBnClicked4)ON_BN_CLICKED(IDC_5, &CCalculatorDlg:OnBnClicked5)ON_BN_CLICKED(IDC_6, &CCalculatorDlg:OnBnClicked6)ON_BN_CLICKED(IDC_1, &CCalculatorDlg:OnBnClicked1)ON_BN_CLICKED(IDC_2, &CCalculatorDlg:OnBnClicked2)ON_BN_CLICKED(IDC_3, &CCalculatorDlg:OnBnClicked3)ON_BN_CLICKED(IDC_0, &CCalculatorDlg:OnBnClicked0)ON_BN_CLICKED(IDC_DOT, &CCalculatorDlg:OnBnClickedDot)ON_BN_CLICKED(IDC_TENPOW, &CCalculatorDlg:OnBnClickedTenpow)ON_BN_CLICKED(IDC_DIVISION, &CCalculatorDlg:OnBnClickedDivision)ON_BN_CLICKED(IDC_MUTIPLY, &CCalculatorDlg:OnBnClickedMutiply)ON_BN_CLICKED(IDC_MINUS, &CCalculatorDlg:OnBnClickedMinus)ON_BN_CLICKED(IDC_ADD, &CCalculatorDlg:OnBnClickedAdd)ON_BN_CLICKED(IDC_POW, &CCalculatorDlg:OnBnClickedPow)ON_BN_CLICKED(IDC_CLEAR, &CCalculatorDlg:OnBnClickedClear)ON_BN_CLICKED(IDC_BACKSPACE, &CCalculatorDlg:OnBnClickedBackspace)ON_BN_CLICKED(IDC_UP, &CCalculatorDlg:OnBnClickedUp)ON_BN_CLICKED(IDC_RADIO1, &CCalculatorDlg:OnBnClickedRadio1)ON_BN_CLICKED(IDC_RADIO2, &CCalculatorDlg:OnBnClickedRadio2)ON_BN_CLICKED(IDC_CLEARALL, &CCalculatorDlg:OnBnClickedClearall)ON_BN_CLICKED(IDC_DOWN, &CCalculatorDlg:OnBnClickedDown)END_MESSAGE_MAP()/ CCalculatorDlg 消息处理程序BOOL CCalculatorDlg:OnInitDialog()CDialog: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 CCalculatorDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的MFC 应用程序,/ 这将由框架自动完成。void CCalculatorDlg: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);elseCDialog:OnPaint();/当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CCalculatorDlg:OnQueryDragIcon()return static_cast(m_hIcon);void CCalculatorDlg:OnOK()/ TODO: 在此添加专用代码和/或调用基类OnBnClickedEqual();/按回车时自动执行计算,等同于点击Button1/CDialog:OnOK();void CCalculatorDlg:OnBnClickedEqual()/ TODO: 在此添加控件通知处理程序代码m_IsScientific = 0;/ 按下“=”,默认不用科学计数法CString str_in;UpdateData(TRUE);EditBox1.GetWindowText(str_in);m_nIndex = -1;for( int i = 19; i = 1; i- )m_PreviousExpressioni = m_PreviousExpression i - 1 ;m_PreviousExpression0 = str_in;/ 将当前输入的表达式存入m_PreviousExpression0CExpressionSolver ex( str_in, m_IsRad );int nValid = ex.solve();if ( nValid != 0)MessageBox(ex.GetErrorTips();elseCString sResult;double dResult = ex.GetResult();if ( fabs(dResult) 1e-16)/ 若结果绝对值小于e-16,令其为dResult = 0;sResult.Format( _T(%.16g), dResult );EditBox1.SetWindowText(sResult);UpdateData(FALSE);/ 向文本框添加指定文字void CCalculatorDlg:AddToEditBox(CString szText)CString str_in;UpdateData(TRUE);EditBox1.GetWindowText(str_in);str_in.Append( szText );EditBox1.SetWindowText(str_in);UpdateData(FALSE);void CCalculatorDlg:OnBnClickedSqrt()/ TODO: 在此添加控件通知处理程序代码CString str = _T();AddToEditBox(str);void CCalculatorDlg:OnBnClickedAdde()/ TODO: 在此添加控件通知处理程序代码CString str = _T();AddToEditBox(str);void CCalculatorDlg:OnBnClickedAddpi()/ TODO: 在此添加控件通知处理程序代码CString str = _T();AddToEditBox(str);void CCalculatorDlg:OnBnClickedArcsin()/ TODO: 在此添加控件通知处理程序代码CString str = _T(arcsin);AddToEditBox(str);void CCalculatorDlg:OnBnClickedArccos()/ TODO: 在此添加控件通知处理程序代码CString str = _T(arccos);AddToEditBox(str);void CCalculatorDlg:OnBnClickedArctan()/ TODO: 在此添加控件通知处理程序代码CString str = _T(arctan);AddToEditBox(str);void CCalculatorDlg:OnBnClickedSin()/ TODO: 在此添加控件通知处理程序代码CString str = _T(sin);AddToEditBox(str);void CCalculatorDlg:OnBnClickedCos()/ TODO: 在此添加控件通知处理程序代码CString str = _T(cos);AddToEditBox(str);void CCalculatorDlg:OnBnClickedLog()/ TODO: 在此添加控件通知处理程序代码CString str = _T(log);AddToEditBox(str);void CCalculatorDlg:OnBnClickedLn()/ TODO: 在此添加控件通知处理程序代码CString str = _T(ln);AddToEditBox(str);void CCalculatorDlg:OnBnClickedMultisqrt()/ TODO: 在此添加控件通知处理程序代码CString str = _T(x);AddToEditBox(str);void CCalculatorDlg:OnBnClickedTan()/ TODO: 在此添加控件通知处理程序代码CString str = _T(tan);AddToEditBox(str);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论