%-----------------------------------------------------------------%
% 这个函数是用来模拟windows计算器的
% 这是为薜定宇老师<<科学运算语言MATLAB5.3程序设计与应用>>的习题而做
% 版本:1.0
% 设计者:快乐逍遥侠 ( real_ghost )
% QQ:14564470
% E-mail:
[email protected] OR
[email protected]
% 日期:2003年6月3日
%-------------------------------------------------------------------%
%-------------------------------------------------------------------%
% MC MR MS M+ C等几个键的功能还没有设计
% 有空了再说吧
%-------------------------------------------------------------------%
function mcaculor(action)
if nargin==0
action='initialization';
end
switch action
case 'initialization' %初始化界面
main_win=figure('position',[100,200,300,350],'name','旋风计算器','numbertitle','off','menubar','none',...
'resize','off');
main_edit=uicontrol('style','edit','position',[10,300,280,25],'backgroundcolor',[1,1,1],'string','0',...
'tag','MAIN_EDIT','horizontalalignment','right','fontsize',12);
main_back=uicontrol('style','pushbutton','position',[60,250,75,25],'string','BackSpace',...
'callback','mcaculor backspace','tag','MAIN_BACK');
main_CE=uicontrol('style','pushbutton','position',[138,250,75,25],'string','CE',...
'tag','MAIN_CE','callback','mcaculor ce');
main_C=uicontrol('style','pushbutton','position',[216,250,75,25],'string','C');
main_but7=uicontrol('style','pushbutton','position',[60,220,45,25],'string','7',...
'tag','MAIN_BUT7','callback','mcaculor num7');
main_but8=uicontrol('style','pushbutton','position',[107,220,45,25],'string','8',...
'tag','MAIN_BUT8','callback','mcaculor num8');
main_but9=uicontrol('style','pushbutton','position',[154,220,45,25],'string','9',...
'tag','MAIN_BUT9','callback','mcaculor num9');
main_divd=uicontrol('style','pushbutton','position',[201,220,45,25],'string','/',...
'tag','MAIN_DIVD','callback','mcaculor divd');
main_sqrt=uicontrol('style','pushbutton','position',[248,220,45,25],'string','sqrt',...
'tag','MAIN_SQRT','callback','mcaculor msqrt');
main_but4=uicontrol('style','pushbutton','position',[60,193,45,25],'string','4',...
'tag','MAIN_BUT4','callback','mcaculor num4');
main_but5=uicontrol('style','pushbutton','position',[107,193,45,25],'string','5',...
'tag','MAIN_BUT5','callback','mcaculor num5');
main_but6=uicontrol('style','pushbutton','position',[154,193,45,25],'string','6',...
'tag','MAIN_BUT6','callback','mcaculor num6');
main_time=uicontrol('style','pushbutton','position',[201,193,45,25],'string','*',...
'tag','MAIN_TIME','callback','mcaculor time');
main_pert=uicontrol('style','pushbutton','position',[248,193,45,25],'string','%',...
'tag','MAIN_PERT','callback','mcaculor pert');
main_but1=uicontrol('style','pushbutton','position',[60,166,45,25],'string','1',...
'tag','MAIN_BUT1','callback','mcaculor num1');
main_but2=uicontrol('style','pushbutton','position',[107,166,45,25],'string','2',...
'tag','MAIN_BUT2','callback','mcaculor num2');
main_but3=uicontrol('style','pushbutton','position',[154,166,45,25],'string','3',...
'tag','MAIN_BUT3','callback','mcaculor num3');
main_minu=uicontrol('style','pushbutton','position',[201,166,45,25],'string','-',...
'tag','MAIN_MINU','callback','mcaculor minu');
main_cnse=uicontrol('style','pushbutton','position',[248,166,45,25],'string','1/x',...
'tag','MAIN_CNSE','callback','mcaculor cnse');
main_but0=uicontrol('style','pushbutton','position',[60,139,45,25],'string','0',...
'tag','MAIN_BUT0','callback','mcaculor num0');
main_porm=uicontrol('style','pushbutton','position',[107,139,45,25],'string','+/-');
main_dots=uicontrol('style','pushbutton','position',[154,139,45,25],'string','.',...
'tag','MAIN_DOTS','callback','mcaculor dots');
main_plus=uicontrol('style','pushbutton','position',[201,139,45,25],'string','+','tag',...
'MAIN_PLUS','callback','mcaculor plus');
main_equl=uicontrol('style','pushbutton','position',[248,139,45,25],'string','=',...
'tag','MAIN_EQUL','callback','mcaculor equl');
main_MC=uicontrol('style','pushbutton','position',[6,220,45,25],'string','MC');
main_MR=uicontrol('style','pushbutton','position',[6,193,45,25],'string','MR');
main_MS=uicontrol('style','pushbutton','position',[6,166,45,25],'string','MS');
main_Mplus=uicontrol('style','pushbutton','position',[6,139,45,25],'string','M+');
operation_state=uicontrol('style','text','visible','off','string','0','tag',...
'OPERATION_STATE');%用来记录当前的运算符,0表示还没有选中任何运算符...
%1为加,2为减,3为乘,4为除
operation_sequence=uicontrol('style','text','visible','off','string','0','tag',...
'OPERATION_SEQUENCE');%用来记录
operator_one=uicontrol('style','text','visible','off','string',' ','tag','OPERATOR_ONE');%用来记录第一个被操作数
main_manu_edit=uimenu(main_win,'label','编辑(E)');
main_manu_view=uimenu(main_win,'label','查看(V)');
main_manu_help=uimenu(main_win,'label','帮助(H)');
uimenu(main_manu_edit,'label','退出');
uimenu(main_manu_help,'label','帮助主题');
uimenu(main_manu_help,'label','关于旋风计算器','separator','on','call','mcaculor mhelp');
case 'mhelp'
helpdlg({'版权归快乐逍遥侠所有'...
'E-mail:
[email protected]'...
'QQ:14564470'},'关于旋风计算器');
case 'backspace' %退格键
h_edit=findobj(0,'tag','MAIN_EDIT');
h_back=findobj(0,'tag','MAIN_BACK');
main_win_str=get(h_edit,'string');%取得当有所显示的数字
main_win_str(length(main_win_str))=[];
if length(main_win_str)==0
set(h_edit,'string','0');
else
set(h_edit,'string',main_win_str);
end
case 'ce'
h_edit=findobj(0,'tag','MAIN_EDIT');
h_state=findobj(0,'tag','OPERATION_STATE');
h_sequence=findobj(0,'tag','OPERATION_SEQUENCE');
operator_one=findobj(0,'tag','OPERATOR_ONE');
h_ce=findobj(0,'tag','MAIN_CE');
set(h_sequence,'string','0');
set(operator_one,'string','0');
set(h_edit,'string','0');
set(h_state,'string','0');
case 'pert'
h_edit=findobj(0,'tag','MAIN_EDIT');
h_pert=findobj(0,'tag','MAIN_PERT');
set(h_edit,'string','0');
case 'num9'
h_edit=findobj(0,'tag','MAIN_EDIT');
h_num9=findobj(0,'tag','MAIN_BUT9');
h_state=findobj(0,'tag','OPERATION_STATE');
h_sequence=findobj(0,'tag','OPERATION_SEQUENCE');
h_opert=findobj(0,'tag','OPERATOR_ONE');
h_sequence_num=round(str2num(get(h_sequence,'string')));
h_opert_num=round(str2num(get(h_state,'string')));
main_win_num_str=get(h_edit,'string');
if h_opert_num==1 | h_opert_num==2 | h_opert_num==3 | h_opert_num==4 %按此键之前按了运算符
if h_sequence_num==0
set(h_edit,'string','9');
set(h_sequence,'string','1');
else
main_wi