java课程设计模拟科学计算器
java课程设计科学计算器
java课程设计科学计算器。
一、课程目标知识目标:1. 理解Java编程中算术表达式的组成及运算规则;2. 掌握Java中的基本数据类型及其在算术运算中的使用;3. 学会使用Java控制结构和函数实现科学计算器的功能;4. 了解科学计算器中常见的数学函数及其在Java中的实现。
技能目标:1. 能够编写简单的Java程序,实现加、减、乘、除等基本运算;2. 能够运用循环和条件语句,实现科学计算器的逻辑功能;3. 能够利用Java类和对象,设计并实现具有图形用户界面的科学计算器;4. 能够运用调试技巧,找出并修正程序中的错误。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发其探究科学计算器原理的欲望;2. 培养学生严谨、细致的编程习惯,提高其问题解决能力和团队协作能力;3. 培养学生热爱科学、勇于创新的精神,使其认识到编程在科学计算中的重要性。
本课程针对高年级学生,结合Java编程知识,旨在帮助学生掌握科学计算器的核心功能实现。
课程注重实用性,通过设计具体的学习成果,使学生在完成课程后能够独立编写并优化科学计算器程序。
同时,关注学生的情感态度价值观培养,提高其综合素质。
二、教学内容1. Java基本语法与数据类型:回顾Java基本语法规则,重点掌握整型、浮点型等基本数据类型及其在运算中的使用。
- 教材章节:第一章 Java语言概述,第二章 基本数据类型与运算符2. 算术表达式与运算规则:讲解算术表达式的构成,介绍运算符优先级和结合性。
- 教材章节:第二章 基本数据类型与运算符3. Java控制结构:学习顺序、分支和循环结构,实现科学计算器的基本运算功能。
- 教材章节:第三章 控制结构4. 函数的定义与调用:介绍函数的概念,学会编写自定义函数,实现计算器中的特定功能。
- 教材章节:第四章 函数与数组5. 图形用户界面设计:学习Java Swing库,使用其组件设计科学计算器的界面。
- 教材章节:第七章 Java Swing图形用户界面6. 数学函数与运算:介绍科学计算器中常见的数学函数,如三角函数、指数函数等,并在Java中实现。
Java课程设计报告计算器
Java课程设计报告-计算器第一部分设计的内容要求1.1 Windows自带计算器版面设计1.2计算器计算功能算法实现第二部分设计思想2.1根据图形用户界面设计方法设计计算器版面。
①容器类(窗口--Window类,面板--Panel类),框架类--Frame,Button类,Label类,TextField类等类的构造方法,菜单(菜单栏、菜单项)的建立于应用。
②事件处理机制:监听器类WinClose(),actionPerformed()。
2.2计算器计算功能实现,即按钮监听器的实现自定义变量:x,y为操作数,op为操作符。
根据单击按钮不同进行不同的操作,详见处理按钮单击事件方法actionPerformed(ActionEvent e)(计算功能算法)流程图。
第三部分详细设计3.2处理按钮单击事件方法actionPerformed(ActionEvent e)(计算器计算功能算法)流程图:第四部分运行效果图4.1运行初始图:4.2 计算功能测试图:-1+23.4 将textp中数据赋给yN Y单击”1”~”9”将单击数字插入到textp中数据后,并将textp中数据赋给y 将textp赋0,并str.stelength(0);结束4.2 数学分组功能测试图:第五部分心得与体会5.1 Java是一门实践性很强的编程语言,每学习到一个新的知识点应当及时动手编写程序,提高动手能力,加深对语言的理解。
5.2 根据Java图形用户界面设计方法设计计算器版面有很多种设计方法,学习过程中应灵活变通,使版面的设计更简单易懂。
5.3 本次设计的计算器还有不足之处,首先还没有实现科学型的计算功能,其次还没有键盘输入功能,因此还应继续努力,更加完善计算器的功能。
第六部分附录6.1计算器计算功能算法(按钮"="):if(e.getSource()==b26) // "="{str.setLength(0);switch(op){case 0 :if(flag==1)textp.setText(String.valueOf(x+y));else{str.setLength(0);str.append(x+y);fun();}break;case 1 :if(flag==1)textp.setText(String.valueOf(x-y)); else{str.setLength(0);str.append(x-y);fun();}break;case 2 :if(flag==1)textp.setText(String.valueOf(x*y)); else{str.setLength(0);str.append(x*y);fun();}break;case 3 :if(y==0){textp.setText("除数不能为零");str.setLength(0);y=0;}else{if(flag==1)textp.setText(String.valueOf(x/y)); else{str.setLength(0);str.append(x/y);fun();}}break;}}6.2 fun()函数(数学分组功能)public void fun(){flag=0;int t=0;StringBuffer temp;String sstr=str.toString();if(sstr.trim().indexOf("-")==1){temp=new StringBuffer(str.substring(1));t=1;}elsetemp=new StringBuffer(str.substring(0));if(sstr.trim().indexOf(".")==-1){int j=temp.length();for(int i=j;i>3;){temp.insert(i-3,",");i=i-3;}if(t==0)textp.setText(temp.toString());elsetextp.setText('-'+temp.toString());}else{int i=sstr.indexOf('.');StringBuffer s1=new StringBuffer(sstr.substring(0,i));StringBuffer s2=new StringBuffer(sstr.substring(i+1));for(int j=s1.length();j>3;){s1.insert(j-3,",");j=j-3;}if(t==0)textp.setText(s1.toString()+'.'+s2.toString());elsetextp.setText('-'+s1.toString()+'.'+s2.toString());}}。
java课程设计之计算器
buttonCe.setForeground(new Color(255, 0, 0));
buttonC = new JButton("C");
buttonC.setForeground(new Color(255, 0, 0));
buttonBk.addActionListener(this);
viewMenu.add(tItem);
viewMenu.add(sItem);
mainMenu.add(editMenu);
mainMenu.add(viewMenu);
panel.add(mainMenu, BorderLayout.NORTH);
panel.add(textShow, BorderLayout.CENTER);
在应用程序的基础上修改,生成Applei,用浏览器运行即可。
设计过程(步骤)或程序代码(可以加页):
设计过程:
(1)确定计算器函数功能和界面布局;
(2)设置框架,注册监听事件,编写方法;
ห้องสมุดไป่ตู้(3)调试运行;
(4)改写应用程序,生成APPLET
程序代码如下:
Appalication如下:
import java.awt.*;
Mod = new JButton("%");
Mod.setForeground(new Color(0, 0, 255));
Sqrt = new JButton("sqrt");
Sqrt.setForeground(new Color(0, 0, 255));
Dao = new JButton("1/x");
java简易计算器实训报告
《Java课程设计》计划班级:物联网111班任课教师:一.设计目的1.通过课程设计把《Java程序设计》这门课所学的内容融会贯通,学会Java设计程序、开发应用软件的基本能力。
2.通过设计能使学生更好掌握JAVA面向对象基本编程技术和方法。
3.培养学生查阅文献资料及编写技术报告的能力。
二.设计题目简易科学计算器内容:(1)通过菜单可以切换简易计算器和科学计算器。
简易计算器:实现连续的+、-、*、/运算,计算功能符合四则运算法。
科学计算器:至少包括开方、平方、幂运算、1/n等操作。
(2)图形用户界面美观、布局合理、功能操作简便。
三.设计要求《Java课程设计》是物联网专业学生在完成《Java程序设计》课程学习后进行的一门专业实践课程,是培养学生综合运用所学知识解决专业相关问题的重要环节,是对学生实际工作能力的具体训练和考察过程。
本次课程设计的题目使用Java语言来开发。
要求每个学生可以独立完成上述Java基础设计题目,同时可以通过同学间的讨论,共同编写比较复杂的综合课程设计题目。
希望学学能够努力实践,提高实际动手能力。
要求每个学生必须参加,并完成课程设计任务:(1)每个学生明确设计目的和要求,根据自己的实际情况选择一个题目,实际独立动手完成这个题目,编写出程序代码,并调试通过。
(2)每个学生必须在上机前做好充分准备,每次上机必须目的明确,事先编写好程序代码,要在规定的时间和地点上机调试。
要求利用MyEclipse开发工具调试通过(3)每个学生程序完成后撰写《Java课程设计报告》,按照《Java课程设计计划》后面附带的报告模版格式实际撰写。
(4)结果形式:程序文件压缩包一个,课程设计报告一份。
四.进度安排(1)准备阶段(1天):选择设计题目、了解设计目的要求、查阅相关资料。
(2)程序模块设计分析(1天):程序总体设计、详细设计(3)代码编写调试(2天):程序代码编写、调试、测试。
五.参考文献[1] 胡伏湘.Java程序设计实用教程(第2版).北京:清华大学出版社,2009[2] 叶核亚.Java程序设计实用教程(第3版).北京:电子工业出版社,2010[3] 耿详义. Java课程设计(第1版). 北京:清华大学出版社,2004六.成绩评定成绩按五级制评定。
java课程设计模拟计算器
王子涛 | 计科1305|0902130510 | 2015年10月20日中南大学JAVA 课程设计实验报告一、课设内容模拟计算器:设计实现一个模拟计算器,能进行整数的加、减、乘、除等四则运算。
二、需求分析如题,要求能实现整数的加、减、乘、除等四则运算,我在这个基础上,添加了其他一些常用的功能,如实现百分号%、进行开根号运算、进行1/x运算、以及最小化到托盘。
三.总体设计要实现该计算器,主要有两个主要模块,第一个是界面模块用于设计计算器的图形界面,第二个是功能模块用于实现计算器的基本功能。
界面模块中除了设计图形界面,还需为各数字、功能按钮及显示框实现监听事物的能力。
功能模块中编写事件处理函数,用于实现计算器的功能。
因为我还实现了最小化到托盘的程序,所以我用了另一个类写最小化到托盘的程序。
四.详细设计4.1 JCALCULTOR类4.1.1成员变量:JButton[] buttons 用于实现各数字及功能模块的定义。
JButton reset用于实现“清零”功能。
JTextField display 定义显示框。
Int I 用于循环定义各按钮。
boolean isFirstDigit用于设置第一个数的输入。
double number 用于保存输入的数字。
String operator用于保存输入的按钮。
4.1.2成员函数:public JCalculator()构造函数。
publicvoid actionPerformed(ActionEvent e)事件处理函数。
Object target = e.getSource(); target为得到点击的是什么。
String label = e.getActionCommand();if (target == reset)处理各按钮的事件。
handleReset();elseif ("0123456789.".indexOf(label) > 0)handleNumber(label);elsehandleOperator(label);public void handleReset()处理点击reset按钮是索要发生的事。
Java计算器课程设计报告模拟科学计算器
模拟科学计算器一.概述1.程序具备的功能:(1)使用图形用户界面:一个文本框;0-9数字按钮;加、减、乘、除运算符;“等于”符号;复位按钮;(2)完成整数、实数的四则运算(加、减、乘、除)以及三角函数的运算等等;(3)通过按钮点击实现数据的复位(清零);(4)实数运算中小数位的精度一致。
实现要点:添加相关组件并进行按钮事件处理。
要求提交源程序。
2.课程设计的主要设计思想对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本,总体界面用布局管理器布局。
布局设计好后再添加按钮事件。
对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。
在进行加、减、乘、除计算时要把点击加、减、乘、除按钮之前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数值加、减、乘、除以及三角函数等一系列的运算。
二.课程设计思路1.界面设计界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式,其图形界面如下:2.功能介绍这是计算器中的一种:简单计算器,本项目用到了Java中的GUI界面和swing 组件以及awt布局,所以简单易用,它能完成如下的几个小功能:点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除求模四则运算;还能通过用户自己在文本框中输入数字,进行简单运算;如果输入有误时可以按Clear撤销后重新输入新数据。
三.设计过程以及源代码程序流程图如下:UML图如下:附录源程序:import java.awt.*;import java.awt.event.*;import java.text.DecimalFormat;import javax.swing.*;public class Calucator extends JFrame {private JTextField tf;private JPanel panel1, panel2, panel3, panel4;private JMenuBar myBar;private JMenu menu1, menu2, menu3;private JMenuItem editItem1, editItem2, help1, help2, help3;private JRadioButtonMenuItem seeItem1, seeItem2;//单选框private JCheckBoxMenuItem seeItem3;//复选框private ButtonGroup bgb;private String back;private boolean IfResult = true, flag = false;private String oper = "=";private double result = 0;private Num numActionListener;private DecimalFormat df;public Calucator(){super("科学计算器");//设置标题栏df = new DecimalFormat("#.####");//保留四位小数this.setLayout(new BorderLayout(10, 5));panel1 = new JPanel(new GridLayout(1, 3, 10, 10));panel2 = new JPanel(new GridLayout(5, 6, 5, 5));//5行6列panel3 = new JPanel(new GridLayout(5, 1, 5, 5));panel4 = new JPanel(new BorderLayout(5, 5));/*** 菜单栏*/myBar = new JMenuBar();menu1 = new JMenu("编辑(E)");menu2 = new JMenu("查看(V)");menu3 = new JMenu("帮助(H)");menu1.setFont(new Font("宋体", Font.PLAIN, 12));menu2.setFont(new Font("宋体", Font.PLAIN, 12));menu3.setFont(new Font("宋体", Font.PLAIN, 12));/*** 编辑栏*/editItem1 = new JMenuItem("复制(C) Ctrl+C"); editItem2 = new JMenuItem("粘贴(P) Ctrl+V");editItem1.setFont(new Font("宋体",Font.PLAIN,12)); editItem2.setFont(new Font("宋体",Font.PLAIN,12));/*** 查看栏*/seeItem1 = new JRadioButtonMenuItem("科学型(T)"); seeItem2 = new JRadioButtonMenuItem("标准型(S)"); seeItem3 = new JCheckBoxMenuItem("数字分组(I)");seeItem1.setFont(new Font("宋体",Font.PLAIN,12)); seeItem2.setFont(new Font("宋体",Font.PLAIN,12)); seeItem3.setFont(new Font("宋体",Font.PLAIN,12));/*** 帮助栏*/help1 = new JMenuItem("帮助主题(H)");help2 = new JMenuItem("关于计算器(A)");help1.setFont(new Font("宋体",Font.PLAIN,12)); help2.setFont(new Font("宋体",Font.PLAIN,12));bgb = new ButtonGroup();//选项组menu1.add(editItem1);menu1.add(editItem2);menu2.add(seeItem1);menu2.add(seeItem2);menu2.addSeparator();//添加一条分割线menu2.add(seeItem3);menu3.add(help1);menu3.addSeparator();//添加一条分割线menu3.add(help2);myBar.add(menu1);myBar.add(menu2);myBar.add(menu3);this.setJMenuBar(myBar);numActionListener = new Num();//实现数字监听/*** 文本域,即为计算器的屏幕显示区域*/tf = new JTextField();tf.setEditable(false);//文本区域不可编辑tf.setBackground(Color.white);//文本区域的背景色tf.setHorizontalAlignment(JTextField.RIGHT);//文字右对齐tf.setText("0");tf.setBorder(BorderFactory.createLoweredBevelBorder());init();//对计算器进行初始化}/*** 初始化操作* 添加按钮*/private void init(){addButton(panel1, "Backspace", new Clear(), Color.red);addButton(panel1, "CE", new Clear(), Color.red);addButton(panel1, "C", new Clear(), Color.red);addButton(panel2, "1/x", new Signs(), Color.magenta);addButton(panel2, "log", new Signs(), Color.magenta);addButton(panel2, "7", numActionListener, Color.blue);addButton(panel2, "8", numActionListener, Color.blue);addButton(panel2, "9", numActionListener, Color.blue);addButton(panel2, "÷", new Signs(), Color.red);addButton(panel2, "n!", new Signs(), Color.magenta);addButton(panel2, "sqrt", new Signs(), Color.magenta);addButton(panel2, "4", numActionListener, Color.blue);addButton(panel2, "5", numActionListener, Color.blue);addButton(panel2, "6", numActionListener, Color.blue);addButton(panel2, "×", new Signs(), Color.red);addButton(panel2, "sin", new Signs(), Color.magenta);addButton(panel2, "x^2", new Signs(), Color.magenta);addButton(panel2, "1", numActionListener, Color.blue);addButton(panel2, "2", numActionListener, Color.blue);addButton(panel2, "3", numActionListener, Color.blue);addButton(panel2, "-", new Signs(), Color.red);addButton(panel2, "cos", new Signs(), Color.magenta);addButton(panel2, "x^3", new Signs(), Color.magenta);addButton(panel2, "0", numActionListener, Color.blue);addButton(panel2, "-/+", new Clear(), Color.blue);addButton(panel2, ".", new Dot(), Color.blue);addButton(panel2, "+", new Signs(), Color.red);addButton(panel2, "tan", new Signs(), Color.magenta);addButton(panel2, "%", new Signs(), Color.magenta);addButton(panel2, "π", numActionListener, Color.orange);addButton(panel2, "e", numActionListener, Color.orange);addButton(panel2, "′″", new Signs(), Color.orange);addButton(panel2, "=", new Signs(), Color.red);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.red);//用于清除存储区中的数值addButton(panel3, "MR", null, Color.red);//可将存储区中的数调出到显示栏中addButton(panel3, "MS", null, Color.red);//存储当前的显示值 addButton(panel3, "M+", null, Color.red);//将当前显示的数与存储区中的数相加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);}/*** 统一设置按钮的的使用方式* @param panel* @param name* @param action* @param color*/private void addButton(JPanel panel, String name, ActionListener action, Color color){JButton bt = new JButton(name);panel.add(bt);//在面板上增加按钮bt.setForeground(color);//设置前景(字体)颜色bt.addActionListener(action);//增加监听事件}/*** 计算器的基础操作(+ - ×÷)* @param x*/private void getResult (double x){if(oper == "+"){result += x;}else if(oper == "-"){result -= x;}else if(oper == "×"){result *= x;}else if(oper == "÷"){result /= x;}else if(oper == "="){result = x;}tf.setText(df.format(result));}/*** 运算符号的事件监听*/class Signs implements ActionListener{public void actionPerformed(ActionEvent e) {/** 用ActionEvent对象的getActionCommand()方法* 取得与引发事件对象相关的字符串*/String str = e.getActionCommand();/* sqrt求平方根 */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("负数不能开平方根");}}/* log求常用对数 */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()) / 100));}/* 1/x求倒数 */else if(str.equals("1/x")){if(Double.parseDouble(tf.getText()) == 0){tf.setText("除数不能为零");}else{tf.setText(df.format(1 / Double.parseDouble(tf.getText())));}}/* sin求正弦函数 */else if(str.equals("sin")){double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.sin(i))));}/* cos求余弦函数 */double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.cos(i)))); }/* tan求正切函数 */else if(str.equals("tan")){double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(Math.tan(i)))); }/* n!求阶乘 */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("无法进行阶乘");}}/* x^2求平方 */else if(str.equals("x^2")){double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(i*i)));}/* x^3求立方 */else if(str.equals("x^3")){double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(df.format(i*i*i)));}/* ′″角度转换 *//*** 将角度值转换成弧度值,方便三角函数的计算*/double i = Double.parseDouble(tf.getText());tf.setText(String.valueOf(i/180*Math.PI));}else{if(flag){IfResult = false;}if(IfResult){oper = str;}else{getResult(Double.parseDouble(tf.getText()));oper = str;IfResult = true;}}}}/*** 清除按钮的事件监听*/class Clear implements ActionListener{public void actionPerformed(ActionEvent e) {/** 用ActionEvent对象的getActionCommand()方法* 取得与引发事件对象相关的字符串*/String str = e.getActionCommand();if(str == "C"){tf.setText("0");IfResult = true;result = 0;}else if(str == "-/+"){double i = 0 - Double.parseDouble(tf.getText().trim());tf.setText(df.format(i));}else if(str == "Backspace"){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");IfResult = true;}}else{if(tf.getText().length() > 2){tf.setText(tf.getText().substring(0, tf.getText().length() - 1));}else{tf.setText("0");IfResult = true;}}}else if(str == "CE"){tf.setText("0");IfResult = true;}}}/*** 数字输入的事件监听*/class Num implements ActionListener{public void actionPerformed(ActionEvent e) {String str = e.getActionCommand();if(IfResult){tf.setText("");IfResult = 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");IfResult = true;flag = true;}}}}/*** 小数点的事件监听*/class Dot implements ActionListener{public void actionPerformed(ActionEvent e) { IfResult = false;if(tf.getText().trim().indexOf(".") == -1){tf.setText(tf.getText() + ".");}}}/*** main方法*/public static void main(String[] args) {new Calucator().setVisible(true);}}四.程序的调试与运行结果说明界面展示:实际运算结果展示:55+45当除数为0时,对应的输出:“除数不能为0”的提示:五.课程设计总结在做本项目是时候,会遇到很多小问题,比如说:如何保存输入的数字和下一个数进行加、减、乘、除运算。
JAVA模拟科学计算器
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Ca extends JFrame implements ActionListener{//*********************************************************************** //标准型计算器控件键钮static JFrame f1 = new JFrame("计算器");private String KEYS[] = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};private String M[] = {" ","MC","MR","MS","M+"};private String COM[] = {"Backspace","CE","C"};private JButton keys[] = new JButton[KEYS.length];private JButton com[] = new JButton[COM.length];private JButton m[] = new JButton[M.length];private JTextField result,hh,jj;MenuBar menubar1=new MenuBar();Menu edit=new Menu("编辑(E)"),view=new Menu("查看(V)"),help=new Menu("帮助(H)");MenuItem copy=new MenuItem("复制(C)"),paste=new MenuItem("粘贴(P)"),standar=new MenuItem("标准型(T)"),science=new MenuItem("科学型(S)"),numgroup=new MenuItem("数字分组(I)"),helpt=new MenuItem("帮助主题(H)"),about=new MenuItem("关于计算器(A)");private boolean firstDigit = true; //判断第一个输入的字符是否是数字private double resultNum = 0.0,resultNum2 = 0.0; //中间结果private String operator = "=",co,str,operator2 = "=";private boolean operateValidFlag = true;//*********************************************************************** //科学性计算器控件及按钮static JFrame f2 = new JFrame("科学计算器");private JTextField result2;private String[] KON = {"sta","F-E","(",")","MC","Ave","dms","Exp","In","MR","Sum","sin","x^y","log","MS","s","cos","x^3","n!","M+","Dat","tan","x^2","1/x","pi"};private String[] KO = {"7","8","9","/","Mod","And","4","5","6","*","Or","Xor","1","2","3","-","Lsh","Not","0","+/-",".","+","=","Int","A","B","C","D","E","F"};private String ITM[]={"标准型","科学型","十六进制数(H) F5","十进制(D) F6","八进制(O) F7","二进制(B) F8","四字(Q) F12","DWORD 值(R)F2","单字(W)F3","字节(Y) F4","数字分组(I)"};private final String[] COMM = {"Backspace","CE","C"};private JButton comm[] = new JButton[COMM.length];private JButton kon[] = new JButton[KON.length];private JButton ko[] = new JButton[KO.length];private MenuItem itm[] = new MenuItem[ITM.length];private JPanel panel0,panel1,panel2,panel3,panel4,panel5,panel6;Checkbox checkbox1,checkbox2,checkbox3,checkbox4;MenuBar menubar2=new MenuBar(); //添加菜单条Menu edit2=new Menu("编辑(E)"),view2=new Menu("查看(V)"),help2=new Menu("帮助(H)");MenuItem copy2=new MenuItem("复制(C) Ctrl+C"),past2=new MenuItem("粘贴(P) Ctrl+V"),standar2=new MenuItem("标准型(T)"),science2=new MenuItem("科学型(S)"),numgroup2=new MenuItem("数字分组(I)"),menuitem1=new MenuItem("十六进制数(H) F5"),menuitem2=new MenuItem("十进制(D) F6"),menuitem3=new MenuItem("八进制(O) F7"),menuitem4=new MenuItem("二进制(B) F8"),menuitem5=new MenuItem("四字(Q) F12"),menuitem6=new MenuItem("DWORD 值(R)F2"),menuitem7=new MenuItem("单字(W)F3"),menuitem8=new MenuItem("字节(Y) F4"),helpt2=new MenuItem("帮助主题(H)"),about2=new MenuItem("关于计算器(A)");//*********************************************************************** //构造函数public Ca(){//标准型开始初始化********************result = new JTextField("0.");result.setHorizontalAlignment(JTextField.RIGHT); //文字右对齐result.setEditable(false); //设置为不可编辑result.setBackground(Color.WHITE); //设置颜色为白色JPanel k0 = new JPanel();k0.setLayout(new GridLayout(4,5,5,5));for(int i = 0;i < KEYS.length;i++){keys[i] = new JButton(KEYS[i]);k0.add(keys[i]);keys[i].setForeground(Color.blue);}keys[3].setForeground(Color.red);keys[8].setForeground(Color.red);keys[13].setForeground(Color.red);keys[18].setForeground(Color.red);keys[19].setForeground(Color.red);JPanel c0 = new JPanel();c0.setLayout(new GridLayout(1,3,5,5));for(int i = 0;i < COM.length;i++){com[i] = new JButton(COM[i]);c0.add(com[i]);com[i].setForeground(Color.red);}JPanel m0 = new JPanel();m0.setLayout(new GridLayout(5,1,5,5));for(int i = 0;i < M.length;i++){m[i] = new JButton(M[i]);m0.add(m[i]);m[i].setForeground(Color.red);}m[0].setForeground(Color.black);//f1的监视器for(int i = 0;i < KEYS.length;i++){keys[i].addActionListener(this);}for(int i = 0;i < COM.length;i++){com[i].addActionListener(this);}for(int i = 0;i < M.length;i++){m[i].addActionListener(this);}//复制事件copy.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int count;count=str.length();if(count!=0)co=result.getText();elseSystem.out.println("没有可复制的对象");}});//粘贴事件paste.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){str=co;result.setText(str);}});//复制事件copy2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int count;count=str.length();if(count!=0)co=result2.getText();elseSystem.out.println("没有可复制的对象");}});//粘贴事件past2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){str=co;result2.setText(str);}});edit.add(copy);edit.add(paste);view.add(standar);view.add(science);view.addSeparator();view.add(numgroup);help.add(helpt);help.addSeparator();help.add(about);menubar1.add(edit);menubar1.add(view);menubar1.add(help);//整体布局JPanel p1 = new JPanel();p1.setLayout(new BorderLayout());p1.add("North",c0);p1.add("Center",k0);JPanel p2 = new JPanel();p2.setLayout(new BorderLayout());p2.add("Center",result);f1.setLayout(new BorderLayout(3,5));f1.add("North",p2);f1.add("Center",p1);f1.add("West",m0);f1.setBackground(Color.LIGHT_GRAY);f1.setLocation(200,200);f1.setMenuBar(menubar1);f1.setVisible(true);f1.setResizable(false);//不可最大化f1.pack(); //紧凑f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//标准型初始化结束//**************************************************** standar2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){f1.setVisible(true);f2.setVisible(false); //按钮不可操作}});science.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){f1.setVisible(false);f2.setVisible(true); //按钮不可操作}});//****************************************************//科学性初始化开始panel0=new JPanel();panel1=new JPanel();panel2=new JPanel();panel3=new JPanel();panel4=new JPanel();panel5=new JPanel();panel6=new JPanel();panel0.setLayout(new GridLayout(1,4)); //设置网格型布局管理器panel1.setLayout(new GridLayout(1,3,30,0));panel2.setLayout(new GridLayout(1,2));panel3.setLayout(new GridLayout(1,3,5,0));panel4.setLayout(new GridLayout(5,5,5,5));panel5.setLayout(new GridLayout(5,6,5,5));panel6.setLayout(new FlowLayout(FlowLayout.LEFT)); //按钮左对齐result2 = new JTextField("0.",100);result2.setHorizontalAlignment(JTextField.RIGHT); //文字右对齐result2.setEditable(false); //设置为文本不可编辑result2.setBackground(Color.WHITE); //设置文本框颜色为白色CheckboxGroup cbg1=new CheckboxGroup();checkbox1=new Checkbox("十六进制",false,cbg1);checkbox2=new Checkbox("十进制",true,cbg1);checkbox3=new Checkbox("八进制",false,cbg1);checkbox4=new Checkbox("二进制",false,cbg1);panel0.add(checkbox1);panel0.add(checkbox2);panel0.add(checkbox3);panel0.add(checkbox4);CheckboxGroup cbg2=new CheckboxGroup();panel1.add(new Checkbox("角度",true,cbg2));panel1.add(new Checkbox("弧度",false,cbg2));panel1.add(new Checkbox("梯度",false,cbg2));JLabel HH = new JLabel(" ");panel2.add(new Checkbox("Inv",false));panel2.add(new Checkbox("Hyp",false));hh = new JTextField();jj = new JTextField();hh.setText(" ");hh.setEditable(false);jj.setText(" ");jj.setEditable(false);panel2.add(hh);panel2.add(HH);panel2.add(jj);panel6.add(result2);edit2.add(copy2);edit2.add(past2);view2.add(standar2);view2.add(science2);view2.addSeparator();view2.add(menuitem1);view2.add(menuitem2);view2.add(menuitem3);view2.add(menuitem4);view2.addSeparator();view2.add(menuitem5);view2.add(menuitem6);view2.add(menuitem7);view2.add(menuitem8);view2.addSeparator();view2.add(numgroup2);help2.add(helpt2);help2.addSeparator();help2.add(about2);menubar2.add(edit2);menubar2.add(view2);menubar2.add(help2);for(int i = 0;i < COMM.length;i++){comm[i] = new JButton(COMM[i]);panel3.add(comm[i]);comm[i].setForeground(Color.red); }for(int i = 0;i < KON.length;i++){kon[i] = new JButton(KON[i]);panel4.add(kon[i]);kon[i].setForeground(Color.magenta); }kon[4].setForeground(Color.red);kon[9].setForeground(Color.red);kon[14].setForeground(Color.red);kon[19].setForeground(Color.red);kon[0].setForeground(Color.blue);kon[24].setForeground(Color.blue);kon[5].setForeground(Color.blue);kon[10].setForeground(Color.blue);kon[15].setForeground(Color.blue);kon[20].setForeground(Color.blue);for(int i = 0;i < KO.length;i++){ko[i] = new JButton(KO[i]);panel5.add(ko[i]);ko[i].setForeground(Color.red);}ko[0].setForeground(Color.blue);ko[1].setForeground(Color.blue);ko[2].setForeground(Color.blue);ko[6].setForeground(Color.blue);ko[7].setForeground(Color.blue);ko[8].setForeground(Color.blue);ko[12].setForeground(Color.blue);ko[13].setForeground(Color.blue);ko[14].setForeground(Color.blue);ko[18].setForeground(Color.blue);ko[19].setForeground(Color.blue);ko[20].setForeground(Color.blue);//添加监视器for(int i = 0;i < KON.length;i++){kon[i].addActionListener(new ca2Actionlistener()); }for(int i = 0;i < KO.length;i++){ko[i].addActionListener(new ca2Actionlistener());}for(int i = 0;i < COMM.length;i++){comm[i].addActionListener(new ca2Actionlistener()); }checkbox1.addItemListener(new itemListener()); checkbox2.addItemListener(new itemListener()); checkbox3.addItemListener(new itemListener()); checkbox4.addItemListener(new itemListener());JPanel pp1 = new JPanel();pp1.setLayout(new GridLayout(3,1));pp1.add(panel6);JPanel pp2 = new JPanel();pp2.setLayout(new FlowLayout(FlowLayout.LEFT));pp2.add(panel0);pp2.add(new JLabel(" "));pp2.add(panel1);pp1.add(pp2);JPanel pp3 = new JPanel();pp3.setLayout(new FlowLayout(FlowLayout.LEFT));pp3.add(panel2);pp3.add(new JLabel(" "));pp3.add(panel3);pp1.add(pp3);JPanel pp4 = new JPanel();pp4.setLayout(new FlowLayout(FlowLayout.LEFT));JLabel NN = new JLabel(" ");f2.setLayout(new GridLayout(2,1));f2.add(pp1);pp4.add(panel4);pp4.add(NN);pp4.add(panel5);f2.add(pp4);f2.setBackground(Color.LIGHT_GRAY);f2.setSize(655,340);f2.setLocation(200,200);f2.setMenuBar(menubar2);f2.setVisible(false);f2.setResizable(false);f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//科学型初始化结束//****************************************************//标准型监听器public void actionPerformed(ActionEvent e){String label = e.getActionCommand();//获取事件源的标签if(label.equals(COM[0]))//按BackspacehandleBS();else if(label.equals(COM[1]))//按CEresult.setText("0");else if(label.equals(COM[2]))//按ChandleC();else if(label.equals(M[1]))//按MChandleMC();else if(label.equals(M[2]))//按MRhandleMR();else if(label.equals(M[3]))//按MShandleMS();else if(label.equals(M[4]))//按M+handleM();else if("0123456789.".indexOf(label) >= 0)//按数字键或者小数点handleNB(label);else//按运算符handleOR(label);}private void handleBS()//处理Backspace{String text = new String(result.getText());int j = text.length();if(j > 0){text = text.substring(0,j - 1);if(text.length() == 0){result.setText("0");firstDigit = true;operator = "=";}else{result.setText(text);}}}private void handleNB(String key)//处理数字键{if(firstDigit){result.setText(key);}else if((key.equals("."))&&(result.getText().indexOf(".")<0)){result.setText(result.getText() + ".");}else if(!key.equals(".")){result.setText(result.getText() + key);}firstDigit = false;}private void handleC()//处理C{result.setText("0");firstDigit = true;operator = "=";}private void handleOR(String key)//处理运算符{if(operator.equals("/")){if(getNumberFromText() == 0.0){operateValidFlag = false;result.setText("除数不能是零");}elseresultNum /= getNumberFromText();}else if(operator.equals("1/x")){if(resultNum == 0.0){operateValidFlag = false;result.setText("零没有倒数");}elseresultNum = 1 / resultNum;}else if(operator.equals("+"))resultNum += getNumberFromText();else if(operator.equals("-"))resultNum -= getNumberFromText();else if(operator.equals("*"))resultNum *= getNumberFromText();else if(operator.equals("sqrt"))resultNum = Math.sqrt(resultNum);///////// else if(operator.equals("%"))resultNum = resultNum / 100;else if(operator.equals("+/-"))resultNum = resultNum * (-1);else if(operator.equals("=")){ resultNum = getNumberFromText();}if(operateValidFlag)// 双精度浮点数的运算{long t1;double t2;t1 = (long) resultNum;t2 = resultNum - t1;if(t2 == 0 ){result.setText(String.valueOf(t1));}else{result.setText(String.valueOf(resultNum));}}//运算符等于用户按的按钮operator = key;firstDigit = true;operateValidFlag = true;}public void handleMC()//处理MC,清除内存{resultNum = 0.0;result.setText("0");m[0].setText(" ");firstDigit = true;operator = "=";}public void handleMR()//处理MR,重新调用存储的数据{if(result.getText() != "" )//有记忆数字{result.setText("" + resultNum);}}public void handleMS()//处理MS,存储显示的数据{resultNum = Double.valueOf(result.getText()).doubleValue();m[0].setText("M");result.setText("0");firstDigit = true;operator = "=";}public void handleM()//处理M+,将显示的数字与已经存储的数据相加要查看新的数字单击MR{resultNum = resultNum + Double.valueOf(result.getText()).doubleValue();}//标准型监听器定义部分结束//****************************************************//科学性监听器定义class itemListener implements ItemListener{public void itemStateChanged(ItemEvent e){Checkbox cb=(Checkbox)e.getItemSelectable(); //获取事件源的resetable(); //使按钮重新可用if(cb.getLabel().equals( "十六进制")){kon[1].setEnabled(false);kon[5].setEnabled(false);kon[6].setEnabled(false);kon[7].setEnabled(false);kon[10].setEnabled(false);kon[11].setEnabled(false);kon[15].setEnabled(false);kon[16].setEnabled(false);kon[20].setEnabled(false);kon[21].setEnabled(false);kon[24].setEnabled(false);kon[1].setForeground(Color.gray);kon[5].setForeground(Color.gray);kon[6].setForeground(Color.gray);kon[7].setForeground(Color.gray);kon[10].setForeground(Color.gray);kon[11].setForeground(Color.gray);kon[15].setForeground(Color.gray);kon[16].setForeground(Color.gray);kon[20].setForeground(Color.gray);kon[21].setForeground(Color.gray);ko[1].setForeground(Color.blue);ko[2].setForeground(Color.blue);ko[24].setForeground(Color.blue);ko[25].setForeground(Color.blue);ko[26].setForeground(Color.blue);ko[27].setForeground(Color.blue);ko[28].setForeground(Color.blue);ko[29].setForeground(Color.blue);ko[0].setForeground(Color.blue);ko[6].setForeground(Color.blue);ko[7].setForeground(Color.blue);ko[8].setForeground(Color.blue);ko[13].setForeground(Color.blue);ko[14].setForeground(Color.blue); }else if(cb.getLabel().equals( "十进制")) {kon[5].setEnabled(false);kon[10].setEnabled(false);kon[15].setEnabled(false);kon[20].setEnabled(false);ko[24].setEnabled(false);ko[25].setEnabled(false);ko[26].setEnabled(false);ko[27].setEnabled(false);ko[28].setEnabled(false);ko[29].setEnabled(false);kon[5].setForeground(Color.gray); kon[10].setForeground(Color.gray); kon[15].setForeground(Color.gray); kon[20].setForeground(Color.gray); ko[24].setForeground(Color.gray);ko[25].setForeground(Color.gray);ko[26].setForeground(Color.gray);ko[27].setForeground(Color.gray);ko[28].setForeground(Color.gray);ko[29].setForeground(Color.gray);ko[1].setForeground(Color.blue);ko[2].setForeground(Color.blue);kon[1].setForeground(Color.magenta);kon[7].setForeground(Color.magenta); kon[11].setForeground(Color.magenta); kon[16].setForeground(Color.magenta); kon[21].setForeground(Color.magenta); kon[24].setForeground(Color.blue);ko[0].setForeground(Color.blue);ko[6].setForeground(Color.blue);ko[7].setForeground(Color.blue);ko[8].setForeground(Color.blue);ko[13].setForeground(Color.blue);ko[14].setForeground(Color.blue);}else if(cb.getLabel().equals( "八进制")) {kon[1].setEnabled(false);kon[5].setEnabled(false);kon[6].setEnabled(false);kon[7].setEnabled(false);kon[10].setEnabled(false);kon[11].setEnabled(false);kon[15].setEnabled(false);kon[16].setEnabled(false);kon[20].setEnabled(false);kon[21].setEnabled(false);kon[24].setEnabled(false);ko[1].setEnabled(false);ko[2].setEnabled(false);ko[24].setEnabled(false);ko[25].setEnabled(false);ko[26].setEnabled(false);ko[27].setEnabled(false);ko[28].setEnabled(false);ko[29].setEnabled(false);kon[1].setForeground(Color.gray);kon[5].setForeground(Color.gray);kon[6].setForeground(Color.gray);kon[7].setForeground(Color.gray);kon[10].setForeground(Color.gray);kon[11].setForeground(Color.gray);kon[15].setForeground(Color.gray);kon[16].setForeground(Color.gray);kon[20].setForeground(Color.gray);kon[24].setForeground(Color.gray);ko[1].setForeground(Color.gray);ko[2].setForeground(Color.gray);ko[24].setForeground(Color.gray);ko[25].setForeground(Color.gray);ko[26].setForeground(Color.gray);ko[27].setForeground(Color.gray);ko[28].setForeground(Color.gray);ko[29].setForeground(Color.gray);ko[0].setForeground(Color.blue);ko[6].setForeground(Color.blue);ko[7].setForeground(Color.blue);ko[8].setForeground(Color.blue);ko[13].setForeground(Color.blue);ko[14].setForeground(Color.blue); }else if(cb.getLabel().equals( "二进制")) {kon[1].setEnabled(false);kon[5].setEnabled(false);kon[6].setEnabled(false);kon[7].setEnabled(false);kon[10].setEnabled(false);kon[11].setEnabled(false);kon[15].setEnabled(false);kon[16].setEnabled(false);kon[20].setEnabled(false);kon[21].setEnabled(false);kon[24].setEnabled(false);ko[1].setEnabled(false);ko[2].setEnabled(false);ko[24].setEnabled(false);ko[25].setEnabled(false);ko[26].setEnabled(false);ko[27].setEnabled(false);ko[28].setEnabled(false);ko[29].setEnabled(false);ko[0].setEnabled(false);ko[6].setEnabled(false);ko[7].setEnabled(false);ko[8].setEnabled(false);ko[13].setEnabled(false);ko[14].setEnabled(false);kon[1].setForeground(Color.gray);kon[5].setForeground(Color.gray);kon[6].setForeground(Color.gray);kon[7].setForeground(Color.gray);kon[10].setForeground(Color.gray);kon[11].setForeground(Color.gray);kon[15].setForeground(Color.gray);kon[16].setForeground(Color.gray);kon[20].setForeground(Color.gray);kon[21].setForeground(Color.gray);kon[24].setForeground(Color.gray);ko[1].setForeground(Color.gray);ko[2].setForeground(Color.gray);ko[24].setForeground(Color.gray);ko[25].setForeground(Color.gray);ko[26].setForeground(Color.gray);ko[27].setForeground(Color.gray);ko[28].setForeground(Color.gray);ko[29].setForeground(Color.gray);ko[0].setForeground(Color.gray);ko[6].setForeground(Color.gray);ko[7].setForeground(Color.gray);ko[8].setForeground(Color.gray);ko[13].setForeground(Color.gray);ko[14].setForeground(Color.gray);}}}class ca2Actionlistener implements ActionListener{public void actionPerformed(ActionEvent e){String label2 = e.getActionCommand();//获取事件源的标签if(label2.equals(COMM[0]))//按BackspacehandleBS2();else if(label2.equals(COMM[1]))//按CEresult2.setText("0");else if(label2.equals(COMM[2]))//按ChandleC2();else if(label2.equals(KON[4]))//按MChandleMC2();else if(label2.equals(KON[9]))//按MRhandleMR2();else if(label2.equals(KON[14]))//按MShandleMS2();else if(label2.equals(KON[19]))//按M+handleM2();else if(label2.equals(KON[11]))//按sinhandleSI();else if(label2.equals(KON[12])) //按x^yhandleYT();else if(label2.equals(KON[13])) //按loghandleLO();else if(label2.equals(KON[16])) //按coshandleCO();else if(label2.equals(KON[17])) //按x^3handleTT();else if(label2.equals(KON[22])) //按x^2handlePF();else if(label2.equals(KON[18])) //按n!handleJC();else if(label2.equals(KON[21])) //按tanhandleTA();else if(label2.equals(KON[24]))//按piresult2.setText(""+3.141592653);else if("0123456789.".indexOf(label2) >= 0)//按数字键或者小数点handleNB2(label2);else//按运算符handleOR2(label2);}}//科学性监听器定义结束//****************************************************//科学性计算器用到的函数void resetable() //使按钮重新可用{for(int i=0;i<KON.length;i++)kon[i].setEnabled(true);for(int i=0;i<KO.length;i++)ko[i].setEnabled(true);}private void handleC2()//处理C{result2.setText("0");firstDigit = true;operator2 = "=";}private void handleBS2()//处理Backspace{String text2 = new String(result2.getText());int j2 = text2.length();if(j2>0){text2 = text2.substring(0,j2 - 1);if(text2.length() == 0){result2.setText("0");firstDigit = true;operator2 = "=";}else{result2.setText(text2);}}}public void handleMC2()//处理MC,清除内存{resultNum2 = 0.0;result2.setText("0");jj.setText(" ");firstDigit = true;operator2 = "=";}private void handleNB2(String key)//处理数字键{if(firstDigit){result2.setText(key);}else if((key.equals("."))&&(result2.getText().indexOf(".")<0)){result2.setText(result2.getText() + ".");}else if(!key.equals(".")){result2.setText(result2.getText() + key);}firstDigit = false;}public void handleMR2()//处理MR,重新调用存储的数据{if(result2.getText() != "" )//有记忆数字result2.setText("" + resultNum2);}public void handleMS2()//处理MS,存储显示的数据{resultNum2 = Double.valueOf(result2.getText()).doubleValue();result2.setText("0");jj.setText("M");firstDigit = true;operator2 = "=";}public void handleM2()//处理M+,将显示的数字与已经存储的数据相加要查看新的数字单击MR{resultNum2 = resultNum2 + Double.valueOf(result2.getText()).doubleValue();}public void handleSI()//sin{double i= getNumberFromText2();result2.setText(String.valueOf(Math.sin(i)));}public void handleYT()//Y次方{if(getNumberFromText2() == 0.0||getNumberFromText2() == 1){resultNum2 = getNumberFromText2();}else{for(int i=1;i<=getNumberFromText2();i++){resultNum2 *=resultNum2;}}result2.setText(String.valueOf(resultNum2));}public void handleLO()//对数{double i= getNumberFromText2();resultNum2 =Math.log(i);result2.setText(String.valueOf(resultNum2));}public void handleCO()//cos{double i= getNumberFromText2();resultNum2 =Math.cos(i);result2.setText(String.valueOf(resultNum2));}public void handleTT()//三次方{if(getNumberFromText2() == 0.0||getNumberFromText2() == 1){resultNum2= getNumberFromText2();}else{resultNum2= getNumberFromText2()*getNumberFromText2()*getNumberFromText2();}result2.setText(String.valueOf(resultNum2));}public void handlePF()//平方{if(getNumberFromText2() == 0.0||getNumberFromText2() == 1){resultNum2 = getNumberFromText2();}else{resultNum2 = getNumberFromText2()*getNumberFromText2();}result2.setText(String.valueOf(resultNum2));}public void handleJC()//阶乘{double i = getNumberFromText2();if((i%2==0)||(i%2==1))//判断为整数放进行阶乘操作{int j = (int)i;//强制类型转换int resultNum2=1;for(int k=1;k<=j;k++)resultNum2 *= k;result2.setText(String.valueOf(resultNum2));}else{result2.setText("无法求阶乘");}}public void handleTA()//tan{double i= getNumberFromText2();resultNum2 =Math.tan(i);result2.setText(String.valueOf(resultNum2));}private void handleOR2(String key)//处理运算符{if(operator2.equals("/")){if(getNumberFromText2() == 0.0){operateValidFlag = false;result2.setText("除数不能是零");}elseresultNum2 /= getNumberFromText2();}else if(operator2.equals("1/x")){if(resultNum2 == 0.0){operateValidFlag = false;result2.setText("零没有倒数");}elseresultNum2 = 1 / resultNum2;}else if(operator2.equals("+"))resultNum2 += getNumberFromText2();else if(operator2.equals("-"))resultNum2 -= getNumberFromText2();else if(operator2.equals("*"))resultNum2 *= getNumberFromText2();else if(operator2.equals("sqrt"))resultNum2 = Math.sqrt(resultNum2);/////////else if(operator2.equals("%"))resultNum2 = resultNum2 / 100;else if(operator2.equals("+/-"))resultNum2 = resultNum2 * (-1);else if(operator2.equals("=")){ resultNum2 = getNumberFromText2();}if(operateValidFlag)// 双精度浮点数的运算{long t1;double t2;t1 = (long) resultNum2;t2 = resultNum2 - t1;if(t2 == 0 ){result2.setText(String.valueOf(t1));}else{result2.setText(String.valueOf(resultNum2));}}//运算符等于用户按的按钮operator2 = key;firstDigit = true;operateValidFlag = true;}//**************************************************** private double getNumberFromText2()/*从结果文本框中获取数字*/{double res2 = 0;try{。
科学计算器--Java课程设计
《面向对象程序设计》课程设计报告题目:科学计算器软件设计与实现院(系):信息科学与工程学院专业班级:计算机科学与技术1201班学生姓名:**学号: ***********指导教师:**20 14 年 12 月 29 日至20 15 年 1 月 9 日华中科技大学武昌分校制面向对象程序设计课程设计任务书目录1需求与总体设计 (1)1.1需求分析 (1)1.2总体设计思路 (1)1.3功能图 (2)1.4类图 (2)2详细设计 (3)2.1详细设计思路 (3)2.2类图设计说明和细化 (10)3编码实现................................................ 错误!未定义书签。
3.1java编码实现.......................................... 错误!未定义书签。
4系统测试 (59)总结.................................................... 错误!未定义书签。
1需求与总体设计1.1需求分析1.刚启动计算器时的状态:开始计算按键开始键"ON"清零:计算刚启动时,或者任何时候键入了清零键,计算器所处的状态。
2.一个操作数:输入了一个操作数时计算器所处的状态,如键入“2”后的状态,此时操作数为“2”,或者依次键入“3”、“8”后的状态,此时操作数为“38”。
3.运算结果:键入了“=”键后计算器所处的状态,如依次键入“3+5=”之后计算器的状态。
在此状态如果输入数字,输入的数字将作为第一个操作数,开始一次新的计算。
4.一个操作数和一个两元符号:输入了一个操作数和加减乘除中的一个键后计算器的状态,如依次输入“2+”或“31×5=÷”之后计算器的状态。
5.操作数两元符操作数:输入了一个操作数、一个加减乘除符号和另一个操作数后计算器所处的状态,如依次键入“30÷4”或“3+5=÷5”后计算器的状态。
JAVA计算器课程设计
题目:JAVA简易计算器班级: 10计算机学号:姓名:利用JAVA语言设计一个简单的科学计算器,实现加减乘除及开根号、退格、清空,求倒数的简单功能。
由于现代用户更倾向于由鼠标方便操作的图形用户界面,所以我们采用GUI来实现计算器,并采用Swing组件,AWT事件处理等实现具体功能。
在我们日常生活中,计算开支、收入时,大额数字或是多倍小数的计算都需要计算器的帮助,而在学习一些科目时,也常常要处理数字。
虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,不仅操作不便,很多功能也根本用不到。
所以我们想用自己所学设计开发一个属于自己的简单计算器来完成日常学习生活的需求。
一、设计思路利用Java Applet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。
给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。
除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。
二、软件编程。
程序名: JavaJisuanqi.Java程序代码及其分析:import javax.swing.*;import javax.swing.event.*;import java.awt.*;import java.awt.event.*;public class JiSuanQi extends JFrame implements ActionListener{JFrame frame;private JButton jia=new JButton("+");private JButton jian=new JButton("-");private JButton cheng=new JButton("*");private JButton chu=new JButton("/");private JButton qiuyu=new JButton("%");private JButton deng=new JButton("=");private JButton fu=new JButton("+/-");private JButton dian=new JButton(".");private JButton kaigen=new JButton("sqrt");private JButton daoshu=new JButton("1/x");private TextField k1=new TextField();//private ObjConversion convert = new ObjConversion();JMenuItem copy,paste,t,help,about,me;JButton backspace,ce,c,num0,num1,num2,num3,num4,num5,num6,num7,num8,num9; Container cp;JTextField text;String copycontent="";boolean clickable=true,clear=true;int all=0;double qian;String fuhao;int jin=10,first=1;public JiSuanQi(){setTitle("计算器制作by王路 1002020123");setSize(400,300);setLocation(250,200);text=new JTextField(25);// text.setEnabled(false);text.setText("0.");text.setHorizontalAlignment(JTextField.RIGHT);//从右到左//setHorizontalAlignment方法的作用是让标签中的文字内容在标签内按照指定的方式对齐JPanel cp1=new JPanel();JPanel cp2=new JPanel();JPanel cp3=new JPanel();cp=getContentPane();cp.add(cp1,"North");cp.add(cp2,"Center");cp.add(cp3,"South");cp1.setLayout(new GridLayout(1,6));cp2.setLayout(new GridLayout(1,4));cp3.setLayout(new GridLayout(6,4));JTextField t3=new JTextField(25);cp1.add(text);// text.setEnabled(false);text.setEditable(false);text.setBackground(new Color(255, 255, 255));backspace=new JButton("Backspace");backspace.setForeground(new Color(255,0,0));backspace.addActionListener(this);ce=new JButton("CE");ce.setForeground(new Color(255,0,0));ce.addActionListener(this);c=new JButton("C");c.setForeground(new Color(255,0,0));c.addActionListener(this);k1.setVisible(false);cp2.add(k1);cp2.add(backspace);cp2.add(ce);cp2.add(c);num0=new JButton("0");num1=new JButton("1");num2=new JButton("2");num3=new JButton("3");num4=new JButton("4");num5=new JButton("5");num6=new JButton("6");num7=new JButton("7");num8=new JButton("8");num9=new JButton("9");cp3.add(num7);num7.addActionListener(this);cp3.add(num8);num8.addActionListener(this);cp3.add(num9);num9.addActionListener(this);cp3.add(chu);chu.setForeground(new Color(255,0,0)); chu.addActionListener(this);cp3.add(num4);num4.addActionListener(this);cp3.add(num5);num5.addActionListener(this);cp3.add(num6);num6.addActionListener(this);cp3.add(cheng);cheng.setForeground(new Color(255,0,0)); cheng.addActionListener(this);cp3.add(num1);num1.addActionListener(this);cp3.add(num2);cp3.add(num3);num3.addActionListener(this);cp3.add(jian);jian.setForeground(new Color(255,0,0));jian.addActionListener(this);cp3.add(dian);dian.addActionListener(this);cp3.add(num0);num0.addActionListener(this);cp3.add(fu);fu.addActionListener(this);cp3.add(jia);jia.setForeground(new Color(255,0,0));jia.addActionListener(this);cp3.add(daoshu);daoshu.addActionListener(this);cp3.add(qiuyu);qiuyu.addActionListener(this);cp3.add(kaigen);kaigen.addActionListener(this);cp3.add(deng);deng.setForeground(new Color(255,0,0));deng.addActionListener(this);JMenuBar mainMenu = new JMenuBar();setJMenuBar(mainMenu);JMenu editMenu = new JMenu("编辑");JMenu viewMenu = new JMenu("查看");JMenu helpMenu = new JMenu("帮助");mainMenu.add(editMenu);mainMenu.add(viewMenu);mainMenu.add(helpMenu);copy = new JMenuItem(" 复制");paste = new JMenuItem(" 粘贴");KeyStroke copyks=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK);copy.setAccelerator(copyks);//设置退出菜单选项加上快捷键KeyStroke pasteks=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK); paste.setAccelerator(pasteks);//设置退出菜单选项加上快捷键editMenu.add(copy);editMenu.add(paste);copy.addActionListener(this);t = new JMenuItem("标准型");viewMenu.add(t);t.addActionListener(this);help = new JMenuItem(" 使用帮助主题");about = new JMenuItem(" 关于计算器");me = new JMenuItem(" 作者信息");helpMenu.add(help);helpMenu.add(about);helpMenu.add(me);help.addActionListener(this);about.addActionListener(this);me.addActionListener(this);addWindowListener(new WindowDestroyer());//结束窗口}public void actionPerformed(ActionEvent e){//响应动作代码if(first==1)text.setText("");first=0;//第一次把文本框0.清空Object temp = e.getSource();if(temp==copy){copycontent = text.getText(); }if(temp==paste){text.setText(text.getText()+copycontent);}if(temp==help){ //打开系统帮助文件要查资料try{String filePath = "C:/WINDOWS/Help/calc.chm";Runtime.getRuntime().exec("cmd.exe /c "+filePath);}catch(Exception eeee){System.out.println("打开系统的计算器出错");}}if(temp==about){JOptionPane.showMessageDialog(frame," Java计算器王路制作 ","关于计算器",RMATION_MESSAGE); } if(temp==me){JOptionPane.showMessageDialog(frame,"王路 1002020123"); }if(temp==backspace){//退格String s = text.getText();text.setText("");for (int i = 0; i < s.length() - 1; i++){ char a = s.charAt(i);text.setText(text.getText() + a);} }if (temp==ce){ text.setText("0.");clear=true;first=1;}if (temp==c){ text.setText("0.");clear=true;first=1;}if(temp==num0){ if(clear==false)//判断是否点击了符号位text.setText("");text.setText(text.getText()+"0");}if(temp==num1){ if(clear==false)text.setText("");text.setText(text.getText()+"1");clear=true;//第二次不在清空(前二句)}if(temp==num2){ if(clear==false)text.setText("");text.setText(text.getText()+"2");clear=true;}if(temp==num3){ if(clear==false)text.setText("");text.setText(text.getText()+"3");clear=true;}if(temp==num4){ if(clear==false)text.setText("");text.setText(text.getText()+"4");clear=true;}if(temp==num5){if(clear==false)text.setText("");text.setText(text.getText()+"5");clear=true;}if(temp==num6){if(clear==false)text.setText("");text.setText(text.getText()+"6");clear=true;}if(temp==num7){if(clear==false)text.setText("");text.setText(text.getText()+"7");clear=true;}if(temp==num8){if(clear==false)text.setText("");text.setText(text.getText()+"8");clear=true;}if(temp==num9){if(clear==false)text.setText("");text.setText(text.getText()+"9");clear=true;}if(temp==dian){clickable=true;for (int i = 0; i < text.getText().length(); i++) if ('.' == text.getText().charAt(i)){clickable=false;break;} //第一层判断是否里面含有小数点;if(clickable==true)//第二坛判断text.setText(text.getText()+".");}try{if(temp==jia){//加法qian=Double.parseDouble(text.getText());fuhao="+";clear=false;}if(temp==jian){qian=Double.parseDouble(text.getText());fuhao="-";clear=false;}if(temp==cheng){qian=Double.parseDouble(text.getText());fuhao="*";clear=false;}if(temp==chu){qian=Double.parseDouble(text.getText());fuhao="/";clear=false;}if(temp==deng){double ss=Double.parseDouble(text.getText()); text.setText("");if(fuhao=="+")text.setText(qian+ss+"");if(fuhao=="-")text.setText(qian-ss+"");if(fuhao=="*")text.setText(qian*ss+"");if(fuhao=="/")text.setText(qian/ss+"");clear=false;//要清空前一次的数据}if(temp==kaigen){String s = text.getText();if (s.charAt(0) == '-'){text.setText("负数不能开根号");}elsetext.setText(Double.toString(ng.Math.sqrt(Double.parseDouble(text.getTex t()))));clear=false;}if(temp==daoshu){if (text.getText().charAt(0) == '0'&&text.getText().length() == 1){text.setText("除数不能为零");}else{boolean isDec = true;int i, j, k;String s = Double.toString(1 / Double.parseDouble(text.getText()));for (i = 0; i < s.length(); i++)if (s.charAt(i) == '.')break;for (j = i + 1; j < s.length(); j++)if (s.charAt(j) != '0'){isDec = false;break;}if (isDec == true){String stemp = "";for (k = 0; k < i; k++)stemp += s.charAt(k);text.setText(stemp);}elsetext.setText(s);}clear=false;}if(temp==qiuyu){text.setText("0");clear=false;}if (temp == fu){boolean isNumber = true;String s = text.getText();for (int i = 0; i < s.length(); i++)if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' || s.charAt(i) == '-')){isNumber = false;break;}if (isNumber == true){//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉if (s.charAt(0) == '-'){text.setText("");for (int i = 1; i < s.length(); i++){char a = s.charAt(i);text.setText(text.getText() + a);}}//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处elsetext.setText('-' + s);}}}catch(Exception eee){System.out.println("运算时,首先输入数字或字符");text.setText("运算出错");clear=false;}}class WindowDestroyer extends WindowAdapter{//退出窗口动作public void windowClosing(WindowEvent e){System.exit(0);}}public static void main(String arg[])//产生窗口{JiSuanQi win = new JiSuanQi();win.setVisible(true);}}运行截图:四、小结通过此次的课程设计实践,我们不但进一步理解掌握了课上老师教授的知识,而且通过查找资料学会了课上没有的东西,进一步理解了面向对象的含义,发现了很多它比面向过程突出的地方,第一次接触了图形界面,初步了解了GUI方面的知识。
《Java项目实训》课程设计——计算器
信息科学与工程学院课程设计题目:基于java计算器的设计与实现姓名:赵文正学号: 201312310147班级: 2013级升本1班课程: Java项目实训任课教师刘梦琳2014年12月20日课程设计任务书及成绩评定目录1、前言 (3)1.1设计目的及思路 (3)1.2功能模块设计 (3)1.3系统功能图 (4)2、计算器的设计与实现 (4)3、计算器演示 (5)4、总结与体会及讨论分析 (8)5、参考文献 (10)附件: (11)程序源代码 (11)1、前言1.1设计目的及思路通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
利用Java Applet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。
给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。
除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。
至于其中的进制转换功能的实现则是直接调用Java中进制转换的函数,例如要将十进制转换成二进制则可直接调用函数Integer.toBinaryString(int i)来实现,充分显示了Java语言的简洁性和Java语言功能的强大性。
当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生,这也是Java语言健壮性的体现!1.2功能模块设计以下为标准计算器的基本功能:(1)加法两个数据进行加操作,可以为小数。
(2)减法两个数据进行减操作,可以为负数相减。
(3)乘法两个数相乘操作。
(4)除法两个数相除操作。
(5)开平方对任意一个数进行开方运算,可以是小数。
(6)求余对任意一个数进行求余运算。
(7)倒数对任意一个数进行倒数运算。
java课程设计---计算器
10信计2011-2012(二)《Java程序设计》课程设计设计题目模拟科学计算器设计时间学生姓名学生学号所在班级指导教师徐州工程学院数学与物理科学学院摘要计算器在我们的生活中常常会使用到,本次课程设计,通过界面以及其中的逻辑处理,完成了四则运算的处理。
通过awt包或者swing包中的界面设计部分对界面设计的细节可以有更多的了解。
利用面向对象的思想,将各个组件的事件响应分别用不同的类表达出来。
面向对象的思想从很大程度上可以让程序的思路更加清晰,而且可重用性很高。
对于具有相同事件响;应的组件则可以调用相同的类来处理事件。
除此之外,利用栈的知识来解决运算符优先的问题也让我们对java中的栈有了更多的了解。
关键词java;计算器;四则运算;面向对象;栈目录1需求分析 (1)1.1该计算器完成的功能 (1)1.2出错处理 (1)1.3数据处理 (1)2设计方案 (1)2.1设计方法 (1)2.2界面布局 (1)3系统设计 (2)3.1界面设计 (2)3.2功能模块 (2)3.2.1功能模块的设计方案 (2)3.2.2功能模块的实现方法 (3)4系统的开发和运行环境及安装配置说明 (3)5系统测试截图 (4)5.1系统初始运行界面 (4)5.2计算器按键测试 (4)5.3运算符重复输入测试 (4)5.4被除数为0的测试 (5)5.5小数点重复性检查 (5)5.6 backspace按键越界操作 (6)5.7优先级程序计算 (6)5.8计算结果 (7)6总结与心得体会 (7)附录 (9)1需求分析1.1该计算器完成的功能用户能够完成四则混合运算+、-、*、/,并且计算器能够自动的识别运算符的优先级,根据输入的运算公式,自动计算出相应的结果。
同时完成计算器中的backspace、ce按钮,能够完成消除或者删除的功能。
1.2出错处理当用户如果按下的是除零的操作,显示框将显示“被除数不能为0”。
当用户如果连续多次按下运算符,计算器自动记忆第一次运算符,并且做防连续输入相同的运算符或者是不同的运算符。
java实现计算器课程设计
java实现计算器课程设计一、教学目标本节课的教学目标是让学生掌握Java语言实现计算器的基本原理和编程技巧,培养学生的编程能力和逻辑思维能力。
具体来说,知识目标包括了解Java语言的基本语法和数据结构,掌握计算器的数学原理和算法;技能目标包括能够使用Java语言编写简单的计算器程序,能够进行调试和优化;情感态度价值观目标包括培养学生对编程的兴趣和热情,提高学生解决问题的自信心和耐心。
二、教学内容本节课的教学内容主要包括Java语言的基本语法和数据结构,计算器的数学原理和算法,以及计算器程序的设计和调试。
具体来说,首先介绍Java语言的基本语法和数据结构,如变量、运算符、控制语句、数组等;然后讲解计算器的数学原理和算法,如加减乘除、括号处理等;最后通过实例演示和练习,让学生掌握计算器程序的设计和调试方法。
三、教学方法本节课采用讲授法、案例分析法和实验法相结合的教学方法。
首先通过讲授法,向学生讲解Java语言的基本语法和数据结构,计算器的数学原理和算法;然后通过案例分析法,分析计算器程序的设计和调试方法,让学生加深对计算器原理的理解;最后通过实验法,让学生动手编写和调试计算器程序,培养学生的编程能力和实验技能。
四、教学资源本节课的教学资源包括教材、参考书、多媒体资料和实验设备。
教材和参考书用于为学生提供Java语言和计算器原理的基础知识,多媒体资料用于辅助讲解和演示,实验设备用于让学生进行编程实践。
教学资源的选择和准备应该符合教学内容和教学方法的要求,以支持学生的学习和教师的授课。
五、教学评估本节课的教学评估主要包括平时表现、作业和考试三个部分。
平时表现主要评估学生在课堂上的参与程度、提问回答和小组讨论的表现;作业主要评估学生的编程能力和算法理解,包括课堂练习和课后作业;考试则是对学生整体掌握情况的评估,包括Java语言基础知识、计算器原理和编程实践。
评估方式应客观、公正,能够全面反映学生的学习成果。
JAVA课程设计科学计算器
《JAVA程序设计》课程设计模拟Win7科学计算器*名:***班级:12级物联网(二)班学号:指导教师:***成绩:完成时间:2014.06.05一、设计目的通过此次课程设计将课堂上学到的内容与应用结合在一起,掌握图形用户界面设计方法和事件响应机制,并极大地促进自己对java程序设计的认识和掌握,更加系统的学习和了解如何从整体上设计和实现一个程序。
二、功能介绍模拟Win7标准型计算器(1)实现加、减、乘、除的双目单类别的基础运算。
(2)实现加、减、乘、除的多目多类别的混合运算。
(3)实现退格、清零、开根号、百分比、倒数、正负数运算。
(4)实现MC、MR、MS、M+、M-的记忆功能运算。
(5)实现复制(Ctr +c)、粘贴(Ctr+v)的功能。
(6)实现不同类型计算器的切换(WindowsXp计算器)功能。
模拟WindowsXp计算器(1)实现正弦、余弦、正切、反三角函数arcsin、arccos、arctan以及对数log、log10的功能运算;(2)实现退格、清零、开根号、百分比、倒数、正负数运算。
(3)实现加、减、乘、除的多目多类别的混合运算。
(4)实现加、减、乘、除的双目单类别的基础运算。
(5)实现不同类型计算器的切换(Win7标准计算器)功能。
三、概要设计3.1 自定义类说明该程序设置了1个主类Class CounterProject、1个子类sonJFrame。
主要由Java-swing组件窗体容器JFrame、面板Panel、菜单JMenu、按钮JButton、JTextField、BorderFactory、JMenuItem、JMenuBar以及按钮事件ActionEvent、键盘事件KeyEvent所组成。
(1)JFrame:构造JFrame对象name,设置窗体大小(不可变)、标题栏内容、位置、窗体可见、窗体可关闭。
构造第二窗体容器test2、设置窗体大小(不可变)、标题栏内容、位置、窗体可见、窗体可关闭。
Java课程设计(计算器)
界面布局:简洁明了,易于操作 输入框:用于输入数字和运算符号 计算按钮:用于执行计算操作
结果显示框:用于显示计算结果 历史记录框:用于查看历史计算记录 帮助按钮:用于查看帮助信息或联系客服
功能需求优先级
基本运算功能:加、 减、乘、除
科学计算功能:平方、 开方、三角函数等
错误处理:处 理用户输入错 误,如输入非
数字字符等
功能扩展:支 持更多运算符 号和功能,如 平方、开方等
代码优化:提 高代码可读性 和可维护性, 减少代码冗余
和错误
测试与调试
单元测试:对每个功能模块进行独立测试,确保其正确性 集成测试:将各个功能模块组合起来进行测试,确保整体功能的正确性 边界值测试:对输入和输出边界值进行测试,确保程序在边界条件下的稳定性
Part Five
总结与展望
项目总结
项目目标:设计并实现一个计算器 项目成果:实现了加减乘除、平方根、正弦余弦等计算功能 项目难点:处理用户输入和错误处理 项目改进:优化界面设计,增加更多计算功能,提高用户体验
项目亮点与不足
● 项目亮点: - 界面设计简洁明了,易于操作 - 代码结构清晰,易于维护和扩展 - 功能齐全,满足日常 计算需求 - 性能稳定,响应速度快
实际应用价值
提高编程能力: 通过设计计算 器,可以提升 Java编程技能
理解算法原理: 通过设计计算 器,可以深入 理解算法原理
和实现方法
提高问题解决 能力:通过设 计计算器,可 以提升解决实 际问题的能力
提升团队协作 能力:通过设 计计算器,可 以提升团队协 作和沟通能力
THANKS
汇报人:
Java课程设计(计算器)
,a click to unlimited possibilities
java课程设计--科学计算器
目录1 课设任务及要求 (1)1.1课设任务: (1)1.2创新要求: (1)1.3设计要求 (1)2 需求分析 (2)2.1 设计背景 (2)2.2 开发的技术及功能 (2)3 设计思路 (3)4 详细设计 (4)4.1功能实现: (4)4.4 程序设计过程 (6)5 系统调试 (6)5.1 运行调试 (6)6 参考文献 (7)附录 (8)1 课设任务及要求1.1课设任务:⑴、设计的计算器应用程序可以完成加法、减法、乘法、除法以及取余运算(可以进行浮点数和负数的运算);⑵、有求倒数、退格和清零功能。
1.2创新要求:能进行正切、余弦,以及求平方根、指数(包括对e)、自然对数运算。
1.3设计要求①设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算。
且有小数点、正负号、求倒数、退格和清零功能。
②课程设计可选用Eclipse、JBuilder、NetBeans等作为开发平台以提高开发效率,通过资料查阅和学习尽可能熟练掌握其中一种集成开发环境。
③认真按时完成课程设计报告,课程设计报告内容包括:设计任务与要求、需求分析、设计思路、详细设计、运行调试与分析讨论和设计体会与小结六个部分。
2 需求分析2.1 设计背景设计这个计算器主要是参考Windows操作系统中自带的计算器,由于编者水平和时间的限制,不能将计算器设计到科学型及其他更复杂的类型,在设计过程中还参考了一些其他的优秀设计。
但本计算器除了常用的加减乘除(可以进行浮点和负数运算)这些基本运算外,还有求余、求倒、退格、清零,甚至还能进行一些复杂科学的运算,比如余弦(cos)、正切(tan)、指数运算(pow)、自然对数运算(log)、求平方根(sqrt)以及对e的指数运算(exp),并且还能进行连续运算。
总体上说来,本计算器设计简单,代码很少,程序很小,但功能却很强大,这是同类计算器所不具备的。
2.2 开发的技术及功能本课程设计是要做一个图形界面的计算器,其界面主要是由swing组件中的控件构成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JAVA课程设计说明书题目:模拟科学计算器姓名:学号:班级:网络工程11-2山东科技大学2013年11月7日目录1 课设任务及要求 (3)1.1课设任务 (3)1.2设计要求 (3)2 需求分析 (2)2.1 设计背景 (2)2.2 需求获取 (3)2.3 程序功能图 (4)3 设计思路 (4)3.1 界面布局 (4)3.2 类的定义 (5)3.3变量的定义 (5)4 详细设计 (6)4.1整体概述 (6)4.2 误操作处理 (7)4.3流程图和结构图 (8)5 系统调试 (11)5.1 程序界面 (11)5.2 运行界面 (11)6 心得与体会 (15)7 参考文献 (16)8 附录 (16)1 课设任务及要求1.1课设任务:要求:界面模拟Windows中的计算器程序。
实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数运算。
实现要点:添加相关组件并进行按钮事件处理。
要求提交Application和Applet两个版本的程序。
1.2设计要求①设计的java计算器应用程序可以完成加法、减法、乘法、除法和取余运算,和cos,sin,tan等三角函数功能以及阶乘和指数等运算,且有小数点、正负号、求倒数、退格和清零功能。
具体可参考windows附件下的计算器②课程设计使用Eclipse4.2等作为程序编译和运行测试的开发平台,采用JDK-7u25作为java开发环境,使用Microsoft Office Visio 2007作为绘图工具。
③认真按时完成课程设计报告,制作演讲PPT,积极报名上讲台向大家演示和讲解自己的程序。
提交打印版的报告以及电子版的原稿和Application和Applet两个版本的程序代码。
2 需求分析2.1 设计背景本程序是老师提供的几个课程设计题目中比较中等的题目。
要求实现模拟的科学计算器功能,主要包括加减乘除四则运算和阶乘,三角函数以及指数的运算。
具体的功能我参考了Windows7下的计算机小程序,并根据其界面设计了java小程序界面,根据其功能对自己设计的计算器小程序进行了功能的适当增加与修改。
在实现了课程设计题目要求的基础上,自己又增添了对数函数,幂函数,三角函数,取余等我们常用到的功能比较简单的函数。
由于本函数涉及的函数以及按键数目较多,故没有采用面向对象的设计方法,没有对每个功能封装成函数调用,而是针对每个按键的动作事件直接采用了算法的编写。
最终实现了全部的功能,但是由于时间有限,许多功能没有坐到很到位的优化,或许还存在着许多了漏洞,欢迎老师和同学的批评指正,我一定会不断完善。
2.2 需求获取本程序的设计过程,按照题目的要求,我认真参考了Windows7下计算器小程序的运行界面与运行操作与结果,对我自己设计的程序的需求展开了进一步的研究。
主要得到以下几点需求:1.必须实现题目要求的和Windows7下计算器下的基本功能,并能正确运行。
2.必须使程序具有清空,清除,退格和正负数,小数点的基本功能。
3.必须要修程序可以进行连续运算,即如“1+2+3+4,1*2+4-4”等连续运算4.必须使用可视化界面,按键布局简单明了,使人一看就懂,直接可以上手操作。
界面要做到简单明了,通俗易懂,和蔼可亲。
5.必须有用户错误操作,输入不规范的警告与提示,提醒用户正确操作。
6.程序必须经过严格的测试与运行,保证没有明显的BUG和程序崩溃状况,要经得起用户的长时间使用。
2.3 程序功能图功能图如下:3 设计思路3.1界面布局本应用程序继承自框架类(JFrame),采用BorderLayout边缘布局和GridLayout网格布局相结合的布局管理方式,将单行文本框加入到“North”区域,包含各种按钮的面板JPanel p按照网格布局的顺序加入到其他区域。
将文本框放到界面上方,将指数函数放到界面下方,将三角函数放到界面左边,将基本四则运算放到界面的右面,使得界面的整体布局合理整洁,易于上手。
3.2类的定义本程序主要定义了一个主函数和三个类:public static void main(String[] args):程序的主函数,Application程序的主要实现标志,调用上文中定义的类class C1:程序主类,定义了整个界面的布局,和针对每个按钮的动作监听,以及每个动作所对应的具体的操作,计算的运行和输出主函数。
class jiecheng:定义了阶乘运算(fff)的算法实现。
class Mymath:定义了asinh、acosha、tanh三个Math.中不包含的三角函数及其算法实现3.3变量的定义字符串变量String a,c,s用来储存数字和符号以及运算结果。
整形变量flagdenghao,flagyunsuan,lastyunsuanCount变量countxiaoshudian用来统计小数点出现的次数4 详细设计4.1.整体概述首先,程序定义了三个类:一个主类,两个主类里调用的辅助类。
分别实现,计算器主要功能的实现,阶乘算法的实现,和反三角函数算法的实现。
其次,对于C1主类,首先在框架JFrame下定义了每个触击式组件,即JButton命令式按钮。
并采用了BorderLayout边缘布局和GridLayout网格布局相结合的布局管理方式。
将文本框,Str1(数字运算),Str2(三角函数),Str3(反三角函数)和Str4(指数函数)合理的排布在整个框架下。
然后,定义了每个JButton命令式按钮代表的数字,符号和函数,并且通过public void actionPerformed(ActionEvent e) 函数定义了每个按钮对应的动作监听,从而确定了鼠标点击每个按钮时可以实现对应的不同的算法。
接下来,就是每个运算所对应的算法实现,这里以加法运算为例:1.首先用户输入一个数字,程序用String s暂时储存,并通过JTexField()文本编辑框显示出来。
2.接着,用户按下“+”按钮,触发按钮事件,先判断是数字或者是符号,当触发事件之前输入的是符号时“.”没有输入数字时,程序采用 Double.valueOf(),将输入的“.”进行强制类型转换成“0.”。
当用户输入正常数字时,程序首先将s内的数据储存到a中,同时将a中的内容清空,以便输入加数,并再次储存到s中,并通过JTexField()文本编辑框显示出来。
3.当用户按下“=”按钮时,程序首先进行判断是否flagyunsuan==0,当flagyunsuan==0是说明是第一次按“=”按钮,接下在判断“=”之前是否是空值或符号,当判断flagdenghao = ture的时候可以进行运算。
将运算结果存入a中,并再次通过JTexField()文本编辑框显示出来。
4.接下来还要对运行的结果通过Double.valueOf()进行强制类型转换。
因为储存数据的s和a都是String型变量,而要求的输出结果却是double类型的变量,所以要转换以后输出。
5.输出完毕以后,必须判断是否使用本次运算结果进行下一步的运算,如果是的话则通过switch (lastyunsuan)来判断接下来需要进行的运算,再重复上面的步骤。
4.2.误操作处理由于用户操作的不确定性,有时可能不会严格按照程序说明书进行对应的操作,经常会发生误操作。
这便对程序的操作性要求大大提高。
这就要求程序做到以下几点:1.程序不能因为操作失误而崩溃。
2.程序要可以给用户发出错误警报。
3.程序要可以对错误进行适当的修改。
而本程序经过反复误操作运行,已经可以保证程序不会因为误操作而发生崩溃。
其次,本程序采用了Toolkit.getDefaultToolkit().beep()函数,可以使程序发出“beep”声音的警报。
最后,本程序对一些显而易见的错误,比如输入小数时可以自动把用户输入的“.”强制转化为“0.”等。
从而保证了,当遇到各种误操作的时候程序可以正常运行。
4.3.流程图和结构图1.程序流程图2.代码结构图5 运行与调试5.1 程序界面计算器界面如下:5.2 运行界面注:由于本程序要实现的功能过多,这里只采用部分具有代表性的功能的截图作为参考。
1.加法操作程序可以正确运行8+5=13 2.除操作程序可以正确运行9/3=33.sin函数运算可以正确运行sin(π)= 0(由于本函数采用弧度运算,这里取了π的近似值3.14进行的运算,所以运算结果只能约等于1)。
4.指数运算本程序可以正确运行2的立方= 8。
5.阶乘运算本程序正确实现了9的阶乘 = 3628806心得与体会本次课程设计在我的努力编写下顺利完成了。
设计过程中我付出了劳动与汗水,遇到过很多的困难和挫折,而且我们最终都战胜了他们,获得的最大收货,我认为并不是我设计成功了一个多么了不起的程序,而是我在设计过程中遇到的困难和解决它的方法与经验才是最值得我认真体会的地方。
通过本次设计过程我发现了我们学习知识的严重不足,许多设计过程中常用到的知识,我们掌握的并不好。
还要时常去查课本,有的甚至一点印象都没有,我认为这一切的原因在于我们不去用他,俗话说孰能生巧。
对于所学的知识我们要善于使用。
我还发现,一些问题不能只凭借自己的主观去臆想判断,实践才是硬道理,实践出真知。
只有通过自身去调查去分析得出的结论,才最接近事实,软件的开发切忌不能想当然的去看问题,毕竟只有动手做了才知道对与不对。
本次实验过后,不仅锻炼了我的设计分析能力,编程能力,最重要的是锻炼了我面对问题的应变与解决能力。
只有把自己所学的知识,和自己的经验,老师的指导相互结合起来,才能在学习的道路上少走弯路,并实现自己想要的目标。
最后,再次感谢《java程序设计》赵建立老师的指导,,感谢有关同学提供的帮助,最后祝愿java这门课越学越好。
7参考资料《Java程序设计教程(第2版)》雍俊海清华大学出版社《Java程序设计实验指导》雍俊海清华大学出版社《Java语言使用教程》丁振凡北京邮件大学出版社8附录由于本程序涉及的代码量过于庞大,这里只给出几个有代表性的算法的代码,完整的代码请参考电子版的代码附录。
部分程序源代码如下:class jiecheng {public static double fff(double n){if(n<=0)return 1;elsereturn n*fff(n-1);}}class Mymath {public static double asinh(double x){return Math.log(x+Math.sqrt(x*x+1));}public static double acosh(double x){return Math.log(x+Math.sqrt(x*x-1));}public static double atanh(double x){return 0.5*Math.log((1+x)/(1-x));}}public class C1 implements ActionListener//,KeyListener{{public C1() {JFrame frame = new JFrame();Container con = frame.getContentPane();con.setLayout(new BorderLayout(10,10));panel1 = new JPanel();panel2 = new JPanel();panel3 = new JPanel();panel4 = new JPanel();panel1.setLayout(new GridLayout(6,4,5,5));panel2.setLayout(new GridLayout(4,2,2,2));panel3.setLayout(new GridLayout(4,2,3,3));panel4.setLayout(new GridLayout(2,4,4,4));panel5 = new JPanel();panel5.setLayout(new CardLayout());String []str1 = {"7","8","9","/","4","5","6","*","1","2","3","-","0",".","+","=","back","CE","mod","C","+/-"};for(int i=0;i<str1.length;i++){b[i] = new JButton(str1[i]);b[i].addActionListener(this);panel1.add(b[i]);}String []str2 = {"lnv","ln","sin","cos","tan","sinh","cosh","tanh"};for(int i = 0;i<str2.length;i++){b2[i] = new JButton(str2[i]);b2[i].addActionListener(this);panel2.add(b2[i]);}String []str3 = {"lnv","ex","asin","acos","atan","asinh","acosh","atanh"};for(int i = 0;i<str3.length;i++){b3[i] = new JButton(str3[i]);b3[i].addActionListener(this);panel3.add(b3[i]);}panel5.add("one",panel2);panel5.add("two",panel3);((CardLayout)panel5.getLayout()).show(panel5, "one");String []str4 = {"1/x","sqrt","x^2","x^3","x^y","3√","y√x","log","10^x","n!"};for(int i=0;i<str4.length;i++){b4[i] = new JButton(str4[i]);b4[i].addActionListener(this);panel4.add(b4[i]);} }});}//===========================================================public void actionPerformed(ActionEvent e){if(e.getSource()==b[0]){//7if(flagb2 == true){s = "";s += 7;textfield.setText(s);textfield.requestFocus();return;}if(flagdenghao==true){flagdenghao = false;}s+=7;textfield.setText(s);textfield.requestFocus();}else if(e.getSource()==b[13]){//.if(flagb2 == true){s = "";s += ".";textfield.setText(s);textfield.requestFocus();flagb2 = false;countxiaoshudian++;return;}if(flagdenghao==true){flagdenghao = false;}if(countxiaoshudian >= 1){Toolkit.getDefaultToolkit().beep();}else{s+=".";System.out.println(s);System.out.println(s.length());if(s.equals("."))System.out.println("true");elseSystem.out.println("false");}textfield.setText(s);textfield.requestFocus();countxiaoshudian++;}//-----------------------------------------------else if(e.getSource()==b[3]){///if(flagyunsuan==0){if(s == ""){if(flagdenghao == false)a = 0;elseflagdenghao = false;}else{if(s.equals(".")){s = "0.";}a = Double.valueOf(s);}}else{if(s !=""){if(s.equals(".")){s = "0.";}c = Double.valueOf(s);switch (lastyunsuan){case '+':a += c;break;case '-':a -= c;break;case '*':a *= c;break;case '%':if(c == 0){a = 0;}else{a %= c;}break;case '/':if(c == 0){textfield.setText("除数不为0");flagdenghao = false;flagyunsuan = 0;lastyunsuan = ' ';countxiaoshudian = 0;a = 0;c = 0;ch = ' ';}elsea /= c;break;case '^':a = Math.pow(a, c);break;case '$':if(a <= 0){textfield.setText("error");flagdenghao = false;flagyunsuan = 0;lastyunsuan = ' ';countxiaoshudian = 0;a = 0;c = 0;ch = ' ';}else{a = Math.pow(a, 1.0/c);}break;}}textfield.setText(""+a);}s = "";countxiaoshudian = 0;ch='/';lastyunsuan=ch;flagyunsuan++;flagdenghao = false;flagb2 = false;textfield.requestFocus();}public static void main(String[] args) {// TODO Auto-generated method stubnew C1();}。