Delphi实现计算器——状态机

成品展示:
在这里插入图片描述
方案:

  • 采用状态机和静态工厂模式实现。
    在这里插入图片描述

1.使用工厂方法模式来创建操作对象

定义了一个抽象的操作类TOperation,其中声明了Calculate方法用于执行具体的计算。

然后针对不同的操作(加、减、乘、除、取模)分别创建了具体的操作类,如TAddOperation、TSubOperation等,它们继承自TOperation并实现了Calculate方法。

最后定义了一个工厂类TOperationFactory,根据传入的操作符来创建对应的操作对象。
在这里插入图片描述
在这里插入图片描述

2.使用状态机来管理计算器的不同状态

定义了一个状态枚举类型TCalculatorState,包含输入第一个操作数、输入第二个操作数、显示结果三个状态。

在代码中使用CurrentState变量来记录当前的状态,并在NumberClick、OperatorClick等事件处理方法中根据当前状态来执行相应的操作并更新状态。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.更多细节

代码中还考虑了一些细节情况的处理,比如:

连续按两次运算符时,以最后一次为准
除数为0时给出异常提示

支持输入负数
支持退格键删除输入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434943.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JWT令牌技术介绍及使用

一、JWT介绍 JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务…

数组解构是如何降低 JavaScript 的运行速度

在JavaScript开发中,解构赋值是一个广受欢迎的特性,它让代码更加简洁易读。然而,不同的解构模式可能会对性能产生显著影响。本文将深入探讨数组解构赋值可能带来的性能问题,并提供优化建议。 解构赋值的两种模式 JavaScript中的解…

Vscode超好看的渐变主题插件

样式效果: 插件使用方法: 然后重启,之后会显示vccode损坏,不用理会,因为这个插件是更改了应用内部代码,直接不再显示即可。

Spring Boot集成Redis向量数据库实现相似性搜索

1.什么是Redis向量数据库? Redis 是一个开源(BSD 许可)的内存数据结构存储,用作数据库、缓存、消息代理和流式处理引擎。Redis 提供数据结构,例如字符串、哈希、列表、集合、带范围查询的有序集合、位图、超对数日志、…

mac怎么设置ip地址映射

最近开发的项目分为了两种版本,一个自己用的,一个是卖出去的。 卖出的域名是和自己的不一样的,系统中有一些功能是只有卖出去的版本有的,但我们开发完之后还得测试,那就需要给自己的电脑配置一个IP地址映射了&#xf…

C++ STL容器(四) —— vector底层剖析

这篇讲解vector,不说废话,直接开始! 文章目录 原理UML类图代码实现构造函数插入元素删除元素清空容器析构函数赋值运算符 案例分析 原理 这里简单说一下 vector 的大致思想,动态数组,即它的长度会随着我们插入元素而产…

问:全国产业园数量增长,对中小企业意味着什么?

随着全国产业园数量的持续增长,这一趋势无疑为中小企业带来了前所未有的机遇与可能。产业园作为产业集聚的重要载体,不仅为中小企业提供了更广阔的发展空间,还通过资源共享、成本降低、创新协同等方式,助力企业快速成长。 对于中…

Spire.PDF for .NET【页面设置】演示:设置 PDF 的查看器首选项和缩放系数

优化查看器首选项和缩放因子对于改善 PDF 文档的查看体验至关重要。通过使用适当的查看器首选项和缩放因子,您可以使您的 PDF 文档更加用户友好、可查看且适合不同的设备和平台。在本文中,我们将演示如何使用Spire.PDF for .NET在 C# 和 VB.NET 中为 PDF…

题库系统平台开发功能解析

题库系统开发功能介绍可以从多个方面进行阐述,以下是一些核心功能及其详细解释 1. 题库管理系统 题目录入与编辑:提供灵活的题目录入方式,支持手动输入、批量导入(如从Excel、Word等文件中导入)以及从其他题库中复制试…

【ComfyUI】控制光照节点——ComfyUI-IC-Light-Native

原始代码(非comfyui):https://github.com/lllyasviel/IC-Light comfyui实现1(600星):https://github.com/kijai/ComfyUI-IC-Light comfyui实现2(500星):https://github.c…

MMD模型及动作一键完美导入UE5-Blender方案(三)

1、下载并安装blender_mmd_tools插件 1、下载并安装Blender,Blender,下载Blender3.6,下载太新的版本可能会跟blender_mmd_tools不匹配 2、github下载blender_mmd_tools:https://github.com/UuuNyaa/blender_mmd_tools/ 3、Edit->Preference->Add ons->Install F…

苏州 工业三维动画制作「世岩清上」一站式可视化营销服务商

在现代工业设计和营销中,三维动画已成为一种重要的视觉传达工具。它不仅能够直观展示产品的外观和功能,还能通过动态演示来增强观众的理解和体验。本文将深入探讨工业三维动画制作的关键点,包括产品动画和场景动作的制作技巧。 产品动画制作…

怎么给邮件加密?对邮件加密的五个绝佳方法,亲测有效!保教包会哦!

邮件作为日常沟通的重要工具,承载着大量敏感信息。 对邮件加密不仅是企业保护商业机密、客户资料的关键手段,也是个人维护隐私安全的必要措施。 然而,面对纷繁复杂的加密技术和工具,许多人感到无从下手。 别担心,本文…

win10如何禁止指定程序运行?推荐这4个好用的方法,小白必入哦!(轻松拿捏!)

在Windows 10系统中,管理程序运行权限是维护系统安全和提升工作效率的重要手段。 无论是出于防止恶意软件入侵的考虑,还是为了规范员工的软件使用行为,禁止指定程序运行都是一项必备技能。 本文将为您介绍四种简单实用的方法,即便…

日常工作解决文件改名,体验批量改文件名的魅力

工作中文件时常需要改名时,那就先删除再命名,这看似简单的重命名,如果能批量操作是不是能提高巨大的效率提升和整理优化它指的是一次性对多个文件进行重命名的过程,无需逐一手动操作,极大地节省了时间和精力。那就一起…

git分支-创建、合并、删除

Git会将每次提交串成一条时间线,这条时间线就是一个分支。在最初,只有一个master分支 在目录下创建项目 对目录进行输入 项目被修改 创建dev分支 合并分支 删除dev分支

AGI interior designer丨OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给…

Meta Orion 原型的生产成本约为 10,000 美元

Orion Meta 是一项突破性的增强现实项目,展示了其迄今为止最先进的原型。经过多年的研究和数百万美元的开发,Meta 打造出了一款仅重 98 克的增强现实眼镜,能够将全息图投射到视线范围内的任何地方。这款眼镜由一个先进的输入系统驱动&#xf…

足底筋膜炎怎么治疗才能彻底除根

足底筋膜炎是足底的肌腱或者筋膜发生无菌性炎症所致。最常见症状是脚跟的疼痛与不适,压痛点常在足底近足跟处,有时压痛较剧烈,且持续存在。晨起时疼痛感觉明显,行走过度时疼痛感加剧,严重患者甚至站立休息时也有疼痛感…

基于python+django+vue的电影数据分析及可视化系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…