java课程设计分析报告—计算器
计算器java课程设计--简单计算器
计算器java课程设计一简单计算器学号: 姓名: 班级: 101210109好茨4巒戊《JAVA程序设计》课程设计报告简单计算器卫口Tfp10级计科一班吕海莲___________2012-12-25一、设计内容和要求1、简单计算器模拟程序的基本要求模拟Windows中附件里面的计算器软件,能实现整数的加、减、乘、除四则运算。
2、需要实现的主要功能该计算器模拟程序使用Java的awt包和Swing包的类库设计图形界面的计算器显示用户界面并且使用图形界面中的事件event委托机制来处理事件响应,以及用Java语言设计实现整数的加、减、乘、除四则运算。
(附加功能:淸零和异常处理机制)二、系统分析与概要设计1、面板JPanel txtpanel:用于放置文本框Panel btnpanel:用于放置按钮(0・9 和+,-,*/,=)2、显示部分(1)第一个面板:txtpanel位置以及排列方式BorderLayout.NORTHtxtpanel.add(txtinput):添加文本框到txtpanel 面板中(2)第二个面板:btnpanel排列方式:setLayout(gl)3、基本按钮btnpanel.add(b5);btnpanel.add(bl); btnpanel.add( multiply) btnpanel.add(b4) btnpanel.add(b6) btnpanel.add(divide)btnpaneLadd(bO) .add(bdes) btnpaneLadd(equal); btnpaneLadd(subtract)以上是在第二个面板btnpanelH中添加的0到9和+,-,*/,=的按钮。
4、附加功能(1)“清零”:用于清空文本框和下一次的运算(2)“异常处理”除数为零:当除数为零时,弹出“除数不能为零”窗体错误输入:当只单击运算符时,弹出“错误输入”窗体三、详细设计和编码1、总体功能图1、类的定义及关系Jsq类继承JFrame类创建主界面,在主界面上由文本框JTextField和JButton 组件构成,JTextField和JButton组件分别放置在两个不同的面板JPanel 上,同时利用按钮注册监听器,获取事件源。
大学java课程设计实验报告--计算器
JAVA课程设计报告组员信息:第(二)组计算器的实现问题问题描述:制作一个计算器基本要求:要求实现类似Windows操作系统里面的标准计算器。
在此基础上实现部分科学性的功能。
测试数据:分别对加、减、乘、除和sin、cos、tan函数进行测试算法思想:使用String定义的数组a[25]对每个按钮进行按钮赋值,创建一个Panel进行字符和数字的存放,调用addActionListener()对各个时间进行监听。
调用系统库函数对数值进行运算。
模块划分:1、主函数main()创建一个计算器。
2、void actionPerformed(ActionEvent e)对鼠标点击的事件进行响应以及在文本框中的显示。
3、各Buuton对应的功能:“开方”:对输入数字开方“平方”:对输入数字平方“getResult()”:对四则运算进行分别运算操作“backspace”:取消上一次的操作“CE”:取消上一次运算的操作“C”:清空作用“sin”:对输入数据进行sin运算“cos”:对输入数据进行cos运算“tan”:对输入数据进行tan运算“+/-”:对输入的数据取反“+”,“-”,“*”,“/”:对数据进行四则运算源程序:package hechongwei;import ng.String;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;import ng.Math;class Calculator extends JFrame implementsActionListener {JTextField tf = new JTextField(" ");String str1 = " ", str2 = " ", str3 = " "; // str1和str2存放两个输入的数Panel pn1 = new Panel();// new 一个Panel存放符号与数字String a[] = { "平方", "开方", "backspace", "CE", "C", "7", "8", "9", "/","sin", "4", "5", "6", "*", "cos", "1", "2", "3", "-", "tan", "0","+/-", ".", "+", "="};// 用于对每个Button 进行赋值boolean frist = true;// 判断是否输入的为第一个字符int operCount = 0;int i; // 统计符号的数目String Operate = null;// 存放操作数的符号boolean error = false;double num1 = 0.0, num2 = 0.0;// 两个输入的数作运算时转化为double存放double result = 0.0;// 暂时保留计算结果public Calculator() {super("简单计算机 ");tf.setHorizontalAlignment(JTextField.RIGHT) ;// 显示框中由右想左输出tf.setEditable(false);Button b[] = new Button[25];for (i = 0; i < 5; i++) { // 将符号加到对应的Button上b[i] = new Button(String.valueOf(a[i]));pn1.add(b[i]);b[i].setActionCommand(a[i]);b[i].addActionListener(this);// 调用addActionListener()方法注册事件监听器}for (i = 5; i <= 7; i++) {b[i] = new Button(String.valueOf(a[i]));pn1.add(b[i]);b[i].setActionCommand("number");b[i].addActionListener(this);}b[8] = new Button(String.valueOf(a[8]));pn1.add(b[8]);b[8].setActionCommand("oper");b[8].addActionListener(this);b[9] = new Button(String.valueOf(a[9]));pn1.add(b[9]);b[9].setActionCommand(a[9]);b[9].addActionListener(this);for (i = 10; i <= 12; i++) {b[i] = new Button(String.valueOf(a[i]));pn1.add(b[i]);b[i].setActionCommand("number");b[i].addActionListener(this);}b[13] = new Button(String.valueOf(a[13])); pn1.add(b[13]);b[13].setActionCommand("oper");b[13].addActionListener(this);b[14] = new Button(String.valueOf(a[14])); pn1.add(b[14]);b[14].setActionCommand(a[14]);b[14].addActionListener(this);for (i = 15; i <= 17; i++) {b[i] = new Button(String.valueOf(a[i]));pn1.add(b[i]);b[i].setActionCommand("number");b[i].addActionListener(this);}b[18] = new Button(String.valueOf(a[18])); pn1.add(b[18]);b[18].setActionCommand("oper");b[18].addActionListener(this);b[19] = new Button(String.valueOf(a[19])); pn1.add(b[19]);b[19].setActionCommand(a[19]);b[19].addActionListener(this);for (i = 20; i <= 22; i++) {b[i] = new Button(a[i]);pn1.add(b[i]);b[i].setActionCommand(a[i]);b[i].addActionListener(this);}b[23] = new Button(String.valueOf(a[23])); pn1.add(b[23]);b[23].setActionCommand("oper");b[23].addActionListener(this);b[24] = new Button(String.valueOf(a[24])); pn1.add(b[24]);b[24].setActionCommand(a[24]);b[24].addActionListener(this);pn1.setLayout(new GridLayout(5, 5));add(tf, "North"); // 界面的处理add(pn1, "Center");setSize(400, 300);setVisible(true);tf.setText("0.0");addWindowListener(new WindowAdapter() { //程序结束public void windowClosing(WindowEvent e) {System.exit(1);}});}public void actionPerformed(ActionEvent e) { Button temp = (Button) e.getSource();try {if(e.getActionCommand().equals("number")) {if (frist) {str1 = str1 + temp.getLabel();tf.setText(str1); // 将输入的str1在显示框中显示} else {str2 = str2 + temp.getLabel();tf.setText(str2);// 将输入的str2在显示狂中显示}} else if(e.getActionCommand().equals("oper")) {if (str1 == " ") {operCount= 0;// 如果还没有输入数就点击运算符,执行iffrist = true;} else {operCount++;if (operCount > 1) {// 若输入的字符多余一个,则可进行运算getResult();}Operate= temp.getLabel(); // 存放加,减,乘,除等的符号frist = false;}} else if(e.getActionCommand().equals("=")) {if((str1== "") || (str2== "")) // 两个数没有输全就点击等号,执行if{operCount = 0;// 将按键计数器清零frist = true;} else {getResult();operCount = 0;}} else if(e.getActionCommand().equals("平方")) {if (str1 == " ")tf.setText("0.0");else {double d =Math.pow(Double.parseDouble(str1), 2);str1 = String.valueOf(d);tf.setText(str1);frist = false;}} else if(e.getActionCommand().equals("开方")) {if (str1 == " ")tf.setText("0.0");else {double d =Math.sqrt(Double.parseDouble(str1));str1 = String.valueOf(d);tf.setText(str1);frist = false;}} else if(e.getActionCommand().equals("sin")) {if (str1 == " ") { // 处理sin0 ,cos0等tf.setText("0.0");str1 = "0";}else {double k = Double.parseDouble(str1);k = k * Math.PI / 180;double d = Math.sin(k);str1 = String.valueOf(d);tf.setText(str1);frist = false;}} else if(e.getActionCommand().equals("cos")) {if (str1 == " ") {tf.setText("0.0");str1 = "0";} else {double k = Double.parseDouble(str1);k = k * Math.PI / 180;double d = Math.cos(k);str1 = String.valueOf(d);tf.setText(str1);frist = false;}} else if(e.getActionCommand().equals("tan")) {if (str1 == " ") {tf.setText("0.0");str1 = "0";} else {double k = Double.parseDouble(str1);k = k * Math.PI / 180;double d = Math.tan(k);str1 = String.valueOf(d);tf.setText(str1);frist = false;}} else if(e.getActionCommand().equals("C")) {operCount = 0;// 清空frist = true;str1 = " ";str2 = " ";str3 = " ";tf.setText("0.0");} else if(e.getActionCommand().equals("+/-")) {if (str1 == " ") {tf.setText("0.0");str1 = "0";} else {double k = Double.parseDouble(str1);str1 = String.valueOf(-k);tf.setText(str1);}} else if(e.getActionCommand().equals("CE")) { // 取消上一步的运算tf.setText(str1);frist = true;operCount = 0;str2 = " ";} else if(e.getActionCommand().equals("backspace")) {{// 退格String s = tf.getText();tf.setText("");char b[] = new char[20];for (int i = 0; i < s.length() - 1; i++) {char a = s.charAt(i);b[i] = a;tf.setText(tf.getText() + a);}if (operCount == 0)str1 = tf.getText();elsestr2 = tf.getText();}}} catch (Exception f) {System.out.println(f.getMessage());}}void getResult() {num1 = Double.parseDouble(str1);num2 = Double.parseDouble(str2);if (Operate.equals("+")) {result = num1 + num2;} else if (Operate.equals("-")) { result = num1 - num2;} else if (Operate.equals("*")) { result = num1 * num2;}if (Operate.equals("/")) {if (num2 == 0.0) {error = true;} else {result = num1 / num2;}}if (error) {tf.setText("error");} else {tf.setText(String.valueOf(result));str3 = str1;str1 = String.valueOf(result);str2 = " ";}}public static void main(String args[]) {new Calculator();}}程序流程:if (e.getActionCommand().equals("number"))else if (e.getActionCommand().equals("oper"))else if (e.getActionCommand().equals("="))else if (e.getActionCommand().equals("平方"))else if (e.getActionCommand().equals("开方"))else if (e.getActionCommand().equals("C")) else if (e.getActionCommand().equals("CE"))void getResult()Main()主函数流程:测试情况:图形界面示意图:测试情况测试数据:输入4 ,平方显示结果为16输入4,开方显示结果为2输入4,+,2 显示结果为6输入4,-,2 显示结果为2输入4,*,2显示结果为8输入4,/,2显示结果为2输入1,+,2, +,4,CE,+8 显示结果为11输入1,+,22,Backspace ,= 显示结果为3 输入C 显示结果为0输入30,sin 显示结果为0.5。
java课程设计计算器
java课程设计 计算器一、课程目标知识目标:1. 理解Java基本语法和程序结构,掌握算术表达式的编写;2. 掌握使用Java进行数值运算的方法,理解数据类型转换规则;3. 了解简单的异常处理机制,理解其与计算器程序的关系。
技能目标:1. 能够运用所学知识,独立编写一个具备基本功能的计算器程序;2. 学会使用Java控制台输入输出,实现用户与程序的交互;3. 能够通过调试和修改代码,解决计算器程序中的常见错误。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发其主动探索和解决问题的热情;2. 培养学生的团队协作意识,使其学会在编程过程中互相帮助和分享经验;3. 培养学生的逻辑思维能力,提高其分析问题和解决问题的能力。
本课程针对具有一定Java基础的学生设计,结合计算器项目实践,旨在巩固和拓展所学知识,提高学生的编程能力和实际应用能力。
课程注重培养学生的动手实践能力,强调理论与实践相结合,使学生能够在实践中掌握Java编程技巧,培养良好的编程习惯。
通过本课程的学习,学生将能够独立完成一个简单的计算器程序,提高其在实际编程中的问题解决能力。
二、教学内容1. Java基本语法与程序结构复习(教材第3章)- 简单的变量声明与赋值- 基本算术运算符的使用- 程序的控制流程:顺序、分支(if-else)、循环(for、while)2. Java数据类型与运算(教材第4章)- 数据类型转换规则- 运算符优先级- 算术表达式编写3. Java控制台输入输出(教材第5章)- 使用Scanner类进行输入- 使用System.out.print和System.out.println进行输出4. 简单异常处理(教材第7章)- 异常的概念与分类- try-catch语句的使用- 异常处理在计算器程序中的应用5. 计算器程序设计实践- 设计计算器功能需求- 编写计算器程序代码- 调试与优化计算器程序教学内容安排与进度:第一课时:复习Java基本语法与程序结构,明确计算器项目需求第二课时:学习Java数据类型与运算,编写计算器核心算法第三课时:掌握Java控制台输入输出,实现计算器用户交互第四课时:了解简单异常处理,优化计算器程序第五课时:计算器程序设计实践,调试与改进教学内容注重理论与实践相结合,通过逐步引导,使学生能够将所学知识应用于计算器程序设计,提高编程实践能力。
java课程设计报告计算器
java课程设计报告计算器12020年4月19日目录一、课程设计目的 (5)二、课程设计任务.................................................................................................... .. (2)2.1、设计任务 (5)2.2、课程设计要求: (6)2.3、需求分析 (6)三、开发工具与平台.................................................................................................... (3)3.1、开发工具 (7)3.2、开发平台 (7)22020年4月19日四、设计思路.................................................................................................... . (4)4.1、界面设计.................................................................................................... . (4)4.2.1、逻辑设计 (8)4.2.2、程序流程图.................................................................................................... . (5)4.2.3、主要代码展示及说明 (5)4.3、程序测试 (18)五、实验小结 (20)32020年4月19日六、附录 (程序代码) (22)42020年4月19日一、课程设计目的1、熟练掌握java面向对象编程。
2、选择合适的数据结构实现需求。
java实验报告计算器
java实验报告计算器Java实验报告:计算器引言:计算器是我们日常生活中常用的工具之一,它能够帮助我们进行各种数学运算,提高计算的效率。
本实验旨在使用Java编程语言设计和实现一个简单的计算器,通过实践来加深对Java语言和面向对象编程的理解。
一、需求分析在设计计算器之前,我们首先需要明确计算器的功能需求。
一个基本的计算器应该包括加、减、乘、除四种基本运算,同时还应该具备清零、取反、百分比等附加功能。
在本实验中,我们将实现这些基本功能,并尝试添加一些额外的功能,如开根号、求平方等。
二、设计思路1. 用户界面设计我们可以使用Java的图形用户界面(GUI)库来设计计算器的界面。
可以使用按钮来表示数字和运算符,使用文本框来显示计算结果。
2. 数据结构设计为了实现计算器的功能,我们需要设计一个合适的数据结构来存储用户输入的数字和运算符。
可以使用栈(Stack)数据结构来实现这个功能。
当用户按下数字按钮时,将数字入栈;当用户按下运算符按钮时,将运算符入栈。
当用户按下等号按钮时,从栈中取出数字和运算符进行计算,并将结果显示在文本框中。
3. 运算逻辑设计计算器的运算逻辑可以使用逆波兰表达式来实现。
逆波兰表达式是一种不需要括号的数学表达式表示方法,通过后缀表达式的形式来表示运算符的优先级。
在计算器中,我们可以使用栈来实现逆波兰表达式的计算。
三、实验步骤1. 创建一个Java项目,并导入GUI库。
2. 设计计算器的用户界面,包括按钮和文本框。
3. 实现按钮的点击事件,根据用户输入的数字和运算符来更新栈的状态。
4. 实现等号按钮的点击事件,从栈中取出数字和运算符进行计算,并将结果显示在文本框中。
5. 实现清零、取反、百分比等附加功能的按钮点击事件。
6. 运行程序,测试计算器的各项功能是否正常。
四、实验结果与分析经过测试,我们的计算器能够正常地进行加、减、乘、除等基本运算,并且附加功能也能正常使用。
通过这个实验,我们不仅学习了Java语言的基本语法和面向对象编程的思想,还加深了对数据结构和逆波兰表达式的理解。
java实验报告——简单计算器的编写五篇范文
java实验报告——简单计算器的编写五篇范文第一篇:java实验报告——简单计算器的编写JAVA实验报告——简单计算器的编写班级:学号:姓名:一、实验目的1.掌握java图形用户界面(GUI)的设计原理和程序结构2.能设计复核问题要求的图形用户界面程序3.掌握常用组件的事件接口4.应用awt和swing组件进行应用程序设计二、实验条件1.计算机一台2.java软件开发环境三、实验步骤1、编写代码:mport java.awt.*;import java.awt.event.*;import javax.swing.*;public class JCalculator extends JFrame implements ActionListener {private static final long serialVersionUID =-***457Lprivate class WindowCloser extends WindowAdapter {public void windowClosing(WindowEvent we){System.exit(0);}}int i;private final String[] str = { “7”, “8”, “9”, “/”, “4”, “5”, “6”, “*”, “1”,“2”, “3”, “-”, “.”, “0”, “=”, “+” };JButton[] buttons = new JButton[str.length]; JButton reset = new JButton(“CE”); JTextField display = new JTextField(“0”);public JCalculator(){super(“Calculator”);JPanel panel1 = new JPanel(new GridLayout(4, 4)); for(i = 0;i < str.length;i++){buttons[i] = new JButton(str[i]);panel1.add(buttons[i]);}JPanel panel2 = new JPanel(new BorderLayout()); panel2.add(“Center”, display);panel2.add(“East”, reset);getContentPane().setLayout(new BorderLayout()); getContentPane().add(“North”, panel2); getContentPane().add(“Center”, panel1);for(i = 0;i < str.length;i++)buttons[i].addActionListener(this);reset.addActionListener(this);display.addActionListener(this); addWindowListener(new WindowCloser()); setSize(800, 800);setVisible(true);pack();}public void actionPerformed(ActionEvent e){ Object target = e.getSource();String label = e.getActionCommand();if(target == reset)handleReset();else if(“0123456789.”.indexOf(label)> 0)handleNumber(label);elsehandleOperator(label);}boolean isFirstDigit = true;public void handleNumber(String key){if(isFirstDigit)display.setText(key);else if((key.equals(“.”))&&(display.getText().indexOf(“.”)< 0))display.setText(display.getText()+ “.”);else if(!key.equals(“.”))display.setText(display.getText()+ key);isFirstDigit = false;}public void handleReset(){display.setText(“0”);isFirstDigit = true;operator = “=”;}double number = 0.0;String operator = “=”;public void handleOperator(String key){if(operator.equals(“+”))number += Double.valueOf(display.getText());else if(operator.equals(“-”))number-= Double.valueOf(display.getText());else if(operator.equals(“*”))number *= Double.valueOf(display.getText());else if(operator.equals(“/”))number /= Double.valueOf(display.getText());else if(operator.equals(“=”))number = Double.valueOf(display.getText());display.setText(String.valueOf(number));operator = key;isFirstDigit = true;}public static void main(String[] args){new JCalculator();} }2、运行结果,见截图计算测试:123+456=579结果正确,程序无误。
java课程设计简易计算器
前端:使用JavaFX进行界面设计 后端:使用Java进行逻辑处理和数据存储 数据库:使用MySQL进行数据存储 功能模块:包括加法、减法、乘法、除法、平方根等计算功能 测试:使用JUnit进行单元测试和集成测试 打包:使用Maven进行项目打包和部署
功能按钮:包括数字、运算 符、清除、等于等
易于阅读
输入框:用于输入数字和运算符号 输出框:用于显示计算结果 格式化规则:数字和运算符号之间用空格分隔 错误提示:当输入错误时,给出提示信息 计算结果:显示计算结果,并保留小数点后两位 清空按钮:用于清空输入框和输出框中的内容
输入两个数字 调用加法函数 返回结果 打印结果
输入两个数字
判断两个数字的大小关系
使用代码覆盖率工具:检查 代码覆盖率,确保所有代码 都被测试到
使用调试工具:如Eclipse、 IntelliJ IDEA等,提供丰富的 调试功能
阅读错误信息:仔细阅读错 误信息,找出问题所在,并 尝试解决
测试目的:验证程序的正确性和稳 定性
测试结果:记录测试过程中的错误 和异常
添加标题
添加标题
添加标题
编写单元测试:编写针对每个 方法的单元测试,确保每个方 法都能独立运行
调试单元测试:在测试过程中 发现错误时,使用调试工具定
位问题并修复
优化单元测试:根据测试结果 对单元测试进行优化,提高测
试覆盖率和效率
集成测试的概念:将多个模块组合起来进行测试,验证模块间的交互和协作是否正确
编写集成测试的步骤:确定测试目标、设计测试用例、编写测试代码、执行测试
添加标题
测试方法:单元测试、集成测试、 系统测试等
测试结论:对测试结果的分析和总 结,提出改进建议
收获:掌握了Java编程基础,了解了计算器的设计原理和实现方法 不足之处:项目规模较小,功能较为简单,需要进一步学习和实践 展望:未来可以尝试设计更复杂的计算器,或者将Java编程应用到其他领域
java课程设计计算器报告书软件工程
java课程设计计算器报告书软件工程1. 背景介绍近年来,Java编程语言已经成为软件开发的焦点,Java之所以如此受欢迎,原因在于它的可移植性和平台无关性。
随着Java应用的广泛使用,Java课程设计计算器已成为很多计算机专业学生的必修课程。
Java课程设计计算器是一种基于Java语言开发的计算器软件,可用于数学计算和常规计算。
Java课程设计计算器需要进行软件工程化的设计。
2. 项目描述Java课程设计计算器是一种基于控制台应用程序的计算机软件,它具有基本的算数操作,如加、减、乘、除和幂运算符。
Java课程设计计算器还支持三角函数,指数函数,对数函数,阶乘和平方根。
用户可以使用控制台输入表达式,然后查看计算结果。
Java课程设计计算器软件工程项目的目标是基于软件工程的概念和方法,对这个简单的计算器软件进行系统化的分析、构建和测试。
3. 团队成员本项目由四名成员组成,分别是Sophia、Peter、David和Rachel。
Sophia 是项目的组长,负责项目管理和实施工作。
Peter 是项目的技术主管,负责软件建模和设计工作。
David和Rachel 则是开发团队的核心部分,负责编写代码和测试工作。
4. 系统架构设计Java课程设计计算器采用MVC 模式来设计系统架构,系统包括Model、View 和Controller 三个部分。
- Model 部分:Model 是Java代码的核心部分,实现了计算器计算功能。
Model中包括Calculation 类,可以对输入的算式进行语法分析和计算,并返回计算的结果。
Calculation 类还包括ExpressionToken 和Operator 两个子类,用于完成数学表达式的分词和计算运算符的优先级。
- View 部分:View 用于将输入的算式和计算结果输出到用户的控制台界面。
在View 部分中包括CalculatorUI 类,接收用户输入,并在控制台中显示运算结果。
java课程设计--计算器(带源码)
b6.addActionListener(this);
p2.add(b14);
b14.addActionListener(this);
p2.add(b7);
b7.addActionListener(this);
p2.add(b8);
b8.addActionListener(this);
5.实验方法与步骤:
程序源码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.*;
publicclassCalculatorimplementsActionListener {
JButtonb1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,
sum=sum* d;
tf.setText(String.valueOf(sum));
}elseif(("/").equals((String)stElement())) {
sum=sum/ d;
tf.setText(String.valueOf(sum));
}elseif(("=").equals((String)stElement())) {
}
if(e.getActionCommand() =="x")//乘号的实现;
{
if(("+").equals((String)stElement())
|| ("-").equals((String)stElement())
java课设计算器报告
java课设计算器报告Java是一种跨平台的面向对象的编程语言,使用Java编写的程序可以运行在各种环境(如Windows,Linux, Mac OS)之中。
而在学习Java语言的过程中,设计一个功能比较完善的计算器是学习者比较需要掌握的一项基本技能,故本文的目的在于,设计一个更加完善的Java课设计算器,并介绍如何实现。
二、计算器简介计算器是一种用于计算数字表达式的设备或程序,它可以计算算术表达式(包括加、减、乘、除),可以处理复杂的表达式,并有多种式样,如科学计算器,财务计算器,历史计算器等等。
三、计算器实现(一)编写程序首先,编写一个简单的计算器程序,让它能够实现输入输出的功能。
程序的实现使用Java的swing组件,并设置相应的按钮和文本框。
(二)处理表达式计算器可以接受复杂的表达式,所以必须使用相应的算法来处理表达式,以便得到正确的结果。
(三)计算结果接收到表达式后,依据编写的算法,计算得到所需要的结果,并在结果框中显示出来。
四、计算器应用计算器是日常生活中非常常见且实用的工具,它有助于改善计算准确性以及节约计算时间。
此外,计算器也有多种应用,比如:(一)金融领域计算器可以帮助金融行业的职员进行计算,例如计算投资收益、贷款利息、汇率等;(二)学术领域计算器可以帮助学生进行科学计算,从而更加方便快捷地完成学术研究;(三)数据分析计算器可以帮助对大量数据进行快速分析,从而节省时间和精力,提高工作效率。
五、总结本文基于Java语言设计了一款更加完善的计算器,并介绍了如何实现,它既可以进行简单的计算,也可以处理复杂的表达式,具有很强的实用性。
在实际的应用中,计算器的功能可以帮助我们更快更准确地完成计算,且多种应用,可以更好地提高工作效率。
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课程设计--科学计算器
目录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组件中的控件构成。
JAVA程序设计课程作业——标准计算器的实现报告
JA V A程序设计课程作业——关于计算器的设计说明电信06XX班王XX 012006012XXX郭XX 012006012XXX陈X 012006012XXX 一实验目的1、通过编写计算器程序,以达到熟悉和掌握JA V A的目的。
2、在编程的过程中,提升自己的能力。
3、能够有效的增强团队合作的能力。
二实验内容1、编写一个计算器,应该有如图类似的图形用户界面。
2、能够实现普通的加减乘除运算。
3、可以适当的增加一些科学计算器的功能。
三.程序设计及源码实现:程序设计结构:copyItemeditItempasteItemtItemmainMenu viewMenu sItem(NORTH)numberGrouptopHelphelpMenuaboutHelpPanel textAnswer(CENTER)textMemorylabelMenSpacePanel2 buttonN(NORTH) buttonBkbutton Cebutton CPanel1(SOUTH)button MC 7 8 9 Div Sqrtbutton MR 4 5 6 * %Panel3 button MS 1 2 3 - Dao(CENTER)button M+ 0 +/- Dot + +源码如下:import java.awt.*;import ng.*;import javax.swing.*;import javax.swing.event.*;import java.awt.event.*;import java.text.DecimalFormat;public class Calculator implements ActionListener //导入动作监听接口{//设计面板中的组件JFrame frame;JTextField textAnswer;JPanel panel, panel1, panel2, panel3;JMenuBar mainMenu;JTextField textMemory;JLabel labelMemSpace; //labelMemSpace单纯做摆设,控制面板的形状JButton buttonBk, buttonCe, buttonC;JButton button[];JButton buttonMC, buttonMR, buttonMS, buttonMAdd;JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul,buttonDiv, buttonMod ,buttonN;JButton buttonSqrt, buttonDao, buttonEqual;JMenu editMenu, viewMenu, helpMenu;JMenuItem copyItem, pasteItem, tItem, sItem, numberGroup, topHelp, aboutCal;DecimalFormat df; //设置数据输出精度boolean clickable; //控制当前能否按键double memoryd; //使用内存中存储的数字int memoryi;double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd)short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算String copy; //做复制用JTextArea help; //帮助JScrollPane scrollHelp;//构造函数public Calculator(){clickable = true;answerd = 0;frame = new JFrame("计算器");df = new DecimalFormat("0.##############"); //设置数据输出精度(对于double型值) textAnswer = new JTextField(15);textAnswer.setText(" ");textAnswer.setHorizontalAlignment(JTextField.RIGHT); //文本右对齐textAnswer.setEditable(false); //设置为不可编辑textAnswer.setBackground(new Color(255, 255,255));//白底色panel = new JPanel();frame.setContentPane(panel); //panel1 = new JPanel();panel2 = new JPanel();panel.setLayout(new BorderLayout());//设计整个面板mainMenu = new JMenuBar();editMenu = new JMenu("编辑(E)");viewMenu = new JMenu("查看(V)");helpMenu = new JMenu("帮助(H)");copyItem = new JMenuItem(" 复制(C) Ctrl+C");copyItem.addActionListener(this); //增加动作事件监听pasteItem = new JMenuItem(" 粘贴(V) Ctrl+V");pasteItem.addActionListener(this); //增加动作事件监听editMenu.add(copyItem);editMenu.add(pasteItem);tItem = new JMenuItem("●标准型(T)");tItem.addActionListener(this); //增加动作事件监听sItem = new JMenuItem(" 科学型(S)");sItem.addActionListener(this); //增加动作事件监听numberGroup = new JMenuItem(" 数字分组(I)");numberGroup.addActionListener(this); //增加动作事件监听viewMenu.add(tItem);viewMenu.add(sItem);viewMenu.add(numberGroup);topHelp = new JMenuItem(" 帮助主题(H)");topHelp.addActionListener(this); //增加动作事件监听help = new JTextArea(5, 20);scrollHelp = new JScrollPane(help);help.setEditable(false);help.append("执行简单计算\n");help.append("1. 键入计算的第一个数字。
java程序设计课程报告书---计算器
面向对象程序设计课程设计报告题目:计算器模拟程序组成员信息任课教师:成绩:2010年12月30 日目录1.课程设计目的 (3)1.1 (3)1.2 (3)2.设计题目分析 (3)2.1 (3)2.2 (3)3.课程设计容 (3)3.1 (3)3.2 (4)4.设计心得与总结 (7)5、附录 (8)6、小组成员分工说明 (16)1、课程设计目的(1)复习稳固java语言的根底知识,进一步加深对java语言的理解和掌控〔2〕课程设计为大家提供了一个既动手又动脑,独立实践的时机,将课本上的理论知识和实际有机结合起来,锻炼我们的分析解决实际问题的能力。
提高我们适应实际,实践编程的能力。
〔3〕培养我们在工程开发中创新意识及能力,通过亲身实践,利用所学编写简单的面向对象程序,提高对面向对象及JAVA语言的理解。
2、设计题目分析2.1 题目简介利用JAVA语言设计一个简单的科学计算器,实现加减乘除及开根号、对数、平方、三角正/余弦、求倒数、进制转换的简单功能。
2.2 设计要求及需求分析设计要求:由于现代用户更倾向于由鼠标方便操作的图形用户界面,所以我们采用GUI 来实现计算器,并采用Swing组件,AWT事件处理等实现具体功能。
需求分析:在我们日常生活中,计算开支、收入时,大额数字或是多倍小数的计算都需要计算器的帮助,而在学习一些科目时,也常常要处理数字。
虽然现在的计算器价格比拟低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,不仅操作不便,很多功能也根本用不到。
所以我们想用自己所学设计开发一个属于自己的简单计算器来完成日常学习生活的需求。
3、课程设计容3.1 总体设计:系统总体设计框架Panel :5*6的数字及运算键Panel2:进制转换的单项选择按钮及倒退清空键Panel0:输入及运行结果系统功能模块图:Container//定义容器 方法参数说明:布尔型的border frame.setVisible ,设置窗口的可见性frame.setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE);设置关闭窗口的默认执行动作〔布尔型数据〕frame.setIconImage ;设置窗口最小化图标frame.setSize(int,int);设置窗口尺寸方法调用:主函数中的new Calculator()调用了前面的public Calculator()流程图:3.3 调试与测试:包括程序调试过程、数据测试结果分析,测试过程中遇到的主要问题及采取的解决措施;〔列出主要问题的出错现象、出错原因、解决方法及效果等〕。
Java课程设计报告-计算器,输入输出流读取iris.txt文件,黄金卡,多线程动画,记事本
优劣。
知识点:掌握事件处理机制;掌握随机采样的方法;掌握图形用户界面设计;(注:采用图形用户方式设计)4、内容四:设计一个记事本,菜单中要求有文件,编辑,和帮助。
文件中有新建、打开、保存和退出;编辑中有剪切、复制和粘贴;帮助中显示开发人和版本信息。
知识点:掌握图形用户界面设计;掌握基本类的设计与菜单设计;掌握事件处理机制;掌握使用异常处理方法。
5、内容五:一个多线程的动画知识点:Java中线程的实现;线程的优先级、调度与同步;设计步骤:窗口布局设计设计线程类MainPanel类的设计实验效果为:程序功能:每点击一次“Start”按钮,就会在画面上出现一个新的小球。
这些小球按照一定的线路移动,而且小球的移动速度是相同的。
进制转换算法描述:用if语句判断选中的进制对应的选择框(默认选中的是十进制),并对该事件做对应的按钮处理,用变量length判断上次选中的是哪个进制的选择框,用来进行相互转换,然后进行运算。
假如是非十进制,则先转化成十进制,然后再转化成需要的进制。
内容二:用while循环对文件按行读取存放到字符型变量s里,只要s不为null则循环,在循环里加一个计数器count,用于记录文件的行数用于求平均值,每行按分隔符\t进行行的分割,把每行的第i个元素累加到浮点型数组sum[i]里,读取完后在进行求平均值的运算。
最后打印出每列总和及每列平均值。
内容三:按钮界面:黄金卡中要设计到相应的一个开始游戏的按钮和一个重新开始的按钮,我采用的是JButton,分别建立的一个有“开始”和“重玩”文字的按钮。
文本框设计:用JTextField来构建相应的文本框,用JTextField()来构建单行文本框,以满足程序的要求和图形设计。
颜色背景及字体的设定:JLabel 对象可以显示文本、图像或同时显示二者。
内容四:记事本设计图如下,前先要创建一个Jishiben的类继承JFrame类作为最底层的容器。
在构建Jishiben类时要初使化容器,初使化组件。
java课程设计报告 -计算器+学生信息管理系统
《Java程序设计》课程设计报告系部:计算机工程系专业班级:12XXX学号:0XX姓名:XXX指导老师:XXX完成时间:20XX年X月XX日目录目录 (2)题目一计算器 (3)1.1 设计的内容、要求和目标 (3)1.1.1设计内容 (3)1.2设计要求 (3)1.3 总体设计 (3)1.3.1 功能设计 (3)1.3.2 相关类设计 (3)1.4详细设计及实现 (4)1.5. 系统运行环境 (9)题目二学生信息管理系统 (9)1.1 设计的内容、要求和目标 (9)1.1.1设计内容 (9)1.2设计要求 (9)1.3 总体设计 (9)1.4详细设计及实现 (10)} (22)1.5. 系统运行环境 (22)Windows 7+jdk1.8 + eclipse (22)题目一计算器1.1 设计的内容、要求和目标1.1.1设计内容本次课程设计的主要目的是设计一个计算器。
本次课程设计所开发的计算器可以实现基本的四则运算功能。
1.2设计要求利用awt组件编写一个计算器,实现基本的四则运算。
1.3 总体设计1.3.1 功能设计以下为标准计算器的基本功能:1.3.2 相关类设计1.4详细设计及实现系统界面设计功能演示关键代码package java1;import java.applet.Applet; import java.awt.*; import java.awt.event.*; import javax.swing.*;public class cccc extends Applet { /** * */private static final longserialVersionUID = 1L; //没啥作用private JButton[] button=newJButton[19]; //定义一个按钮数组private static final int HEIGHT=50; //确定每个按钮的高度private static final int LENGTH=50; //确定每个按钮的长度private static final int INPUT_NUMBER_ONE=0; //定义输入状态private static final int INPUT_NUMBER_TWO=1;private static final int NOT_INPUT=-1;private int button_X=20; //定按钮的起始坐标private int button_Y=10; private int i; private intInput_State=INPUT_NUMBER_ONE; //初始化输入状态private int Operator_num;//操作符的下标private JTextArea textarea; private String[]s={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+","Clear","Reset","Close"}; //定义一个字符串数组private StringBuffer s1=new StringBuffer();private StringBuffer s2=new StringBuffer();private StringBuffer s4=new StringBuffer();private String s3=new String(); private String s5=new String();private double result1; //获取 number_oneprivate double result2; //获取 number_twoprivate double result; //得到最终运算结果 private int[]Operator={0,0,0,3,0,0,0,7,0,0,0,11,0,0,14,15}; //对应于按钮数组,不为0的为操作符public void init(){r esize(280,450);//设定页面大小setLayout(null);//设定布局方式for (i=0;i<16;i++) {if(i%4==0&&i!=0) //每行设定四个按钮,再次初始化坐标 { button_X=20;button_Y+=60;}button[i]=newJButton(s[i]); //实类化一个按钮button[i].setBounds(button_X,button_Y, HEIGHT, LENGTH); //确定按钮的坐标与大小 button_X+=60;add(button[i]);button[i].addActionListener(newButtonAction()); //监听按钮时间 }button_X=20;button_Y=260;textarea=newJTextArea("",5,100); //设定文本域textarea.setBounds(button_X,button_Y, LENGTH+170, HEIGHT+40);textarea.setBackground(Color.LIGH T_GRAY);textarea.setWrapStyleWord(true); textarea.setEditable(false); add(textarea);button_X=20;button_Y=380;for(i=16;i<19;i++)//设定选择按钮(clear Reset close ){button[i]=newJButton(s[i]);button[i].setBackground(Color.gre en);button[i].setBounds(button_X, button_Y, LENGTH+30, HEIGHT-10);button_X+=80;add(button[i]);button[i].addActionListener(new ButtonAction()); }for(i=0;i<5;i++)//只是文本域中布局 {s1=s1.append(" ");}Init_TextArea(); //初始化文本域}public void Init_TextArea(){textarea.setText(s1+"0\n\n\n\n"+s 1+"0");textarea.setFont(new Font("宋体",100,15)); //设置字体}//实现监听事件的类class ButtonAction implementsActionListener {public void actionPerformed(ActionEvent e){Object obj=e.getSource(); //获取事件源for(i=0;i<19;i++)//匹配19个按钮 {if(obj==button[i]&&i>15) //3个选择按钮的监听事件{ if(i==17){s2.delete(0, s2.length()); s4.delete(0, s4.length());s3=null; s5=null;Input_State=INPUT_NUMBER_ONE;Init_TextArea(); }if(i==18) {System.exit(1); } if(i==16) { if(Input_State==INPUT_NUMBER_ONE) { if(s2.length()==0) {continue;}//字符串删去最后一个字符,用StringBuffer 类型会在源字符串上进行操作,减少内存的浪费s2.deleteCharAt(s2.length()-1); s3=s2.toString();textarea.setText(s1+""+s3+"\n\n\n\n"+s1+"0"); //文字输入方式是由左向右textarea.setAlignmentX(LEFT_ALIGNMENT );}if(Input_State==INPUT_NUMBER_TWO) { if(s4.length()==0){continue;}s4.deleteCharAt(s4.length()-1);s5=s4.toString();textarea.setText(s1+s3+"\n\n"+s[Opera tor[Operator_num]]+s1+s5+"\n\n"+s1+"0"); } }}else { if(obj==button[i]&&Operator[i]!=0){if(i==14)//如果事件源的按钮是=号{result1=Double.parseDouble(s3);result2=Double.parseDouble(s5);switch(Operator_num) //选择是哪种操作符{case3:result=result1/result2;break;case7:result=result1*result2;break;case11:result=result1-result2;break;case15:result=result1+result2;break;}textarea.setText(s1+s3+"\n\n"+s[O perator[Operator_num]]+s1+s5+"\n\n"+s1+""+result);Input_State=NOT_INPUT;//打印输出结果后,将输入状态设为NOT_INPUT}else{textarea.setText(s1+s3+"\n\n"+s[Operator[i]]+"\n\n"+s1+"0");Input_State=INPUT_NUMBER_TWO; s4.delete(0,s4.length());Operator_num=i; //记录操作符号的下标}}if(obj==button[i]&&Operator[i]==0 ){if(Input_State==INPUT_NUMBER_ONE){s2.append(s[i]);s3=s2.toString();textarea.setText(s1+""+s3+"\n\n\n\n"+s1+"0");textarea.setAlignmentX(LEFT_ALIGN MENT);}if(Input_State==INPUT_NUMBER_TWO){s4.append(s[i]); s5=s4.toString();textarea.setText(s1+s3+"\n\n"+s[Opera tor[Operator_num]]+s1+s5+"\n\n"+s1+"0 ");}}}}}}}1.5. 系统运行环境Windows 7+jdk1.8+ eclipse题目二学生信息管理系统1.1 设计的内容、要求和目标1.1.1设计内容本次课程设计的主要目的是设计一个学生信息管理系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java课程设计报告—计算器————————————————————————————————作者:————————————————————————————————日期:2目录一、课程设计目的 (5)二、课程设计任务 (2)2.1、设计任务 (5)2.2、课程设计要求: (5)2.3、需求分析 (6)三、开发工具与平台 (3)3.1、开发工具 (6)3.2、开发平台 (6)四、设计思路 (4)4.1、界面设计 (4)4.2.1、逻辑设计 (7)第 3 页4.2.2、程序流程图 (5)4.2.3、主要代码展示及说明 (5)4.3、程序测试 (13)五、实验小结 (14)六、附录(程序代码) (15)第 4 页一、课程设计目的1、熟练掌握java面向对象编程。
2、选择合适的数据结构实现需求。
3、熟练使用各种控制结构。
4、GUI组件、事件处理技术。
二、课程设计任务2.1、设计任务设计一个简易的计算器,可以进行四则运算:加、减、乘、除等(限于十进制下)程序要求:(1)应具有相应的界面,可参考Windows操作系统自带的计算器界面。
(2)操作符号定为:“+”,“-”,“*”,“/”,“+/-”等。
(按国际惯例设计)(3)用户通过点击程序界面上按钮,实现数字、运算符的输入操作。
(4)以上部分为必须完成的内容。
选作部分:(1)具有操作符号“1/x”,“sqrt”(开方),“.”(小数功能)等。
2.2、课程设计要求:(1)应用自己所学课程知识完成对计算器的基本任务。
(2)查阅相关资料,学习和掌握项目中涉及的新知识,提高自学能力。
(3)通过应用java程序编写计算器来提升自己对简单的图形界面有一定的掌握和了解。
第 5 页2.3、需求分析1.设计的计算器可以完成加法、减法、乘法、除法的简单运算。
2.实现一些简单的扩展运算,如:正负号、倒数、退格、清零等功能。
3.添加小数点功能,用以实现浮点型数据的计算。
4.使用布局管理器设计一个计算器的界面,使用事件监听器处理数据的输入,并完成相关的计算。
三、开发工具与平台3.1、开发工具Microsoft Windows 7旗舰版3.2、开发平台JDK1.6.0-02 和UE编译器第 6 页四、设计思路4.1、界面设计:(如图3-1)图3-14.2.1、逻辑设计:(1)根据所设计出来的界面,首先要设计其GUI界面,总体界面有一个文本框,20个按钮,总体界面用BorderLayout布局,文本框放置在最NORTH,然后0到9以及+,-,*,/等按钮放置到一个面板Panel 中,完成界面设计。
(2)设计计算流程,首先点击数字按钮时,将按钮数值添加到文本框当中,并将该数值保存到一个字符串中,再次点击数字按钮时,将之前保存的字符串与新的数值拼接起来,再添加到文本框当中,直到点击运算符按钮时,将文本框当中的字符串保存在一个字符串变量中,然后重置文本框内容,将运算符号显示到文本框中,随后输入第二个计算数据时,用同样的办法保存数据,最后通过控制“=”运算符先将字符串数据转化成双精度类型,然后计算出结果并显示到文本框当中。
(3)基本运算设计完成以后则开始考虑其他个别功能的实现,例如倒数、清零、退格等功能的实现,清零直接重置文本框内容,退格功能则采用substring函数截取字符串长度。
第 7 页4.2.2、程序流程图:4.2.3、主要代码展示及说明:总体代码的设计:程序采用继承windowadapter类,新建Jframe窗体,利用数组来定义JBotton按钮,同时利用数组注册监听,采用4行5列网格布局,完成计算器界面的基本设置,在窗体的正常关闭方面,采用匿名类实现窗体的正常关闭。
最后对按钮进行计算分析,分别设定输入数据的A类、运算符控制的Opertion类,退格功能的BackSpace类、计算结果的Result类等等,一步步实现计算器的基本功能!(1)类A的设计(数据的输入)class A implements ActionListener{public void actionPerformed(ActionEvent e){String a = Jtext.getText();第 8 页String s = e.getActionCommand();if(a.equals("0.")||a.equals("+")||a.equals("-")||a.equals("*")||a.equals("/"))Jtext.setText(s);else{if(flag2){Jtext.setText(s);flag2=false;}elseJtext.setText(a+s);}}}功能解释:程序开始时,程序初始化文本框的内容为“0.”,点击数字按钮,则调用类A,首先用a来获取当前文本框内容,s来获取按钮数值,然后进行判断,若a的值为上述代码的值则输出s的值,再次点击数字按钮时,再次调用A类,此时a的值为上次输入的s值,第一个if语句不满足,执行下个if语句if(flag2),flag2初始值为false,该语句的功能是在执行了“=”号按钮时,防止新的数字按钮的值合并到到已经得出的结果上,例如:12+12=24,此时再点击数字按钮3时,则文本框内容被重置,输出数值3,而不是243,如果if(flag2)不满足,则将字符串a 和s合并并输出,得出第一个要计算的数据。
(2)类Opertion的设计:(运算符的控制)class Opertion implements ActionListener{public void actionPerformed(ActionEvent e){cal=e.getActionCommand();if(flag1==true)x=Jtext.getText();第 9 页Jtext.setText(cal);flag1=false;}}功能解释:当点击运算符控制按钮时,首先将运算符的数值赋值给cal(初值为空),紧接着进行判断,flag1初值为ture,该类的作用为在点击运算符按钮时,将计算的第一个数据保存在x字符串变量当中,然后将文本框内容重置为点击的运算符的数值,类的结尾将flag1赋值为false,防止再次点击运算符按钮时改变了x的值。
(附:此时文本框内容为运算符的值,输入第二个计算数据时,点击数字按钮,则再次调用A类,此时满足A类中第一个if语句,文本框内容被重置为数字按钮的值,接下来与获取第一个计算数据步骤一样,直到点击“=”号运算符为止!)(3)类Result的设计:(计算并输出结果)class Result implements ActionListener //计算并显示结果{public void actionPerformed(ActionEvent e){double num1;num1=Double.parseDouble(x);y=Jtext.getText();double num2;num2=Double.parseDouble(y);double result=0;if(num2!=0){if(cal.equals("+"))result=num1+num2;if(cal.equals("-"))result=num1-num2;if(cal.equals("*"))result=num1*num2;String s1=Double.toString(result);第 10 页Jtext.setText(s1);}if(cal.equals("/")){if(num2==0)Jtext.setText("除数不能为0");else{result=num1/num2;String s1=Double.toString(result);Jtext.setText(s1);}}flag1=true;flag2=true;}}功能解释:首先定义两个Double型num1,num2,将之前保存的第一个计算数据x强制转换为Double型后赋值给num1,接着用字符串变量y来获取当前文本框的内容,即第二个计算数据的值,同样再将其强制转换Double型后赋值给num2,然后进行运算符判断,对cal的值进行比较,然后进行相应的计算,将计算的结果转换成字符串后将其输出到文本框中,在类的最后将flag1、flag2赋值为true,作用是将计算的结果当作第二次计算的数据进行再运算,即将结果重新赋值给x作为第一个计算数据!(附:在此类中还考虑了当除数为零的情况。
)(4)类BackSpace的设计:(功能类—退格)class BackSpace implements ActionListener{public void actionPerformed(ActionEvent e){String s = e.getActionCommand();String s1 = Jtext.getText();if(s.equals("退格"))s1=new String (s1.substring(0,s1.length()-1));Jtext.setText(s1);}}功能解释:这是计算器附加功能的实现,这里只介绍退格功能,像正负号、求倒数、清零等功能相似,所以就不再一一介绍。
首先获取退格按钮的命令值赋给s,然后获取当前文本框的内容,即输入的数据,将其赋给s1,接着进行判断,利用substring函数将s1字符串截取为从第一个字符至倒数第二个字符为止的字符串并重新赋值给s1,再将其输出到文本框,实现退格的功能。
4.3、程序测试1.简单的运算:(以加法为例:123+456)分析:计算的结果为579.0,为双精度型,计算的结果被设置在文本框的最右端,该计算器的一个特点是可直接在文本框中输入数据以及进行更改。
2.倒数的运算:(以123为例)分析:输出的结果如图所示,倒数功能实现,计算时,不仅是结果,输入的数据同样可以先实现倒数功能后再进行相应的计算,没有影响!3.退格的运算:(以123为例)分析:输出的结果如图所示,本计算器退格键有一个特点是,就算是是计算后得出的结果也能实现退格,缺点是不能很好的处理小数点的问题,因为小数点也是字符串的一部分。
4.正负号的运算:(以123为例)分析:输出的结果如图所示,正负号添加能够很好的实现,但可以进行一些改进,比如在计算过程当中直接点击负号运算符输入负数进行计算!5.总体分析:该计算器基本运算没有问题,清零、正负号、求倒数、退格功能都能很好的实现,总体能完成一个计算器的基本功能,但仍有许多地方需要改进,比如小数点的实现所存在的一些问题,虽然在基本的运算过程当中不会造成太大影响,但这依然不能认为是一个很好的计算器,同时,在另一方面,该计算器还没能很好的实现连续计算的功能,必须每次按下等号按钮计算出结果后才能用产生的结果接着进行下一次的计算,改进的方法是在运算符上同时注册Result类,让运算符同时拥有计算结果的功能。