全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++有限状态机实现计算器小程序

本文介绍利用有限状态机原理开发计算器小程序的过程。

实现的功能

  • 支持整数、小数输入
  • 支持+ - * / 四则运算
  • 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 


相关文章: 建站VPS推荐:2025年高性能服务器配置指南  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  建站之星如何快速更换网站模板?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何在西部数码注册域名并快速搭建网站?  Swift中swift中的switch 语句  制作销售网站教学视频,销售网站有哪些?  建站主机如何选?性能与价格怎样平衡?  如何选择最佳自助建站系统?快速指南解析优劣  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  ,sp开头的版面叫什么?  如何用景安虚拟主机手机版绑定域名建站?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  建站之星2.7模板:企业网站建设与h5定制设计专题  再谈Python中的字符串与字符编码(推荐)  活动邀请函制作网站有哪些,活动邀请函文案?  如何在建站之星网店版论坛获取技术支持?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  如何高效生成建站之星成品网站源码?  如何在建站主机中优化服务器配置?  盐城做公司网站,江苏电子版退休证办理流程?  如何快速辨别茅台真假?关键步骤解析  javascript基本数据类型及类型检测常用方法小结  如何快速搭建高效WAP手机网站?  建站之星如何快速解决建站难题?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  为什么Go需要go mod文件_Go go mod文件作用说明  建站主机助手选型指南:2025年热门推荐与高效部署技巧  如何在景安服务器上快速搭建个人网站?  c# 服务器GC和工作站GC的区别和设置  如何快速上传建站程序避免常见错误?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  建站之星安装步骤有哪些常见问题?  如何在阿里云虚拟服务器快速搭建网站?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  广州美橙建站如何快速搭建多端合一网站?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  建设网站制作价格,怎样建立自己的公司网站?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  如何快速上传自定义模板至建站之星?  如何用VPS主机快速搭建个人网站?  相册网站制作软件,图片上的网址怎么复制?  制作旅游网站html,怎样注册旅游网站?  如何选择高性价比服务器搭建个人网站?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  建站主机服务器选型指南与性能优化方案解析  建站主机选购指南:核心配置优化与品牌推荐方案  电视网站制作tvbox接口,云海电视怎样自定义添加电视源? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。