实习过程报告

计算机软件技术实习项目一  

简易计算器

一、实验内容
(1) 学习图形界面的设计,利用 QT的UI设计功能实现计算机界面的设计。
(2) 能通过设计的按钮控件输入数字和运算符并实现算术运算,并保存历史的表达式运算记录。
(3) 能够自行判断一些常见的运算逻辑问题。

二、开发流程。

1,UI界面设计

 

 2,界面设计结束后,建立按钮和文本框和对应槽函数的连接,文本初始化等。

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->pushButton_0->setFont(QFont("宋体", 10));
    ui->pushButton_1->setFont(QFont("宋体", 10));
    ui->pushButton_2->setFont(QFont("宋体", 10));
    ui->pushButton_3->setFont(QFont("宋体", 10));
    ui->pushButton_4->setFont(QFont("宋体", 10));
    ui->pushButton_5->setFont(QFont("宋体", 10));
    ui->pushButton_6->setFont(QFont("宋体", 10));
    ui->pushButton_7->setFont(QFont("宋体", 10));
    ui->pushButton_8->setFont(QFont("宋体", 10));
    ui->pushButton_9->setFont(QFont("宋体", 10));
    ui->pushButton_c->setFont(QFont("宋体", 10));
    ui->pushButton_cheng->setFont(QFont("宋体", 10));
    ui->pushButton_chu->setFont(QFont("宋体", 10));
    ui->pushButton_del->setFont(QFont("宋体", 10));
    ui->pushButton_dengyu->setFont(QFont("宋体", 10));
    ui->pushButton_jia->setFont(QFont("宋体", 10));
    ui->pushButton_jian->setFont(QFont("宋体", 10));
    ui->pushButton_xiaoshudian->setFont(QFont("宋体", 10));
    ui->pushButton_youkuohao->setFont(QFont("宋体", 10));
    ui->pushButton_zuokuohao->setFont(QFont("宋体", 10));
    ui->pushButton_his->setFont(QFont("宋体", 10));
    ui->pushButton_close->setFont(QFont("宋体", 10));
    QFont textEditFont ( "Microsoft YaHei", 25, 75);
    ui->textEdit->setReadOnly(true);
    ui->textEdit->setText("0");
    on_actionRight_triggered();
    setWindowTitle("calculator");
    strin ="#";
    connect(ui->pushButton_0,&QPushButton::clicked,[=](){pushButton_0();});
    connect(ui->pushButton_1,&QPushButton::clicked,[=](){pushButton_1();});
    connect(ui->pushButton_2,&QPushButton::clicked,[=](){pushButton_2();});
    connect(ui->pushButton_3,&QPushButton::clicked,[=](){pushButton_3();});
    connect(ui->pushButton_4,&QPushButton::clicked,[=](){pushButton_4();});
    connect(ui->pushButton_5,&QPushButton::clicked,[=](){pushButton_5();});
    connect(ui->pushButton_6,&QPushButton::clicked,[=](){pushButton_6();});
    connect(ui->pushButton_7,&QPushButton::clicked,[=](){pushButton_7();});
    connect(ui->pushButton_8,&QPushButton::clicked,[=](){pushButton_8();});
    connect(ui->pushButton_9,&QPushButton::clicked,[=](){pushButton_9();});
    connect(ui->pushButton_cheng,&QPushButton::clicked,[=](){pushButton_cheng();});
    connect(ui->pushButton_chu,&QPushButton::clicked,[=](){pushButton_chu();});
    connect(ui->pushButton_jia,&QPushButton::clicked,[=](){pushButton_jia();});
    connect(ui->pushButton_jian,&QPushButton::clicked,[=](){pushButton_jian();});
    connect(ui->pushButton_xiaoshudian,&QPushButton::clicked,[=](){pushButton_xiaoshudian();});
    connect(ui->pushButton_youkuohao,&QPushButton::clicked,[=](){pushButton_youkuohao();});
    connect(ui->pushButton_zuokuohao,&QPushButton::clicked,[=](){pushButton_zuokuohao();});
    connect(ui->pushButton_c,&QPushButton::clicked,[=](){pushButton_c();});
    connect(ui->pushButton_del,&QPushButton::clicked,[=](){pushButton_del();});
    connect(ui->pushButton_dengyu,&QPushButton::clicked,[=](){pushButton_dengyu();});
    connect(ui->pushButton_his,&QPushButton::clicked,[=](){pushButton_his();});
    connect(ui->pushButton_close,&QPushButton::clicked,[=](){pushButton_close();});
}

3,编写数字按钮等简单按钮槽函数。(大体一致)

void Widget::pushButton_0(){
    if(strin=="#")    ui->textEdit->clear();
       bracketdigiterror();
       strin+="0";
       on_actionRight_triggered();
       ui->textEdit->textCursor().insertText("0");
}

4,编写量化字符优先级并比较,判断数字,字符数字转换等函数。

void Widget::on_actionRight_triggered(){//向右对齐
    ui->textEdit->setAlignment(Qt::AlignRight);
}
bool isNum(char ch) {
    if(ch >= '0' && ch <= '9') return true;
    else return false;
}
bool isOperate(char ch) {
    if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')')
    return true;
    else return false;
}
int level(char ch) {
    switch(ch) {
        case '(' :
            return 5;
        case '*' :
            return 4;
        case '/' :
            return 4;
        case '+' :
            return 3;
        case '-' :
            return 3;
        case ')':
            return 2;
    }
}
double scd(string s) {
    if(s.length() == 0) return INT_MAX;

    bool flag = false;
    for(int i = 0; i < s.length(); i++) {
        if(i == 0 && s[i] == '-') continue;
        else if(s[i] == '.' && !flag) {
            if(i > 0 && isNum(s[i-1])) {
                flag = true;
                continue;
            }
            else return INT_MAX;
        }
        else if(isNum(s[i])) continue;
        else return INT_MAX;
    }

    double result = atof(s.c_str());
    return result;
}

5,三个判错函数

void Widget::operror(int num)//判错函数1
{
    char*s=strin.toLocal8Bit().data();
    if(!isdigit(s[strlen(s)-2])&&s[strlen(s)-2]!=')')
    {
        QMessageBox::about(this,"输入有误","您输入的双目运算符无左值");
        strin.chop(1);
        for(int i=1;i<=num;i++)
            ui->textEdit->textCursor().deletePreviousChar();
  }
}
void Widget::digitbracketerror()//判错函数2
{
    char*s=strin.toLocal8Bit().data();
       if(isdigit(s[strlen(s)-1])||s[strlen(s)-1]==')')
       {
          QMessageBox::about(this,"输入有误","您要输入的左括号前是数");
           strin+="+";
              ui->textEdit->textCursor().insertText("+");
       }
}
void Widget::bracketdigiterror()//判错函数3
{
    char* s=strin.toLocal8Bit().data();
        if(s[strlen(s)-1]==')')
        {
           QMessageBox::about(this,"输入有误","您要输入的数字前是右括号");
            strin+="*";
            ui->textEdit->textCursor().insertText("*");
        }
}

6,编写等于号槽函数。

void Widget::pushButton_dengyu(){
    char *s=strin.toLocal8Bit().data();
    if(strcmp(s,"")==0){
        history<<"0";
        ui->textEdit->clear();
        ui->textEdit->textCursor().insertText("0");
        on_actionRight_triggered();
    }
    else{
        string s = strin.toStdString();
        double num=  getValue(midToPost(s));
        QString ans;
        ans =  QString::number(num,10,5);
        strin+="=";
        strin+=ans;
        history<<strin;
        ui->textEdit->clear();
        ui->textEdit->textCursor().in
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值