中文摘要该程序是一个图形界面的简单Java计算器,具有良好的界面,使用人员能快捷简单的进行操作。即时准确地获得需要的计算结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。可以进行简单的四则运算(加、减、乘、除,等)。其中C表示清零,界面简洁使用方便。目录一、课程设计任务及要求..................................................................1二、需求分析......................................................................................2三、设计思路......................................................................................3四、详细设计......................................................................................5五、运行调试与分析讨论................................................................11六、设计体会与小结........................................................................14七、参考文献....................................................................................15第1页一、课程设计任务及要求设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算、设计的计算器应用程序可以完成家法、减法、乘法、除法和取余运算。且有小数点、正负号、求倒数、退格和清零功能。第2页二、需求分析在日常生活中经常要用到计算器,比如科学计算器、数值计算、会计业务等,在Applet中实现一个精巧实用的计算器,可以让用户在使用网站服务的同时,可以很方便地进行数据运算,可增加页面的实用性,同时让用户的操作也更方便与快捷。本次实验要求实现一个具有四则运算的计算器,拥有加、减、乘、除功能,并且还要求具备清零等功能。第3页三、设计思路本应用程序继承自框架类(Frame),此程序使用Frame布局管理器BorderLayout,将单行文本框加入到“North”区域,包含各种按钮的面板Panelp加入到”Center”区域。包含各种按钮的面板Panelp采用4行5列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中。同时注册按钮事件监听器。如:Buttonb=newButton();b.addActionListener(事件监听器);事件监听器中的事件处理方法voidactionPerformed(ActionEventevt)完成主要的按钮事件的处理。事件处理分以下几种情况:数字按钮事件(”0”,”1”,”2”…”8”,”9”)、运算符按钮事件(”+”,”-“,”*”,”/”,”%”)、正负号按钮事件(”+/-“)、小数点按钮事件(”.”)、等号按钮事件(”=”)、求倒按钮事件(”1/x”)、退格按钮事件(”退格”)、清楚按钮事件(“C”)。在事件处理。触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件还是计算中间触发的按钮事件。计算器完成的是一个数学表达式,如:3+2,所以可以采用一个链表(LinkedList类)来存储数字或字符,如3,+,2分别存储在链表中,最后运算时,可以一一取出来进行运算。本应用程序中的数字按钮和运算符按钮可以分别定义以下两个类的对象组件数字按钮NumberButton类如下:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassNumberButtonextendsButton{intnumber;第4页publicNumberButton(intnumber){super(+number);this.number=number;setForeground(Color.blue);}publicintgetNumber(){returnnumber;}}运算符按钮OperationButton类如下importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassOperationButtonextendsButton{String运算符号;publicOperationButton(Strings){super(s);运算符号=s;setForeground(Color.red);}publicStringget运算符号(){return运算符号;}}第5页四、详细设计本程序主要包含两部分分别为主类和附类,程序详细设计如下:1.数据分析计算器的程序设计,必然有数据的输入,当中就包含运算符和数字,都要通过计算器上的button按钮选项按键输入进去,里面录入的为字符型的数据,若要进行运算,要将输入的字符转换成double型,以防运算出错。2.类的设计classCalculatorextendsJFrameimplementsActionListener{}//Calculator是初始化界面,以及响应用户的操作。Calculate是个内部类,功能是进行进制的转换。3.功能设计○1数字键按钮,输入所需计算的数字。○2算数符按钮,输入所需的算数符号。○3等号按钮,输出运算的结果。○4C按钮,执行清零。4.程序代码主类:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.event.*;第6页classSwingCalculator{publicstaticvoidmain(String[]args){JFrameframe=newCalculator();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}附类:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.event.*;classCalculatorextendsJFrame{privatefinalFontBIGGER_FONT=newFont(monspaced,Font.PLAIN,20);privateJTextFieldtextfield;privatebooleannumber=true;privateStringequalOp==;privateCalculatorOpop=newCalculatorOp();publicCalculator(){textfield=newJTextField(0,12);textfield.setHorizontalAlignment(JTextField.RIGHT);textfield.setFont(BIGGER_FONT);ActionListenernumberListener=newNumberListener();StringbuttonOrder=1234567890;JPanelbuttonPanel=newJPanel();第7页buttonPanel.setLayout(newGridLayout(4,4,4,4));for(inti=0;ibuttonOrder.length();i++){Stringkey=buttonOrder.substring(i,i+1);if(key.equals()){buttonPanel.add(newJLabel());}else{JButtonbutton=newJButton(key);button.addActionListener(numberListener);button.setFont(BIGGER_FONT);buttonPanel.add(button);}}ActionListeneroperatorListener=newOperatorListener();JPanelpanel=newJPanel();panel.setLayout(newGridLayout(4,4,4,4));String[]opOrder={+,-,*,/,=,C};for(inti=0;iopOrder.length;i++){JButtonbutton=newJButton(opOrder[i]);button.addActionListener(operatorListener);button.setFont(BIGGER_FONT);panel.add(button);}JPanelpan=newJPanel();pan.setLayout(newBorderLayout(4,4));pan.add(textfield,BorderLayout.NORTH);pan.add(buttonPanel,BorderLayout.CENTER);pan.add(panel,BorderLayout.EAST);this.setContentPane(pan);this.pack();this.setTitle(Calculator);this.setResizable(false);第8页}privatevoidaction(){number=true;textfield.setText(0);equalOp==;op.setTotal(0);}classOperatorListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(number){action();textfield.setText(0);}else{number=true;StringdisplayText=textfield.getText();if(equalOp.equals(=)){op.setTotal(displayText);}elseif(equalOp.equals(+)){op.add(displayText);}elseif(equalOp.equals(-)){op.subtract(displayText);}elseif(equalOp.equals(*)){op.multiply(displayText);}elseif(equalOp.equals(/)){op.divide(displayText);}textfield.setText(+op.getTotalString());equalOp=e.getActionCommand();}}}第9页classNumberListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){Stringdigit=event.getActionCommand();if(number){textfield.setText(digit);number=false;}else{textfield.setText(textfield.getText()+digit);}}}publicclassCalculatorOp{privateinttotal;publicCalculatorOp(){total=0;}publicStringgetTo