多功能计算器Qt版本


C++数据结构实习。使用双栈实现计算器,将算法从C++控制台界面移植到Qt,并扩展了音乐播放,换肤,复制粘贴等功能。除此之外,还实现了键盘响应,幂运算,开方运算和三角函数等计算功能。Qt样式表通过文件读取实现换肤。原创,希望大家可以多多支持。如有问题请联系我
资源截图
代码片段和文件信息
#include “Calculator.h“

bool Calculator::Run(QString in double & out QString & errorInfo)
{
    index = 0;
    oper.Push(‘#‘);
    input = in.toStdString();   // 将QString转化为C++标准模板库里的String

    char ch op;
    double newOperand;
    Getch(ch);
    if (ch == ‘-‘ && s.IsEmpty()) s.Push(0);  //如果表达式的第一个数是负数的话,在操作数栈里压一个0
    while (!oper.IsEmpty()){

        // 压入操作数
        if (isdigit(ch)){
            if (!charToDouble(ch newOperand errorInfo)){
                Clear();
                return false;
            }
            s.Push(newOperand);
            // 如果操作数和pow sqrt sin cos tan之间缺少‘*‘号,则需要补‘*‘号
            if (!LackMult(errorInfo)) {
                Clear();
                return false;
            }
            Getch(ch);
        }

        // 压入操作符
        switch (ch)
        {
        case ‘+‘: case ‘-‘: case ‘*‘: case ‘/‘: case ‘#‘: case ‘(‘: case ‘)‘: case ‘%‘:
            oper.getTop(op);
            if (isp(op) < icp(ch)) {  //栈内操作符优先级小于栈外操作符优先级,栈外操作符进栈
                if (ch == ‘(‘) {
                    oper.Push(ch);
                    Getch(ch);
                    // 判断左括号后面是否跟着‘-’号,是的话将之后的操作数变为它的相反数。
                    if (ch == ‘-‘) s.Push(0);
                }
                else {
                    oper.Push(ch);
                    Getch(ch);
                }
            }

            else if (isp(op) > icp(ch)) { //栈内操作符优先级大于栈外操作符优先级,栈内操作符出栈,进行运算
                oper.Pop(op);
                if (op == ‘(‘ || op == ‘)‘) { // 括号多出情况的错误检测
                    errorInfo = “无效的输入!“;
                    Clear();
                    return false;
                }
                if (!DoOperator(op errorInfo)) {
                    Clear();
                    return false;
                }
            }
            else {
                oper.Pop(op); //栈内操作符优先级等于栈外操作符优先级,可判断为左括号,左括号出栈
                if (op == ‘(‘) Getch(ch);
            }
            break;
        case ‘e‘: case ‘E‘: case ‘p‘: case ‘s‘: case ‘c‘: case ‘t‘: case ‘^‘:
            if (!Extend(ch errorInfo)) {
                errorInfo = “无效的输入!“;
                Clear();
                return false;
            }
            Getch(ch);
            break;
        case ‘‘: // 当检测到pow()函数里的逗号时,需要先将‘(’和‘,’之间的表达式计算完毕
            oper.getTop(op);
            while (op != ‘(‘) {
                oper.Pop(op);
                if (!DoOperator(op errorInfo)) {
                    Clear();
                    return false;
                }
                oper.getTop(op);
            }
            Getch(ch);
            if (ch == ‘-‘) s.Push(0); // 判断‘,’后面是否跟着‘-’号,是的话将之后的操作数变为它的相反数。
            break;
        default:
            errorInfo = “无效的输入!“;
            Clear();
            return false;
        }
    }
    if (s.IsEmpty()) out = 0;
    else s.getTop(out);
    return true;
}

void Calculator::Clear()
{
    s.MakeEmpty();
    oper.Mak

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件     1081406  2018-10-13 03:37  Calculatorcalc-icon.ico
     文件          42  2018-10-13 03:35  Calculatorcalc-icon.rc
     文件       10135  2018-10-15 01:51  Calculatorcalculator.cpp
     文件         805  2018-10-10 20:59  Calculatorcalculator.h
     文件        1203  2018-10-13 03:39  CalculatorCalculator.pro
     文件       23929  2018-10-15 12:50  CalculatorCalculator.pro.user
     目录           0  2018-10-13 03:32  Calculatorimages
     文件       13754  2018-10-12 10:08  Calculatorimagescalculator-icon.png
     文件       19050  2018-10-11 02:00  CalculatorimagesheartNext.png
     文件        5575  2018-10-12 01:23  CalculatorimagesheartPause.png
     文件       18910  2018-10-11 01:59  CalculatorimagesheartPlay.png
     文件       19017  2018-10-11 01:59  CalculatorimagesheartPrevious.png
     文件        9088  2018-10-11 00:01  Calculatorimageshigh_volume.png
     文件        5239  2018-10-10 23:57  Calculatorimageslower_volume.png
     文件        5069  2018-10-10 23:55  Calculatorimagesmute.png
     文件       16627  2018-10-11 00:21  Calculatorimages
ext.png
     文件       16217  2018-10-11 00:21  Calculatorimagespause.png
     文件       16227  2018-10-11 00:22  Calculatorimagesplay.png
     文件       16732  2018-10-11 00:21  Calculatorimagesprevious.png
     文件        7691  2018-10-10 23:58  Calculatorimagesvolume.png
     文件         183  2018-09-29 19:01  Calculatormain.cpp
     文件       13804  2018-10-15 01:25  Calculatormainwindow.cpp
     文件        3007  2018-10-15 02:01  Calculatormainwindow.h
     文件       33802  2018-10-13 02:11  Calculatormainwindow.ui
     目录           0  2018-10-11 23:21  Calculatormusic
     文件     3710351  2018-10-11 12:31  CalculatormusicMy Soul (Bonus Track).mp3
     文件     4477703  2018-10-11 23:20  Calculatormusic陈焕明 - 天空之城.mp3
     文件     4078984  2018-10-11 23:20  Calculatormusic玖月花儿与筝 - 琵琶语 (古筝版).mp3
     文件         493  2018-10-15 02:13  Calculatormyhelper.h
     文件        1444  2018-10-09 01:31  Calculatormystack.h
     文件         875  2018-10-13 02:00  Calculator
es.qrc
............此处省略3个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)