1、 课程设计报告题 目 数学计算器的开发 课 程 名 称 软件设计 院 部 名 称 机电工程学院 专 业 自动化 班 级 学 生 姓 名 学 号 课程设计地点 课程设计学时 指 导 教 师 金陵科技学院教务处制成绩一、课程设计应达到的目的本课程是为自动化专业本科生开设的专业课程设计课。通过本课程的课程设计实践帮助学生巩固关于数据结构、算法、程序设计的基础知识。通过本课程设计,学生可以初步掌握开发一个小型实用系统的基本方法,提高运用编程软件实现 GUI 程序设计的能力。二、 课程设计的基本要求:要求利用 MATLAB 设计实现一个图形用户界面的计算器程序,要求实现:A. 具有友好的用户图形界面。实
2、现十进制数的加、减、乘、除、乘方、取模等简单计算。 (必做)B. 科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行。 (必做)C. 能够保存上次历史计算的答案,先是答案存储器中得内容。 (必做)D. 有清除键,能清除操作,并对不正确的表达式能指出其错误原因。 (必做) E. 独立存储器功能,使之可以直接输入存储器,可与存储器中的数值相加减。能够清除独立存储器中的内容。 (选做)利用 MATLAB GUI 功能,在绘制一个静态文本框和一个文本编辑框,以及命令按钮,调整好各控件大小、颜色,整体布局如图所示:然后通过双击个按钮来改写其属性,在 m 文件中编写其回
3、调函数,最后在运行调试。三、课题设计内容与步骤3.1 各功能界面设计GUI 设计界面:3.2 各功能模块实现算法设计:A. 数字键设计:09 以及小数点函数都一样,只是参数不同:textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,1) ;elsetextString =strcat(textString,1);set(handles.edit1,String,textString)endB. 四则运算函数:textString = get(handles.edit1,
4、String);ss=char(textString);l=length(textString);if(ss(l)=+|ss(l)=-|ss(l)=*|ss(l)=/|ss(l)=.)textString=ss(1:l-1);endtextString =strcat(textString,+);set(handles.edit1,String,textString)C. 科学计算函数:textString = get(handles.edit1,String);a = strread(textString, %f);a=sin(a);set(handles.edit1,String,a)D.
5、 退格键:通过取屏幕值,计算出其字符长度,然后取其前 N-1 项的值来实现退格:textString = get(handles.edit1,String);if(strcmp(textString,0)=1)elsess=char(textString);l=length(textString);textString=ss(1:l-1);set(handles.edit1,String,textString)E. 清屏键函数:set(handles.edit1,String,0) ;F. +/-的实现textString = get(handles.edit1,String);if(strc
6、mp(textString,0)=1)set(handles.edit1,String,0) ;elsea = strread(textString, %f);a=0-a;set(handles.edit1,String,a)end3.3 各模块实现结果A. 数字键:B. 四则运算函数:C. 科学计算函数:Sin1 的计算结果=3.4、结果分析计算(1+9)/5计算结果=2计算 3*4计算结果=12arcsin1 计算结果的报错:通过输入的数据与 0字符比较,若两者相等,则显示0log2“error”进行报错,结果如下:经过计算,这些结果均与实际结果相吻合,计算器的功能实现的较为完好。四、课程
7、设计源代码A. 数字键设计:按键“0” :通过 get 函数获得输入的字符,函数 strcat 获得字符0,并用set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,0) ;elsetextString =strcat(textString,0);set(handles.edit1,String,textString)end按键“1” :通过 get 函数获得输入的字符,函数 strcat 获得字符1,并用set 函数进行显示输出textStri
8、ng = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,1) ;elsetextString =strcat(textString,1);set(handles.edit1,String,textString)end按键“2” :通过 get 函数获得输入的字符,函数 strcat 获得字符2,并用set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,S
9、tring,2) ;elsetextString =strcat(textString,2);set(handles.edit1,String,textString)End按键“3” :通过 get 函数获得输入的字符,函数 strcat 获得字符3,并用set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,3) ;elsetextString =strcat(textString,3);set(handles.edit1,String,text
10、String)end按键“4” :通过 get 函数获得输入的字符,函数 strcat 获得字符4,并用set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,4) ;elsetextString =strcat(textString,4);set(handles.edit1,String,textString)end按键“5” :通过 get 函数获得输入的字符,函数 strcat 获得字符5,并用set 函数进行显示输出textString =
11、 get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,5) ;elsetextString =strcat(textString,5);set(handles.edit1,String,textString)end按键“6” :通过 get 函数获得输入的字符,函数 strcat 获得字符6,并用set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,Strin
12、g,6) ;elsetextString =strcat(textString,6);set(handles.edit1,String,textString)end按键“7” :通过 get 函数获得输入的字符,函数 strcat 获得字符7,并用set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,7) ;elsetextString =strcat(textString,7);set(handles.edit1,String,textStri
13、ng)end按键“8” :通过 get 函数获得输入的字符,函数 strcat 获得字符8,并用set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,8) ;elsetextString =strcat(textString,8);set(handles.edit1,String,textString)end按键“9” :通过 get 函数获得输入的字符,函数 strcat 获得字符9,并用set 函数进行显示输出textString = get
14、(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,9) ;elsetextString =strcat(textString,9);set(handles.edit1,String,textString)endB. 四则运算函数:按键“+” :通过 get 函数获得输入的字符,函数 strcat 获得字符+,并用set 函数进行显示输出textString = get(handles.edit1,String);ss=char(textString);l=length(textString);if
15、(ss(l)=+|ss(l)=-|ss(l)=*|ss(l)=/|ss(l)=.)textString=ss(1:l-1);endtextString =strcat(textString,+);set(handles.edit1,String,textString)按键“-” :通过 get 函数获得输入的字符,函数 strcat 获得字符-,并用set 函数进行显示输出textString = get(handles.edit1,String);ss=char(textString);l=length(textString);if(ss(l)=+|ss(l)=-|ss(l)=*|ss(l)
16、=/|ss(l)=.)textString=ss(1:l-1);endtextString =strcat(textString,-);set(handles.edit1,String,textString)按键“*” :通过 get 函数获得输入的字符,函数 strcat 获得字符*,并用set 函数进行显示输出textString = get(handles.edit1,String);ss=char(textString);l=length(textString);if(ss(l)=+|ss(l)=-|ss(l)=*|ss(l)=/|ss(l)=.)textString=ss(1:l-1
17、);endtextString =strcat(textString,*);set(handles.edit1,String,textString)按键“/” :通过 get 函数获得输入的字符,函数 strcat 获得字符/,并用set 函数进行显示输出textString = get(handles.edit1,String);ss=char(textString);l=length(textString);if(ss(l)=+|ss(l)=-|ss(l)=*|ss(l)=/|ss(l)=.)textString=ss(1:l-1);endtextString =strcat(textSt
18、ring,/);set(handles.edit1,String,textString)按键“.” :通过 get 函数获得输入的字符,函数 strcat 获得字符.,并用set 函数进行显示输出textString = get(handles.edit1,String);ss=char(textString);l=length(textString);if(ss(l)=+|ss(l)=-|ss(l)=*|ss(l)=/|ss(l)=.)textString=ss(1:l-1);endtextString =strcat(textString,.);set(handles.edit1,Stri
19、ng,textString)按键“+/-” :通过 get 函数获得输入的字符,函数 strcat 获得字符+/-,并用 set 函数进行显示输出if(strcmp(textString,0)=1)set(handles.edit1,String,0) ;elsea = strread(textString, %f);a=0-a;set(handles.edit1,String,a)endC. 科学计算函数:按键“sin” :通过 get 函数获得输入的字符,函数 strread 获得输入字符,并用 sin 函数计算结果,set 函数进行显示输出textString = get(handles
20、.edit1,String);a = strread(textString, %f);a=sin(a);set(handles.edit1,String,a)按键“cos”通过 get 函数获得输入的字符,函数 strread 获得输入字符,并用cos 函数计算结果,set 函数进行显示输出textString = get(handles.edit1,String);a = strread(textString, %f);a=cos(a);set(handles.edit1,String,a)按键“tan”:通过 get 函数获得输入的字符,函数 strread 获得输入字符,并用 tan 函
21、数计算结果,set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,1.57)=1)|(strcmp(textString,-1.57)=1)set(handles.edit1,String,inf);elsea = strread(textString, %f);a=tan(a);set(handles.edit1,String,a)end按键“cot” :通过 get 函数获得输入的字符,函数 strread 获得输入字符,并用 cot 函数计算结果,set 函数进行显示输出textString = g
22、et(handles.edit1,String);if(strcmp(textString,3.14)=1)|(strcmp(textString,0)=1) |(strcmp(textString,-3.14)=1);set(handles.edit1,String,inf);elsea = strread(textString, %f);a=cot(a);set(handles.edit1,String,a)end按键“arcsin” :通过 get 函数获得输入的字符,函数 strread 获得输入字符,并用 arcsin 函数计算结果,set 函数进行显示输出textString =
23、get(handles.edit1,String);a = strread(textString, %f);a=arcsin(a);set(handles.edit1,String,a)按键“arccos” :通过 get 函数获得输入的字符,函数 strread 获得输入字符,并用 arccos 函数计算结果,set 函数进行显示输出textString = get(handles.edit1,String);a = strread(textString, %f);a=arccos(a);set(handles.edit1,String,a)按键“arctan” :通过 get 函数获得输入
24、的字符,函数 strread 获得输入字符,并用 arctan 函数计算结果,set 函数进行显示输出textString = get(handles.edit1,String);a = strread(textString, %f);a=arctan(a);set(handles.edit1,String,a)按键“arccot” :通过 get 函数获得输入的字符,函数 strread 获得输入字符,并用 arccot 函数计算结果,set 函数进行显示输出textString = get(handles.edit1,String);a = strread(textString, %f);
25、a=arccot(a);set(handles.edit1,String,a)按键“log2” :通过 get 函数获得输入的字符,函数 strread 获得输入字符,并用 log2 函数计算结果,set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,error) ;elsea = strread(textString, %f);a=log2(a);set(handles.edit1,String,a)end按键“log10” :通过 get 函
26、数获得输入的字符,函数 strread 获得输入字符,并用 log10 函数计算结果,set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,error) ;elsea = strread(textString, %f);a=sin(a);set(handles.edit1,String,a)end按键“x2” :通过 get 函数获得输入的字符,函数 strread 获得输入字符,并用语句 a=a*a 计算结果,set 函数进行显示输出textS
27、tring = get(handles.edit1,String);a = strread(textString, %f);a=a*a;set(handles.edit1,String,a)按键“”:通过 get 函数获得输入的字符,函数 strread 获得输入字符,并用sqrt 函数计算结果,set 函数进行显示输出textString = get(handles.edit1,String);if(strcmp(textString,0)=1)set(handles.edit1,String,0) ;elsea = strread(textString, %f);a=sqrt(a);set
28、(handles.edit1,String,a)endD. 退格键:通过取屏幕值,计算出其字符长度,然后取其前 N-1 项的值来实现退格:textString = get(handles.edit1,String);if(strcmp(textString,0)=1)elsess=char(textString);l=length(textString);textString=ss(1:l-1);set(handles.edit1,String,textString)E. 清屏“C”键函数:将所有的字符置为0set(handles.edit1,String,0) ;F.“=”的实现:通过 ge
29、t 函数获得输入的字符,并用 eval 函数计算结果,set 函数进行显示输出a=get(handles.edit1,string)b=eval(a)set(handles.edit1,string,num2str(b)四、问题和解决方法本次课程设计中遇到的最大问题是数据进行清零后,再输入其他的数据,清零后的字符0仍会保留,会影响其他数据,解决办法是在要输入的数字比如1的程序中加入判断程序: if(strcmp(textString,0)=1)set(handles.edit1,String,1) ;那么问题就解决了.五、 心得体会本次课程设计相对比较简单,主要是对一些数字,例如 1-9 的代码程序的了解以及一些简单运算比如+ -*/sin ,cos ,tan 等等的代码程序的了解,在设计的过程中也遇到不少的问题,当遇到这些问题时,经过及时的与同学以及老师的交流,最终都能顺利地解决。这次课程设计,使我进一步加深了对课本知识的了解和掌握,巩固了所学的基本知识,让我在学习的过程中不断地提高自己,锻炼自己。