java程序设计报告_第1页
java程序设计报告_第2页
java程序设计报告_第3页
java程序设计报告_第4页
java程序设计报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

课程设计课程设计目的设计一个基于Swing的计算器应用程序,完成普通的算术运算。课程设计要求设计的计算器是基于Swing的,可以完成加减乘除和取余运算。增加计算器的日期计算功能,能够计算两个日期之间相距的天数。(要判断键入的日期格式是否正确,并能正确处理按钮动作事件,同时能够得到正确的计算结果)设计要点主要练习使用布局管理器设计一个计算器的界面,并使用事件监听器处理数据的输入,完成相关的计算。在面板上可以增加一个算术/日期的转换按钮来选择是普通计算还是日期计算。以及增加一个清零的按钮CE,用以将显示结果的单行文本域清空,同时将各个参数设置为默认值。二、总体方案设计日常生活中经常需要用到计算器,比如科学计算,数值计算,会计业务等等,在Applet中实现一个精巧的计算器,可以让用户的操作也更方便和快捷。本项目需要实现一个具有四则运算的计算器,能够实现基本的加、减、乘、除运算,以及其它的辅助功能;界面简洁适用;要提供主要的设计思路、类的设计,本次设计添加转进制等功能。本应用程序继承自框架(frame),此程序使用frame布局管理器bordelayout,将单行文本加入相应区域,包含各种按纽的面板buttonpanel加入相应区域还可以将进制转换的面板与单行文本框放一块包含各种按纽的面板buttonpanel采用N行N列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中,同时注册按钮事件监听器。布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。四、程序的调试与运行结果说明程序功能实现:使用swing组件和awt图形用户界面以及BroadLayout布局管理器。通

过在按钮的单击事件处理方法中调用类的成员方法calculator()来进行简易计算器的各种运算,并正确实现运算功能。程序可以实现加、减、乘、除、取余等运算,并且可进行负数的运算,设置CE清零按钮可进行清零运算。添加菜单条,列出'标准计算’、'日期计算’菜单选项,并别实现'标准计算’且整个程序对话框可实现最小化、最大化、关闭。运行结果截图:五、程序代码源代码:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassCalculatorextendsFrameimplementsActionListener//,WindowListener〃定义一个继承Frame主程序类并实现按钮监听器和窗口监听器接口{privateContainercontainer;//定义一个私有的抽象组件类containerprivateGridBagLayoutlayout;//定义一个私有的面板类〃计算结果显示区//保存+,-,*,/,=命令0〃保存计算结果〃判断是否为数字的开始privateGridBagConstraintsconstraints;//定义一个私有类用于添加和删除privateJTextFielddisplayField;privateStringlastCommand;privatedoubleresult;privatebooleanstart;privateJMenuBarmenubar;//定义类用于放置菜单Dialogdialog;//用于对话框的设置privateJButtonbutton_plusminus,button_cancel,button_1,button_2,button_3,button_4,button_5,button_6,button_7,button_8,button_9,button_0,button_plus,button_minus,button_multiply,button_divide,button_point,〃计算结果显示区//保存+,-,*,/,=命令0〃保存计算结果〃判断是否为数字的开始super("Calculator");//调用父类中的calculator方法this.setLocation(240,200);//设置初始化this.setSize(350,300);//设置窗口大小this.setResizable(true);//设置位置可重置说明框架大小可被用户改变this.setLayout(newGridLayout(7,1));//建立GridLayou版面配置格子this.addmyMenu();〃调用成员方法添加菜单displayField=newJTextField(20);/创建文本对象this.add(displayField);//调用成员方法并添加对象displayField.setEditable(true);//设置用户可编程文本start=true;result=0;lastCommand="=";//初始化变量JPanelpanel0=newJPanel();//声明对象panel0.setLayout(newGridLayout(1,1));//使用边框布局指定行数和列数JPanelpanel1=newJPanel();panel1.setLayout(newGridLayout(1,3,4,4));//使用边框布局和流布局指定行数、列数和水平垂直间距this.add(panel1);//调用成员方法并添加panel1button_cancel=newJButton("CE");//声明按钮对象button_plusminus=newJButton("+/-");button_yu=newJButton("%");JPanelpanel2=newJPanel();panel2.setLayout(newGridLayout(1,4,4,4));this.add(panel2);button_7=newJButton("7");button_8=newJButton("8");button_9=newJButton("9");button_divide=newJButton("/");JPanelpanel3=newJPanel();panel3.setLayout(newGridLayout(1,4,4,4));this.add(panel3);button_4=newJButton("4");button_5=newJButton("5");button_6=newJButton("6");button_multiply=newJButton("*");JPanelpanel4=newJPanel();panel4.setLayout(newGridLayout(1,4,4,4));this.add(panel4);button_1=newJButton("1");button_2=newJButton("2");button_3=newJButton("3");button_minus=newJButton("-");JPanelpanel5=newJPanel();panel5.setLayout(newGridLayout(1,4,4,4));this.add(panel5);button_0=newJButton("0”);button_point=newJButton(".”);button_equal=newJButton("=");button_plus=newJButton("+");panel1.add(button_cancel);//把按钮添加到panel上panel1.add(button_plusminus);panel1.add(button_yu);panel2.add(button_7);panel2.add(button_8);panel2.add(button_9);panel2.add(button_divide);panel3.add(button_4);panel3.add(button_5);panel3.add(button_6);panel3.add(button_multiply);panel4.add(button_1);panel4.add(button_2);panel4.add(button_3);panel4.add(button_minus);panel5.add(button_0);panel5.add(button_point);panel5.add(button_equal);panel5.add(button_plus);button_cancel.addActionListener(this);//为按钮添加监听器button_plusminus.addActionListener(this);button_yu.addActionListener(this);button_7.addActionListener(this);button_8.addActionListener(this);button_9.addActionListener(this);button_divide.addActionListener(this);button_4.addActionListener(this);button_5.addActionListener(this);button_6.addActionListener(this);button_multiply.addActionListener(this);button_1.addActionListener(this);button_2.addActionListener(this);button_3.addActionListener(this);button_minus.addActionListener(this);button_0.addActionListener(this);button_point.addActionListener(this);button_equal.addActionListener(this);button_plus.addActionListener(this);this.addWindowListener(newWinClose());//注册窗口监听器this.setVisible(true);//设置按钮可见}privatevoidaddmyMenu()//菜单的添加{JMenuBarmenubar=newJMenuBar();//菜单对象的创建this.add(menubar);//调用方法添加菜单JMenum1=newJMenu("标准计算,〃创建菜单对象添加内容JMenum2=newJMenu("日期计算”);m1.addActionListener(this);//为菜单项注册监听器m2.addActionListener(this);menubar.add(m1);//把m1添加到菜单menubar中menubar.add(m2);}publicvoidactionPerformed(ActionEvente)//按钮的单击事件处理方法{if(e.getSource().equals(button_1)||e.getSource().equals(button_2)||e.getSource().equals(button_3)||e.getSource().equals(button_4)||e.getSource().equals(button_5)||e.getSource().equals(button_6)||e.getSource().equals(button_7)||e.getSource().equals(button_8)||e.getSource().equals(button_9)||e.getSource().equals(button_0)||e.getSource().equals(button_point)||e.getSource().equals(button_plusminus)||e.getSource().equals(button_cancel)){〃非运算符的处理方法Stringinput=e.getActionCommand();//获取按钮的标签或事件,为这个按钮设置的命令名,建立同按钮关联的自动命令字符串if(start)//若输入以字母开始,在编辑文本区中建立文本{displayField.setText("");start=false;if(input.equals("+/-"))//若输入"+/-”则在编辑文本区中建立文本并得到文本“-”displayField.setText(displayField.getText()+"-");}if(!input.equals("+/-"))//若开始输入的不是“+/-”,则直接获得输入的文本{Stringstr=displayField.getText();if(input.equals("CE”))//清零键的实现方法{displayField.setText("0”);start=true;}elsedisplayField.setText(displayField.getText()+input);/输入清零按钮,在文本中显示0,否则显示输入的数,并和上一个输入数字连接}}elseif(e.getActionCommand()=='标准计算”)〃选项中标准的处理方法{displayField.setText("0");start=true;}elseif(e.getActionCommand()=="日期计算”)〃选项中日期的处理方法{displayField.setText("");start=true;//Stringaa=displayField.setText();//Stringbb=displayField.setText();//SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");//longa=sdf.parse(aa).getTime();//longb=sdf.parse(bb).getTime();//intjulianDay=(int)((a-b)/(1000*60*60*24)+1);//System.out.println(aa+"-"+bb+"="+julianDay+"days");}else//各运算符的识别{Stringcommand=e.getActionCommand();if(start){lastCommand=command;}else{calculate(Double.parseDouble(displayField.getText()));lastCommand=command;start=true;}}}publicvoidcalculate(doublex)〃各运算符的具体运算方法{doubled=0;if(lastCommand.equals("+"))result+=x;elseif(lastCommand.equals("-"))result-=x;elseif(lastCommand.equals("*"))result*=x;elseif(lastCommand.equals("/"))result/=x;elseif(lastCommand.equals("%"))result%=x;elseif(lastCommand.equals("="))result=x;displayField.setText(""+result);}//publicvoidwindowClosing(WindowEvente)//定义windowClosing方法,添加对System.exit(0)的调用,其余六个方法什么也不做//{//if(e.getSource()==dialog)//dialog.setVisible(false);〃隐藏对话框//else//System.exit(0);//}TOC\o"1-5"\h\z//publicvoidwindowOpened(WindowEvente){}//publicvoidwindowActivated(WindowEvente){}//publicvoidwindowDeactivated(WindowEvente){}//publicvoidwindowClosed(WindowEvente){}//publicvoidwindowIconified(WindowEvente){}//publicvoidwindowDeiconified(WindowEvente){}publicstaticvoidmain(Stringargs[])//定义主方法{Calculatorcalculator=newCalculator();}//classWinCloseimplementsWindowListener/定义一个winclose类实现WindowListener接口//{//publicvoidwindowClosing(WindowEvente)//{//System.exit(0);〃结束程序运行//}//publicvoidwindowOpened(WindowEvente){}//publicvoidwindowActivated(WindowEvente){}//publicvoidwindowDeactivated(WindowEvente){}//publicvoidwindowClosed(WindowEvente){}//publicvoidwindowIconified(WindowEvente){}//publicvoidwindowDeiconified(WindowEvente){}//}}参考文献:《java程序设计项目教程》、《java2核心技术》、《Java程序设计案例教程》《Java案例讲解》等等。六、总结与体会总结:通过编写这个相对复杂的程序,让我认识解决实际问题前应现建立模型,再通过建立的模型使问题简单化,从而解决问题。这次编写的程序大部分是通过调用各包中的方法来实现的,这也让我充分理解了包和类调用的关系。并且通过实训我了解到String类是字符串常量类,初始化后不能更改;StringBuffer类是字符串缓冲区,可以被修改。布尔型不能转化成其他任何类型等等。在做本项目是时候,会遇到很多小问题,比如说:如何保存输入的数字和下一个数进行加、减、乘、除运算。还有如何判断它是第几个输入的数

温馨提示

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

评论

0/150

提交评论