资源描述
JAVA程序设计课程设计任务书一、课程设计的目的1、培养学生面向对象编程的思想;2、使学生熟悉JAVA语言的使用;3、培养学生JAVA编程的思想和方法;4、使学生掌握JAVA编程调试的基本技能;5、培养学生分析、解决问题的能力。二、课程设计内容与要求1、内容一:1简单计算器题目描述使用Java的GUI图形用户界面编程设计并编写一个计算器程序,用户可以通过鼠标或者键盘操作输入参加运算的数值和运算符,要求能进行加、减、乘、除等混合运算。基本要求实现加、减、乘、除的双目单类别的基础运算;实现提示GUI编程 Component的事件响应。参考界面JAVA程序设计课程设计一、系统中所使用的数据对象及说明1、Calculator类属性属性名称类型描述JmbJMenuBar菜单栏Jm1 jm2 jm3 JMenu 菜单JmiJMenuItem菜单项fJFrame 实例化对象Panel1 1JPanel 输入面板CommandsPanelJPanel 运算符面板calckeysPanelJPanel 数字面板showline JTextField 数据输出框backspace JButton 退格键CE JButton 清空C JButton 删除1/XJButton 取余dao JButton 取倒数add JButton 数字相加jian 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添加组件、面板addMouseListener添加鼠标监听事件setJMenuBar设置菜单2、 系统功能结构及相关算法描述1、系统功能结构 计算器按键文本框菜单栏标题栏1-9、BackspaceCE、C+、-、*、/%、.、1/x=文本框帮助查看编辑标题:计算器关于计算器帮助主题数学分组科学型标准型粘贴复制系统功能结构图2、 相关算法流程图(1)加减法流程NY将S添加到show文本框执行加、减法运算得出SMun1是否存在(2) 乘除法流程NMun1是否存在Y执行乘、除法运算得出S将S添加到show文本框(3) 乘方取余法流程Mun1是否存在NY执行乘方、取余法运算得出S将S添加到show文本框三、系统运行结果(截图)1、主菜单四、课程设计总结通过此次课程设计,使我更加扎实的掌握了有关JAVA图形界面布局等方面的知识,虽然在设计过程中也遇到了很多问题,但经过一次又一次的思考,一遍又一遍检查和反复修改终于找到了原因所在,也暴露了前期我在这方面的知识欠缺。课程设计是一种实践活动,不但可以提升专业知识和专业能力,也培养了我们独立思考,动手操作的能力,使我对抽象的知识有了具体的认识。这对于我们的将来也有很大的帮助。此次课程设计也让我明白没有最完善的程序代码,只有不断地改善才能使程序变得更完美,同时也增强了我对JAVA的兴趣,相信继续保持下去对JAVA的理解一定会更上一层楼。附录:程序源码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.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, -, 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 = new 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(jmb);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 JMenuItem(数学分组(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(500, 300); / 不许修改计算器的大小 this.setResizable(false); / 使计算器中各组件大小合适 this.pack(); /* * 初始化计算器 */ private void init() / 文本框中的内容采用右对齐方式 resultText.setHorizontalAlignment(JTextField.RIGHT); / 不允许修改结果文本框 resultText.setEditable(false); / 设置文本框背景颜色为白色 resultText.setBackground(Color.WHITE); / 初始化计算器上键的按钮,将键放在一个面板内 JPanel calckeysPanel = new JPanel(); / 用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3); for (int i = 0; i KEYS.length; i+) keysi = new JButton(KEYSi); calckeysPanel.add(keysi); keysi.setForeground(Color.blue); / 运算符键用红色标示,其他键用蓝色表示 keys3.setForeground(Color.red); keys8.setForeground(Color.red); keys13.setForeground(Color.red); keys18.setForeground(Color.red); keys19.setForeground(Color.red); / 初始化功能键,都用红色标示。将功能键放在一个面板内 JPanel commandsPanel = new JPanel(); / 用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 commandsPanel.setLayout(new GridLayout(1, 3, 3, 3); for (int i = 0; i COMMAND.length; i+) commandsi = new JButton(COMMANDi); commandsPanel.add(commandsi); commandsi.setForeground(Color.red); / 下面进行计算器的整体布局,将calckeys和command面板放在计算器的中下部 / 新建一个大的面板,将上面建立的command和calckeys面板放在该面板内 JPanel panel1 = new JPanel(); / 面板采用边界布局管理器,面板里组件之间的水平和垂直方向上间隔都为3象素 panel1.setLayout(new BorderLayout(3, 3); panel1.add(North, commandsPanel); panel1.add(Center, calckeysPanel); / 建立一个面板放文本框 JPanel top = new JPanel(); top.setLayout(new BorderLayout(); top.add(Center, resultText); / 整体布局 getContentPane().setLayout(new BorderLayout(3, 5); getContentPane().add(North, top); getContentPane().add(Center, panel1); / 为各按钮添加事件监听器 / 都使用同一个事件监听器,即本对象。本类的声明中有implements ActionListener for (int i = 0; i KEYS.length; i+) keysi.addActionListener(this); for (int i = 0; i = 0) / 用户按了数字键或者小数点键 handleNumber(label); / handlezero(zero); else / 用户按了运算符键 handleOperator(label); /* * 处理Backspace键被按下的事件 */ private void handleBackspace() String text = 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(String key) if (firstDigit) / 输入的第一个数字 resultText.setText(key); else if (key.equals(.) & (resultText.getText().indexOf(.) 0) / 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面 resultText.setText(resultText.getText() + .); else if (!key.equals(.) / 如果输入的不是小数点,则将数字附在结果文本框的后面 resultText.setText(resultText.getText() + key); / 以后输入的肯定不是第一个数字了 firstDigit = false; /* * 处理C键被按下的事件 */ private void handleC() / 初始化计算器的各种值 resultText.setText(0); firstDigit = true; operator = =; /* * 处理运算符键被按下的事件 * * param key */ private void handleOperator(String key) if (operator.equals(/) / 除法运算 / 如果当前结果文本框中的值等于0 if (getNumberFromText() = 0.0) / 操作不合法 operateValidFlag = false; resultText.setText(除数不能为零); else resultNum /= getNumberFromText(); else if (operator.equals(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(*) / 乘法运算 resultNum *= getNumberFromText(); else if (operator.equals(sqrt) / 平方根运算 resultNum = Math.sqrt(resultNum); else if (operator.equals(%) / 百分号运算,除以100 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) resultText.setText(String.valueOf(t1); else resultText.setText(String.valueOf(resultNum); / 运算符等于用户按的按钮 operator = key; firstDigit = true; operateValidFlag = true; /* * 从结果文本框中获取数字 * * 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);
展开阅读全文