1、JAVA 程序设计课程设计任务书一、课程设计的目的1、培养学生面向对象编程的思想;2、使学生熟悉 JAVA 语言的使用;3、培养学生 JAVA 编程的思想和方法;4、使学生掌握 JAVA 编程调试的基本技能;5、培养学生分析、解决问题的能力。二、课程设计内容与要求1、内容一:1 简单计算器题目描述使用 Java 的 GUI 图形用户界面编程设计并编写一个计算器程序,用户可以通过鼠标或者键盘操作输入参加运算的数值和运算符,要求能进行加、减、乘、除等混合运算。基本要求实现加、减、乘、除的双目单类别的基础运算;实现提示GUI 编程 Component 的事件响应。参考界面JAVA 程序设计课程设计一
2、、系统中所使用的数据对象及说明1、Calculator 类属性属性名称 类型 描述Jmb JMenuBar 菜单栏Jm1 jm2 jm3 JMenu 菜单Jmi JMenuItem 菜单项f JFrame 实例化对象Panel1 1 JPanel 输入面板CommandsPanel JPanel 运算符面板calckeysPanel JPanel 数字面板showline JTextField 数据输出框backspace JButton 退格键CE JButton 清空C JButton 删除1/X JButton 取余dao JButton 取倒数add JButton 数字相加jian
3、JButton 数字相减cheng JButton 数字相乘quzheng JButton 数字相除dian JButton 点符号deng JButton 等于号zero JButton 一one JButton 二two JButton 三three JButton 四four JButton 五five JButton 六six JButton 七seven JButton 八eight JButton 九num1 String 保存第一个运算数字operator String 保存运算符号方法方法名称 功能Calculator 计算器布局Add 添加组件、面板addMouseListe
4、ner 添加鼠标监听事件setJMenuBar 设置菜单2、系统功能结构及相关算法描述1、系统功能结构 系统功能结构图2、相关算法流程图(1)加减法流程计算器标题栏 菜单栏 文本框 按键标题:计算器编辑复制 粘贴查看标准型科学型数学分组帮助帮助主题关于计算器文本框 1-9、BackspaceCE、C+、-、 *、/%、 .、1/x=Mun1 是否存在执行加、减法运算得出S将 S 添加到show 文本框YN(2)乘除法流程Mun1 是否存在执行乘、除法运算得出SYN(3)乘方取余法流程三、系统运行结果(截图)1、主菜单将 S 添加到show 文本框Mun1 是否存在执行乘方、取余法运算得出 S将
5、 S 添加到show 文本框YN四、课程设计总结通过此次课程设计,使我更加扎实的掌握了有关 JAVA 图形界面布局等方面的知识,虽然在设计过程中也遇到了很多问题,但经过一次又一次的思考,一遍又一遍检查和反复修改终于找到了原因所在,也暴露了前期我在这方面的知识欠缺。课程设计是一种实践活动,不但可以提升专业知识和专业能力,也培养了我们独立思考,动手操作的能力,使我对抽象的知识有了具体的认识。这对于我们的将来也有很大的帮助。此次课程设计也让我明白没有最完善的程序代码,只有不断地改善才能使程序变得更完美,同时也增强了我对 JAVA 的兴趣,相信继续保持下去对 JAVA 的理解一定会更上一层楼。附录:程
6、序源码import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.
7、swing.JPanel;import javax.swing.JSeparator;import javax.swing.JTextField;public class Calculator extends JFrame implements ActionListener JMenuBar jmb;JMenu jm1,jm2,jm3;JMenuItem jmi;/* 计算器上的键的显示名字 */private final String KEYS = “7“, “8“, “9“, “/“, “sqrt“, “4“, “5“, “6“,“*“, “%“, “1“, “2“, “3“, “-“,
8、“1/x“, “0“, “+/-“, “.“, “+“, “=“ ;/* 计算器上的功能键的显示名字 */private final String COMMAND = “Backspace“, “CE“, “C“ ;/* 计算器上键的按钮 */private JButton keys = new JButtonKEYS.length;/* 计算器上的功能键的按钮 */private JButton commands = new JButtonCOMMAND.length;/* 计算器左边的M的按钮 */* 计算结果文本框 */private JTextField resultText = ne
9、w JTextField(“0“);/ 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字private boolean firstDigit = true;/ 计算的中间结果。private double resultNum = 0.0;/ 当前运算的运算符private String operator = “=“;/ 操作是否合法private boolean operateValidFlag = true;/* 构造函数*/public Calculator() super();JMenuBar jmb=new JMenuBar();this.setJMenuBar(j
10、mb);JMenu jm=new JMenu(“编辑(E)“);jmb.add(jm);jmi= new JMenuItem(“复制(c) Ctrl+c“);jm.add(jmi);jmi= new JMenuItem(“粘贴(p) Ctrl+v“);jm.add(jmi);jm2=new JMenu(“查看(v)“);jmb.add(jm2);jmi= new JMenuItem(“标准型(T)“);jm2.add(jmi);jmi= new JMenuItem(“科学型(S)“);jm2.add(jmi);jm2.add(new JSeparator();jmi= new JMenuIte
11、m(“数学分组(I)“);jm2.add(jmi);jm3=new JMenu(“帮助(H)“);jmb.add(jm3);jmi= new JMenuItem(“帮助主题(H)“);jm3.add(jmi);jm3.add(new JSeparator();jmi= new JMenuItem(“关于计算器(A)“);jm3.add(jmi);/ 初始化计算器init();/ 设置计算器的背景颜色this.setBackground(Color.LIGHT_GRAY);this.setTitle(“计算器“);/ 在屏幕(500, 300)坐标处显示计算器this.setLocation(5
12、00, 300);/ 不许修改计算器的大小this.setResizable(false);/ 使计算器中各组件大小合适this.pack();/* 初始化计算器*/private void init() / 文本框中的内容采用右对齐方式resultText.setHorizontalAlignment(JTextField.RIGHT);/ 不允许修改结果文本框resultText.setEditable(false);/ 设置文本框背景颜色为白色resultText.setBackground(Color.WHITE);/ 初始化计算器上键的按钮,将键放在一个面板内JPanel calck
13、eysPanel = new JPanel();/ 用网格布局器,4行,5 列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3);for (int i = 0; i = 0) / 用户按了数字键或者小数点键handleNumber(label);/ handlezero(zero); else / 用户按了运算符键handleOperator(label);/* 处理Backspace 键被按下的事件*/private void handleBackspace() String t
14、ext = resultText.getText();int i = text.length();if (i 0) / 退格,将文本最后一个字符去掉text = text.substring(0, i - 1);if (text.length() = 0) / 如果文本没有了内容,则初始化计算器的各种值resultText.setText(“0“);firstDigit = true;operator = “=“; else / 显示新的文本resultText.setText(text);/* 处理数字键被按下的事件* param key*/private void handleNumber
15、(String key) if (firstDigit) / 输入的第一个数字resultText.setText(key); else if (key.equals(“.“) else if (!key.equals(“.“) / 如果输入的不是小数点,则将数字附在结果文本框的后面resultText.setText(resultText.getText() + key);/ 以后输入的肯定不是第一个数字了firstDigit = false;/* 处理C键被按下的事件*/private void handleC() / 初始化计算器的各种值resultText.setText(“0“);f
16、irstDigit = true;operator = “=“;/* 处理运算符键被按下的事件* param key*/private void handleOperator(String key) if (operator.equals(“/“) / 除法运算/ 如果当前结果文本框中的值等于0if (getNumberFromText() = 0.0) / 操作不合法operateValidFlag = false;resultText.setText(“除数不能为零 “); else resultNum /= getNumberFromText(); else if (operator.e
17、quals(“1/x“) / 倒数运算if (resultNum = 0.0) / 操作不合法operateValidFlag = false;resultText.setText(“零没有倒数“); else resultNum = 1 / resultNum; else if (operator.equals(“+“) / 加法运算resultNum += getNumberFromText(); else if (operator.equals(“-“) / 减法运算resultNum -= getNumberFromText(); else if (operator.equals(“*
18、“) / 乘法运算resultNum *= getNumberFromText(); else if (operator.equals(“sqrt“) / 平方根运算resultNum = Math.sqrt(resultNum); else if (operator.equals(“%“) / 百分号运算,除以100resultNum = resultNum / 100; else if (operator.equals(“+/-“) / 正数负数运算resultNum = resultNum * (-1); else if (operator.equals(“=“) / 赋值运算resul
19、tNum = getNumberFromText();if (operateValidFlag) / 双精度浮点数的运算long t1;double t2;t1 = (long) resultNum;t2 = resultNum - t1;if (t2 = 0) resultText.setText(String.valueOf(t1); else resultText.setText(String.valueOf(resultNum);/ 运算符等于用户按的按钮operator = key;firstDigit = true;operateValidFlag = true;/* 从结果文本框
20、中获取数字* return*/private double getNumberFromText() double result = 0;try result = Double.valueOf(resultText.getText().doubleValue(); catch (NumberFormatException e) return result;public static void main(String args) Calculator calculator1 = new Calculator();calculator1.setVisible(true);calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);