C++有限状态机实现计算器小程序
发布时间 - 2026-01-11 01:50:44 点击率:次本文介绍利用有限状态机原理开发计算器小程序的过程。

实现的功能
- 支持整数、小数输入
- 支持+ - * / 四则运算
- CE 清除当前操作数
- C 清除所有、回到初始状态
- 回显操作数和结果
HSM状态图
计算器可以分为七种状态:Start、Operand_1、Negate_1、Operator、Operand_2、Negate_2、Error。其中Start、Operand_1、Operand_1状态又分了几种子状态。 下面简要的介绍下状态状态转换的过程:
- 启动软件,进入Start状态
- 当用户点击1-9、0、Point按钮,软件进入Operand_1 状态。
- 当用户点击+、-、*、/按钮,软件进入Operator状态。
- 此时当用户再次点击1-9、0、Point按钮,软件进入Operand_2 状态。
- 如果用户点击=按钮,软件就进入了Start状态。
- 如果此时进行的是除法运算且除数为0,软件进入Error状态,用户只有点击C按钮才可以跳出。
在实际开发的过程中,我们只需要关心现在程序处在什么状态,可以进行什么样的操作。然后就是状态转换的条件要处理下。
代码片段
下面是CalculatorDlg.cpp中的一段代码,我们首先要获得当前的状态,然后进行相应的操作,操作完成之后设置好对应的状态。
void CalculatorDlg::enterOperation(Calculator::CalcOp oper)
{
if (m_calculator.getCurrentState() == Calculator::CalcState::Error)
{
return;
}
if (m_calculator.getCurrentState() == Calculator::CalcState::Start ||
m_calculator.getCurrentState() == Calculator::CalcState::Negate_1 ||
m_calculator.getCurrentState() == Calculator::CalcState::Operand_1)
{
m_calculator.setOperand_1(_wtof(m_output));
}
else if (m_calculator.getCurrentState() == Calculator::CalcState::Operand_2 ||
m_calculator.getCurrentState() == Calculator::CalcState::Negate_2)
{
m_calculator.setOperand_2(_wtof(m_output));
UpdateData(TRUE);
std::stringstream ss;
ss << m_calculator.getResult();
m_output = ss.str().c_str();
UpdateData(FALSE);
m_calculator.setCurrentState(Calculator::CalcState::Start);
m_calculator.setOperand_1(m_calculator.getResult());
}
m_calculator.setCurrentState(Calculator::CalcState::Operator);
m_calculator.setOperator(oper);
}
运行效果展示
源码查看
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# C++
# 计算器
# c++编写简单的计算器程序
# 简单实现C++复数计算器
# C/C++实现日期计算器的示例代码
# C/C++经典实例之模拟计算器示例代码
# C++实现简单计算器
# C++实现四则混合运算计算器
# C++实现简单计算器功能
# C++实现分数计算器
# 基于C++实现简单日期计算器
# C++制作简单的计算器功能
# 的是
# 才可以
# 只需要
# 分了
# 七种
# 大家多多
# 可以分为
# 数为
# 过程中
# 在实际
# CalculatorDlg
# Point
# style
# align
# center
# text
# CE
# br
# HSM
# strong
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
如何正确下载安装西数主机建站助手?
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
如何在阿里云高效完成企业建站全流程?
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
如何快速选择适合个人网站的云服务器配置?
Laravel如何使用Blade组件和插槽?(Component代码示例)
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
EditPlus中的正则表达式实战(6)
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何快速生成高效建站系统源代码?
如何在Windows 2008云服务器安全搭建网站?
5种Android数据存储方式汇总
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
手机网站制作与建设方案,手机网站如何建设?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
nginx修改上传文件大小限制的方法
Laravel如何处理文件下载请求?(Response示例)
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
如何选择可靠的免备案建站服务器?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
制作企业网站建设方案,怎样建设一个公司网站?
如何在阿里云香港服务器快速搭建网站?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
如何正确选择百度移动适配建站域名?
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
如何实现javascript表单验证_正则表达式有哪些实用技巧
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
如何破解联通资金短缺导致的基站建设难题?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
如何挑选最适合建站的高性能VPS主机?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
如何在建站之星网店版论坛获取技术支持?
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
canvas 画布在主流浏览器中的尺寸限制详细介绍
Linux系统命令中screen命令详解

