因爲疫情,在家(無聊)想着看一下Matlab App Builder,花了一點時間,做了個簡單的計算器。只做了基本的計算功能,算是對Matlab App Builder的一個基本的學習。
Matlab App Builder比起成熟的一些製作app的語言來說,功能非常簡陋,不過也非常好上手,如果對Matlab基本語言很熟悉的話,可以說,上手基本沒有什麼障礙。因爲Matlab App Builder的程序可以直接打包成exe,所以如果不想去搞window程序開發,而又想製作一些簡單的程序的話,這個Matlab App Builder看起來是一個比較不錯的工具。(雖然打包成exe之後效率很低,嘿嘿)
製作這個簡單的(弱智的)計算器,最大的工作量就是在判斷輸入邏輯上,比如說:
- 連續輸入兩個'.',那麼後面一個'.'要忽略掉;連續輸入兩個‘+’,後面一個‘+’要忽略掉;
- 按下‘+/-'鍵取反的時候,需要先判斷當前輸入的數據,如果不是數據,則忽略,是數據的話,取反並顯示;
- 按下’sqrt'時,後面的輸入需要寫進括號裏面;刪除的時候也要考慮這一點。
其實大量的實踐都花在這樣一些輸入邏輯上了。最後做成的樣子是這樣:
基本的功能實現了,但是也有很多的bug。
代碼如下:
classdef app2 < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
UIFigure matlab.ui.Figure
TextResult matlab.ui.control.TextArea
Button_0 matlab.ui.control.Button
Button_2 matlab.ui.control.Button
Button_3 matlab.ui.control.Button
Button_4 matlab.ui.control.Button
Button_5 matlab.ui.control.Button
Button_6 matlab.ui.control.Button
Button_7 matlab.ui.control.Button
Button_addsub matlab.ui.control.Button
Button_dot matlab.ui.control.Button
DELButton matlab.ui.control.Button
Button_mult matlab.ui.control.Button
Button_add matlab.ui.control.Button
xyButton matlab.ui.control.Button
ACButton matlab.ui.control.Button
Button_div matlab.ui.control.Button
Button_sub matlab.ui.control.Button
Button_equal matlab.ui.control.Button
Button_9 matlab.ui.control.Button
Button_1 matlab.ui.control.Button
Button_left matlab.ui.control.Button
Button_right matlab.ui.control.Button
Button_log matlab.ui.control.Button
Button_sqrt matlab.ui.control.Button
Button_factorial matlab.ui.control.Button
Button_8 matlab.ui.control.Button
end
properties (Access = private)
%按鍵index
keyIndex = 99;
%calState,0:初始狀態;1:數據輸入;2:運算符號輸入;3:
calState = 0;
%當前顯示的字符
dispString = '';
%
calString = '';
%最後一個運算符之後輸入的數據
nowInputData = 0;
%當前按下的按鍵值
nowInputButton = '';
%'='是否剛剛按下
equalPushed = 0;
%sqrt是否按下
sqrtPushed = 0;
%'.'的輸入標誌
dotFlag = 0;
%'+/-'的輸入標誌
addsubFlag = 0;
%運算符輸入標誌
calFlag = 0;
%最後一個運算符號在輸入string當中的位置
calIndex = 0;
%按下'='之後的計算結果
resultData = 0;
end
methods (Access = private)
function y = calPosition(app)
addPosition = max(strfind(app.dispString,'+'));
if (isempty(addPosition))
addPosition = 0;
end
subPosition = max(strfind(app.dispString,'-'));
if (isempty(subPosition)|subPosition==1)
subPosition = 0;
end
multPosition = max(strfind(app.dispString,'×'));
if (isempty(multPosition))
multPosition = 0;
end
divPosition = max(strfind(app.dispString,'÷'));
if (isempty(divPosition))
divPosition = 0;
end
powerPosition = max(strfind(app.dispString,'^'));
if (isempty(powerPosition))
powerPosition = 0;
end
leftPosition = max(strfind(app.dispString,'('));
if (isempty(leftPosition))
leftPosition = 0;
end
y = max([addPosition,subPosition,multPosition,divPosition,powerPosition,leftPosition]);
end
end
% Callbacks that handle component events
methods (Access = private)
% Code that executes after component creation
function startupFcn(app)
app.keyIndex = 99;
app.calState = 0;
app.equalPushed = 0;
app.dispString = '0';
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_0
function Button_0Pushed(app, event)
app.keyIndex = 0;
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '0';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '0';
%如果上一個字符是運算符號連着0
elseif app.dispString(end)=='0'
if (app.dispString(end-1)=='(' || app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString = app.dispString;
else
app.dispString = [app.dispString,'0'];
end
else
app.dispString = [app.dispString,'0'];
end
app.equalPushed = 0;
app.calFlag = 0;
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),app.dispString(end),app.dispString(end-1)];
end
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_1
function Button_1Pushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '1';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '1';
elseif app.dispString(end)=='0'
%如果上一個字符是運算符號連着0
if (app.dispString(end-1)=='('|| app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString(end) = '1';
else
app.dispString = [app.dispString,'1'];
end
else
app.dispString = [app.dispString,'1'];
end
app.equalPushed=0;
app.calFlag = 0;
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),app.dispString(end),app.dispString(end-1)];
end
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_dot
function Button_dotPushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '0.';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '0.';
%如果剛纔輸入了'.'
elseif app.dotFlag == 0
%如果前面是運算符號或者括號
if app.dispString(end)=='('|| app.dispString(end)==')' || app.dispString(end)=='^' || app.dispString(end)=='+' || app.dispString(end)=='-' || app.dispString(end)=='×' || app.dispString(end)=='÷'
app.dispString = [app.dispString,'0.'];
else
app.dispString = [app.dispString,'.'];
end
else
app.dispString = [app.dispString,'.'];
end
app.dotFlag = 1;
app.calFlag = 0;
app.equalPushed=0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: ACButton
function ACButtonPushed(app, event)
app.equalPushed=0;
app.dispString = '0';
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_add
function Button_addPushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = [app.dispString,'+'];
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '0+';
%如果前面是運算符號或者括號
elseif app.calFlag == 0
if app.dispString(end)=='(' || app.dispString(end)=='^' || app.dispString(end)=='+' || app.dispString(end)=='-' || app.dispString(end)=='×' || app.dispString(end)=='÷'
app.dispString = [app.dispString,'0+'];
else
app.dispString = [app.dispString,'+'];
end
else
app.dispString(end) = '+';
end
app.dotFlag = 0;
app.equalPushed=0;
app.calFlag = 1;
app.sqrtPushed =0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_addsub
function Button_addsubPushed(app, event)
app.calIndex = app.calPosition();
%剛纔顯示的是上一次的計算結果,如果現在輸入取反,那麼將結果取反使用
if (app.equalPushed==1)
app.dispString = num2str(str2num(app.dispString)*(-1));
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '0';
%如果前面是運算符號或者括號
elseif app.dispString(end)=='('|| app.dispString(end)=='^' || app.dispString(end)=='+' || app.dispString(end)=='-' || app.dispString(end)=='×' || app.dispString(end)=='÷'
app.dispString = app.dispString;
elseif app.dispString(end)==')'
if app.sqrtPushed == 1
app.dispString = app.dispString(1:end-1);
if app.addsubFlag == 1
app.nowInputData = app.dispString(app.calIndex+1:end);
app.dispString = [app.dispString(1:app.calIndex-1),app.nowInputData];
app.addsubFlag = 0;
else
app.nowInputData = str2num(app.dispString(app.calIndex+1:end));
app.nowInputData = -app.nowInputData;
app.dispString = [app.dispString(1:app.calIndex),num2str(app.nowInputData)];
app.addsubFlag = 1;
end
app.dispString = [app.dispString,')'];
else
app.dispString = app.dispString;
end
elseif app.calIndex ~= 0
if app.addsubFlag == 1
app.nowInputData = app.dispString(app.calIndex+1:end);
app.dispString = [app.dispString(1:app.calIndex-1),app.nowInputData];
app.addsubFlag = 0;
else
app.nowInputData = str2num(app.dispString(app.calIndex+1:end));
app.nowInputData = -app.nowInputData;
app.dispString = [app.dispString(1:app.calIndex),num2str(app.nowInputData)];
app.addsubFlag = 1;
end
else
app.dispString = num2str(-str2num(app.dispString));
end
app.dotFlag = 0;
app.equalPushed=0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_equal
function Button_equalPushed(app, event)
app.equalPushed = 1;
%計算結果
app.calString = app.dispString;
app.calString = strrep(app.calString,'×','*');
app.calString = strrep(app.calString,'÷','/');
app.resultData = str2num(app.calString);
%顯示
if (isempty(app.resultData))
app.TextResult.Value=[app.dispString,10,'輸入似乎有錯誤'];
app.dispString = '0';
else
app.TextResult.Value = [app.dispString,10,num2str(app.resultData)];
app.dispString = num2str(app.resultData);
end
app.dotFlag = 0;
app.calFlag = 0;
app.sqrtPushed =0;
end
% Button pushed function: Button_sub
function Button_subPushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = [app.dispString,'-'];
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '0-';
%如果前面是運算符號或者括號
elseif app.calFlag == 0
if app.dispString(end)=='(' || app.dispString(end)=='^' || app.dispString(end)=='+' || app.dispString(end)=='-' || app.dispString(end)=='×' || app.dispString(end)=='÷'
app.dispString = [app.dispString,'0-'];
else
app.dispString = [app.dispString,'-'];
end
else
app.dispString(end) = '-';
end
app.dotFlag = 0;
app.equalPushed=0;
app.calFlag = 1;
app.sqrtPushed =0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_2
function Button_2Pushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '2';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '2';
elseif app.dispString(end)=='0'
%如果上一個字符是運算符號連着0
if (app.dispString(end-1)=='('|| app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString(end) = '2';
else
app.dispString = [app.dispString,'2'];
end
else
app.dispString = [app.dispString,'2'];
end
app.equalPushed=0;
app.calFlag = 0;
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),app.dispString(end),app.dispString(end-1)];
end
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_left
function Button_leftPushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '(';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '(';
elseif app.dispString(end)=='0'
%如果上一個字符是運算符號連着0
if (app.dispString(end-1)=='('|| app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString(end) = '(';
else
app.dispString = [app.dispString,'('];
end
else
app.dispString = [app.dispString,'('];
end
app.equalPushed=0;
app.calFlag = 0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_right
function Button_rightPushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '0';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '0';
else
app.dispString = [app.dispString,')'];
end
app.equalPushed=0;
app.calFlag = 0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_mult
function Button_multPushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = [app.dispString,'×'];
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '0×';
%如果前面是運算符號或者括號
elseif app.calFlag == 0
if app.dispString(end)=='(' || app.dispString(end)=='^' || app.dispString(end)=='+' || app.dispString(end)=='-' || app.dispString(end)=='×' || app.dispString(end)=='÷'
app.dispString = [app.dispString,'0×'];
else
app.dispString = [app.dispString,'×'];
end
else
app.dispString(end) = '×';
end
app.dotFlag = 0;
app.equalPushed=0;
app.calFlag = 1;
app.sqrtPushed =0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_div
function Button_divPushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = [app.dispString,'÷'];
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '0÷';
%如果前面是運算符號或者括號
elseif app.calFlag == 0
if app.dispString(end)=='(' || app.dispString(end)=='^' || app.dispString(end)=='+' || app.dispString(end)=='-' || app.dispString(end)=='×' || app.dispString(end)=='÷'
app.dispString = [app.dispString,'0÷'];
else
app.dispString = [app.dispString,'÷'];
end
else
app.dispString(end) = '÷';
end
app.dotFlag = 0;
app.equalPushed=0;
app.calFlag = 1;
app.sqrtPushed =0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: xyButton
function xyButtonPushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = [app.dispString,'^'];
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '0^';
%如果前面是運算符號或者括號
elseif app.calFlag == 0
if app.dispString(end)=='(' || app.dispString(end)=='^' || app.dispString(end)=='+' || app.dispString(end)=='-' || app.dispString(end)=='×' || app.dispString(end)=='÷'
app.dispString = [app.dispString,'0^'];
else
app.dispString = [app.dispString,'^'];
end
else
app.dispString(end) = '^';
end
app.dotFlag = 0;
app.equalPushed=0;
app.calFlag = 1;
app.sqrtPushed =0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: DELButton
function DELButtonPushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '0';
%如果目前的顯示爲0
elseif length(app.dispString) == 1
app.dispString = '0';
%如果前面是運算符號或者括號
else
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),')'];
else
app.dispString = app.dispString(1:end-1);
end
end
app.dotFlag = 0;
app.equalPushed=0;
app.calFlag = 0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_sqrt
function Button_sqrtPushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = ['sqrt(',app.dispString,')'];
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = 'sqrt(0)';
elseif app.dispString(end)==')'
app.dispString = app.dispString;
else
app.dispString = [app.dispString,'sqrt()'];
app.sqrtPushed = 1;
end
app.equalPushed=0;
app.calFlag = 0;
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_3
function Button_3Pushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '3';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '3';
elseif app.dispString(end)=='0'
%如果上一個字符是運算符號連着0
if (app.dispString(end-1)=='('|| app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString(end) = '3';
else
app.dispString = [app.dispString,'3'];
end
else
app.dispString = [app.dispString,'3'];
end
app.equalPushed=0;
app.calFlag = 0;
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),app.dispString(end),app.dispString(end-1)];
end
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_4
function Button_4Pushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '4';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '4';
elseif app.dispString(end)=='0'
%如果上一個字符是運算符號連着0
if (app.dispString(end-1)=='('|| app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString(end) = '4';
else
app.dispString = [app.dispString,'4'];
end
else
app.dispString = [app.dispString,'4'];
end
app.equalPushed=0;
app.calFlag = 0;
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),app.dispString(end),app.dispString(end-1)];
end
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_5
function Button_5Pushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '5';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '5';
elseif app.dispString(end)=='0'
%如果上一個字符是運算符號連着0
if (app.dispString(end-1)=='('|| app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString(end) = '5';
else
app.dispString = [app.dispString,'5'];
end
else
app.dispString = [app.dispString,'5'];
end
app.equalPushed=0;
app.calFlag = 0;
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),app.dispString(end),app.dispString(end-1)];
end
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_6
function Button_6Pushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '6';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '6';
elseif app.dispString(end)=='0'
%如果上一個字符是運算符號連着0
if (app.dispString(end-1)=='('|| app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString(end) = '6';
else
app.dispString = [app.dispString,'6'];
end
else
app.dispString = [app.dispString,'6'];
end
app.equalPushed=0;
app.calFlag = 0;
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),app.dispString(end),app.dispString(end-1)];
end
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_7
function Button_7Pushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '7';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '7';
elseif app.dispString(end)=='0'
%如果上一個字符是運算符號連着0
if (app.dispString(end-1)=='('|| app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString(end) = '7';
else
app.dispString = [app.dispString,'7'];
end
else
app.dispString = [app.dispString,'7'];
end
app.equalPushed=0;
app.calFlag = 0;
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),app.dispString(end),app.dispString(end-1)];
end
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_8
function Button_8Pushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '8';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '8';
elseif app.dispString(end)=='0'
%如果上一個字符是運算符號連着0
if (app.dispString(end-1)=='('|| app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString(end) = '8';
else
app.dispString = [app.dispString,'8'];
end
else
app.dispString = [app.dispString,'8'];
end
app.equalPushed=0;
app.calFlag = 0;
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),app.dispString(end),app.dispString(end-1)];
end
app.TextResult.Value = app.dispString;
end
% Button pushed function: Button_9
function Button_9Pushed(app, event)
%剛纔顯示的是上一次的計算結果,如果現在輸入數字,那麼重新開始
if (app.equalPushed==1)
app.dispString = '9';
%如果目前的顯示爲0
elseif app.dispString =='0'
app.dispString = '9';
elseif app.dispString(end)=='0'
%如果上一個字符是運算符號連着0
if (app.dispString(end-1)=='('|| app.dispString(end-1)==')' || app.dispString(end-1)=='^' || app.dispString(end-1)=='+' || app.dispString(end-1)=='-' || app.dispString(end-1)=='×' || app.dispString(end-1)=='÷')
app.dispString(end) = '9';
else
app.dispString = [app.dispString,'9'];
end
else
app.dispString = [app.dispString,'9'];
end
app.equalPushed=0;
app.calFlag = 0;
if app.sqrtPushed == 1
app.dispString = [app.dispString(1:end-2),app.dispString(end),app.dispString(end-1)];
end
app.TextResult.Value = app.dispString;
end
end
% Component initialization
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create UIFigure and hide until all components are created
app.UIFigure = uifigure('Visible', 'off');
app.UIFigure.Position = [100 100 510 560];
app.UIFigure.Name = '弱智計算器';
% Create TextResult
app.TextResult = uitextarea(app.UIFigure);
app.TextResult.HorizontalAlignment = 'right';
app.TextResult.FontName = 'YaHei Consolas Hybrid';
app.TextResult.FontSize = 20;
app.TextResult.Position = [31 451 450 60];
% Create Button_0
app.Button_0 = uibutton(app.UIFigure, 'push');
app.Button_0.ButtonPushedFcn = createCallbackFcn(app, @Button_0Pushed, true);
app.Button_0.FontSize = 16;
app.Button_0.Position = [131 131 50 50];
app.Button_0.Text = '0';
% Create Button_2
app.Button_2 = uibutton(app.UIFigure, 'push');
app.Button_2.ButtonPushedFcn = createCallbackFcn(app, @Button_2Pushed, true);
app.Button_2.FontSize = 16;
app.Button_2.Position = [131 211 50 50];
app.Button_2.Text = '2';
% Create Button_3
app.Button_3 = uibutton(app.UIFigure, 'push');
app.Button_3.ButtonPushedFcn = createCallbackFcn(app, @Button_3Pushed, true);
app.Button_3.FontSize = 16;
app.Button_3.Position = [231 211 50 50];
app.Button_3.Text = '3';
% Create Button_4
app.Button_4 = uibutton(app.UIFigure, 'push');
app.Button_4.ButtonPushedFcn = createCallbackFcn(app, @Button_4Pushed, true);
app.Button_4.FontSize = 16;
app.Button_4.Position = [31 291 50 50];
app.Button_4.Text = '4';
% Create Button_5
app.Button_5 = uibutton(app.UIFigure, 'push');
app.Button_5.ButtonPushedFcn = createCallbackFcn(app, @Button_5Pushed, true);
app.Button_5.FontSize = 16;
app.Button_5.Position = [131 291 50 50];
app.Button_5.Text = '5';
% Create Button_6
app.Button_6 = uibutton(app.UIFigure, 'push');
app.Button_6.ButtonPushedFcn = createCallbackFcn(app, @Button_6Pushed, true);
app.Button_6.FontSize = 16;
app.Button_6.Position = [231 291 50 50];
app.Button_6.Text = '6';
% Create Button_7
app.Button_7 = uibutton(app.UIFigure, 'push');
app.Button_7.ButtonPushedFcn = createCallbackFcn(app, @Button_7Pushed, true);
app.Button_7.FontSize = 16;
app.Button_7.Position = [31 371 50 50];
app.Button_7.Text = '7';
% Create Button_addsub
app.Button_addsub = uibutton(app.UIFigure, 'push');
app.Button_addsub.ButtonPushedFcn = createCallbackFcn(app, @Button_addsubPushed, true);
app.Button_addsub.FontSize = 20;
app.Button_addsub.Position = [31 131 50 50];
app.Button_addsub.Text = '+/-';
% Create Button_dot
app.Button_dot = uibutton(app.UIFigure, 'push');
app.Button_dot.ButtonPushedFcn = createCallbackFcn(app, @Button_dotPushed, true);
app.Button_dot.FontSize = 16;
app.Button_dot.FontWeight = 'bold';
app.Button_dot.Position = [231 131 50 50];
app.Button_dot.Text = '.';
% Create DELButton
app.DELButton = uibutton(app.UIFigure, 'push');
app.DELButton.ButtonPushedFcn = createCallbackFcn(app, @DELButtonPushed, true);
app.DELButton.FontSize = 16;
app.DELButton.Position = [331 371 50 50];
app.DELButton.Text = 'DEL';
% Create Button_mult
app.Button_mult = uibutton(app.UIFigure, 'push');
app.Button_mult.ButtonPushedFcn = createCallbackFcn(app, @Button_multPushed, true);
app.Button_mult.FontSize = 20;
app.Button_mult.Position = [331 211 50 50];
app.Button_mult.Text = '×';
% Create Button_add
app.Button_add = uibutton(app.UIFigure, 'push');
app.Button_add.ButtonPushedFcn = createCallbackFcn(app, @Button_addPushed, true);
app.Button_add.FontSize = 20;
app.Button_add.Position = [331 291 50 50];
app.Button_add.Text = '+';
% Create xyButton
app.xyButton = uibutton(app.UIFigure, 'push');
app.xyButton.ButtonPushedFcn = createCallbackFcn(app, @xyButtonPushed, true);
app.xyButton.FontSize = 16;
app.xyButton.Position = [331 131 50 50];
app.xyButton.Text = 'x^y';
% Create ACButton
app.ACButton = uibutton(app.UIFigure, 'push');
app.ACButton.ButtonPushedFcn = createCallbackFcn(app, @ACButtonPushed, true);
app.ACButton.FontSize = 16;
app.ACButton.Position = [431 371 50 50];
app.ACButton.Text = 'AC';
% Create Button_div
app.Button_div = uibutton(app.UIFigure, 'push');
app.Button_div.ButtonPushedFcn = createCallbackFcn(app, @Button_divPushed, true);
app.Button_div.FontSize = 20;
app.Button_div.Position = [431 211 50 50];
app.Button_div.Text = '÷';
% Create Button_sub
app.Button_sub = uibutton(app.UIFigure, 'push');
app.Button_sub.ButtonPushedFcn = createCallbackFcn(app, @Button_subPushed, true);
app.Button_sub.FontSize = 20;
app.Button_sub.Position = [431 291 50 50];
app.Button_sub.Text = '-';
% Create Button_equal
app.Button_equal = uibutton(app.UIFigure, 'push');
app.Button_equal.ButtonPushedFcn = createCallbackFcn(app, @Button_equalPushed, true);
app.Button_equal.FontSize = 20;
app.Button_equal.Position = [431 131 50 50];
app.Button_equal.Text = '=';
% Create Button_9
app.Button_9 = uibutton(app.UIFigure, 'push');
app.Button_9.ButtonPushedFcn = createCallbackFcn(app, @Button_9Pushed, true);
app.Button_9.FontSize = 16;
app.Button_9.Position = [231 371 50 50];
app.Button_9.Text = '9';
% Create Button_1
app.Button_1 = uibutton(app.UIFigure, 'push');
app.Button_1.ButtonPushedFcn = createCallbackFcn(app, @Button_1Pushed, true);
app.Button_1.FontSize = 16;
app.Button_1.Position = [31 211 50 50];
app.Button_1.Text = '1';
% Create Button_left
app.Button_left = uibutton(app.UIFigure, 'push');
app.Button_left.ButtonPushedFcn = createCallbackFcn(app, @Button_leftPushed, true);
app.Button_left.FontSize = 16;
app.Button_left.Position = [31 51 50 50];
app.Button_left.Text = '(';
% Create Button_right
app.Button_right = uibutton(app.UIFigure, 'push');
app.Button_right.ButtonPushedFcn = createCallbackFcn(app, @Button_rightPushed, true);
app.Button_right.FontSize = 16;
app.Button_right.Position = [131 51 50 50];
app.Button_right.Text = ')';
% Create Button_log
app.Button_log = uibutton(app.UIFigure, 'push');
app.Button_log.FontSize = 16;
app.Button_log.Position = [231 51 50 50];
app.Button_log.Text = 'ln';
% Create Button_sqrt
app.Button_sqrt = uibutton(app.UIFigure, 'push');
app.Button_sqrt.ButtonPushedFcn = createCallbackFcn(app, @Button_sqrtPushed, true);
app.Button_sqrt.FontSize = 16;
app.Button_sqrt.Position = [331 51 50 50];
app.Button_sqrt.Text = 'Sqrt';
% Create Button_factorial
app.Button_factorial = uibutton(app.UIFigure, 'push');
app.Button_factorial.FontSize = 16;
app.Button_factorial.Position = [431 51 50 50];
app.Button_factorial.Text = 'n!';
% Create Button_8
app.Button_8 = uibutton(app.UIFigure, 'push');
app.Button_8.ButtonPushedFcn = createCallbackFcn(app, @Button_8Pushed, true);
app.Button_8.FontSize = 16;
app.Button_8.Position = [131 371 50 50];
app.Button_8.Text = '8';
% Show the figure after all components are created
app.UIFigure.Visible = 'on';
end
end
% App creation and deletion
methods (Access = public)
% Construct app
function app = app2
% Create UIFigure and components
createComponents(app)
% Register the app with App Designer
registerApp(app, app.UIFigure)
% Execute the startup function
runStartupFcn(app, @startupFcn)
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.UIFigure)
end
end
end