Qt课题之科学计算器.docx_第1页
Qt课题之科学计算器.docx_第2页
Qt课题之科学计算器.docx_第3页
Qt课题之科学计算器.docx_第4页
Qt课题之科学计算器.docx_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

QT作业 科学计算器QT课程作业设计题目:科学计算器小组成员:陈启敬 201113010409刘阳 201113010405何亚洲 201113010407王勇 201113010404黄昭宇 201113010421一、 功能设计要求: 特别声明:本程序系QT5编译制作科学计算器两种计算器模式:一个普通模式,一个科学模式。参照windows7 的“计算器”程序说明:在查看菜单下有两个菜单项:“标准型”、“科学型”。当用户选择标准型的时候,只有一个显示区,显示用户当前键入的数据或计算结果;当用户选择科学型的时候,有两个显示区,其中最上面有个显示用户当前键入的数据 或计算的结果,也就是标准型的显示区,它的下面(MC 按钮的左边)有一个显示区用来显示当前用户临时保存在Memory 中的数据。在编辑菜单下有“复制”和“粘贴”两个菜单项,其功能与 windows的计算器一样。帮助菜单下有“关于计算器”菜单项,点击该菜单项时 弹出一个对话框,显示版权信息(包含开发者名字、学号)。功能介绍:对于计算器我们都很熟悉,在平常的生活中也经常用到。本次设计的科学计算器不但可以计算普通的加减乘除运算,还可以对于三角函数,乘方,对数等一些运算。二、 详细的设计介绍1 界面设计 界面设计我们是使用Qt creator进行设计的,首先创建QMainWindow(parent).ui,这个界面为QWidget。然后在左侧的Widget Box找相应的控件添加到QMainWindow(parent)里。然后添加相应的按钮,lineEdit控件作为算式显示窗口和结果显示窗口,pushButton作为相应数字和功能按钮等,并将它们的名称属性修改。相应的属性修改: 动作编辑器的设置:信号槽设置:设计出的界面如下: 标准型: 科学型:实现版权信息: 界面的相关代码:#ifndef MAINWINDOW_H#define MAINWINDOW_H#include namespace Uiclass MainWindow;class MainWindow : public QMainWindow Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); MainWindow();private slots: /存储槽口 void on_btnMjian_clicked(); void on_btnMjia_clicked(); void on_btnMS_clicked(); void on_btnMR_clicked(); void on_btnMC_clicked();void about();void copy();void paste(); /标准型和科学型槽口 void on_action_S_triggered(); void on_action_T_triggered(); /0-9槽函数的定义 void on_btn1_clicked(); void on_btn2_clicked(); void on_btn3_clicked(); void on_btn4_clicked(); void on_btn5_clicked(); void on_btn6_clicked(); void on_btn7_clicked(); void on_btn8_clicked(); void on_btn9_clicked(); void on_btn0_clicked(); void on_btnPoint_clicked();/点 void additiveOperatorClicked(QString);/加法器 void multiplicativeOperatorClicked(QString);/乘法器 /void kuohaoOperatorClicked(QString);/括号运算 void on_btnBackspace_clicked();/退格 void on_btnClear_clicked();/初始化 void on_btnPlus_clicked();/符号的改变 void on_btnCE_clicked();/清屏 void on_btnSqrt_clicked();/开方 void on_btnPercent_clicked();/百分号 void on_btn_1_x_clicked();/ 1/x void on_btnEql_clicked();/等于 void clickbtn1(QString);/数字 void clickbtn2(QString);/一元操作运算 void on_btnAdd_clicked();/加 void on_btnSubtract_clicked();/减 void on_btnMultiply_clicked();/乘 void on_btnDivide_clicked();/除 void on_btnPi_clicked();/按键Pi void on_btnLn_clicked();/按键Ln void on_btnSinh_clicked();/按键sinh void on_btnSin_clicked();/按键Sin void on_btnX_2_clicked();/按键X2 void on_btnN_class_clicked();/按键N! void on_btnCosh_clicked();/按键Cosh void on_btnCos_clicked();/按键Cos void on_btnX_y_clicked();/按键xy void on_btnX_y_clicked();/按键xy void on_btnTanh_clicked();/按键tanh void on_btnTan_clicked();/按键tan void on_btnX_3_clicked();/按键x3 void on_btnX_3_clicked();/按键3x void on_btnExp_clicked();/按键e void on_btnMod_clicked();/按键mod void on_btnLog_clicked();/按键log void on_btn10_x_clicked();/按键10x void on_btnLkuo_clicked();/按键 ( void on_btnRkuo_clicked();/按键 )private: Ui:MainWindow *ui; QString B;/标记等号状态 QString C;/标记一元操作状态 QString D;/标记add运算符状态 QString E;/标记mul运算符状态 QString F;/标记x_y,x_yQString K;/标记括号状态QString M; /QString G;/标记x_y void abortOperation();/错误判断 double sumInMemory;/记忆存储 double sumSoFar;/加 double factorSoFar;/乘 double SoFar;/幂 double kuohao;/括号 QString pendingAdditiveOperator; QString pendingMultiplicativeOperator; QString pendingOperator1; QString kuoOperator;/括号操作 bool calculate(double rightOperand, const QString &pendingOperator);#endif / MAINWINDOW_H2 计算功能的设计2.1关于计算机的初始化和相关版本的代码:#include mainwindow.h#include ui_mainwindow.h#include QMessageBox#include /#define exp=2.71828/#define pi=3.14159MainWindow:MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui:MainWindow) ui-setupUi(this); ui-groupBox-hide();/科学计算框默认隐藏 layout()-setSizeConstraint(QLayout:SetFixedSize); sumInMemory = 0.0;/变量初始化 sumSoFar = 0.0; factorSoFar = 0.0; SoFar=0.0; B=0; C=0; K=0; ui-lineEdit-setText(0); ui-lineEdit-setReadOnly(true);/将文本编辑框设置为不可更改 ui-lineEdit-setAlignment(Qt:AlignRight);/设置成右对齐 ui-lineEdit_2-setReadOnly(true);/将文本编辑框设置为不可更改 QFont font = ui-lineEdit-font();/设置字体 font.setPointSize(font.pointSize() + 6); ui-lineEdit-setFont(font);MainWindow:MainWindow() delete ui;void MainWindow:about()/关于计算器(A) QMessageBox:about(this, tr(关于计算器(A), tr(版本号: v1.0.0.0 开发者: 陈启敬 201113010409 刘阳 201113010405 何亚洲 201113010407 王勇 201113010404 黄昭宇 201113010421);2.2.数字按键、等号等按钮代码: void MainWindow:on_btnEql_clicked()/按键=号 if (!ui-lineEdit_2-text().contains(=) double operand = ui-lineEdit-text().toDouble(); QString A=ui-lineEdit-text(); if (!pendingOperator1.isEmpty() calculate(operand,pendingOperator1); operand = SoFar; SoFar = 0.0; pendingOperator1.clear(); if (!pendingMultiplicativeOperator.isEmpty() if (!calculate(operand, pendingMultiplicativeOperator) abortOperation(); return; operand = factorSoFar; factorSoFar = 0.0; pendingMultiplicativeOperator.clear(); if (!pendingAdditiveOperator.isEmpty() if (!calculate(operand, pendingAdditiveOperator) abortOperation(); return; pendingAdditiveOperator.clear(); else sumSoFar = operand; ui-lineEdit-setText(QString:number(sumSoFar); if(K !=1) if(C != 1) ui-lineEdit_2-setText(ui-lineEdit_2-text()+A+=+QString:number(sumSoFar); else ui-lineEdit_2-setText(ui-lineEdit_2-text()+=+QString:number(sumSoFar); else ui-lineEdit_2-setText(ui-lineEdit_2-text()+=+QString:number(sumSoFar); sumSoFar = 0.0; B=1; C=0; /0-9槽函数void MainWindow:on_btn0_clicked()/0号键的槽函数 clickbtn1(0);void MainWindow:on_btn1_clicked()/1号键的槽函数 clickbtn1(1);void MainWindow:on_btn2_clicked()/2号键的槽函数 clickbtn1(2);void MainWindow:on_btn3_clicked()/3号键的槽函数 clickbtn1(3);void MainWindow:on_btn4_clicked()/4号键的槽函数 clickbtn1(4);void MainWindow:on_btn5_clicked()/5号键的槽函数 clickbtn1(5);void MainWindow:on_btn6_clicked()/6号键的槽函数 clickbtn1(6);void MainWindow:on_btn7_clicked()/7号键的槽函数 clickbtn1(7);void MainWindow:on_btn8_clicked()/8号键的槽函数 clickbtn1(8);void MainWindow:on_btn9_clicked()/9号键的槽函数 clickbtn1(9);void MainWindow:on_btnPoint_clicked()/Point键的槽函数 if (!ui-lineEdit-text().contains(.) ui-lineEdit-setText(ui-lineEdit-text() + tr(.);void MainWindow:on_btnBackspace_clicked()/backspace槽函数的定义 QString operand = ui-lineEdit-text(); operand.chop(1); if (operand.isEmpty() operand = 0; ui-lineEdit-setText(operand);void MainWindow:on_btnCE_clicked()/按键CE=清楚屏幕 ui-lineEdit-setText(0);2.3.计算槽的相关代码:bool MainWindow:calculate(double rightOperand, const QString &pendingOperator)/计算槽,栈 if(pendingOperator=tr(+) sumSoFar+=rightOperand; else if(pendingOperator=tr(-) sumSoFar-=rightOperand; else if(pendingOperator=tr(*) factorSoFar*=rightOperand; else if(pendingOperator=tr(/) if (rightOperand=0.0) return false; factorSoFar /= rightOperand; else if(pendingOperator=tr(x_y) SoFar=pow(SoFar,rightOperand); else if(pendingOperator=tr(x_y) if(rightOperandlineEdit-text() = 0) ui-lineEdit-setText(btn); else if(!pendingOperator1.isEmpty() if(F!=0) ui-lineEdit-setText(btn); F = 0; else ui-lineEdit-setText(ui-lineEdit-text()+btn); else if(!pendingMultiplicativeOperator.isEmpty() if(D!=0) ui-lineEdit-setText(btn); D = 0; else ui-lineEdit-setText(ui-lineEdit-text()+btn); else if(!pendingAdditiveOperator.isEmpty() if(E!=0) ui-lineEdit-setText(btn); E = 0; else ui-lineEdit-setText(ui-lineEdit-text()+btn); else if(B!=1) ui-lineEdit-setText(ui-lineEdit-text()+btn); else ui-lineEdit-setText(btn); B=0; 2.4.一元操作运算的相关代码:void MainWindow:clickbtn2(QString btn)/一元操作运算 double operand = ui-lineEdit-text().toDouble(); double result = 0.0; if(btn=tr(Sqrt) if(operand0.0) abortOperation(); return; result=sqrt(operand); else if(btn=tr(x_3) if(operand0.0) abortOperation(); return; result=pow(operand,1.0/3.0); else if(btn=tr(pi) result=3.14159; else if(btn=tr(exp) result=2.71828; else if(btn=tr(x_2) result=pow(operand, 2.0); else if(btn=tr(10_x) result=pow(10.0, operand); else if(btn=tr(x_3) result=pow(operand, 3.0); else if(btn=tr(%) result=operand/100.0; else if(btn=tr(1/x) if(operand=0.0) abortOperation(); return; result=1.0/operand; else if(btn=tr(ln) if(operand0.0) abortOperation(); return; result=log(operand); QString str = QString:number(result,f,4); result=str.toDouble(); else if(btn=tr(log10) if(operand0.0) for(i=2;i=operand;i+) j*=i; result=j; else if(operandlineEdit-setText(QString:number(result);void MainWindow:abortOperation()/abortOperation的定义 on_btnClear_clicked(); ui-lineEdit-setText(tr(Error);2.5.计算器运算实现代码:void MainWindow:additiveOperatorClicked(QString clickedOperator)/加法器 double operand = ui-lineEdit-text().toDouble(); double A = ui-lineEdit-text().toDouble(); if (!pendingOperator1.isEmpty() calculate(operand,pendingOperator1); operand = SoFar; ui-lineEdit-setText(QString:number(SoFar); SoFar = 0.0; /pendingOperator1.clear(); if (!pendingMultiplicativeOperator.isEmpty() if (!calculate(operand, pendingMultiplicativeOperator) abortOperation(); return; ui-lineEdit-setText(QString:number(factorSoFar); operand = factorSoFar; factorSoFar = 0.0; /pendingMultiplicativeOperator.clear(); if (!pendingAdditiveOperator.isEmpty() ui-lineEdit_2-setText(ui-lineEdit_2-text()+QString:number(A)+clickedOperator); if (!calculate(operand, pendingAdditiveOperator) abortOperation(); return; ui-lineEdit-setText(QString:number(sumSoFar); else sumSoFar = operand; if(!pendingOperator1.isEmpty() ui-lineEdit_2-setText(ui-lineEdit_2-text()+QString:number(A)+clickedOperator); else if(!pendingMultiplicativeOperator.isEmpty() ui-lineEdit_2-setText(ui-lineEdit_2-text()+QString:number(A)+clickedOperator); else if(K!=0) ui-lineEdit_2-setText(ui-lineEdit_2-text()+QString:number(operand)+clickedOperator); else ui-lineEdit_2-setText(QString:number(operand)+clickedOperator); pendingMultiplicativeOperator.clear(); pendingOperator1.clear(); E = 1; pendingAdditiveOperator = clickedOperator;void MainWindow:multiplicativeOperatorClicked(QString clickedOperator)/乘法器 double operand = ui-lineEdit-text().toDouble(); double A = ui-lineEdit-text().toDouble(); if (!pendingOperator1.isEmpty() calculate(operand,pendingOperator1); operand = SoFar; ui-lineEdit-setText(QString:number(SoFar); SoFar = 0.0; /pendingOperator1.clear(); if (!pendingMultiplicativeOperator.isEmpty() ui-lineEdit_2-setText(ui-lineEdit_2-text()+QString:number(A)+clickedOperator); if (!calculate(operand, pendingMultiplicativeOperator) abortOperation(); return; ui-lineEdit-setText(QString:number(factorSoFar); else factorSoFar = operand; if(!pendingOperator1.isEmpty() ui-lineEdit_2-setText(ui-lineEdit_2-text()+QString:number(A)+clickedOperator); else if(!pendingAdditiveOperator.isEmpty() ui-lineEdit_2-setText(ui-lineEdit_2-text()+QString:number(A)+clickedOperator); else if(K!=0) ui-lineEdit_2-setText(ui-lineEdit_2-text()+QString:number(operand)+clickedOperator); else ui-lineEdit_2-setText(QString:number(operand)+clickedOperator); pendingOperator1.clear(); pendingMultiplicativeOperator = clickedOperator; D = 1;/MC,MR,MS,M+,M-槽的定义void MainWindow:on_btnMC_clicked()/按键MC=memory clear sumInMemory = 0.0; ui-lineEdit_2-setText(M=0);/edit_2显示存储中的数据 ui-lineEdit-setText(0);void MainWindow:on_btnMR_clicked()/按键MR=memory read C = 1; ui-lineEdit-setText(QString:number(sumInMemory); QString M=QString:number(sumInMemory); if(!pendingAdditiveOperator.isEmpty()|!pendingMultiplicativeOperator.isEmpty() ui-lineEdit_2-setText(ui-lineEdit_2-text()+M); else ui-lineEdit_2-setText(M=+QString:number(sumInMemory);void MainWindow:on_btnMS_clicked()/按键MS=memory save on_btnEql_clicked(); sumInMemory = ui-lineEdit-text().toDouble(); ui-lineEdit_2-setText(M=+QString:number(sumInMemory);/edit_2显示存储中的数据void MainWindow:on_btnMjia_clicked()/按键M+ on_btnEql_clicked(); sumInMemory += ui-lineEdit-text().toDouble(); ui-lineEdit_2-setText(M=+QString:number(sumInMemory);/edit_2显示存储中的数据void MainWindow:on_btnMjian_clicked()/按键M- on_btnEql_clicked(); sumInMemory-=ui-lineEdit-text().toDouble(); ui-lineEdit_2-setText(M=+QString:number(sumInMemory);/edit_2显示存储中的数据void MainWindow:on_btnAdd_clicked()/+号键 additiveOperatorClicked(+); C = 0; if(B != 0) ui-lineEdit_2-setText(ui-lineEdit-text()+); void MainWindow:on_btnSubtract_clicked()/-号键 additiveOperatorClicked(-); C = 0; if(B != 0) ui-lineEdit_2-setText(ui-lineEdit-text()+-); /else ui-lineEdit_2-setText(ui-lineEdit-text()+-);void MainWindow:on_btnMultiply_clicked()/*号键 multiplicativeOperatorClicked(*); C = 0; if(B != 0) ui-lineEdit_2-setText(ui-lineEdit-text()+*); void MainWindow:on_btnDivide_clicked()/号键 multiplicativeOperatorClicked(/); C = 0; if(B !=

温馨提示

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

评论

0/150

提交评论