当前位置:文档之家› JAVA课程设计任务书 - 科学计算器

JAVA课程设计任务书 - 科学计算器

《高级语言程序设计(2)》课程设计报告专业:班级:学号:姓名:完成日期: 指导教师:1、程序设计说明书【设计题目】科学计算器【问题描述】本程序为设计一个科学计算器,用于进行数值计算。

可以进行数据的加减乘除,对数等计算。

【软件功能】1 图形界面:应用AWT和Swing设计工作界面,按下数字时显示数字,按下“=”时显示结果。

2 计算器基本功能:加减乘除四则运算,倒数,开平方等。

3 附加运算功能:三角函数,对数,阶乘,度转化为弧度等。

4 计算器的存储功能:清除中间结果,使用中间结果,存储中间结果及累加中间结果5 用不同颜色进行分区【算法思想】本程序设计一个主类和四个内部类。

通过在主类中调用四个类来实现程序的各个功能。

【类的设计】1主类SmartCalculator类,继承了JFrame类○1成员变量tf是JTextField对象,单行文本框,用来显示数据。

panel1,panel2,panel3,panel4是JPanel对象,用来盛放按钮。

Panel1盛放“←”,“CE”,“C”按钮,Panel2盛放功能区按钮,Panel3盛放记忆区按钮,Panel4盛放面板Panel1和Panel2isResult,flag是布尔型变量result是double型变量,存储结果SpecialNumActionListener是SpecialNum类的对象,监听特殊数字按钮df是DecimalFormat类的对象,控制输出格式○2方法SmartCauculator是构造方法,完成面板的布局并调用init方法init方法调用addButton方法向面板中增加按钮addButtion方法统一设置按钮的使用方式,参数包括panel,name,action,color,每次完成向面板添加按钮,设置名字,添加键盘监听器和设置按钮颜色getResult方法实现四则运算,并输出main方法,程序入口2内部类FunctionSigns,继承接口ActionListener,实现接口的actionProform抽象方法,完成开平方,求对数等操作3内部类ClearArea,继承接口ActionListener,实现接口的actionProform抽象方法,对清除区三个按钮“←”,“CE”,“C”进行监听,实现删除功能。

4内部类SpecialNum,继承接口ActionListener,实现接口的actionProform抽象方法,对π,e,及数字键监听5 Dot对小数点进行监听【用户界面】【模块划分及调用关系】程序分为五个模块,在主类中对剩余四个模块进行调用【模块流程图】ClearArea 流程图【运行说明】程序运行后会弹出计算器界面,用户使用鼠标点击按钮就可以进行数据计算。

2、 程序上机调试报告【语法错误及其排除】在使用if ()else if ()嵌套语句时经常出现语法错误,在查阅书籍后排除【算法错误及其排除】在对抽象方法actionPerformed 进行现实时总出现错误,最后排除。

3、 程序测试结果【测试数据】计算36+47,99÷3,输出π,e 的值,将180度转换成弧度,【输出结果】【收获及体会】从本次课程设计的完成中,首先我发现了我有很多不足的地方,最突出的是所学的东西太少了,根本满足不了平时编写程序的需要。

此外,了解了课程设计的要求与方法,学会了程序设计基本步骤。

同时,使我感觉到,一个优秀的程序,不仅仅是可以运行的,更应该具较高的效率,合理的结构,良好的可读性和一定的容错性。

除此之外,一个程序的成功完成需要严谨的务实态度。

认真的态度是课程设计取得成功的一项非常重要的保证。

在以后的学习中,我将虚心向学力争编写出更有意义的程序。

4、 源程序代码(Java 语言,要求有尽可能多的注释语句)package 课程设计之计算器;import java.awt.*;import java.awt.event.*;import java.text.DecimalFormat;import javax.swing.*;public class SmartCalculator extends JFrame{ /****/private static final long serialVersionUID = 1L;private JTextField tf;private JPanel panel1,panel2,panel3,panel4;private String back;private boolean isResult=true,flag=false;private String operator="=";private double result=0;private SpecialNum SpecialNumActionListener;private DecimalFormat df;public SmartCalculator(){super("科学计算器");//设置标题栏df=new DecimalFormat("#.####");//保留四位小数this.setLayout(new BorderLayout(10,5));//边界布局panel1=new JPanel(new GridLayout(1,3,10,10));//1行3列panel2=new JPanel(new GridLayout(5,6,5,5));//5行6列,水平间隔和竖直间隔都设为5panel3=new JPanel(new GridLayout(5,1,5,5));//5行1列,水平间隔和竖直间隔都设为5panel4=new JPanel(new BorderLayout());//边界布局SpecialNumActionListener=new SpecialNum();//实现对特殊数字的监听tf= new JTextField(); //文本区域,即计算器的显示区域tf.setEditable(true); //文本区域可编辑,^C复制结果tf.setBackground(Color.WHITE); //文本区域背景色为白tf.setHorizontalAlignment(JTextField.RIGHT);//文字右对齐tf.setText("0");tf.setBorder(BorderFactory.createLineBorder(Color.RED) );tf.setEditable(false); //设为不可编辑init(); //调用init方法初始化计算器}/***初始化界面*/private void init(){addButton(panel1,"←",new ClearArea(),Color.BLACK);//黑色addButton(panel1,"CE",new ClearArea(),Color.BLACK);addButton(panel1,"C",new ClearArea(),Color.BLACK);addButton(panel2,"1/x",newFunctionSigns(),Color.magenta);//洋红色addButton(panel2,"log",newFunctionSigns(),Color.magenta);addButton(panel2,"7",SpecialNumActionListener,Color.b lue);//蓝色addButton(panel2,"8",SpecialNumActionListener,Color.b lue);addButton(panel2,"9",SpecialNumActionListener,Color.b lue);addButton(panel2,"÷",newFunctionSigns(),Color.BLACK);addButton(panel2,"n!",newFunctionSigns(),Color.magenta);addButton(panel2,"sqrt",newFunctionSigns(),Color.magenta);addButton(panel2,"4",SpecialNumActionListener,Color.b lue);addButton(panel2,"5",SpecialNumActionListener,Color.b lue);addButton(panel2,"6",SpecialNumActionListener,Color.b lue);addButton(panel2,"×",newFunctionSigns(),Color.BLACK);addButton(panel2,"sin",newFunctionSigns(),Color.magenta);addButton(panel2,"x^2",newFunctionSigns(),Color.magenta);addButton(panel2,"1",SpecialNumActionListener,Color.b lue);addButton(panel2,"2",SpecialNumActionListener,Color.b lue);addButton(panel2,"3",SpecialNumActionListener,Color.b lue);addButton(panel2,"-",newFunctionSigns(),Color.BLACK);addButton(panel2,"cos",newFunctionSigns(),Color.magenta);addButton(panel2,"x^3",newFunctionSigns(),Color.magenta);addButton(panel2,"0",SpecialNumActionListener,Color.b lue);addButton(panel2,"-/+",new ClearArea(),Color.blue);addButton(panel2,".",new Dot(),Color.blue);addButton(panel2,"+",newFunctionSigns(),Color.BLACK);addButton(panel2,"tan",newFunctionSigns(),Color.magenta);addButton(panel2,"%",newFunctionSigns(),Color.magenta);addButton(panel2,"π",SpecialNumActionListener,Color.g ray);//灰色addButton(panel2,"e",SpecialNumActionListener,Color.g ray);addButton(panel2,"度变弧度",newFunctionSigns(),Color.gray);addButton(panel2,"=",newFunctionSigns(),Color.BLACK);JButton btns=new JButton("记忆区");btns.setBorder(BorderFactory.createLoweredBevelBorder ());//凹入斜面效果btns.setEnabled(false); //按钮不可操作btns.setPreferredSize(new Dimension(20,20));panel3.add(btns); //加入按钮addButton(panel3,"MC",null,Color.BLACK);addButton(panel3,"MR",null,Color.BLACK);addButton(panel3,"MS",null,Color.BLACK);addButton(panel3,"M+",null,Color.BLACK);panel4.add(panel1,BorderLayout.NORTH);panel4.add(panel2,BorderLayout.CENTER);this.add(tf,BorderLayout.NORTH);this.add(panel3,BorderLayout.WEST);this.add(panel4);pack();this.setResizable(false); //窗口不可改变大小this.setLocation(300,200); //窗口定位this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ /关闭按钮}/*** 统一设置按钮的使用方式,参数包括panel,name,action,color*/private void addButton(JPanel panel,Stringname,ActionListener action,Color color){JButton bt=new JButton(name);panel.add(bt); //向面板添加按钮bt.addActionListener(action); //增加监听事件bt.setForeground(color); //设置文字颜色}/*** 四则运算,参数X表示用户输入数字*/private void getResult(double x){if(operator=="+"){result+=x;}else if(operator=="-"){result-=x;}else if(operator=="×"){result*=x;}else if(operator=="÷"){result/=x;}else if(operator=="="){result=x;}tf.setText(df.format(result));}/*** 函数区运算符号事件监听*/class FunctionSigns implements ActionListener{ public void actionPerformed(ActionEvent e){ /*用ActionEvent对象的getActionCommand()方法* 取得与引发事件对象相关的字符串*/String str=e.getActionCommand(); //求平方根if(str.equals("sqrt")){double i=Double.parseDouble(tf.getText());if(i>=0){/** String.valueof() 转换为字符串* df.format()按要求保留四位小数* Math.sqrt()求算数术平方根*/tf.setText(String.valueOf(df.format(Math.sqrt(i))));}else{tf.setText("负数不能开平方根");}}else if(str.equals("log")){ // 求常用对数double i=Double.parseDouble(tf.getText());if(i>0){tf.setText(String.valueOf(df.format(Math.log(i))));}else{tf.setText("负数不能求对数");}}else if(str.equals("%")){ //求百分比tf.setText(df.format(Double.parseDouble(tf.getText())/1 00));}else if(str.equals("1/x")){ //求倒数if(Double.parseDouble(tf.getText())==0){tf.setText("除数不能为零");}else{tf.setText(df.format(1/Double.parseDouble(tf.getText()) ));}}else if(str.equals("sin")){ //求正弦函数double i=Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.sin(i))));}else if(str.equals("cos")){ //求余弦函数double i=Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.cos(i))));}else if(str.equals("tan")){ //求正切函数double i=Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.tan(i))));}else if(str.equals("n!")){ //求阶乘double i=Double.parseDouble(tf.getText());if((i%2==0)||(i%2==1)) //判断为整数放进行阶乘操作{int j=(int)i; //强制类型转换int result=1;for(int k=1;k<=j;k++)result*=k;tf.setText(String.valueOf(result));}else{tf.setText("无法进行阶乘");}}else if(str.equals("x^2")){ //求平方double i=Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(i*i)));}else if(str.equals("x^3")){ //求立方double i=Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(i*i*i)));}/**度变弧度---将角度转换成弧度*/else if(str.equals("度变弧度")){double i=Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(i/180*Math.PI)));}else{if(flag){isResult=false;}if(isResult){operator=str;}else{getResult(Double.parseDouble(tf.getText()));operator=str;isResult=true;}}}}/*** 清除区三个按钮的事件监听*/class ClearArea implements ActionListener{public void actionPerformed(ActionEvent e){String str=e.getActionCommand();if(str=="C"){tf.setText("0");isResult=true;result=0;}else if(str=="-/+"){doublei=(-1)*Double.parseDouble(tf.getText().trim());tf.setText(df.format(i));}else if(str=="←"){if(Double.parseDouble(tf.getText())>0){if(tf.getText().length()>1){tf.setText(tf.getText().substring(0,tf.getText().length ()-1));}else{tf.setText("0");isResult=true;}}}else if(str=="CE"){tf.setText("0");isResult=true;}}}/** 特殊数字去两个按钮的事件监听*/class SpecialNum implements ActionListener{ public void actionPerformed(ActionEvent e){String str=e.getActionCommand();if(isResult){tf.setText("");isResult=false;}if(str=="π"){tf.setText(String.valueOf(Math.PI));}else if(str=="e"){tf.setText(String.valueOf(Math.E));}else{tf.setText(tf.getText().trim()+str);if(tf.getText().equals("0")){tf.setText("0");isResult=true;flag=true;}}}}/** 小数点的事件监听*/class Dot implements ActionListener{public void actionPerformed(ActionEvent e) { isResult=false;if(tf.getText().trim().indexOf(".")==-1){ tf.setText(tf.getText()+".");}}}/** main方法*/public static void main(String args[]){ new SmartCalculator().setVisible(true);}public String getBack() {return back;}public void setBack(String back) {this.back = back;}}。

相关主题