简单计算器的实现
项目功能:
进行简单的四则运算,支持括号,支持复数运算和极坐标转换。
支持运算符:+、-、*、/、括号、复数、极坐标、复数和极坐标之间的转换以及历史记录的查看。
开发技术:
C++、Qt5
实现方法:
符号运算顺序处理方法:采用符号等级制,不同的符号有不同的优先级。
运算表达式处理方法:采用前缀表达式法。
前缀表达式获取:运用栈将中缀表达式转换为前缀表达式。
数据结构栈的应用。
各模块说明:
calculator.cpp、calculator.h:对表达式进行计算并输出结果。
element.cpp、element.h:抽象数据结构。
main.cpp、mainwindow.cpp、mainwindow.h、mainwindow.ui:计算器界面设计。
设计内容:
calculator.h:
#ifndef CALCULATOR_H
#define CALCULATOR_H
#include "element.h"
#include <string>
#include <stack>
#include <vector>
using namespace std;
class calculator
{
//static const int MAX_NUM = 10086;
//假设最多100086个操作数或操作符
private:
//各运算符优先级
static const int priority[6];
//原始字符串
string original_string;
//下标[0,element_num)middel_order_expression[MAX_NUM]; //中序表达式
vector<Element> all_element;
//先序表达式
vector<Element> preorder_expression;
//有多少个元素
int element_num;
//先序表达式有多少个元素
int p_o_e_num;
//转换过程所需的栈
stack<Element> mystack;
//该计算式的答案
Number ans;
//得到先序表达式
void get_p_o_e();
//得到以i为开头的数字,处理完成后i指向数字最后一位,bool == true => 正數
Number get_num(int &i, string &,bool);
public:
//默认构造函数
calculator();
//接受一个计算表达式并保存为中序表达式,如果表达式有语法错误,则返回false
bool set(string);
//打印计算表达式(0 为原字符串,1为中序, 2为前序)
strin