计算器.docx
- 文档编号:7540469
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:22
- 大小:272.88KB
计算器.docx
《计算器.docx》由会员分享,可在线阅读,更多相关《计算器.docx(22页珍藏版)》请在冰豆网上搜索。
计算器
成绩
课程设计报告
题目数学计算器的开发
课程名称
院部名称
专业
班级
学生姓名
学号
课程设计地点
课程设计学时
指导教师
金陵科技学院教务处制
1.课程设计应达到的目的
本课程是为自动化专业本科生开设的专业课程设计课。
通过本课程的课程设计实践帮助学生巩固关于数据结构、算法、程序设计的基础知识。
通过本课程设计,学生可以初步掌握开发一个小型实用系统的基本方法,提高运用编程软件实现GUI程序设计的能力。
2.课程设计题目及要求
设计题目:
数学计算器的开发。
2.1课程设计的基本要求:
A.熟悉和掌握MATLAB程序设计方法。
B.掌握MATLABGUI程序设计。
2.2课程设计的内容
要求利用MATLABGUI设计实现一个图形用户界面的计算器程序,要求实现:
A.具有友好的用户图形界面。
实现十进制数的加、减、乘、除、乘方、取模等简单计算。
B.科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行。
C.有清除键,能清除操作,并对不正确的表达式能指出其错误原因。
2.3题目分析
本题目通过MATLAB的gui程序设计较为简单,在gui设计中主要用到三种控件,显示框用到文本编辑框(edittext),说明框用到静态文本框(Statictext),数字以及运算等按钮用到命令按钮(pushbutton)。
然后在通过各个按钮的回调函数,实现简单的计算功能。
2.4掌握书写程序设计开发文档的能力。
3.课程设计内容与步骤
3.1首先用MATLABGUI功能,在绘制一个静态文本框和一个文本编辑框,以及33个命令按钮,调整好各控件大小、颜色,整体布局如图所示:
然后通过双击个按钮来改写其属性,在m文件中编写其回调函数,最后在运行调试。
3.2具体设计
3.2.1各功能界面设计
GUI设计界面:
3.2.2各功能模块实现
算法设计:
A.数字键1-9以及‘(’、‘)’设计,以0为例,其他只是参数不同;
globaljj
a=get(handles.edit1,'String')
if(strcmp(a,'0')==1)|(jj==3)
set(handles.edit1,'String','1')
else
a=strcat(a,'1')
set(handles.edit1,'String',a)
end
jj=0
B.四则运算:
+、-、*,以‘+’为例,其他只是参数不同
globaljj
a=get(handles.edit1,'String')
s1=strcat(a,'+')
if(jj==0)|(jj==3)
set(handles.edit1,'String',s1)
jj=2
end
C.三角函数:
‘sin’、‘cos’,以‘sin’为例
globaljj
a=get(handles.edit1,'String')
b=eval(a)
c=sin(b*pi/180)//计算余弦时换成c=cos(b*pi/180)
set(handles.edit1,'String',num2str(c))
jj=3
D.三角函数:
‘tan’、‘cot’,以‘tan’为例
globaljj
a=get(handles.edit1,'String')
b=eval(a)
ifmod(b,90)~=0//参数不可为90的整数倍,若为余切则不可为180的
a=tan(b*pi/180)//整数倍
set(handles.edit1,'String',num2str(a))
else
set(handles.edit1,'String','notinthevary')
end
jj=3
E.清屏函数
set(handles.edit1,'String','0');
F.退格键:
通过取屏幕值,计算出其字符长度,然后取其前N-1项的值来实现退格:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0.')==1)&(jj==0)
set(handles.edit1,'String','0.');
else
ss=char(textString);
l=length(textString);
textString=ss(1:
l-1);
set(handles.edit1,'String',textString)
end
jj=0;
3.3各模块实现结果
A.数字键:
B.四则运算函数:
C.科学计算函数:
sin30的计算结果是0.5
4.结果分析
测试结果:
4.1计算(1+9)/5
计算结果=2
4.2计算3*4
计算结果=12
4.3arcsin0.5计算结果为30
4.4计算3/0
计算结果:
显示‘error’表明除数不能为0
4.5计算1+2^2
计算结果为5
4.6计算sqrt(8)结果为2.8284
4.7计算sqrt(-6)结果:
显示‘error’表明负数不可开平方
4.8计算Log2(4)结果为2
4.9计算arcsin(-4)结果为计算结果:
显示‘error’表明参数超过定义域
经过计算,这些结果均与实际结果相吻合,计算器的功能实现的较为完好。
5.课程设计源代码
0:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)
set(handles.edit1,'String','0');
else
textString=strcat(textString,'0');
set(handles.edit1,'String',textString)
end
jj=0;
1:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)
set(handles.edit1,'String','1');
else
textString=strcat(textString,'1');
set(handles.edit1,'String',textString)
end
jj=0;
2:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)
set(handles.edit1,'String','2');
else
textString=strcat(textString,'2');
set(handles.edit1,'String',textString)
end
jj=0;
3:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)
set(handles.edit1,'String','3');
else
textString=strcat(textString,'3');
set(handles.edit1,'String',textString)
end
jj=0;
4:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)
set(handles.edit1,'String','4');
else
textString=strcat(textString,'4');
set(handles.edit1,'String',textString)
end
jj=0;
5:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)
set(handles.edit1,'String','5');
else
textString=strcat(textString,'5');
set(handles.edit1,'String',textString)
end
jj=0;
6:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)
set(handles.edit1,'String','6');
else
textString=strcat(textString,'6');
set(handles.edit1,'String',textString)
end
jj=0;
7:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)
set(handles.edit1,'String','7');
else
textString=strcat(textString,'7');
set(handles.edit1,'String',textString)
end
jj=0;
8:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)
set(handles.edit1,'String','8');
else
textString=strcat(textString,'8');
set(handles.edit1,'String',textString)
end
jj=0;
9:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0')==1)&(jj==0)|(jj==1)
set(handles.edit1,'String','9');
else
textString=strcat(textString,'9');
set(handles.edit1,'String',textString)
end
jj=0;
A.四则运算函数:
+:
globaljj
a=get(handles.edit1,'String')
if(jj==2)
s1=a
else
s1=strcat(a,'+')
set(handles.edit1,'String',s1)
end
jj=2
-:
globaljj
a=get(handles.edit1,'String')
if(jj==2)
s1=a
else
s1=strcat(a,'-')
set(handles.edit1,'String',s1)
end
jj=2
*:
globaljj
a=get(handles.edit1,'String')
if(jj==2)
s1=a
else
s1=strcat(a,'*')
set(handles.edit1,'String',s1)
end
jj=2
/:
globaljj
a=get(handles.edit1,'String')
if(jj==2)
s1=a
else
s1=strcat(a,'/')
set(handles.edit1,'String',s1)
end
jj=2
=:
globaljj
globalx
a=get(handles.edit1,'String')
b=eval(a)
if(x==1)&(b==inf)
set(handles.edit1,'String','NaN')
else
set(handles.edit1,'String',num2str(b))
end
jj=1
x=0
C.科学计算函数:
Sin函数
globaljj
a=get(handles.edit1,'String')
b=eval(a)/180*pi
c=sin(b)
set(handles.edit1,'String',num2str(c))
jj=1
Cos函数
globaljj
a=get(handles.edit1,'String')
b=eval(a)/180*pi
c=cos(b)
set(handles.edit1,'String',num2str(c))
jj=1
Tan函数
globaljj
a=get(handles.edit1,'String')
d=eval(a)
if(d==90)
set(handles.edit1,'String','error')
else
b=d/180*pi;
c=tan(b);
set(handles.edit1,'String',num2str(c));
end
jj=1
Cot函数
globaljj
a=get(handles.edit1,'String')
b=eval(a)/180*pi
c=cot(b)
set(handles.edit1,'String',num2str(c))
jj=1
Arcsin函数
globaljj
a=get(handles.edit1,'String')
b=eval(a)
c=asin(b)*180/pi
set(handles.edit1,'String',num2str(c))
jj=1
Arccos函数
globaljj
a=get(handles.edit1,'String')
b=eval(a)
c=acos(b)*180/pi
set(handles.edit1,'String',num2str(c))
jj=1
Arctan函数
globaljj
a=get(handles.edit1,'String')
b=eval(a)
c=atan(b)*180/pi
set(handles.edit1,'String',num2str(c))
jj=1
Arccot函数
globaljj
a=get(handles.edit1,'String')
b=eval(a)
c=acot(b)*180/pi
set(handles.edit1,'String',num2str(c))
jj=1
平方
a=get(handles.edit1,'String')
s1=strcat(a,'^2')
set(handles.edit1,'String',s1)
开方
globaljj
a=get(handles.edit1,'String')
b=sqrt(eval(a))
set(handles.edit1,'String',num2str(b))
jj=1
平方
a=get(handles.edit1,'String')
s1=strcat(a,'^2')
set(handles.edit1,'String',s1)
Log10函数
globaljj
a=get(handles.edit1,'String')
b=eval(a)
c=log10(b)
set(handles.edit1,'String',num2str(c))
jj=1
Log2函数
globaljj
a=get(handles.edit1,'String')
b=eval(a)
c=log2(b)
set(handles.edit1,'String',num2str(c))
jj=1
D.退格键:
通过取屏幕值,计算出其字符长度,然后取其前N-1项的值来实现退格:
globaljj
textString=get(handles.edit1,'String');
if(strcmp(textString,'0.')==1)&(jj==0)
set(handles.edit1,'String','0.');
else
ss=char(textString);
l=length(textString);
textString=ss(1:
l-1);
set(handles.edit1,'String',textString)
end
jj=0;
E.清屏键函数:
set(handles.edit1,'String','')
6.问题和解决方法
在遇到报错的情况下,再按数字键,后面还是会出来数字,按照常理,报错后再按数字,应该只显示数字。
所以在对于数字的编程中,需要加判断语句,使这种情况消失。
如果没按左括号就按右括号则程序应该提示没按左括号,具体方法是在左括号的函数中设置一个全局变量f,按下左括号则f=1,然后在右括号的函数中判断f的值,f=0则表示没按左括号,此时提示没按左括号
7.心得体会
通过本次的课程设计使我加深了对MATLAB在自动控制原理中的应用。
学会了如何画控制系统的原理框图以及在其基础上的模拟和仿真。
在编写程序的过程中,遇到了各种各样的问题,有的是因为考虑不周到,有的则是因为粗心大意。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算器