编写一个计算器程序课程设计报告范例.docx
《编写一个计算器程序课程设计报告范例.docx》由会员分享,可在线阅读,更多相关《编写一个计算器程序课程设计报告范例.docx(19页珍藏版)》请在冰豆网上搜索。
![编写一个计算器程序课程设计报告范例.docx](https://file1.bdocx.com/fileroot1/2023-1/31/899aba8c-23ab-4a9a-93ef-088b3dfe59e6/899aba8c-23ab-4a9a-93ef-088b3dfe59e61.gif)
编写一个计算器程序课程设计报告范例
学号
2016-2017学年第二学期
《金融IT入门-程序设计》
课程设计报告
题目:
用Python编写简易计算器程序
学号:
专业:
班级:
姓名:
指导教师:
中国地质大学长城学院XX系
2017年月3日
1.总体概述:
2.设计目标:
3.程序流程图:
4.程序代码:
5.设计体会:
评分细则
评分项
优秀
良好
中等
差
上课出勤
上课表现
上机情况
平时作业完成情况
期末大作业:
(1)书写认真程度
(2)内容详实程度
(3)文字表达能力
(4)是否体现观点
简短评语
教师签名:
年月日
评分等级
备注
评分等级有五种:
优秀、良好、中等、及格、不及格
1、?
?
?
容
1.?
程?
?
目的:
1)掌握Java?
言的程序?
?
方法;
2)理?
?
系?
?
,?
一步提高?
生的?
件?
?
技?
;
3)培?
?
生分析、解?
?
?
的能力;
4)提高?
生?
?
?
文撰?
能力。
2.?
程?
?
任?
:
1)?
?
的?
算器?
用程序可以完成加法、?
法、乘法、除法以及取余?
算(可以?
行浮?
?
和?
?
的?
算);
2)有求倒?
、退格和清零功能。
3.?
新要求:
能?
行正切、余弦,以及求平方根、指?
(包括?
e)、自然?
?
?
算。
?
形界面采用?
承windowadapter?
,采取?
用?
方法?
注?
?
听!
4.?
?
要求:
1)?
?
的?
算器?
用程序可以完成加法、?
法、乘法、除法和取余?
算。
且有小?
?
、正?
?
、求倒?
、退格和清零功能。
2)?
程?
?
可?
用Eclipse、JBuilder、NetBeans等作?
?
?
平台以提高?
?
效率,通?
?
料查?
和?
?
?
可能熟?
掌握其中一种集成?
?
?
境。
3)?
真按?
完成?
程?
?
?
告,?
程?
?
?
告?
容包括:
?
?
任?
与要求、需求分析、?
?
思路、?
?
?
?
、?
行?
?
与分析?
?
和?
?
体?
与小?
六?
部分。
2、原理与分析
1.?
?
的技?
及功能
本?
程?
?
是要做一?
?
形界面的?
算器,其界面主要是由swing?
件中的控件构成。
程序?
?
了?
算器的基本功能有:
加、?
、乘、除基本算?
?
算(可以?
行浮?
和?
?
?
算)和sin、cos、tan等三角函?
求值?
算,同?
能?
行指?
?
算和自然?
?
?
算,?
有求倒?
、退格和清零功能。
2.?
?
思路
?
?
?
?
?
算器主要是?
考Windows操作系?
中自?
的?
算器,由于?
者水平和?
?
的限制,不能?
?
算器?
?
到科?
型及其他更复?
的?
型,在?
?
?
程中?
?
考了一些其他的优秀?
?
。
但本?
算器除了常用的加?
乘除(可以?
行浮?
和?
?
?
算)?
些基本?
算外,?
有求余、求倒、退格、清零,甚至?
能?
行一些复?
科?
的?
算,比如余弦(cos)、正切(tan)、指?
?
算(pow)、自然?
?
?
算(log)、求平方根(sqrt)以及?
e的指?
?
算(exp),并且?
能?
行?
?
?
算。
?
体上?
?
,本?
算器?
?
?
?
,代?
很少,程序很小,但功能?
很?
大,?
是同?
?
算器所不具?
的。
3.?
?
效果?
?
?
?
先在?
?
界面中添加按?
等控件,后在按?
的actionPerformed事件中添加代?
完成其功能其中?
用了Java?
中的Math函?
?
以及各种字符串操作。
?
?
的界面如下:
?
一?
算器?
行界面
3、?
?
?
程
1.程序思路:
1)本?
用程序?
承自框架?
(JFrame),容器Containerc采用BorderLayout?
?
布局,?
?
行文本框加入到“North¡¨?
域,包含各种按?
的面板JPanelp加入到¡¨Center¡¨?
域。
包含各种按?
的面板JPanelp采用3行6列的网格布局,然后?
?
字按?
和?
算符按?
以及控制按?
用一?
for循?
添加到面板中同?
注?
按?
事件?
听器。
如:
Buttonb=newButton();
b.addActionListener(事件?
听器);
2)事件?
听器中的事件?
理方法voidactionPerformed(ActionEventevt)完成主要的按?
事件的?
理。
事件?
理分以下几种情?
:
?
字按?
事件(¡¨0¡¨,¡¨1¡¨,¡¨2¡¨¡K¡¨8¡¨,¡¨9¡¨)、?
算符按?
事件(¡¨+¡¨,¡¨-¡§,¡¨*¡¨,¡¨/¡¨,¡¨%¡¨)、正?
?
按?
事件(¡¨+/-¡§)、小?
?
按?
事件(¡¨.¡¨)、等?
按?
事件(¡¨=¡¨)、求倒按?
事件(¡¨求倒¡¨)、退格按?
事件(¡¨退格¡¨)、清除按?
事件(¡§C¡¨)、正切(tan)、余弦(cos),以及求平方根(sqrt)、指?
(pow)、?
e的指?
(exp)、?
?
?
算(log)。
3)在事件?
理,触?
按?
事件?
,先判?
是或是?
字是或是“-/+”是或是“.”,是的?
就?
?
?
“-”、?
字、小?
?
“.”分?
?
入文本框并存放在sum中,然后判?
是或是“退格”、“求倒”等,是的?
?
行相?
的?
理,都不是的?
?
跳到doOperation()?
行?
算同?
?
?
算符存放在preOperater中。
触?
按?
事件?
,要?
一步分析,是重新?
始?
算?
触?
的按?
事件?
是?
算中?
触?
的按?
事件。
4)?
算器完成的是一?
?
?
表?
式,如:
3+2,所以可以采用一?
?
?
?
存?
?
字或字符,如3,+,2分?
存?
在?
?
中,最后?
算?
,可以一一取出?
?
行?
算。
5)利用按?
?
?
?
算器的各?
?
算符和操作符,通?
按?
的事件?
理?
?
按?
?
算功能。
6)利用文本框?
示操作?
和?
算?
果。
2.功能?
?
:
1)加?
乘除求余以及指?
?
算
voiddoOperation(){
doublem=Double.parseDouble(x.getText());
if(preOperater.equals(""))sum=m;//?
前一操作,?
果?
?
?
入?
//?
?
果与文本框中的?
据按照前一?
?
算符?
算
if(preOperater.equals("+"))sum=sum+m;//加法?
算
if(preOperater.equals("-"))sum=sum-m;//?
法?
算
if(preOperater.equals("*"))sum=sum*m;//乘法?
算
if(preOperater.equals("/"))sum=sum/m;//除法?
算
if(preOperater.equals("%"))sum=sum%m;//求余
if(preOperater.equals("pow"))sum=Math.pow(sum,m);//求?
,指?
?
算
}
2)其他?
算
Ⅰ、求平方根
Voidsqrt(){
doublem=Double.parseDouble(x.getText());
if(m<0)
x.setText("?
?
不能?
根?
");
else
x.setText(""+Math.sqrt(m));
}
Ⅱ、?
?
?
算
Voidlog(){
doublem=Double.parseDouble(x.getText());
if(m<0)
x.setText("?
?
不能?
行自然?
?
?
算");
else
x.setText(""+Math.log(m));
}
Ⅲ、余弦?
算
Voidcos(){
doublem=Double.parseDouble(x.getText());
x.setText(""+Math.cos(m));
}
Ⅳ、正切?
算
Voidtan(){
doublem=Double.parseDouble(x.getText());
x.setText(""+Math.tan(m));
}
Ⅴ、e的指?
?
算
Voidexp(){
doublem=Double.parseDouble(x.getText());
x.setText(""+Math.exp(m));
}
Ⅵ、倒?
?
算
Voiddaoshu(){
if(Double.parseDouble(x.getText())==0)
x.setText("除?
不能?
零");
else{
x.setText(""+1/(Double.parseDouble(x.getText())));
preOperater="";
}
}
3)主要方法?
明
publiccos(doublex)//求x的余弦函?
publictan(doublex)//求x的正切函?
publicsqrt(doublex)//求x的平方根
publiclog(doublex)//求x的自然?
?
?
算
publicexp(doublex)//求e的x次?
publicpow(doublea,doubleb)//求a的b次?
publicdaoshu(doublex)//求x的倒?
4)程序流程?
3.算法思路:
?
是一?
?
?
的?
算器,里面所涉及到的功能就是加、?
、乘、除、?
方?
算、等基本功能。
?
?
定?
?
?
?
量?
保存?
?
算操作的前一?
?
和?
前在?
算器上?
示的?
字即可,而?
于?
?
算的操作要求更加?
?
,只需要一?
?
量就可以了。
?
然?
?
据?
行判?
是必不可少的。
在?
入?
据之后Character.isDigit(Command.charAt(0))判?
?
入的?
据是否符合要求。
不符合要求?
出提示,符合要求以后?
判?
?
?
的?
算符,?
行相?
的操作。
?
于?
?
算操作要?
一步判?
是否符合要求,如果是就?
入下步?
算,如果不是就?
出相?
的提示:
“?
?
不能?
根?
";"除?
不能?
零";用try….catch
捕?
异常,如果有异常?
中止活?
。
在?
行?
方(sqrt)?
算?
,如果?
入?
?
?
?
,?
?
出"?
?
不能?
根?
",中止?
算。
在?
行自然?
?
?
算?
(log)如果?
入?
?
?
?
,?
?
出"?
?
不能?
行自然?
?
?
算”。
在?
行三角函?
?
算?
(cos、tan)不必考?
?
入的?
字是否符合?
范,?
于任意?
入的?
函?
本身有一?
判?
的?
程,都能把?
入的?
?
化?
合适的范?
,?
而得到正确的?
果。
?
于加?
乘除等?
?
算操作,每?
功能都由每一?
模?
?
?
?
,?
按下加按?
?
,?
行相?
的加法操作,?
一?
?
相?
的操作?
?
有要求;?
?
?
?
?
?
,?
?
行?
法操作,由jTextField.getText()得到?
字按?
的值?
示在相?
的文本框中;乘法操作在?
?
一?
操作?
然后?
?
乘?
再?
?
另一?
?
得出相?
的?
果?
示在文本框中;在作除法?
算?
,?
被除?
?
?
?
零?
,?
用catch?
行异常?
理,?
出“Infinity”。
4.?
据分析:
在事件?
理,触?
按?
事件?
,先判?
是或是?
字是或是“-/+”是或是“.”,是的?
就?
?
?
“-”、?
字、小?
?
“.”分?
?
入文本框并存放在sum中,然后判?
是或是“退格”、“求倒”等,是的?
?
行相?
的?
理,都不是的?
?
跳到doOperation()?
行?
算同?
?
?
算符存放在preOperater中。
触?
按?
事件?
,要?
一步分析,是重新?
始?
算?
触?
的按?
事件?
是?
算中?
触?
的按?
事件。
四、?
?
?
果与分析
?
?
行?
?
1)?
行加?
乘除求余以及指?
?
算
?
?
?
的浮?
加法?
算(例:
-1.2+4=2.8)
依次按“+/-”(也可以最后按),“1.2”,“+”,“4”?
按下“+”?
按下“4”?
按下“=”?
分析:
?
出的?
果如?
所示,?
算器可以直接?
入“-”,?
算比?
?
便,?
?
?
的浮?
?
加法做起?
?
有?
?
。
2)求倒
先?
入1.25,再按下“求倒”?
分析:
?
出的?
果如?
所示,倒?
功能?
?
,?
算?
,不?
是?
果,?
入的?
据同?
可以先?
?
倒?
功能后再?
行相?
的?
算,?
有影?
!
3)退格
?
入?
字1265
按下“退格”?
分析:
?
出的?
果如?
所示,本?
算器退格?
有一?
特?
是,就算是是?
算后得出的?
果也能?
?
退格,缺?
是不能很好的?
理小?
?
的?
?
,因?
小?
?
也是字符串的一部分。
4)清零
按下“c”?
分析:
?
出的?
果如?
所示,按清零?
后?
据全部消除。
5)求余弦、求正切、?
e求?
、求平方根、求自然?
?
、求倒?
算
(例:
cos30)先按下“30”?
再按下“cos”?
6)?
?
?
算(例:
2*3*4=24.0)
依次按下“3”、“*”、“4”、“/”、“6”、“=”?
7)异常?
理(例:
求倒?
?
入?
?
0)
先按“0”?
再按“求倒”?
5、?
?
体?
与小?
作?
一名?
算机科?
与技?
?
?
的?
生,我?
得能做?
似的?
程?
?
是十分有意?
,而且是十分必要的。
?
?
一段?
?
的努力,?
算器?
程?
?
?
于?
束了,?
然很忙碌、很疲?
,但是收?
很大。
?
些天我几乎每天的?
注和辛?
,?
回了我?
Java?
?
?
言的重新的?
?
,?
Java?
?
?
程?
言也有了深刻的理解。
?
然在本次?
程?
?
的?
程中,我碰到了很多?
?
,比如求倒?
,最先我是把按?
新建成“1/x”,但是出?
?
?
,怎么找都?
找出?
?
?
,其后重新整理思?
才?
?
不能?
成“1/x”,因?
“1/x”中第一?
字符是?
字,而Character.isDigit(Command.charAt(0))?
?
“1/x”?
做?
字?
?
入文本框。
?
有就是?
?
退格功能?
不知道怎?
?
理,最后上网XX了一下才找到了方法,?
也?
我深刻体?
到了网?
的作用。
?
然?
遇到了其他的困?
,?
些花?
了我很多?
?
,使我失?
了很多次,但是通?
我?
不解的努力?
是一一克服了?
些?
?
,最?
?
是成功了。
?
然在?
次?
?
中也暴露自己一些?
?
,?
?
了自己的很多不足,自己知?
的很多漏洞,基?
知?
的不牢固,看到了自己的?
?
?
?
?
是比?
缺乏,理?
?
系?
?
的能力?
急需提高。
?
次?
程?
?
,除了全面系?
的理解了JAVA面向?
象?
程原理的一般原理和基本?
?
方法,?
把死板的?
本知?
?
得生?
有趣,激?
了?
?
的?
极性。
把?
?
的?
程原理的知?
?
化,把?
堂上?
的知?
通?
自己?
?
的程序表示出?
,?
加深了?
理?
知?
的理解。
?
程?
?
中程序比?
复?
,在?
?
?
?
?
仔?
,在程序?
?
?
,注意?
力?
找程序中存在的不足之?
,?
而使功能更加完善。
?
然在做?
程?
?
要有很大的耐心,做的?
程就是不?
的?
?
—修改—?
?
?
程,只有?
下心?
才能把?
?
解?
。
6、?
考文?
[1]於?
?
等《Java程序?
?
与?
用?
?
》(第二版)清?
大?
出版社2009.5
[2]BruceEckel《Java?
程思想》机械工?
出版社2007.6
[3]?
?
林等《Java?
言最新?
用案例教程》(第2版)清?
大?
出版社2010.7
7、源程序
importjava.util.*;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassCalculaterextendsJFrameimplementsActionListener{
JTextFieldx;//文本框
StringpreOperater="";//上一次的?
算符
doublesum=0;//?
算?
果
publicCalculater(Stringtitle){
super(title);
Containerc=getContentPane();//容器
c.setLayout(newBorderLayout());//容器采用?
?
布局
x=newJTextField(50);
c.add("North",x);
Stringbuttoned[]={"0","1","2","3","+/-",".","C","退格","求倒","4","5","6","7","+","-","*","/","%","8","9","=","sqrt","pow","log","cos","tan","exp"};
JPanelp=newJPanel();//面板
p.setLayout(newGridLayout(3,9,10,10));//面板采用行列?
3,6的网格布局
for(intk=0;kfor循?
?
按?
添加?
面板并注?
?
听器
JButtonb=newJButton(buttoned[k]);
p.add(b);
b.addActionListener(this);
}
c.add("Center",p);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//?
?
用?
事件,根据?
?
按?
?
?
相?
操作
publicvoidactionPerformed(ActionEvente){
StringCommand=e.getActionCommand();
try{
if(Character.isDigit(Command.charAt(0))){//如果按?
事件?
?
字?
x.setText(x.getText()+Command);//添加?
字
}
elseif(Command.equals(".")){//如果按?
事件?
"."?
xiaoshu();
}
elseif(Command.equals("+/-")){//如果按?
事件?
"+/-"?
fuhao();
}
elseif(Command.equals("退格")){//如果按?
事件?
"退格"?
backspace();
}
elseif(Command.equals("=")){//如果按?
事件?
"="?
dengyu();
}
elseif(Command.equals("sqrt")){//如果按?
事件?
"sqrt"?
sqrt();
}
elseif(Command.equals("log")){//如果按?
事件?
"log"?
log();
}
elseif(Command.equals("cos")){//如果按?
事件?
"cos"?
cos();
}
elseif(Command.equals("tan")){//如果按?
事件?
"tan"?
tan();
}
elseif(Command.equals("exp")){//如果按?
事件?
"exp"?
exp();
}
elseif(Command.equals("求倒")){//如果按?
事件?
"求倒"?
qiudao();
}
elseif(Command.equals("C")){//如果按?
事件?
"C"?
clear();
}
else{doOperation();//?
?
?
算符和?
入的?
字
x.setText("");
preOperater=Command;
}
}catch(Exceptionex){sum=0;x.setText("");}
}
voidxiaoshu(){//添加小?
?
Strings=x.getText();
if(s.indexOf(".")==-1)
x.setText(s+".");
}
voidfuhao(){//添加?
?
Strings=x.getText();
if(s.indexOf("-")==-1)
x.setText("-"+x.getText());
}
voidbackspace(){//退格
Strings=x.getText();
if(s.length()>0)
x.setText(s.substring(0,s.length()-1));//?
除最后一?
字符
}
voiddengyu(){//等?
,?
示?
算?
果
doOperation();
x.setText(""+sum);
preOperater="";
}
voidsqrt(){//求?
?
的平方根
doublem=Double.parseDouble(x.getText());
if(m<0)
x.setText("?
?
不能?
根?
");
else
x.setText(""+Math.sqrt(m));
}
voidlog(){//求?
?
的自然?
?
doublem=Double.parseDouble(x.getText());
if(m<0)
x.setText("?
?
不能?
行自然?
?
?
算");
else
x.setText(""+Math.log(m));
}
voidcos(){//求?
?
的余弦
doublem=Double.parseDouble(x.getText());
x.setText(""+Math.cos(m));
}
voidtan(){//求?
?
的正切
doublem=Double.parseDouble(x.getText());
x.setText(""+Math.tan(m));
}
voidexp(){//求e的?
doublem=Double.parseDouble(x.getText());
x.setText(""+Math.exp(m));
}
voidqiudao(){//求倒
if(Double.parseDouble(x.getText())==0)
x.setText("除?
不能?
零");
else{
x.setText(""+1/(Double.parseDouble(x.getText())));
preOperater="";
}
}
voidclear(){//清零
sum=0;
x.setText("");
preOperater="";
}
//根据?
?
的?
算符?
前面?
?
的?
果sum与文本框中的?
据?
行?
算
voiddoOperation(){
doublem=Double.parseDouble(x.getText());
if(preOperater.equals(""))sum=m;
//?
?
果与文本框中的?
据按照前一?
?
算符?
算
if(preOperater.equals("+"))sum=sum+m;//加法?
算
if(preOperater.equals("-"))sum=sum-m;//?
法?
算
if(preOperater.equals("*"))sum=sum*m;//乘法?
算
if(preOperater.equals("/"