数据结构课设——计算器

一、实验目的和要求

在实验-03、实验-05的作业内容基础上

(1)增加图形交互功能。

(2)增加3个逻辑运算符 &&、||、 !,并能处理逻辑运算符和算术运算符的混合运算。

(3)增加容错功能,能进行异常处理。

说明:

(1)其中牵涉到数据结构相关的可复用代码,可自行选择。

(2)提交时间:3周至4周左右时长,具体时间节点另行通知。

(3)其它要求同实验-01 。

二、实验环境

VisualStudio

三、实验内容

设计一个具有图形交互功能且支持逻辑运算,并具有异常处理机制的简单计算器。

  • 实验过程

4.1 任务定义和问题分析

①图形交互:Qt编程

②逻辑运算:在之前作业的基础上增加逻辑与、或、非运算符。
③异常处理机制:对用户的错误输入进行调整并提示用户。

4.2 数据结构的选择和概要设计
①Qt ui界面布局:上方为一个输入文本框,下方设计按钮,进行输入
②代码处理:在原来代码上微改,增加功能,但依旧基于栈的应用。
③报错机制:在按钮的槽函数中添加输入检查,进行同步报错。

4.3 详细设计

1、首先我们要想一个问题 如何把计算器按钮上面输入的式子和自己的计算器源码连接起来?
我们可以创立一个 QString 类型的字符串s(QT的头文件一般都是QString,QStack什么的)每输入一个字符,就把他加入到s中
这样最后再把s传入你的源码中,进行后面的计算
那他的结果我们也可以用一个QString 类型来记录,我们记为 res

在widget.h文件中就有这样一段代码


private:
    Ui::Widget *ui;
       QString s;
    QString res;
在widget.cpp文件中的构造函数对它们初始化

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    s="";            //初始化
    res="";          //初始化
    setWindowTitle("计算器");    //改变界面名称
}

2、再说三个特殊的键

①后退键 :

void Widget::on_pushButton_20_clicked()

{

    s=s.left(s.length()-1);

    ui->textEdit->setText(s);

}
②清除键 :

void Widget::on_pushButton_19_clicked()

{

    s="";

    res="";

    ui->textEdit->setText(s);

    ui->textEdit_2->setText(res);

}

res是在第二个文本框中的字符串
③ 等号键 :

下面 “= ”的按钮是个特例

我们有两种想法

第一就是直接把你的计算器源码整个放在这个槽函数里面

也可以在外面单独写一个函数,最后return一个值,把这个值传入 = 的槽函数

3、QT界面

五、测试及结果分析

对各种数据运行程序和算法的结果记录和分析,并对错误所作的修改和结果。

5.1 实验数据

①12+5*(2+3)*6/2-4
②7+!(!3+5&&!4)||!0&&(4+7)

 

 

六、实验收获

学会了QT操作,痛并快乐着,QT的下载就观看了很多视频,下载了一天才好,后面可以正式运行更是大费周章。还有两点也要注意一下:第一就是我们在写槽函数的时候 输入文本框的字符一定时英文键盘下的字符,不然程序不会进行的。第二就是QT有的错误不会报错,只会警告,尽量把所有的警告也改了,有的警告不影响结果,有的警告会让最后的程序异常关闭,虽然能编译通过。

(这个实验也是根据大佬 的教程完成的,想要原图的可以私)

  • 0
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
目 录 摘 要 1 前 言 2 正 文 3 1. 采用类C语言定义相关的数据类型 3 2. 各模块的伪码算法 5 3. 函数的调用关系图 9 4. 调试分析 10 5. 测试结果 11 6. 源程序(带注释) 14 总 结 22 参考文献 23 致 谢 24 摘 要 目前,计算器应用很广泛,本程序是关于这方面的,其主要功能是进行简单的四则运算 ,其特点之一是支持带括号的四则运算;二是用到栈的一些相关操作,不但对操作有提示,还对与异常输入信息报错。 通过该题目的计过程,可以加深理解线性表及栈的逻辑结构、存储结构,掌握线性表及栈上基本运算的实现,进一步理解和熟练掌握本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力。 关键字:堆栈,初始化栈,入栈,出栈。 前 言 很多涉及计算器程序的的算法都是以栈的相关操作为基础,通过计算器计,有利于在学习中更好的理解栈及其相关的操作。 通过对计算器计算过程演示,看到了到它的一些性能及相关优势。 我们在写程序时,大框架已成的情况下,仍然发现有些错误很难找到,对于这样的问题,可以利用计算机纠错功能,先运行,再根据题提示修改和完善程序。 在计算器用到的算法中,c语言算法可读性很强,一方面,是因为c语言是高级语言,是面向程序员的语言,二是c语言的功能是很完备的,可以达到事半功倍的效果,和其他语言相比量是比较少。栈的应用使该程序更出色。 正 文 1. 采用类c语言定义相关的数据类型 计算器的演示功能如下: A. 提示输入格式 B. 提示输入 C. 显示输入信息 D. 对有异常的输入报错并重新输入 E. 使用顺序栈实现数据的输入 (1)/*定义堆栈*/ typedef struct{ double data[M]; int top; }Stack; (2)/*初始化堆栈*/ InitStack(Stack *s) { s->top=0; } (3)/*判断栈是否为空*/ int StEmpty(Stack *s) { if(s->top==0) { return 1; } else { return 0; } } (4)/*入栈操作*/ StPush(Stack *s,double x) { if(s->top==M) { printf("The stack is overflow!"); } else { s->top=s->top+1; s->data[s->top]=x; } }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值