计算器设计的java课程设计报告_第1页
计算器设计的java课程设计报告_第2页
计算器设计的java课程设计报告_第3页
计算器设计的java课程设计报告_第4页
计算器设计的java课程设计报告_第5页
免费预览已结束,剩余26页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、华东交通大学课程设计课程设计题目:计算器设计课程:Java程序设计题目:计算器设计年级:2010 级专业:信息一班学号:姓名:组员:指导教师:课程设计(论文)任务书基础学 院 信息与计算科学专 业2010 1 班一、课程设计(论文 )题目 计算器的设计二、课程设计(论文 )工作自 2013 年 6 月 23 日起至 2013 年 6 月 27 日止。三、课程设计(论文) 地点 : 计算机中心四、课程设计(论文)内容要求:1本课程设计的目的( 1 )使学生掌握系统各功能模块的基本工作原理;( 2)掌握Java 的基本编程原理和基本的编程方法;( 3)使学生学会系统调试;( 4)培养学生分析、解决

2、问题的能力;( 5)提高学生的软件文档写作能力和团队合作精神。2课程设计的任务及要求1)基本要求:( 1 )分析系统各功能模块的工作原理;( 2)提出系统的设计方案;( 3)对所进行编程、调试、修改。2)创新要求:在基本要求达到后,可进行创新设计,如:用虚函数,文件流,重载流插入运算符等。3)课程设计论文编写要求( 1)要按照书稿的规格打印誊写设计论文;( 2)论文包括目录、摘要、正文、总结等;( 3)毕业论文装订按学校的统一要求完成。4)答辩与评分标准:( 1)达到课程设计的目的与要求,程序的可读性较好,并调试正确,60 分;( 2)能正确回答老师所提问题,可增加10 分;( 3)课程设计报

3、告书写规范整齐,可增加10 分;( 4)心得体会认真总结,可增加10 分;( 5)程序有创新性,可增加10 分;成绩评定实行优秀、良好、中等、及格和不及格五个等级。不及格者需重做。5)参考文献:( 1)丁振凡. J ava语言程序设计清华大学出版社( 2)丁振凡. J ava语言程序设计实验指导与习题解析清华大学出版社( 3) http:/ /6)课程设计进度安排内容天数地点总体需求与分析构思及收集资料1图书馆各模块的编程实现,调试与修改3机房撰写论文与答辩1图书馆,机房学生签名:2013 年 6 月 18 日课程设计( 论文 ) 评审意见1 )态度评价(20分):优()、良()、中()、一般

4、()、差();2)任务难度(20分):优()、良()、中()、一般()、差();3)设计分析(20分):优()、良()、中()、一般()、差();4)创新性评价(20 分) :优() 、良() 、中() 、一般() 、差() ;5)回答问题(20分):优()、良()、中()、一般()、差();6)论文格式规范性及考勤是否降等级:是() 、否()评阅人签名:职称: 教授2013 年 6 月 25 日第1系统概要 -1-1.1 系统介绍 -1-1.2 基本功能要求 -1-第2设计思路与算法 -2-2.1 应用的基本工作流程 -2-2.2 类设计 -2-2.3 应用界面的设计 -3-2.4 事件处理

5、原理、具体设计 -3-2.5 算法考虑 -4-第 3 源程序代码 - 5 -第4运行结果及分析 -15-第5心得体会 -17-5.1 系统需要完善的地方 -17-5.2 课程设计感想 - 17 -参考文献 - 17 -第 1 章 系统概要1.1 系统介绍编写一个简易计算器,实现Windows 计算器的主要功能。本次课程设计就是利用java语言来编写简单计算器的应用程序,模拟Windows计算器的功能,能进行加、减、乘、除四则算术运算和求倒数、求平方根等简单函数运算,且有小数点、清零和存储等功能。1.2 基本功能要求通过计算器的设计,掌握Java编程的基本知识点。( 1)掌握基于AWT 的图形用

6、户界面的设计,如常用的的布局设计,容器中面板、按钮、文本框等组件的添加和布局。( 2)掌握图形界面的事件处理方法,注册动作事件监听者。( 3) 掌握各类功能的实现思路,及程序表达。熟悉实例变量、类变量与局部变量的差异。( 4)掌握方法的封装与调用。尽量将重复用到的一段功能设计为方法。( 5)掌握if 和 switch 等语句的使用。( 6)掌握如何给按钮设置颜色及给页面背景设计颜色。( 7)掌握java 中“对象”和“类”的知识,类的设计及成员的控制访问- 1 -第 2 章 设计思路与算法2.1 应用的基本工作流程1 .打开命令提示符和记事本;2 .输入源程序代码;3 .保存并运行源程序;4

7、.运行,检查是否有误;5 .修改错误并再次运行;6 .测试计算器的工作状况。2.2 类设计本次计算器的设计,主要用到的是GUI 编程的相关方法。所以我们所用到的类和方法主要有:主类: Calculation 类继承的父类为WindowAdapter 类,实现了ActionListener 接口,定义了一个窗体f 和多个面板,按钮和文本框。(1)方法名:display方法作用:构建计算器的主界面在方法 display 中,定义了窗体的标题,设置了窗体的大小并通过setVisible( true)方法使窗体可见,setBackground()方法设置背景颜色,setResizable(false方

8、法使窗体大小不可)变。用setLayout()方法给容器指定按BorderLayout布局排列部件:通过容器的add()方法将面板放置在North 区域: f.add(p5,BorderLayout.NORTH),通过 add 方法用来向面板中加入部件。添加 GUI 部件并给各个部件各自不同的标识,创建中间面板时,如面板p1,p1=newPanel(new GridLayout(1,3,5,5),设置为GridLayout 布局,再用add方法把按钮都加进去,按 (1,3,5,5)方式排列通过按钮对象的addActionListener 方法为其注册事件监听处理者。(2)方法名:actionP

9、erformed方法作用:设置各个GUI 部件的事件处理在 actionPerformed方法中,分别设置了不同按钮的操作事件,当不同按钮单击发生动作时自动调用执行相应的动作,从而实现计算器的多种运算功能。通过e.getActionCommand()获得按钮事件对象的命令名,再在 if 语句中根据操作命令符按情况分别处理事件,进行相应运算。通过setText()方法将结果转化为数字串写入文本输入框中。事件监听器中的事件处理方法void actionPerformed(ActionEvent e)完成主要的按钮事件的处理。事件处理分以下几种情况:数字按钮事件(“ 0”, “ 1”, “ 2”,

10、“ 3”· · · “ 8”, “ 9”) ,小数点按钮事件( “.”) , 运算符按钮处理事件( “ +”,“ -”,“ *”,“ /” ), 正负号按钮事件( “ +/-”) ,退格按钮事件(“ Backspace”) ,清除按钮事件(“ C”) ,等号按钮事件(“ =”) ,存储按钮事件( “ MS” ,“ MC”, “ MR” ,“ M+”)等。(3)方法名: main 方法在该方法中,通过new 运算符创建一个类Calculation 的对象Cal,通过调用display()方法。(4)方法名:windowClosing 方法在该方法中,在处理窗体的“关

11、闭”事件的监听者采用继承WindowsAdapter的方式。2.3 应用界面的设计参考了 windows 计算器的布局,我们把总体界面采用BorderLayout 布局,文本框所在的面板 p5 位于最上方(North 区域) ,存储按钮及显示M 状态文本框所在的面板p3在最左边( West区域) ,而Backspace, CE, C 所在的面板p1 和数字按钮、运算符按钮等所在面板 p2 放置在面板p4 中, 面板 p4统一分布在中央( Center区域) , 同时面板中又按GridLayout布局分布多行多列。具体如下图所示。2.4 事件处理原理、具体设计首先,对计算器的整体布局构思清楚,将

12、整个计算器分成多行多列组成的单元,使得整个计算器的布局更加合理、有序。采用网格块布局,整体分为6 行,第一行为输入及显示 框 , 第 二 行 为 退 格 键 和 清 零 键 , 下 面 几行 分 别 为 数 字 按 钮 与运 算 符 按 钮 , 以 及 MC,MR,MS,M+ 等存储按钮。第二,设计依次添加GUI 部件。第三,为各个部件注册监听者,考虑到数字键,运算符,等于,小数点,求平方根等第四,设置相应的各类算法。第五,设置主程序和退出方法。在编写完源程序代码后,进行运行,发现错误并更正。 最后,测试制作的计算器运行状况即计算能力。动作事件的各方关系,结合代码大致如下图所示:2.5 算法考

13、虑在 actionPerformed方法中,分别设置了不同按钮的操作事件,当不同按钮单击发生动作时自动调用执行相应的动作,从而实现计算器的多种运算功能。数字按钮与其他按钮作为事件源都注册了监听者,且监听者符合ActionListener 接口的要求。数据与运算符的键入通过点击按钮来触发事件,在按下“=”按钮时通过调用之前按下的相应运算符所表示的运算函数进行运算,将所的结果保存在dResult中,并显示在文本框内。求平方根、求倒数等运算时,调用了Math 类的方法进行运算。当输入小数时,将小数点拼接到数字串中。按下清除按钮时,变量初始化。- 21 -第 3 章 源程序代码/用 JAVA 编写简易

14、计算器的程序(模拟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;/ 记录运算符类型int nBitsNum=0;/记录总共输入的位数boolean alreadyHaveDot=false;/是否已经有小

15、数点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 bDiv,bSqrt,bMulti,bMinus,bPercent,bPlus,bReciprocal,bEqual,bD

16、ot,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);/采用方位布局排列部件p1=new Panel(new GridLayout(1,3,5,5); /用于存放Backspace,C

17、E,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,p2p5=new Panel(new FlowLayout();p6=new Panel(new FlowLayout();p4.add(p1);/存放显示区p4.add(p2);tf1=new TextField(35);tf1.setText("0."

18、;);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 Button("5");b

19、6=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(

20、this);b7.addActionListener(this);b8.addActionListener(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 But

21、ton("+");bReciprocal=new Button("1/x");bEqual=new Button("=");bDot=new Button(".");bNegative=new Button("+/-");bDiv.addActionListener(this);bSqrt.addActionListener(this);bMulti.addActionListener(this);bMinus.addActionListener(this);bPercent.addAction

22、Listener(this);bPlus.addActionListener(this);bReciprocal.addActionListener(this);bEqual.addActionListener(this);bDot.addActionListener(this);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

23、(bPercent);p2.add(b1);p2.add(b2);p2.add(b3);p2.add(bMinus);p2.add(bReciprocal);p2.add(b0);p2.add(bNegative);p2.add(bDot);p2.add(bPlus);p2.add(bEqual);bBackspace=new Button("Backspace");bCE=new Button("CE");bC=new Button("C");bBackspace.addActionListener(this);bCE.addAct

24、ionListener(this);bC.addActionListener(this);p1.add(bBackspace);p1.add(bCE);p1.add(bC);tf2=new TextField(2);tf2.setEnabled(false);tf2.setBackground(Color.LIGHT_GRAY);bMC=new Button("MC");bMR=new Button("MR");bMS=new Button("MS");bM=new Button("M+");bMC.addActi

25、onListener(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.setVisible(true);f.addWindowListener(this);public void actionPerformed(ActionEvent e)/key 0 to 9if(this.keyAvailable&&e.

26、getActionCommand().length()=1&&e.getActionCommand().com pareTo("0")>=0 && e.getActionCommand().compareTo("9")<=0)if(this.isTempNowInput)this.dNowInput=0;this.isTempNowInput=false;this.nBitsNum+;if(this.alreadyHaveDot=false)this.dNowInput=this.dNowInput*10+Do

27、uble.parseDouble(e.getActionCommand(); elsedouble temp=Double.parseDouble(e.getActionCommand();for(int i=this.n;i<0;i+)temp*=0.1;this.dNowInput+=temp;this.n-;this.tf1.setText(Double.toString(this.dNowInput);/ key dotif(this.keyAvailable && e.getActionCommand()=".")if(this.alread

28、yHaveDot=false)this.nBitsNum+;this.alreadyHaveDot=true;this.n=-1;/key "+","-","*","/"if(this.keyAvailable && e.getActionCommand()="+" | e.getActionCommand()="-" | e.getActionCommand()="*" | e.getActionCommand()="/&quo

29、t;)if(this.alreadyClickedEqueal)this.dNowInput=this.dResult;this.isTempNowInput=true;elseswitch(this.nOperation)case 1: this.dResult+=this.dNowInput; break;case 2: this.dResult-=this.dNowInput; break;case 3: this.dResult*=this.dNowInput; break;case 4:if(this.dNowInput=0)tf1.setText("除数不能为零"

30、;);this.keyAvailable=false;else this.dResult=this.dResult/this.dNowInput;if(this.keyAvailable)tf1.setText(Double.toString(this.dResult);this.dNowInput=0;if(e.getActionCommand()="+")this.nOperation=1;if(e.getActionCommand()="-")this.nOperation=2;if(e.getActionCommand()="*&quo

31、t;)this.nOperation=3;if(e.getActionCommand()="/")this.nOperation=4;this.nBitsNum=0;this.alreadyClickedEqueal=false;/ key "+/-"if(this.keyAvailable && e.getActionCommand()="+/-")this.dNowInput=0-this.dNowInput;tf1.setText(Double.toString(this.dNowInput);/ key &qu

32、ot;C"if(e.getActionCommand()="C")this.nBitsNum=0;this.dResult=0;this.dNowInput=0;this.alreadyHaveDot=false;this.n=0;this.nOperation=1;this.keyAvailable=true;this.alreadyClickedEqueal=false;tf1.setText("0.");/ key "CE"if(e.getActionCommand()="CE")this.nBit

33、sNum=0;this.dNowInput=0;this.alreadyHaveDot=false;this.n=0;this.nOperation=1;this.keyAvailable=true;tf1.setText("0.");/ key "sqrt"if(this.keyAvailable && e.getActionCommand()="sqrt")if(this.alreadyClickedEqueal)if(this.dResult>=0)this.dResult=Math.sqrt(this.d

34、Result);tf1.setText(Double.toString(this.dResult);elsetf1.setText("函数输入无效");this.keyAvailable=false;elseif(this.dNowInput>=0)this.dNowInput=Math.sqrt(this.dNowInput);tf1.setText(Double.toString(this.dNowInput);elsetf1.setText("函数输入无效");this.keyAvailable=false;/ key "1/x&q

35、uot;if(this.keyAvailable && e.getActionCommand()="1/x")if(this.dNowInput=0)tf1.setText("除数不能为零");this.keyAvailable=false;elsethis.dNowInput=1/this.dNowInput;tf1.setText(Double.toString(this.dNowInput);/ key "="if(this.keyAvailable && e.getActionCommand()

36、="=")this.alreadyClickedEqueal=true;switch(this.nOperation)case 1: this.dResult+=this.dNowInput; break;case 2: this.dResult-=this.dNowInput; break;case 3: this.dResult*=this.dNowInput; break;case 4:if(this.dNowInput=0)tf1.setText("除数不能为零");this.keyAvailable=false;else this.dResul

37、t=this.dResult/this.dNowInput;if(this.keyAvailable)tf1.setText(Double.toString(this.dResult);/ key "MS"if(this.keyAvailable && e.getActionCommand()="MS")this.dMemory=this.dNowInput;if(this.dMemory!=0)tf2.setText("M");/ key "MC"if(this.keyAvailable &

38、;& 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.keyAvailable && e.ge

39、tActionCommand()="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

40、(this.dNowInput);/ key "Backspace"if(this.keyAvailable && e.getActionCommand()="Backspace")if(!this.alreadyClickedEqueal)if(this.dNowInput!=0)if(this.alreadyHaveDot)if(this.n=-1)this.alreadyHaveDot=false;this.n=0; elseString str,str1;str=tf1.getText();str1=str.substring(0

41、,this.nBitsNum-1);this.nBitsNum-;this.n+;this.dNowInput=Double.parseDouble(str1);tf1.setText(Double.toString(this.dNowInput);elseint 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 Calc

42、ulation();cal.display();public void windowClosing(WindowEvent e)System.exit(0);第 4 章 运行结果及分析如图 1 所示,以下就是我们设计出的计算器的运行界面截图,这一计算器采用的是BorderLayout 布局,能够实现十进制下正负数的加法、减法、乘法、除法四则运算以及求平方根、百分号、求倒数、清零、退格等简单操作。Backspace表示退格,CE 表示将当前文本框内数据清空,C 表示文本框内数据清除。相应按钮上的名称代表了相应的数字或运算,最终通过“=”按钮将运算结果显示在第一行的文本框内,整体上说设计还成功。图

43、 4-1 计算器界面 我们发现了程序能够准确地进行运算,并显示出正确结果,同时发现该计算器可进行例如如果对超过八位的数据进行操作,计算结果用科学表示法表示。例如如果对非负数进行求平方根,计算结果显示“函数输入无效”。但是也发现了计算器对于类似5+6*3 的运算不能判断运算顺序。如图 4-2 所示, 5+6*3 计算器计算结果为33,而正确结果应为23。4-25+6*3 的运算结果第 5 章 心得体会5.1 系统需要完善的地方1 .在第四章提到的不能对类似5+6*3 的运算判断运算顺序。2 .程序比较长,还可以进行简化。3 .对于运算方法等方面仍可以进行一些改进。4 .这界面还可设有菜单操作(包

44、括:“编辑”,“查看”,“帮助”三个菜单项)5.2 课程设计感想本计算器模拟Windows 计算器的界面和功能,由于时间仓促和能力有限等问题,只能实现以上功能。本次课程设计到此算是告一段落了,经过这次的学习,我学到了很多东西,在此基础上更加巩固了自己对java 的认识与了解。在做本项目是时候,会遇到很多小问题,比如说,在整个运算过程中要如何确保输入的计算数据哪个是第一个计算数据的,哪个是第二个计算数据的,同时也要区分运算符,因为该计算器程序应用的都是利用字符串来完成计算的,而且不能重复输出运算符,更不能将运算符错误的存储在了第一个计算数据的数值中,也得考虑到万一不小心重复点击了运算符按钮会不会

45、造成第一个计算数据的重新赋值等等问题,最后想到利用布尔类型来很好的控制运算符的应用!此次课程设计让我更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我对所学知识能够融会贯通,又不断丰富了新知识。Java 计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。在以前,我们只是对书上已经给出的程序进行编译和运行,而这次我们算是真正自己编写了一个程序(虽然参考了书上的程序),觉得自己对于java 的应用得到了很大的提高,也体会到了编写一个程序是一个十分艰辛的过程,需要不断的调试,改进,以及小组成员的努力思考。在制作简易计算器的过程中,很容易打错源程序代码而导致编译通不过。这是一个细心程度的问题,做什么事都必须细心严谨,这样才不容易出错。在编译通过运行程序出现了一个计算器界面时心里非常高兴,迫不及待地使用制作出来的计算器。编一个程序真心不容易啊,程序员都是伟大的人啊,向他们看齐。这次的课设作业让我明白了无论多复杂的东西都是由好多基础的东西组合在一起的。在接下来的时间里,我觉得我要更加努力的往深一层次的方面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论