简易计算器
作者:互联网
实现方法可能不是很妥当,但勉强基本功能还是能用的。
================================================================================================
环境:WINDOWS 10环境,安装QT库和QT Creator开发环境。
功能:
1、具备基础的加减乘除、退格、清屏等功能。
2、具备多位数计算能力。
3、具备带小数的计算能力。
1 .设计思路
数字及运算符都是Button控件,通过点击不同按钮后台接收到不同的信息,做出不同的处理。
首先是将接收到的数字及运算符作为字符存进字符串中,若输入了运算符则在将其append加入字符串时前后都加上空格。若点击<-- 将字符串长度减1实现退格操作。若点击了CE将字符串中数据清空同时数据显示也清空实现清空操作。当点击了”=”后对数据进行处理。
数据处理分几步:
- 将字符串按空格分割放入字符列表里
- 计算集合长度(即数据和运算符一个多少个)
- 集合中奇数位置放的是数据将其转为float型数据
- 遍历符号将乘除换为加:将*或者/前后数字进行运算并将其运算值作为符号前一位的值,将其符号置+,将符号后的数字置0。例如:15*2-2/5 转换后 30+0-0.4+0
- 将转换后的数据进行简单加减运算。
2 .系统实现
在dialog.ui中添加Push Button(数字键+运算符+操作)、LineEdit(显示输入及计算结果)、Label(提示文字),效果如下图:
图2.1效果图
选中某一Button右击,选择“转到槽”,选clicked(),此时可以在对应的按键槽函数中补充操作处理代码。
2.1“0-9”以及“.”对应函数
点击0时,就将字符串“0”赋值给str,然后将str追加到字符串str1后面,最后将其在lineEdit中显示出来。其中str1是定义在头文件dialog.h中变量
void Dialog::on_pushButton_19_clicked()
{
QString str="0";
str1.append(str);
ui->lineEdit->setText(str1);
}
按键1-9以及小数点.添加槽函数都类似于0的代码。
2.2四则运算对应函数
点击“+”时,就将字符串“+”赋值给str,接着将一个空格追加到字符串str1后面,然后再把str追加到字符串str1后面,最后再将一个空格追加到字符串str1后面,然后将其在lineEdit中显示出来。这样做便于后续按空格分隔字符串。
void Dialog::on_pushButton_6_clicked()
{
QString str="+";
str1.append(" ");
str1.append(str);
str1.append(" ");
ui->lineEdit->setText(str1);
}
其他“-”“*”“/”添加槽函数都类似于“+”的代码。
2.3退格及清空对应函数
退格操作槽函数。
void Dialog::on_pushButton_clicked()
{
str1=str1.left(str1.length()-1);
ui->lineEdit->setText(str1);
}
清空(CE)对应槽函数
void Dialog::on_pushButton_2_clicked()
{
str1.clear();
ui->lineEdit->clear();
ui->lineEdit_2->clear();
}
2.4“=”操作处理
- 首先将结果框先进行清空操作,将字符串按空格分隔为字符列表。
ui->lineEdit_2->clear();
QStringList Str_List=str1.split(" ");
2.计算list集合长度,len是定义在头文件dialog.h中变量。
len=Str_List.length();
3.将数字由字符转为double类型
分隔后的字符串我们不难发现奇数位是数字,偶数位是运算符,数组下标是0开始的,arry数组是定义在头文件dialog.h中的,故有:
for(int i=0;i<len;i=i+2){
arry[i]=Str_List[i].toDouble();
}
4.将“*”“/”运算化为“+”运算
将“*”或者/前后数字进行运算并将其运算值作为符号前一位的值,将其符号置+,将符号后的数字置0。
for(int i=1;i<len;i=i+2)
{
if(Str_List[i]=="*")
{
arry[i-1]=arry[i-1]*arry[i+1];
arry[i+1]=0;
Str_List[i]="+";
}
if(Str_List[i]=="/")
{
if(arry[i+1]!=0)
arry[i-1]=arry[i-1]/arry[i+1];
else
arry[i-1]=0;
arry[i+1]=0;
Str_List[i]="+";
}
}
5.进行最后加减运算
将数组中第一个值先赋给结果数组,然后再进行基础的加减运算。result定义在头文件dialog.h中变量
result=arry[0];
for(int i=1;i<len;i=i+2) //对进行过乘、除的数据进行想加减
{
if(Str_List[i]=="+")
result=result+arry[i+1];
if(Str_List[i]=="-")
result=result-arry[i+1];
}
图5.1 加法运算 图5.2 减法运算
图5.3 带小数的加减混合运算 图5.4带小数的加减乘除混合运算
//dialog.cpp文件
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_pushButton_3_clicked()
{
QString str="7";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_4_clicked()
{
QString str="8";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_5_clicked()
{
QString str="9";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_8_clicked()
{
QString str="4";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_9_clicked()
{
QString str="5";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_10_clicked()
{
QString str="6";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_13_clicked()
{
QString str="1";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_14_clicked()
{
QString str="2";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_15_clicked()
{
QString str="3";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_19_clicked()
{
QString str="0";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_20_clicked()
{
QString str=".";
str1.append(str);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_6_clicked()
{
QString str="+";
str1.append(" ");
str1.append(str);
str1.append(" ");
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_11_clicked()
{
QString str="-";
str1.append(" ");
str1.append(str);
str1.append(" ");
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_16_clicked()
{
QString str="*";
str1.append(" ");
str1.append(str);
str1.append(" ");
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_21_clicked()
{
QString str="/";
str1.append(" ");
str1.append(str);
str1.append(" ");
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_2_clicked()
{
str1.clear();
ui->lineEdit->clear();
ui->lineEdit_2->clear();
}
void Dialog::on_pushButton_clicked()
{
str1=str1.left(str1.length()-1);
ui->lineEdit->setText(str1);
}
void Dialog::on_pushButton_17_clicked()
{
ui->lineEdit_2->clear();
QStringList Str_List=str1.split(" ");//将字符串按空格分割为字符列表
len=Str_List.length(); //计算list集合长度
for(int i=0;i<len;i=i+2) //将数字由字符转为float类型
{
arry[i]=Str_List[i].toDouble();
}
for(int i=1;i<len;i=i+2) //将*或者/前后数字进行运算并将其运算值作为符号前一位的值,将其符号置+,将符号后的数字置0
{
if(Str_List[i]=="*")
{
arry[i-1]=arry[i-1]*arry[i+1];
arry[i+1]=0;
Str_List[i]="+";
}
if(Str_List[i]=="/")
{
if(arry[i+1]!=0)
arry[i-1]=arry[i-1]/arry[i+1];
else
arry[i-1]=0;
arry[i+1]=0;
Str_List[i]="+";
}
}
result=arry[0];
for(int i=1;i<len;i=i+2) //对进行过乘、除的数据进行想加减
{
if(Str_List[i]=="+")
result=result+arry[i+1];
if(Str_List[i]=="-")
result=result-arry[i+1];
}
ui->lineEdit_2->setText(tr("%1").arg(result));
str1.clear();
}
//在dialog.h里面private添加私有变量
Ui::Dialog *ui;
QString str1;
float arry[20];
float result;
int len;
标签:str,str1,简易,ui,Dialog,计算器,lineEdit,append 来源: https://blog.csdn.net/JAnedun/article/details/94415547