




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、QT作业 科学计算器QT课程作业设计题目:科学计算器小组成员:陈启敬 201113010409刘阳 201113010405何亚洲 201113010407王勇 201113010404黄昭宇 201113010421一、 功能设计要求: 特别声明:本程序系QT5编译制作科学计算器两种计算器模式:一个普通模式,一个科学模式。参照windows7 的“计算器”程序说明:在查看菜单下有两个菜单项:“标准型”、“科学型”。当用户选择标准型的时候,只有一个显示区,显示用户当前键入的数据或计算结果;当用户选择科学型的时候,有两个显示区,其中最上面有个显示用户当前键入的数据 或计算的结果,也就是标准型的显
2、示区,它的下面(MC 按钮的左边)有一个显示区用来显示当前用户临时保存在Memory 中的数据。在编辑菜单下有“复制”和“粘贴”两个菜单项,其功能与 windows的计算器一样。帮助菜单下有“关于计算器”菜单项,点击该菜单项时 弹出一个对话框,显示版权信息(包含开发者名字、学号)。功能介绍:对于计算器我们都很熟悉,在平常的生活中也经常用到。本次设计的科学计算器不但可以计算普通的加减乘除运算,还可以对于三角函数,乘方,对数等一些运算。二、 详细的设计介绍1 界面设计 界面设计我们是使用Qt creator进行设计的,首先创建QMainWindow(parent).ui,这个界面为QWidget。
3、然后在左侧的Widget Box找相应的控件添加到QMainWindow(parent)里。然后添加相应的按钮,lineEdit控件作为算式显示窗口和结果显示窗口,pushButton作为相应数字和功能按钮等,并将它们的名称属性修改。相应的属性修改: 动作编辑器的设置:信号槽设置:设计出的界面如下: 标准型: 科学型:实现版权信息: 界面的相关代码:#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>namespace Uiclass MainWindow;class MainWindow : public Q
4、MainWindow 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_
5、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 o
6、n_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_btnSq
7、rt_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();/除 voi
8、d 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
9、_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();/按
10、键 ( 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 factorSoFa
11、r;/乘 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 "
12、;mainwindow.h"#include "ui_mainwindow.h"#include "QMessageBox"#include <math.h>/#define exp=2.71828/#define pi=3.14159MainWindow:MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui:MainWindow) ui->setupUi(this); ui->groupBox->hide();/科学计算框默认隐藏 layout(
13、)->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:A
14、lignRight);/设置成右对齐 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("关于计算器
15、(A)"), tr("<b>版本号:</b> v1.0.0.0<li>" "<b>开发者:</b> 陈启敬 201113010409<li>" "<div align=right>刘阳 201113010405</div>" "<div align=right>何亚洲 201113010407</div>" "<div align=right>王勇 20111301
16、0404</div>" "<div align=right>黄昭宇 201113010421</div>");2.2.数字按键、等号等按钮代码: void MainWindow:on_btnEql_clicked()/按键=号 if (!ui->lineEdit_2->text().contains("=") double operand = ui->lineEdit->text().toDouble(); QString A=ui->lineEdit->text(); i
17、f (!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; pendingM
18、ultiplicativeOperator.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"
19、) 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(
20、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()
21、/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"
22、);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
23、(".");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
24、");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*=rightOpe
25、rand; 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(rightOperand<=0.0) return false; SoFar=pow(rightOperand,1.0/So
26、Far); return true;void MainWindow:clickbtn1(QString btn)/按键数字 if(ui->lineEdit->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
27、->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(bt
28、n); 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 o
29、perand = ui->lineEdit->text().toDouble(); double result = 0.0; if(btn=tr("Sqrt") if(operand<0.0) abortOperation(); return; result=sqrt(operand); else if(btn=tr("x_3") if(operand<0.0) abortOperation(); return; result=pow(operand,1.0/3.0); else if(btn=tr("pi")
30、 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
31、(btn=tr("1/x") if(operand=0.0) abortOperation(); return; result=1.0/operand; else if(btn=tr("ln") if(operand<0.0) abortOperation(); return; result=log(operand); QString str = QString:number(result,'f',4); result=str.toDouble(); else if(btn=tr("log10") if(oper
32、and<0.0) abortOperation(); return; result=log10(operand); else if(btn=tr("n!") int i,j=1; if(operand>0.0) for(i=2;i<=operand;i+) j*=i; result=j; else if(operand<0.0) abortOperation(); return; else result=1; else if(btn=tr("sinh") result=sinh(operand); else if(btn=tr(&
33、quot;sin") double a=operand/57.1158; result=sin(a); QString str = QString:number(result,'f',2); result=str.toDouble(); else if(btn=tr("cosh") result=cosh(operand); else if(btn=tr("cos") double a=operand/57.1158; result=cos(a); QString str = QString:number(result,'
34、;f',2); result=str.toDouble(); else if(btn=tr("tanh") result=tanh(operand); else if(btn=tr("tan") double a=operand/57.1158; result=tan(a); QString str = QString:number(result,'f',2); result=str.toDouble(); ui->lineEdit->setText(QString:number(result);void MainWi
35、ndow: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()
36、; 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(); ret
37、urn; 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
38、, 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.isE
39、mpty() 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)+clickedOpera
40、tor); pendingMultiplicativeOperator.clear(); pendingOperator1.clear(); E = "1" pendingAdditiveOperator = clickedOperator;void MainWindow:multiplicativeOperatorClicked(QString clickedOperator)/乘法器 double operand = ui->lineEdit->text().toDouble(); double A = ui->lineEdit->text().
41、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
42、: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(
43、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->li
44、neEdit_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
45、显示存储中的数据 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-
46、>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("
47、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-
48、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-
49、>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->lin
50、eEdit->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 != "0") ui->lineEdit_2->setText(ui->lineEdit->text()+"/"); void MainWindow:on_btnPlus_clicked()/按键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年防水材料行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年车床产业发展分析及行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年虚拟现实行业市场发展现状及竞争格局与投资价值研究报告
- 2025-2030年网上生活产业行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年移动存储设备产业市场发展分析及前景趋势与投资管理研究报告
- 2025-2030年皮革帽市场前景分析及投资策略与风险管理研究报告
- 深化公共关系学理解的试题及答案
- 2025-2030年牛胆酸行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年洗衣皂行业风险投资态势及投融资策略指引报告
- 2025-2030年水族馆行业发展分析及投资战略研究报告
- 房地产专题知识培训课件
- 成人失禁相关性皮炎的预防与护理课件
- DB33T 310007-2021 设备泄露挥发性有机物排放控制技术规范
- 无人机网络安全防护-洞察分析
- 中国铁路武汉局集团有限公司招聘笔试冲刺题2025
- 电仪危险源辨识与风险评价表
- 2024年度单位一把手领导干部政治画像
- 家具与室内设计(山东联盟)知到智慧树章节测试课后答案2024年秋潍坊学院
- DB45T 1750-2018 液化石油气储罐检修安全规程
- 2025年中考数学复习:二次函数综合 压轴题汇编(含答案)
- 安全风险隐患举报奖励制度
评论
0/150
提交评论