1、华东交通大学课程设计课程设计题目:计算器设计 课 程: Java程序设计 题 目: 计算器设计 年 级: 级 专 业: 信息一班 学 号: 姓 名: 组 员: 指导老师: 课程设计(论文)任务书 基础 学院信息和计算科学 专业1班 一、课程设计(论文)题目计算器设计 二、课程设计(论文)工作自 年 6 月23日起至 年6月 27日止。三、课程设计(论文) 地点: 计算机中心 四、课程设计(论文)内容要求:1本课程设计目标(1)使学生掌握系统各功效模块基础工作原理; (2)掌握Java基础编程原理和基础编程方法; (3)使学生学会系统调试;(4)培养学生分析、处理问题能力;(5)提升学生软件文档
2、写作能力和团体合作精神。 2课程设计任务及要求1)基础要求:(1)分析系统各功效模块工作原理;(2)提出系统设计方案; (3)对所进行编程、调试、修改。 2)创新要求: 在基础要求达成后,可进行创新设计,如:用虚函数,文件流,重载流插入运算符等。 3)课程设计论文编写要求(1)要根据书稿规格打印誊写设计论文;(2)论文包含目录、摘要、正文、总结等;(3)毕业论文装订按学校统一要求完成。4)答辩和评分标准: (1)达成课程设计目标和要求,程序可读性很好,并调试正确,60分;(2)能正确回复老师所提问题,可增加10分;(3)课程设计汇报书写规范整齐,可增加10分;(4)心得体会认真总结,可增加10
3、分;(5)程序有创新性,可增加10分;成绩评定实施优异、良好、中等、及格和不及格五个等级。不及格者需重做。5)参考文件:(1)丁振凡.J ava语言程序设计 清华大学出版社 (2)丁振凡.J ava语言程序设计试验指导和习题解析清华大学出版社(3)http:/ /6)课程设计进度安排内容 天数 地点总体需求和分析构思及搜集资料 1 图书馆各模块编程实现,调试和修改 3 机房撰写论文和答辩 1 图书馆,机房学生署名: 年6 月18 日课程设计(论文)评审意见(1)态度评价(20分):优()、良()、中()、通常()、差(); (2)任务难度(20分):优()、良()、中()、通常()、差();
4、(3)设计分析(20分):优()、良()、中()、通常()、差();(4)创新性评价(20分):优()、良()、中()、通常()、差();(5)回复问题(20分):优()、良()、中()、通常()、差();(6)论文格式规范性及考勤是否降等级:是()、否( ) 评阅人署名: 职称: 教授 年6 月25日目录第1章 系统概要- 1 -1.1系统介绍- 1 -1.2 基础功效要求- 1 -第2章 设计思绪和算法- 2 -2.1 应用基础工作步骤- 2 -2.2 类设计- 3 -2.3 应用界面设计- 3 -2.4 事件处理原理、具体设计- 3 -2.5 算法考虑- 4 -第3章 源程序代码- 5
5、-第4章 运行结果及分析- 15 -第5章 心得体会- 17 -5.1系统需要完善地方- 17 -5.2课程设计感想- 17 -参考文件- 17 -第1章 系统概要1.1系统介绍 编写一个简易计算器,实现Windows计算器关键功效。此次课程设计就是利用java语言来编写简单计算器应用程序,模拟Windows计算器功效,能进行加、减、乘、除四则算术运算和求倒数、求平方根等简单函数运算,且有小数点、清零和存放等功效。1.2基础功效要求经过计算器设计,掌握Java编程基础知识点。(1)掌握基于AWT图形用户界面设计,如常见布局设计,容器中面板、按钮、文本框等组件添加和布局。(2)掌握图形界面事件处
6、理方法,注册动作事件监听者。(3)掌握各类功效实现思绪,及程序表示。熟悉实例变量、类变量和局部变量差异。(4)掌握方法封装和调用。尽可能将反复用到一段功效设计为方法。(5)掌握if和switch等语句使用。(6)掌握怎样给按钮设置颜色及给页面背景设计颜色。(7)掌握java中“对象”和“类”知识,类设计及组员控制访问第2章 设计思绪和算法2.1 应用基础工作步骤1. 打开命令提醒符和记事本;2. 输入源程序代码;3. 保留并运行源程序;4. 运行,检验是否有误;5. 修改错误并再次运行;6. 测试计算器工作情况。2.2 类设计此次计算器设计,关键用到是GUI编程相关方法。所以我们所用到类和方法
7、关键有:主类:Calculation类继承父类为WindowAdapter类,实现了ActionListener接口,定义了一个窗体f和多个面板,按钮和文本框。(1)方法名:display方法作用:构建计算器主界面在方法display中,定义了窗体标题,设置了窗体大小并经过setVisible(true)方法使窗体可见,setBackground()方法设置背景颜色,setResizable(false)方法使窗体大小不可变。用setLayout()方法给容器指定按BorderLayout布局排列部件: 经过容器add()方法将面板放置在North区域:f.add(p5,BorderLayou
8、t.NORTH),经过add方法用来向面板中加入部件。添加GUI部件并给各个部件各自不一样标识,创建中间面板时,如面板p1,p1=new Panel(new GridLayout(1,3,5,5),设置为GridLayout布局,再用add方法把按钮全部加进去,按(1,3,5,5)方法排列经过按钮对象addActionListener方法为其注册事件监听处理者。 (2)方法名:actionPerformed方法作用:设置各个GUI部件事件处理在 actionPerformed方法中,分别设置了不一样按钮操作事件,当不一样按钮单击发生动作时自动调用实施对应动作,从而实现计算器多个运算功效。经过e
9、.getActionCommand()取得按钮事件对象命令名,再在if语句中依据操作命令符按情况分别处理事件,进行对应运算。经过setText()方法将结果转化为数字串写入文本输入框中。事件监听器中事件处理方法void actionPerformed(ActionEvent e)完成关键按钮事件处理。事件处理分以下多个情况:数字按钮事件(“0”,“1”,“2”,“3”“8”,“9”),小数点按钮事件(“.”),运算符按钮处理事件(“+”,“-”,“*”,“/”),正负号按钮事件(“+/-”),退格按钮事件(“Backspace”),清除按钮事件(“C”),等号按钮事件(“=”),存放按钮事件(
10、“MS”,“MC”,“MR” ,“M+”)等。(3)方法名:main方法在该方法中,经过new运算符创建一个类Calculation对象Cal,经过调用display()方法。(4)方法名:windowClosing方法在该方法中,在处理窗体“关闭”事件监听者采取继承WindowsAdapter方法。2.3 应用界面设计参考了windows计算器布局,我们把总体界面采取BorderLayout布局,文本框所在面板p5在最上方(North区域),存放按钮及显示M状态文本框所在面板p3在最左边(West区域),而Backspace,CE,C所在面板p1和数字按钮、运算符按钮等所在面板p2放置在面板
11、p4中,面板p4统一分布在中央(Center区域),同时面板中又按GridLayout布局分布多行多列。具体以下图所表示。2.4 事件处理原理、具体设计首先,对计算器整体布局构思清楚,将整个计算器分成多行多列组成单元,使得整个计算器布局愈加合理、有序。采取网格块布局,整体分为6行,第一行为输入及显示框,第二行为退格键和清零键,下面几行分别为数字按钮和运算符按钮,和MC,MR,MS,M+等存放按钮。第二,设计依次添加GUI部件。第三,为各个部件注册监听者,考虑到数字键,运算符,等于,小数点,求平方根等不一样和程序调理清楚,我们分别为其设置了不一样监听者。第四,设置对应各类算法。第五,设置主程序和
12、退出方法。在编写完源程序代码后,进行运行,发觉错误并更正。最终,测试制作计算器运行情况即计算能力。动作事件各方关系,结合代码大致以下图所表示:2.5 算法考虑在 actionPerformed方法中,分别设置了不一样按钮操作事件,当不一样按钮单击发生动作时自动调用实施对应动作,从而实现计算器多个运算功效。数字按钮和其它按钮作为事件源全部注册了监听者,且监听者符合ActionListener接口要求。数据和运算符键入经过点击按钮来触发事件,在按下“=”按钮时经过调用之前按下对应运算符所表示运算函数进行运算,将所结果保留在dResult中,并显示在文本框内。求平方根、求倒数等运算时,调用了Math
13、类方法进行运算。当输入小数时,将小数点拼接到数字串中。按下清除按钮时,变量初始化。第3章 源程序代码/用JAVA编写简易计算器程序(模拟Windows计算器)import java.awt.*;import java.awt.event.*;public class Calculation extends WindowAdapter implements ActionListener double dResult=0; double dNowInput=0; double dMemory; /记载内存中存放数据 int n=0; /记载小数位数 int nOperation=1; / 统计运算
14、符类型 int nBitsNum=0; /统计总共输入位数 boolean alreadyHaveDot=false; /是否已经有小数点 boolean keyAvailable=true; boolean alreadyClickedEqueal=false; /是否已经按下过=按钮 boolean isTempNowInput=false; /是否在计算出结果后直接按运算符将结果赋给了目前输入值 Frame f; Panel p1,p2,p3,p4,p5,p6; TextField tf1,tf2; Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0; Button
15、 bDiv,bSqrt,bMulti,bMinus,bPercent,bPlus,bReciprocal,bEqual,bDot,bNegative; Button bBackspace,bCE,bC,bMR,bMS,bMC,bM; public void display() f=new Frame(计算器); f.setSize(280,213); f.setLocation(200,200); f.setBackground(Color.LIGHT_GRAY); f.setResizable(false); f.setLayout(new BorderLayout(3,3); /采取方位布
16、局排列部件 p1=new Panel(new GridLayout(1,3,5,5); /用于存放Backspace,CE,C三键 p2=new Panel(new GridLayout(4,5,5,5); /用于存放数字区及周围共20键 p3=new Panel(new GridLayout(5,1,5,5); /用于存放MC,MR,MS,M+键及显示M状态文本框 p4=new Panel(new FlowLayout(); /用于存放p1,p2 p5=new Panel(new FlowLayout(); p6=new Panel(new FlowLayout(); p4.add(p1);
17、 p4.add(p2); tf1=new TextField(35); /存放显示区 tf1.setText(0.); tf1.setEditable(false); /判定输入框是否可编辑,非编辑状态不能输入数据 p5.add(tf1); f.add(p5,BorderLayout.NORTH); f.add(p4,BorderLayout.CENTER); f.add(p3,BorderLayout.WEST); b1=new Button(1); /数字按钮 b2=new Button(2); b3=new Button(3); b4=new Button(4); b5=new Butt
18、on(5); b6=new Button(6); b7=new Button(7); b8=new Button(8); b9=new Button(9); b0=new Button(0); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); b5.addActionListener(this); b6.addActionListener(this); b7.addActionListener(this); b8.addA
19、ctionListener(this); b9.addActionListener(this); b0.addActionListener(this); bDiv=new Button(/); /运算符按钮 bSqrt=new Button(sqrt); bMulti=new Button(*); bMinus=new Button(-); bPercent=new Button(%); bPlus=new Button(+); bReciprocal=new Button(1/x); bEqual=new Button(=); bDot=new Button(.); bNegative=ne
20、w Button(+/-); bDiv.addActionListener(this); bSqrt.addActionListener(this); bMulti.addActionListener(this); bMinus.addActionListener(this); bPercent.addActionListener(this); bPlus.addActionListener(this); bReciprocal.addActionListener(this); bEqual.addActionListener(this); bDot.addActionListener(thi
21、s); bNegative.addActionListener(this); p2.add(b7); /将按钮依次添加到面板 p2.add(b8); p2.add(b9); p2.add(bDiv); p2.add(bSqrt); p2.add(b4); p2.add(b5); p2.add(b6); p2.add(bMulti); p2.add(bPercent); p2.add(b1); p2.add(b2); p2.add(b3); p2.add(bMinus); p2.add(bReciprocal); p2.add(b0); p2.add(bNegative); p2.add(bDo
22、t); p2.add(bPlus); p2.add(bEqual); bBackspace=new Button(Backspace); bCE=new Button(CE); bC=new Button(C); bBackspace.addActionListener(this); bCE.addActionListener(this); bC.addActionListener(this); p1.add(bBackspace); p1.add(bCE); p1.add(bC); tf2=new TextField(2); tf2.setEnabled(false); tf2.setBac
23、kground(Color.LIGHT_GRAY); bMC=new Button(MC); bMR=new Button(MR); bMS=new Button(MS); bM=new Button(M+); bMC.addActionListener(this); bMR.addActionListener(this); bMS.addActionListener(this); bM.addActionListener(this); p6.add(tf2); p3.add(p6); p3.add(bMC); p3.add(bMR); p3.add(bMS); p3.add(bM); f.s
24、etVisible(true); f.addWindowListener(this); public void actionPerformed(ActionEvent e) /key 0 to 9if(this.keyAvailable&e.getActionCommand().length()=1&e.getActionCommand().compareTo(0)=0 & e.getActionCommand().compareTo(9)=0) if(this.isTempNowInput) this.dNowInput=0; this.isTempNowInput=false; this.
25、nBitsNum+; if(this.alreadyHaveDot=false) this.dNowInput=this.dNowInput*10+Double.parseDouble(e.getActionCommand(); else double temp=Double.parseDouble(e.getActionCommand(); for(int i=this.n;i=0) this.dResult=Math.sqrt(this.dResult); tf1.setText(Double.toString(this.dResult); else tf1.setText(函数输入无效)
26、; this.keyAvailable=false; else if(this.dNowInput=0) this.dNowInput=Math.sqrt(this.dNowInput); tf1.setText(Double.toString(this.dNowInput); else tf1.setText(函数输入无效); this.keyAvailable=false; / key 1/x if(this.keyAvailable & e.getActionCommand()=1/x) if(this.dNowInput=0) tf1.setText(除数不能为零); this.key
27、Available=false; else this.dNowInput=1/this.dNowInput; tf1.setText(Double.toString(this.dNowInput); / key = if(this.keyAvailable & e.getActionCommand()=) this.alreadyClickedEqueal=true; switch(this.nOperation) case 1: this.dResult+=this.dNowInput; break; case 2: this.dResult-=this.dNowInput; break;
28、case 3: this.dResult*=this.dNowInput; break; case 4: if(this.dNowInput=0) tf1.setText(除数不能为零); this.keyAvailable=false; else this.dResult=this.dResult/this.dNowInput; if(this.keyAvailable)tf1.setText(Double.toString(this.dResult); / key MS if(this.keyAvailable & e.getActionCommand()=MS) this.dMemory
29、=this.dNowInput; if(this.dMemory!=0) tf2.setText(M); / key MC if(this.keyAvailable & e.getActionCommand()=MC) this.dMemory=0; tf2.setText(); / key MR if(this.keyAvailable & e.getActionCommand()=MR) this.dNowInput=this.dMemory; tf1.setText(Double.toString(this.dNowInput); / key M+ if(this.keyAvailabl
30、e & e.getActionCommand()=M+) this.dMemory+=this.dNowInput; if(this.dMemory!=0) tf2.setText(M); else tf2.setText(); / key % if(this.keyAvailable & e.getActionCommand()=%) this.dNowInput=(this.dResult*this.dNowInput)/100; tf1.setText(Double.toString(this.dNowInput); / key Backspace if(this.keyAvailabl
31、e & e.getActionCommand()=Backspace) if(!this.alreadyClickedEqueal) if(this.dNowInput!=0) if(this.alreadyHaveDot) if(this.n=-1) this.alreadyHaveDot=false; this.n=0; else String str,str1; str=tf1.getText(); str1=str.substring(0,this.nBitsNum-1); this.nBitsNum-; this.n+; this.dNowInput=Double.parseDoub
32、le(str1); tf1.setText(Double.toString(this.dNowInput); else int temp; temp=(int)(this.dNowInput/10); this.dNowInput=(double)temp; tf1.setText(Double.toString(this.dNowInput); public static void main(String args) Calculation cal=new Calculation(); cal.display(); public void windowClosing(WindowEvent
33、e) System.exit(0); 第4章 运行结果及分析图1所表示,以下就是我们设计出计算器运行界面截图,这一计算器采取是BorderLayout布局,能够实现十进制下正负数加法、减法、乘法、除法四则运算和求平方根、百分号、求倒数、清零、退格等简单操作。Backspace表示退格,CE表示将目前文本框内数据清空,C表示文本框内数据清除。对应按钮上名称代表了对应数字或运算,最终经过“=”按钮将运算结果显示在第一行文本框内,整体上说设计还成功。图4-1 计算器界面我们发觉了程序能够正确地进行运算,并显示出正确结果,同时发觉该计算器可进行通常语法分析,比如假如除数为零,计算结果显示“除数不能为零
34、”。比如假如对超出八位数据进行操作,计算结果用科学表示法表示。比如假如对非负数进行求平方根,计算结果显示“函数输入无效”。 不过也发觉了计算器对于类似5+6*3运算不能判定运算次序。图4-2所表示,5+6*3计算器计算结果为33,而正确结果应为23。 图4-2 5+6*3运算结果第5章 心得体会5.1系统需要完善地方1.在第四章提到不能对类似5+6*3运算判定运算次序。2.程序比较长,还能够进行简化。3.对于运算方法等方面仍能够进行部分改善。4.这界面还可设有菜单操作(包含:“编辑”,“查看”,“帮助”三个菜单项)5.2 课程设计感想本计算器模拟Windows计算器界面和功效,因为时间仓促和能力有限等问题,只能实现以上功效。此次课程设计到此算是告一段落了,经过这次学习,我学到了很多东西,在此基础上愈加巩固了自己对java认识和了解。在做本项目是时候,会碰到很多小问题,比如说,在整个运算过程中要怎样确保输入计算数据哪个是第一个计算数据,哪个是第二个计算数据,同时也要区分运算符,因为该计算器程序应用全部是利用字符串来完成计算,而且不能反复输出运算符,更不能