ImageVerifierCode 换一换
格式:DOCX , 页数:49 ,大小:190.42KB ,
资源ID:10785728      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10785728.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(简易计算器设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

简易计算器设计.docx

1、简易计算器设计简易计算器设计实习报告题 目: 简易计算器设计 学 号姓 名专业班级指导教师实践日期一、综合训练目的与要求面向对象程序设计课程设计是实践性教学环节之一,是面向对象程序设计课程的辅助教学课程。该课程设计要求学生综合运用在面向对象程序设计课程中学到的面向对象技术与实际编程相结合,独立完成一项较为完整、并具有一定实际功能的课程设计任务,同时加深学生对面向对象和C+编程技术的理解和掌握,培养实际的应用程序开发能力。在课程设计过程中,使学生养成良好的程序设计风格,并掌握C+应用程序的设计开发过程和编程方法、测试方法。二、综合训练任务(1)综合任务 设计计算器类,实现带括号的复杂表达式的计算

2、。(2)个人任务 我的主要是在qt中学习和使用信号和槽的机制,此外,就是设计数字键。三、总体设计(1)功能模块图 图1 功能模块图(2)最终的UML图图2 stack类图3 CalculatorWindow类 (3)个人设计stack的示图 图4 StackL类 四、详细设计说明(1)工程文件视图 图5 工程文件试图(2)类的介绍const int max_len = 20;/栈的最大容量 栈类stack()const int max_len = 20:栈的最大容量函数:stack():构造函数,实现栈的初始化stack():析构函数int getTop():得到栈顶指针的值void clea

3、r():清空栈void push(char c):符号入栈void push(float f):数字入栈char pop(char c):返回符号栈栈顶的符号。float pop(int f):返回数字栈栈顶的数字。char remove(char c) :栈顶元素出栈。 float remove(int f) :栈顶元素出栈。bool empty():判断栈是否为空。bool full():判断栈是否满了分析: 开始的时候只有char smax_len,没有float nmax_len这个属性,后来由于字符和float型转换存在精度的问题,所以在stack类中加入了float nmax_le

4、n这个属性。使用的时候如果建立符号栈,那么只使用char smax_len,如果建立数字栈那么只使用float nmax_len。栈顶指针int top,和其他函数是char smax_len和float nmax_len公用。其中有push()、pop()、remove(),函数的参数没有具体意义只是为了实现函数重载来实现不同栈的操作。 运算类class calculator() 功能:实现功能选择和实现进制转换与表达式计算属性:stack numStack:数字栈stack operatorStack:符号栈string str :字符串(输入的表达式)函数: calculator():构

5、造函数 virtual calculator():析构函数 void setStr():设置输入的数字或是表达式的字符串 string getStr():得到输入的数字或表达式的字符串 bool operatorCompare(char stackOut,char stackIn):运算符比较函数, void partCalculate(char oper):局部计算函数, void calculate():选择表达式运算 bool operatorCompare(char stackOut,char stackIn):运算符比较函数 long int changeHexadecimal(in

6、t num):进制转换函数实现进制的选择float nmax_len;/数字栈char smax_len;/符号栈int top;/ 栈顶指针 实现表达式的计算,计算中可以有加减乘除、括号。利用栈的思想来实现,先取得表达式,然后按序入栈,符号栈和数字栈。边入栈边进行运算最后的数字栈顶元素为结果。这里面除了需要出入栈的操作,还需要进行符号优先级的设定和比较,用函数bool operatorCompare(char stackOut,char stackIn)实现。实现局部计算(栈内符号优先级高于栈外符号优先级),用函数void partCalculate(char oper)实现。 五、调试与测

7、试1 这是在调试运行后的截图2这是我设计的栈代码3这是calculatorwindow.h中的类说明:(1)可以进行常规四则运算,以及带括号的运算。(2)在输入非法时会出现“#”,表示输入错误。例1:2*(3+1)-6/3的运算按下等号后显示结果如下:例2:2+(3-(6+9/3)+5)按下等号后显示结果如下:3在非法输入时会自动报错(以除数是0为例)按下等号后显示结果如下:4我们的计算器刚开始时不能计算负数,只要有负数,计算结果就出错,这是改进后的终于计算正确了八、附录:核心代码清单头文件:*Calculatorwindow.h*#ifndef JISUANQI_H#define JISUA

8、NQI_H#endif / JISUANQI_H#ifndef CALCULATOR_H#define CALCULATOR_H /对calculator.h头文件的声明#include/包含主窗体类#include/包含按键类#include/包含垂直布局器类#include/包含水平布局器类#include/包含显示框类#include stack.husing namespace std;class calculatorWindow : public QWidget/计算器继承自主窗体类 Q_OBJECT /必须加上这句,如果要调用信号,槽函数的操作的话public: calculato

9、rWindow(); /计算器类的构造函数 calculatorWindow(); /计算器类的析构函数public slots: /定义各个按键按下后对应操作处理的槽函数 long int changeHexadecimal(int num,int power); void numButtonPress(char num);/按数字响应事件 void opreateButtonPress(char op);/二元运算符响应事件 void danButtonPress(char op);/一元运算符的响应函数 void zeroButtonPress();/调用numButtonPress()

10、函数 void oneButtonPress(); void twoButtonPress(); void threeButtonPress(); void fourButtonPress(); void fiveButtonPress(); void sixButtonPress(); void sevenButtonPress(); void eightButtonPress(); void nineButtonPress(); void decimalButtonPress(); void addButtonPress(); void subButtonPress(); void mul

11、ButtonPress(); void divButtonPress(); void sinButtonPress(); void cosButtonPress(); void tanButtonPress(); void sqrtButtonPress(); void powButtonPress(); void binaryButtonPress(); void octButtonPress(); void hexButtonPress(); void rightPerButtonPress(); void leftPerButtonPress(); void clearButtonPre

12、ss(); void backspaceButtonPress(); void equButtonPress(); void calculate();/普通计算 void hexChange(int num); /进制转换函数 bool operatorCompare(char stackOut,char stackIn); void partCalculate(char oper); void abortOperation(); /异常处理函数 string changeToABC(int num); string decToHex(int number);private: QLineEdi

13、t *operateEdit;/声明显示框 QPushButton *zeroButton;/声明数字按键 QPushButton *oneButton; QPushButton *twoButton; QPushButton *threeButton; QPushButton *fourButton; QPushButton *fiveButton; QPushButton *sixButton; QPushButton *sevenButton; QPushButton *eightButton; QPushButton *nineButton; QPushButton *decimalB

14、utton;/小数点按钮 QPushButton *clearButton; QPushButton *backspaceButton; /声明运算符按键 QPushButton *addButton; QPushButton *subButton; QPushButton *divButton; QPushButton *mulButton; QPushButton *sinButton; QPushButton *cosButton; QPushButton *tanButton; QPushButton *sqrtButton; QPushButton *powButton; QPush

15、Button *equButton; QPushButton *binaryButton; QPushButton *octButton; QPushButton *hexButton; QPushButton *rightPerButton; QPushButton *leftPerButton; /声明水平布局器,该布局器主要对24个按键进行布局 QHBoxLayout *firstLayout; QHBoxLayout *secondLayout; QHBoxLayout *thirdLayout; QHBoxLayout *fourthLayout; QVBoxLayout *main

16、Layout;/声明垂直布局器,该布局器主要对主窗体上面的空间进行排布 QString input;/计算器中要输入的代数表达式 stack numStack; stack operatorStack; bool opreate = 0;/判断是否输入了等号 bool opreated = 0; /如果输入了运算符,则置为1;#endif/ CALCULATOR_H*Stack.h*#ifndef STACK_H#define STACK_Hconst int max_len = 20;/栈的最大容量class stackprivate: char smax_len;/栈的内容保存在数组中 i

17、nt top;/栈顶指示器,栈空时为-1 float nmax_len;public: stack(); stack(); int getTop(); void clear(); void push(char c); void push(float f); char pop(char c); float pop(int f); bool empty(); bool full(); char remove(char c); float remove(int f);#endif / STACK_H源文件*Buttonpress.cpp*#include calculatorWindow.h/数字键

18、和最基本的运算符建的实现void calculatorWindow:numButtonPress(char num) if(opreate) /判断是否开始第二次计算,如果opreate为真,单击数字键就表示开始新的计算 operateEdit-setText(); opreate = 0; /将文本置为零,将opreate置为0,一边下一次输入表达式 if(input=)/如果当前显示框为0 input=num;/变0为num else input= operateEdit-text(); input.append(num); operateEdit-setText(input);/更新显示

19、框中的显示信息 opreated = 0; /输入数字后将opreate改为1,等待运算符输入/一元运算符的响应函数void calculatorWindow:danButtonPress(char op) if(input=)/如果当前显示框为0 input=op;/变0为num else input= operateEdit-text(); input.append(op); operateEdit-setText(input);/更新显示框中的显示信息/二元运算符响应事件void calculatorWindow:opreateButtonPress(char op) /实现不能连续输入

20、运算符 /如果前面的字符为运算符,则opreated = 1,不能再次输入运算符。 /只有opreated = 0时才可以输入运算符 if(!opreated) opreate = 0;/只有opreate为假时才可以输入运算符 if(!opreate) if(input=)/如果当前显示框为0 input=op;/变0为num else input= operateEdit-text(); input.append(op); operateEdit-setText(input);/更新显示框中的显示信息 opreated = 1; /数字键的实现void calculatorWindow:o

21、neButtonPress() numButtonPress(1);void calculatorWindow:twoButtonPress() numButtonPress(2);void calculatorWindow:threeButtonPress() numButtonPress(3);void calculatorWindow:fourButtonPress() numButtonPress(4);void calculatorWindow:fiveButtonPress() numButtonPress(5);void calculatorWindow:sixButtonPre

22、ss() numButtonPress(6);void calculatorWindow:sevenButtonPress() numButtonPress(7);void calculatorWindow:eightButtonPress() numButtonPress(8);void calculatorWindow:nineButtonPress() numButtonPress(9);void calculatorWindow:zeroButtonPress() numButtonPress(0);/运算符的按键响应void calculatorWindow:addButtonPre

23、ss() opreateButtonPress(+);void calculatorWindow:subButtonPress() opreateButtonPress(-);void calculatorWindow:mulButtonPress() opreateButtonPress(*);void calculatorWindow:divButtonPress() opreateButtonPress(/);/小数点按键处理void calculatorWindow:decimalButtonPress() numButtonPress(.);/三角函数的实现,考虑到运算的一致性,便于

24、封装函数,故运算规则只能是先输入数字,后输入运算符/在这里三角函数只是计算了弧度制的void calculatorWindow:sinButtonPress() danButtonPress(S);void calculatorWindow:cosButtonPress() danButtonPress(C);void calculatorWindow:tanButtonPress() danButtonPress(T);/开方和平方的运算响应事件void calculatorWindow:sqrtButtonPress() danButtonPress(Q);void calculatorW

25、indow:powButtonPress() danButtonPress(W);/括号按键响应事件void calculatorWindow:rightPerButtonPress() numButtonPress();void calculatorWindow:leftPerButtonPress() numButtonPress();/二进制的转换void calculatorWindow:binaryButtonPress() hexChange(2); opreate = 1;/八进制的转换void calculatorWindow:octButtonPress() hexChang

26、e(8); opreate = 1;/十六进制的转换,由于牵扯到非数字字符,暂时并未实现void calculatorWindow:hexButtonPress() if(opreate)/判断是否开始第二次计算,如果opreate为真,单击数字键就表示开始新的计算 operateEdit-setText(0); opreate = 0; /将文本置为零,将opreate置为0,一边下一次输入表达式 QString a = operateEdit-text(); int temp = a.toInt(); string result = decToHex(temp); operateEdit-

27、setText(QString:fromStdString(result); opreate = 1;/功能键/等号按键的实现void calculatorWindow:equButtonPress() opreateButtonPress(=); calculate(); opreate = 1;/Clear键的实现void calculatorWindow:clearButtonPress() input=;/把运算操作数2清零 operateEdit-setText(input); /更新显示框中的显示内容/退格键的实现void calculatorWindow:backspaceButtonPress() if(!opreate) input = operateEdit-text(); input.chop(1); if (input.isEmpty() input = ; operateEdit-setText(input); *Calculator.cpp*#include #include #include #include #include /用atof()时需要用到该头文件#include #include calculatorwindow.h#include using namespace std;#d

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

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