项目一:简单计算器的实现

本文描述了一个项目,旨在设计一个图形界面计算器,使用MFC或其他框架实现。计算器能处理中缀表达式,转换为后缀表达式进行运算,支持括号和优先级处理,同时保存运算历史。文章详细介绍了中缀转后缀算法以及后缀表达式的求值过程,并讨论了用户界面的容错机制。
摘要由CSDN通过智能技术生成

1、项目概述

1.1项目目标和主要内容

学习图形界面的设计,利用MFC 应用程序(Java swing 或 QT 框架,或 C#)创建基于对话框的应用程序,添加按钮、编辑框等控件;

能通过设计的按钮控件输入并实现简单算术运算,要求表达式在编辑框中显示,能将运算结果,输出在编辑框内显示;并保存历史的表达式运算记录。

也能够实现混合运算的算术表达式求解,算术表达式中包括加、减、乘、除、括号等运算符;并且能够识别括号,优先级正确。

1.2项目的主要功能

能够识别括号,优先级正确。并保存历史的表达式运算记录。

能通过设计的按钮控件输入并实现简单算术运算,表达式在编辑框中显示,能将运算结果,输出在编辑框内显示。

能够实现混合运算的求解,算术表达式中包括加、减、乘、除、括号等运算符。

2、项目设计

2.1项目总体框架

2.2系统详细设计

2.2.1Calculator.java

houzhui(String str):将中缀表达式转为后缀表达式。

·str:为用户输入的原始表达式。

·返回值:后缀表达式字符串数组,将多位数存储为独立的字符串。

2) String Result(String[] str):计算后缀表达式,并返回最终结果。

·str:为转换后的后缀表达式。

·返回值:返回最终结果,为字符串。

String pfys(String str):平方运算方法。

·str:用户输入的数字

·返回值:平方值

Stringkfys(String str):开方运算方法。

·str:用户输入的数字

·返回值:开方值

voidactionPerformed(ActionEvent e): 事件处理.

·e: 事件

2.3关键算法分析

2.3.1中缀表达式转后缀表达式

·具体算法

1)设置一个运算符栈,用来存放运算符。

2)从左向右扫描表达式:

① 若是操作数:直接输出到后缀表达式中。

② 若是运算符:

a. 栈为空:直接入栈。

b. 运算符为“)”:依次出栈,直到遇到“(”,“(”出栈并舍弃。

c. 优先级低于或等于栈顶运算符:在遇到“(”和比自己优先级小的运算符之前,将栈顶依次出栈,并输出到后缀表达式中,最后再将该运算符压入栈。

d. 优先级高于栈顶运算符:直接入栈。

4)表达式遍历结束,栈中剩余字符依次出栈,并输出到后缀表达式。

2.3.2后缀表达式求值

·具体算法

1)设置一个栈来存放操作数。

2)从左向右依次扫描后缀表达式:

① 若是操作数:入栈。

② 若是运算符:将两个操作数出栈,计算它们的值,再把结果入栈。

3)重复上述步骤,直至表达式结束,栈中最后一个元素就是后缀表达式的值。

2.3.3用户界面输入的容错机制

1)开头不允许是"+×÷). ";

2)"."不允许跟在运算符和"."之后;

3)"+×÷)"不能跟在"+×÷("之后;

4)"("不能跟在") ."之后;

3、项目实现及结果分析

计算器界面展示:

2)无法用图片展现的功能:

1. 按下AC按钮可以将计算器清零,但历史记录不清空;

2. 当刚计算完一个算式或正在查看历史记录时,无需清空计算器,直接按下任意数字便可开始下一轮运算。

4、实验总结

为方便小数、多位数、负数的运算,写一个函数将原始中缀表达式中的数字用字母来对应,并存入字符串中,转成后缀表达式开始求值时再取出对应数值进行计算;

此次实验其实还可以有很大的改进,如对按钮点击时如果不符合运算规则的操作将会运行错误,而不是报错之后让用户有改错的机会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值