纷纭教育
您的当前位置:首页Qt课题之科学计算器

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 Ui {

class 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();//按键X^2 void on_btnN_class_clicked();//按键N! void on_btnCosh_clicked();//按键Cosh void on_btnCos_clicked();//按键Cos void on_btnX_y_clicked();//按键x^y void on_btnX___y_clicked();//按键x√y void on_btnTanh_clicked();//按键tanh void on_btnTan_clicked();//按键tan void on_btnX_3_clicked();//按键x^3 void on_btnX___3_clicked();//按键3√x void on_btnExp_clicked();//按键e void on_btnMod_clicked();//按键mod void on_btnLog_clicked();//按键log void on_btn10_x_clicked();//按键10^x 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__y

--精品

精品---

QString 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_H

2. 计算功能的设计

2.1.关于计算机的初始化和相关版本的代码:

#include \"mainwindow.h\"

#include \"ui_mainwindow.h\" #include \"QMessageBox\" #include //#define exp=2.71828 //#define pi=3.14159

MainWindow::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(rightOperand<=0.0)

    return false;

    SoFar=pow(rightOperand,1.0/SoFar); }

    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->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(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\")) {

    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(operand<0.0) {

    abortOperation(); return; }

    result=log(operand);

    QString str = QString::number(result,'f',4); result=str.toDouble(); }

    else if(btn==tr(\"log10\")) {

    if(operand<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(\"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,'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 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 != \"0\")

    {

    ui->lineEdit_2->setText(ui->lineEdit->text()+\"/\"); } }

    void MainWindow::on_btnPlus_clicked()//按键正负 {

    QString operand = ui->lineEdit->text();

    --精品

    精品---

    double value = operand.toDouble();

    if (value > 0.0) {

    operand .prepend(tr(\"-\")); }

    else if (value < 0.0) {

    operand.remove(0, 1); }

    ui->lineEdit->setText(operand); }

    void MainWindow::on_btnSqrt_clicked()//按键开方

    {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"√(\"+A+\")\"); }

    else ui->lineEdit_2->setText(\"√(\"+A+\")\"); clickbtn2(\"Sqrt\"); }

    void MainWindow::on_btnPercent_clicked()//按键% {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+A+\"%\"); }

    else ui->lineEdit_2->setText(A+\"%\"); clickbtn2(\"%\"); }

    void MainWindow::on_btn_1_x_clicked()//按键1/x

    --精品

    精品---

    {

    clickbtn2(\"1/x\"); }

    void MainWindow::on_btnPi_clicked()//按键pi {

    C = \"1\";

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"π\"); }

    else ui->lineEdit_2->setText(\"π\"); clickbtn2(\"pi\"); }

    void MainWindow::on_btnLn_clicked()//按键ln {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"ln\"+A); }

    else ui->lineEdit_2->setText(\"ln\"+A); clickbtn2(\"ln\"); }

    void MainWindow::on_btnSinh_clicked()//按键sinh {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"sinh(\"+A+\")\"); }

    else ui->lineEdit_2->setText(\"sinh(\"+A+\")\"); clickbtn2(\"sinh\");

    --精品

    精品---

    }

    void MainWindow::on_btnSin_clicked()//按键sin {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"sin(\"+A+\")\"); }

    else ui->lineEdit_2->setText(\"sin(\"+A+\")\"); clickbtn2(\"sin\"); }

    void MainWindow::on_btnX_2_clicked()//按键x^2 {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+A+\"^\"); }

    else ui->lineEdit_2->setText(A+\"^\"+\"2\"); clickbtn2(\"x_2\"); }

    void MainWindow::on_btnN_class_clicked()//按键n! {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+A+\"!\"); }

    else ui->lineEdit_2->setText(A+\"!\"); clickbtn2(\"n!\"); }

    --精品

    精品---

    void MainWindow::on_btnCosh_clicked()//按键cosh

    {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"cosh(\"+A+\")\"); }

    else ui->lineEdit_2->setText(\"cosh(\"+A+\")\"); clickbtn2(\"cosh\"); }

    void MainWindow::on_btnCos_clicked()//按键cos {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"cos(\"+A+\")\"); }

    else ui->lineEdit_2->setText(\"cos(\"+A+\")\"); clickbtn2(\"cos\"); }

    void MainWindow::on_btnX_y_clicked()//按键x^y {

    double operand = ui->lineEdit->text().toDouble(); if(operand<=0.0) {

    abortOperation();

    return; }

    if(!pendingOperator1.isEmpty()) {

    calculate(operand,pendingOperator1);

    ui->lineEdit->setText(QString::number(SoFar)); } else

    --精品

    精品---

    {

    SoFar=operand;

    pendingOperator1 = \"x_y\"; }

    if(B != \"1\") {

    ui->lineEdit_2->setText(QString::number(operand)+\"^\"); }

    else ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(operand)+\"^\"); F = \"1\"; }

    void MainWindow::on_btnX___y_clicked()//按键x开y {

    double operand = ui->lineEdit->text().toDouble(); if(!pendingOperator1.isEmpty()) {

    calculate(operand,pendingOperator1);

    ui->lineEdit->setText(QString::number(SoFar)); } else

    {

    SoFar=operand;

    pendingOperator1 = \"x__y\"; }

    if(B != \"1\") {

    ui->lineEdit_2->setText(QString::number(operand)+\"√\"); }

    else ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(operand)+\"√\"); F = \"1\"; }

    void MainWindow::on_btnTanh_clicked()//按键tanh {

    C = \"1\";

    QString A = ui->lineEdit->text();

    --精品

    精品---

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"tanh(\"+A+\")\"); }

    else ui->lineEdit_2->setText(\"tanh(\"+A+\")\"); clickbtn2(\"tanh\"); }

    void MainWindow::on_btnTan_clicked()//按键tan {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"tan(\"+A+\")\"); }

    else ui->lineEdit_2->setText(\"tan(\"+A+\")\"); clickbtn2(\"tan\"); }

    void MainWindow::on_btnX_3_clicked()//按键x^3

    {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+A+\"^\"); }

    else ui->lineEdit_2->setText(A+\"^\"+\"3\"); clickbtn2(\"x_3\"); }

    void MainWindow::on_btnX___3_clicked()//按键x开3 {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    --精品

    精品---

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"3√(\"+A+\")\"); }

    else ui->lineEdit_2->setText(\"3√(\"+A+\")\"); clickbtn2(\"x__3\"); }

    void MainWindow::on_btnExp_clicked()//按键e {

    C = \"1\";

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"e\"); }

    else ui->lineEdit_2->setText(\"e\"); clickbtn2(\"exp\"); }

    void MainWindow::on_btnMod_clicked()//按键模运算 {

    double operand=ui->lineEdit->text().toDouble(),result; double a=modf(operand, &result);

    ui->lineEdit->setText(QString::number(a));

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(a)); }

    else ui->lineEdit_2->setText(QString::number(a)); }

    void MainWindow::on_btnLog_clicked()//按键log

    {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"log(\"+A+\")\"); }

    else ui->lineEdit_2->setText(\"log(\"+A+\")\");

    --精品

    精品---

    clickbtn2(\"log10\"); }

    void MainWindow::on_btn10_x_clicked()//按键10^x {

    C = \"1\";

    QString A = ui->lineEdit->text();

    if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmpty()) {

    ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"10^\"+A); }

    else ui->lineEdit_2->setText(\"10^\"+A);

    clickbtn2(\"10_x\");

    三、 一些简单运行的效果:

    乘法:

    三角函数:

    --精品

    精品---

    加乘混合运算:

    阶乘:

    --精品

    精品---

    幂运算:

    存储:

    --精品

    精品---

    心得体会,通过该作业我们获得了如何发现问题。通过问题逆向寻求根源解决问题能力。在整个作业的设计过程中,一些看似简单的问题,单独情况下可以轻易解决。单牵一发而动全身,我们必须考虑到相关涉及的各种情况。开发过程中参阅了QT助手中的计算器和一些相关的计算器项目。虽然我们的计算器不算完美,我们自我感觉还是不错。这是我们第一个作品,希望还有更多的

    --精品

  • 因篇幅问题不能全部显示,请点此查看更多更全内容