VC++ 多功能计算器.doc

上传人:PIYPING 文档编号:11388924 上传时间:2021-08-02 格式:DOC 页数:24 大小:612KB
返回 下载 相关 举报
VC++ 多功能计算器.doc_第1页
第1页 / 共24页
VC++ 多功能计算器.doc_第2页
第2页 / 共24页
VC++ 多功能计算器.doc_第3页
第3页 / 共24页
VC++ 多功能计算器.doc_第4页
第4页 / 共24页
VC++ 多功能计算器.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《VC++ 多功能计算器.doc》由会员分享,可在线阅读,更多相关《VC++ 多功能计算器.doc(24页珍藏版)》请在三一文库上搜索。

1、 课程设计说明书 NO.24多功能计算器1、课程设计的目的本课程设计以VC+程序设计课程为基础,目的是进一步培养学生综合应用VC+的各种编程知识和技巧进行程序设计的能力,最终掌握面向对象的编程技术。通过本次课程设计,学生应能达到具备设计功能较为复杂的Windows应用程序的能力,同时培养学生自主学习和独立创新的精神。系统地学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C+,加深对面向对象编程的思想的认识。能够独立的完成一个简单的编程,实现一个简单计算器的编程和应用,从而更深入的了解Visual C+的工作原理。2、功能描述在Visual C+环境下设计并实现一个简单

2、计算器系统,该计算器应能实现如下功能:1)、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算2)、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算3)、以角度、弧度两种方式实现上述部分函数4)、具备历史计算的记忆功能5)、对不正确的表达式能指出其错误原因3、案论论证3.1、可行性分析本设计是简单计算器。日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软

3、件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助3.2、需求分析本软件主要用于计算机windows 2000/XP以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。要程序能实现:加,减,乘,除,开方,倒数等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。另外还可以实现多种科学计算的功能,如:三角函数的计算,弧度与角度间的转换,对数指数的计算等等。3.3、总体方案设计(1)功能框架图1 功能框架图(2)主要功能原理:正弦、余弦、正切、余切函数: 制度的选择,程序运行默认制度选中角度,当

4、选项中“角度”按钮时,则需将其转换为角度计算,由公式:弧度PI*角度180,可将表达式中角度转换为弧度既sll-1=PI*sll-1/180。对于反、正余弦和反正余切,由于C+math.h库函数提供的计算结果是弧度的,所以当选中默认的“弧度”按钮时可不必将计算结果转换,当选中“角度”按钮时,则由公式:角度=弧度*180/PI,既可计算出来。实现进制间浮点数的转换对不同进制的输入,将其转换为十进制数后出入,显示时转换为所选择的进行输出。所以进制间的转换输出,其实只是将已存的那个十进制数转换为其他进制输出。历史计算的记忆功能 对(和),使用一个运算符栈和一个操作数栈存储。按(时,进栈保存;按)时,

5、出栈运算。对MC、MR、MS、M+,使用一个浮点数存储中间值,MC为将其清零,MR为读取其值,MS为保存、M+为在原有值的基础上加当前值。3.4、详细设计(1)进行开始编程前的数据结构分析:double m_mem;/中间值bool m_IsHudu;/弧度、角度判断void init();CRect rectSmall;CRect rectLarge;double base;/进制基数double m_operand;/存储当前输入的操作数double m_accum;/存储当前的计算处理结果bool m_bCoff;/表示当前输入是否是小数double m_coff;/小数输入是的系数Op

6、erator m_operator;/当前运算符CalcError m_errorState;/当前运算状态bool m_bOperandAvail;/表示当前是否是新输入数字(2)界面设计,将要实现的按键添加入:(3)添加按键函数:void CCalculatorDlg:OnAdd()/加void CCalculatorDlg:OnAddMi()/ +/-void CCalculatorDlg:OnBackspace()/ Backspacevoid CCalculatorDlg:OnClear()/ 清除void CCalculatorDlg:OnClearE()/ 清除当前void CC

7、alculatorDlg:OnDivid() / 除void CCalculatorDlg:OnEqual()/ 等于void CCalculatorDlg:OnMimus()/ 减void CCalculatorDlg:OnMod()/ 取模void CCalculatorDlg:OnMultiply()/ 乘void CCalculatorDlg:OnPoint()/ 小数点void CCalculatorDlg:OnX2()/ 平方void CCalculatorDlg:OnSin() /sin函数void CCalculatorDlg:OnTan()/ tan函数void CCalcu

8、latorDlg:OnMs()/覆盖记忆void CCalculatorDlg:OnMr()/读记忆void CCalculatorDlg:OnMc()/清零记忆void CCalculatorDlg:OnMadd()/增加记忆void CCalculatorDlg:OnLog()/log函数void CCalculatorDlg:OnLn()/ln函数void CCalculatorDlg:OnCot()/cot函数void CCalculatorDlg:OnCos()/cos函数void CCalculatorDlg:OnSqrt()/开方void CCalculatorDlg:OnXy(

9、)/X的Y次方等等(4)完善功能:增加如下函数实现进制转换:char change(int a)/将整数转换为字符if(a 10e-10)m_operand *= base;operand = (_int64)m_operand;temp2.Format(%c, change(int)operand);temp = temp + temp2;m_operand = m_operand - operand;return temp;double change2(char a)/将字符转换为浮点数if(a = 0 & a = 9)return (double) (a - 0);elsereturn

10、(double) (a - A);double ToDouble(double base, CString str, int &k)/将CString(根据基数base)转换为double/k为标志是否删除了小数点double num = 0.0;double temp = 1.0/base;int len = str.GetLength(), i = 0;k = 0;/整数部分while(i = len)k = 1;/小数部分while(i len)num = num + change2(str.GetAt(i) * temp;temp *= 1.0/base;i+;return num;加

11、入出错处理:if(m_errorState != ErrNone)if(m_errorState = ErrDivideByZero)m_Edit = 除数不能为零;else if(m_errorState = ErrModFloat)m_Edit = 浮点数不能取mod;else if(m_errorState = ErrTanMax)m_Edit = tan为无穷大;else if(m_errorState = ErrCotMin)m_Edit = cot为无穷大;else if(m_errorState = ErrLogSign)m_Edit = 不可以对负数取对数;(5)增加方便用户功

12、能:加入加速键:图2 增加控件图4、运行结果(1)基本计算器的运行效果如图3所示图3 基本计算器的运行图(2)科学计算器的运行效果如图4所示图4 科学计算器运行效果图(3)不可以对浮点数进行取模运算,例如9.2 mod 9.2=?。运行结果如图5所示图5 浮点数不能取摸示意图(4)不可以对90度角进行正切操作。Tan 90=?。运行结果如图6所示。图6 90度角不能进行正切操作示意图(5)不可以对0度角进行取余切操作。Cot0=?。运行结果如图7所示图7 0度角不能取余示意图(6)不可以对负数求对数。例如Ln -9=?。运行结果如图8所示图8 对数不可求对数示意图(7)不可以对负数进行开方。运

13、行结果如图9所示图9 负数不能开方示意图5、心得体会C+是一种面对对象的编程语言,它跟我们大一学习的面向过程语言C+有很大的不同。在C语言中完全没有类这个概念,平时用的最多的就是数组和结构体。但面向对象的语言就不同了,在软件的开发过程中,我们可以通过编写各种各样不同功能的类去实现我们所想要的功能。而且我们还可以把这些类保存起来,这样,当我们以后要用到的时候把它加入到工程里面就可以用了。而且,对于以前的一些类,加入它有一些功能我们想拿来用,但是又想在此基础上增加一些新的功能,这怎么办呢?我们可以通过重载这个类,然后加入我们想要的东西,那么在软件开发功能中就可以节省很多的时间,提高软件开发的效率。

14、刚看到这个课程设计题目的时候,我认为要实现起来并不难。但当我开始做的时候,发现这远没有我想的那么简单,反而是越做越难。这并不是摆一些控件,添加响应就可以实现的了。就拿最简单的加、减、乘、除来说吧。在进行设计的时候,我除了要实现基本的两个数进行简单的四则运算外,还要实现他们连加、连减等。对于除法还要考虑除数不能为零这种情况。在进行科学计算这些功能设计的时候,我发现用常规的方法并不能满足我的要求。为了判断一个表达式的正误还有运算的优先级,我必须用到一个堆栈。为了实现堆栈这个数据结构,我花了不少时间在上面。而对于个别的功能,我是手工写出函数处理的。在此次实验,我掌握面向对象技术相关的一些软件开发技术

15、。利用MFC类库开发Windows应用程序,消息映射是如何工作的。代码编写能力又有了进一步的提高。参考文献1 刘於勋等.C+程序设计. M.科学出版社,20072 荣钦科技.Visual C+游戏编程基础. M.电子工业出版社,20043 揣锦华.面向对象程序设计与VC+实践. M.西安电子科技大学出版社,20054 罗伟坚.Visual C+经典游戏程序设计. M.人民邮电出版社,20065Visual C + 程序设计基础与实例分析,朱晴婷,黄海鹰,陈莲君,M.清华大学出版社6Visual C+面向对象与可视化程序设计(第2版),黄维通,M.清华大学出版社7 刘振安、刘燕君、孙忱,C+语言

16、课程设计,M.机械工业出版社,2007年8严华峰. Visual C+课程设计案例精编. M.北京:中国水利水电出版社,20029张宏军,党留群,赵天巨Visual C+ 6.0编程案例精解M.北京:电子工业出版社,2005附录:部分程序源代码/stack.h标准的堆栈模板程序(头文件)#if !defined(STACK_H)#define STACK_h#include#includeusing namespace std;const int MaxStackSize=50;template class Stackprivate:T stacklistMaxStackSize; /堆栈的最

17、大尺寸int top;public:Stack();void Push(const T& item); /压栈T Pop(); /出栈void ClearStack(); /清空堆栈T Peek() const; /输出堆栈顶部元素(计算结果)int StackEmpty() const; /判断堆栈是否为空int StackFull() const; /判断堆栈是否已满;/构造函数,将top置-1templateStack:Stack(): top(-1)/压栈templatevoid Stack:Push(const T& item)if (StackFull() /判断堆栈是否已满cer

18、rStack overflow!endl;exit(1);top+;stacklisttop=item; /不满则压栈/出栈templateT Stack:Pop()T temp; /判断是否为空栈if(StackEmpty()cerrAttempt to pop an empty stack!endl;exit(1);temp=stacklisttop; /弹出top-;return temp;/清栈templatevoid Stack:ClearStack() top=-1;/返回栈顶元素templateT Stack:Peek() const if(top=-1) /判断top是否有效c

19、errattempt to peek at an empty stack!endl;exit(1);return stacklisttop;/判断堆栈是否为空templateint Stack:StackEmpty() constreturn top=-1;/判断堆栈是否已满template int Stack:StackFull() constreturn top=MaxStackSize-1;#endif/calculator.h计算器模板类的头文件/四则运算函数templatevoid Calcualator:Run(void)coutc,c!=)switch(c)case +:case

20、 -:case *:case /:case :Compute1(c);break;default:/非运算符,则必为操作数,将字符送回cin.putback(c);/读入操作数并将其存入栈中cinnewoperand;Enter(newoperand);break;/答案已在栈顶,用peek输出之 if (!S.StackEmpty() cout结果是:S.Peek()endl;coutendl;templatevoid Calcualator:Compute2(char d)T data,N;cout请输入角度data;N=data*(PI/180); /把输入的角度转换成弧度S.Clear

21、Stack();cout n;Enter(N); /将N存放到栈中switch(d)case T:S.Push(tan(N);/正切计算break;case S:S.Push(sin(N);/正弦计算break;case c:S.Push(cos(N);/余弦计算break;default:S.ClearStack();break;f (!S.StackEmpty()cout结果是:S.Peek()endl;cout* * * * *endl;/三角函数界面选择函数templatevoid Calcualator:trangle(void)int flag=0;char ddo flag=0;

22、cout#endl; cout 请选择:n; /选择语句cout T 正切 #endl;cout S 正弦 #endl;cout c 余弦 #d;if(d!=T&d!=S&d!=c&d!=y)/判断选择代码的输入是否有误,输入错误时,重新输入cout Error node,please choose again!endl;flag=1; else Compute2(d); /各类三角函数的具体操作函数while(flag=1); /乘方,开方,阶乘运算函数templatevoid Calcualator:com(void)Calcualator A;int d;char y;do cout#e

23、ndl; cout 请选择: n; /选择语句 cout 1.乘方 #endl; cout 2.开方 #endl; cout 3.阶乘 #d; switch (d) case 1: chengfang(A);/乘方的具体运算函数 break;case 2: kaifang(A);/开方的具体运算函数 break; case 3: jiecheng(A);/阶乘的具体运算函数 break; default: coutContinue?(y or N)y; while(y=y);/循环语句控制是否继续该类型的计算,否则进入主菜单templatevoid Calcualator:Clear()S.C

24、learStack();#endif/main.cpp源文件#include calculator.hint main()cout Wellcome to calculator system! n;cout n; char k;docout *n;cout* 请输入所选择的运算: *endl;cout* a. 普通四则运算 *endl;cout* s. 三角函数的运算 *endl;cout* k. 乘方开方阶乘运算 *h;Calcualator CALC;if(h=k)CALC.com();/进入乘方开方阶乘运算if(h=a)CALC.Run();/进入普通四则运算if(h=s)CALC.trangle();/进入三角函数的运算 cout进入主菜单?(y or N):k;while(k=y);return 0;沈 阳 大 学

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1