是我做的一个MATLAB课设,是一个带画图、输出模式转换、简单控制系统仿真等功能的计算器。练习GUI编程用。
仓库链接:
MathBuddyGUI: MATLAB课设,一个带画图、输出模式转换、简单控制系统仿真等功能的计算器,练习GUI编程用。 (gitee.com)
HPC2H2/MathBuddyGUI: MATLAB课设,一个带画图、输出模式转换、简单控制系统仿真等功能的计算器,练习GUI编程用。 (github.com)
课设报告节选:
项目描述
制作一计算器GUI界面,界面仿造win11计算器和卡西欧fx991CNX计算器设计,除了四则运算、清空文本框、存储结果等设计及错误的识别等功能外,还可以使用常用数学函数(如exp),并增添极坐标和直角坐标的互换、积分和求导、求根、画图、简单控制系统仿真等功能,同时还配置了输出模式转换的功能,可作为求解自动控制习题和数学题的便捷工具。
问题求解方案
1. 界面布局
界面布局如图5,每个uicontrol控件的'Units'属性都是'normalized',且'Position'属性都是相对距离,确保拉伸窗口控件大小和文本大小随之变化。
图5
2. 功能设计
每个按钮都有其对应的回调函数。由功能分,可分为基本功能按钮和特殊功能按钮。
基本功能按钮:数字按钮、基本运算(小数点和加减乘除)按钮、逗号按钮、i按钮、x按钮、左右括号按钮、等于号按钮、Ans按钮、函数运算按钮(三角函数和反三角函数、幂函数和指数函数、以10为底的对数和e为底的对数)回退按钮、清空按钮。
特殊功能按钮:画图按钮、求根按钮、控制工程按钮、求导按钮、积分按钮、直角坐标转为极坐标按钮、极坐标转为直角坐标按钮、模式转换按钮。
所有的处理都是围绕着“待处理字符串”的,按钮的按下一般会对“待处理字符串”进行更改。
数字按钮、基本运算按钮、逗号按钮、i按钮、x按钮、左右括号按钮:在条件允许的情况下,把它(对于显示字符串样式为1的按钮,就是’1’)追加到“待处理字符串”后,并在文本框显示;若“待处理字符串”为’0’,则在条件允许的情况下,把它的值赋给字符串。
Ans按钮也类似,存储上一次运算得到的字符类型,之后在末尾追加左右括号包起来的它的值。在特殊功能按钮被按下后,在这些按钮对应的过程没有结束前,被复用为’退出’按钮。
等于号按钮:点击则计算当前“待处理字符串”的值,并储存基本功能以及求根、求导、积分中的定积分的得数在Ans中。在特殊功能按钮被按下后,在这些按钮对应的过程没有结束前,被复用为’下一步’按钮。
函数按钮:在条件允许的情况下,把它(对于指数计算按钮,就是’exp(‘)追加到“待处理字符串”后,并在文本框显示;若“待处理字符串”为’0’,则在条件允许的情况下,把它的值赋给字符串。
回退按钮:清除掉“待处理字符串”末尾的一个基本单位(如‘exp(‘可被认为是一个基本单位)。
清空按钮:“待处理字符串”赋值为’0’。
对于特殊功能按钮,其能引发多个过程,由于篇幅有限不多赘述,代码写得很清晰了。
3. 程序架构
设置全局变量,在GUI内调用。尾缀为’State’的变量可判断特殊功能按钮对应的过程进行到哪一步了。见图6。
图6
对于多状态过程的每个’State’,设置使失能按钮的回调函数,在哪个过程就使失能哪一些按钮。并把按钮进行分组(设置'UserData'属性),见图7。
图7
对于每个基本功能按钮,在被使能的情况下,使用贪心算法的思想,仅判断待处理字符串的最后一位不能是什么(以及它是不是’0’),来决定能不能使用它。
注:之前在知乎发过一遍,那个也是我。。