《JAVA课程设计报告计算器.doc》由会员分享,可在线阅读,更多相关《JAVA课程设计报告计算器.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、. -?JAVA程序设计?课程设计任务书一、课程设计的目的1、培养学生面向对象编程的思想;2、使学生熟悉JAVA语言的使用;3、培养学生JAVA编程的思想和方法;4、使学生掌握JAVA编程调试的根本技能;5、培养学生分析、解决问题的能力。二、课程设计内容与要求1、内容一:1简单计算器题目描述使用Java的GUI图形用户界面编程设计并编写一个计算器程序,用户可以通过鼠标或者键盘操作输入参加运算的数值和运算符,要求能进展加、减、乘、除等混合运算。根本要求实现加、减、乘、除的双目单类别的根底运算;实现提示GUI编程 ponent的事件响应。参考界面?JAVA程序设计?课程设计一、系统中所使用的数据对
2、象及说明1、Calculator类属性属性名称类型描述JmbJMenuBar菜单栏Jm1 jm2 jm3 JMenu 菜单JmiJMenuItem菜单项fJFrame 实例化对象Panel1 1JPanel 输入面板mandsPanelJPanel 运算符面板calckeysPanelJPanel 数字面板showline JTextField 数据输出框backspace utton 退格键CE utton 清空C utton 删除1/Xutton 取余dao utton 取倒数add utton 数字相加jian utton 数字相减cheng utton 数字相乘quzheng utto
3、n 数字相除dian utton 点符号deng utton 等于号zero utton 一one utton 二two utton 三three utton 四four utton 五five utton 六six utton 七seven utton 八eight utton 九num1 String保存第一个运算数字operator String保存运算符号方法方法名称功能Calculator计算器布局Add添加组件、面板addMouseListener添加鼠标监听事件setJMenuBar设置菜单二、 系统功能构造及相关算法描述1、系统功能构造 计算器按键文本框菜单栏标题栏1-9、Ba
4、ckspaceCE、C+、-、*、/%、.、1/x=文本框帮助查看编辑标题:计算器关于计算器帮助主题数学分组科学型标准型粘贴复制系统功能构造图2、 相关算法流程图1加减法流程NY将S添加到show文本框执行加、减法运算得出SMun1是否存在(2) 乘除法流程NMun1是否存在Y执行乘、除法运算得出S将S添加到show文本框(3) 乘方取余法流程Mun1是否存在NY执行乘方、取余法运算得出S将S添加到show文本框三、系统运行结果截图1、主菜单四、课程设计总结通过此次课程设计,使我更加扎实的掌握了有关JAVA图形界面布局等方面的知识,虽然在设计过程中也遇到了很多问题,但经过一次又一次的思考,一遍
5、又一遍检查和反复修改终于找到了原因所在,也暴露了前期我在这方面的知识欠缺。课程设计是一种实践活动,不但可以提升专业知识和专业能力,也培养了我们独立思考,动手操作的能力,使我对抽象的知识有了具体的认识。这对于我们的将来也有很大的帮助。此次课程设计也让我明白没有最完善的程序代码,只有不断地改善才能使程序变得更完美,同时也增强了我对JAVA的兴趣,相信继续保持下去对JAVA的理解一定会更上一层楼。附录:程序源码import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.ev
6、ent.ActionEvent;import java.awt.event.ActionListener;import javax.swing.utton;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;publicclassCalculatorextends
7、 JFrame implements ActionListener JMenuBar jmb; JMenu jm1,jm2,jm3; JMenuItem jmi;/* 计算器上的键的显示名字 */privatefinal String KEYS = 7, 8, 9, /, sqrt, 4, 5, 6,*, %, 1, 2, 3, -, 1/x, 0, +/-, ., +, = ;/* 计算器上的功能键的显示名字 */privatefinal String MAND = Backspace, CE, C ;/* 计算器上键的按钮 */private utton keys = new uttonK
8、EYS.length;/* 计算器上的功能键的按钮 */private utton mands = new uttonMAND.length;/* 计算器左边的M的按钮 */* 计算结果文本框 */private JTextField resultText = newJTextField(0);/ 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字privatebooleanfirstDigit = true;/ 计算的中间结果。privatedoubleresultNum = 0.0;/ 当前运算的运算符private String operator = =;/ 操作是否合
9、法privatebooleanoperateValidFlag = 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 J
10、MenuItem(标准型(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();/ 设置计算器的背景颜色
11、this.setBackground(Color.LIGHT_GRAY);this.setTitle(计算器);/ 在屏幕(500, 300)坐标处显示计算器this.setLocation(500, 300);/ 不许修改计算器的大小this.setResizable(false);/ 使计算器中各组件大小适宜this.pack(); /* * 初始化计算器 */privatevoid init() / 文本框中的内容采用右对齐方式resultText.setHorizontalAlignment(JTextField.RIGHT);/ 不允许修改结果文本框resultText.setEdi
12、table(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 utton(KEYSi); calckeysPanel.ad
13、d(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 mandsPanel = new JPanel();/ 用网格布局器,1行,3列的网格,网
14、格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素 mandsPanel.setLayout(new GridLayout(1, 3, 3, 3);for (int i = 0; i MAND.length; i+) mandsi = new utton(MANDi); mandsPanel.add(mandsi);mandsi.setForeground(Color.red); / 下面进展计算器的整体布局,将calckeys和mand面板放在计算器的中下部/ 新建一个大的面板,将上面建立的mand和calckeys面板放在该面板内 JPanel panel1 = new JPanel(
15、);/ 面板采用边界布局管理器,面板里组件之间的水平和垂直方向上间隔都为3象素 panel1.setLayout(new BorderLayout(3, 3); panel1.add(North, mandsPanel); panel1.add(Center, calckeysPanel);/ 建立一个面板放文本框 JPanel top = new JPanel(); top.setLayout(new BorderLayout(); top.add(Center, resultText);/ 整体布局 getContentPane().setLayout(new BorderLayout(3
16、, 5); getContentPane().add(North, top); getContentPane().add(Center, panel1);/ 为各按钮添加事件监听器/ 都使用同一个事件监听器,即本对象。本类的声明中有implements ActionListenerfor (int i = 0; i KEYS.length; i+) keysi.addActionListener(this); for (int i = 0; i = 0) / 用户按了数字键或者小数点键 handleNumber(label);/ handlezero(zero); else / 用户按了运算符
17、键 handleOperator(label); /* * 处理Backspace键被按下的事件 */privatevoid 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 = =; els
18、e / 显示新的文本resultText.setText(text); /* * 处理数字键被按下的事件 * * param key */privatevoid handleNumber(String key) if (firstDigit) / 输入的第一个数字resultText.setText(key); elseif (key.equals(.) & (resultText.getText().indexOf(.) 0) / 输入的是小数点,并且之前没有小数点,那么将小数点附在结果文本框的后面resultText.setText(resultText.getText() + .); e
19、lseif (!key.equals(.) / 如果输入的不是小数点,那么将数字附在结果文本框的后面resultText.setText(resultText.getText() + key); / 以后输入的肯定不是第一个数字了firstDigit = false; /* * 处理C键被按下的事件 */privatevoid handleC() / 初始化计算器的各种值resultText.setText(0);firstDigit = true;operator = =; /* * 处理运算符键被按下的事件 * * param key */privatevoid handleOperato
20、r(String key) if (operator.equals(/) / 除法运算/ 如果当前结果文本框中的值等于0if (getNumberFromText() = 0.0) / 操作不合法operateValidFlag = false;resultText.setText(除数不能为零); else resultNum /= getNumberFromText(); elseif (operator.equals(1/x) / 倒数运算if (resultNum = 0.0) / 操作不合法operateValidFlag = false;resultText.setText(零没有
21、倒数); else resultNum = 1 / resultNum; elseif (operator.equals(+) / 加法运算resultNum += getNumberFromText(); elseif (operator.equals(-) / 减法运算resultNum -= getNumberFromText(); elseif (operator.equals(*) / 乘法运算resultNum *= getNumberFromText(); elseif (operator.equals(sqrt) / 平方根运算resultNum = Math.sqrt(res
22、ultNum); elseif (operator.equals(%) / 百分号运算,除以100resultNum = resultNum / 100; elseif (operator.equals(+/-) / 正数负数运算resultNum = resultNum * (-1); elseif (operator.equals(=) / 赋值运算resultNum = getNumberFromText(); if (operateValidFlag) / 双精度浮点数的运算long t1;double t2; t1 = (long) resultNum; t2 = resultNum
23、 - t1;if (t2 = 0) resultText.setText(String.valueOf(t1); else resultText.setText(String.valueOf(resultNum); / 运算符等于用户按的按钮operator = key;firstDigit = true;operateValidFlag = true; /* * 从结果文本框中获取数字 * * return */privatedouble getNumberFromText() double result = 0;try result = Double.valueOf(resultText.getText().doubleValue(); catch (NumberFormatException e) return result; publicstaticvoid main(String args) Calculator calculator1 = new Calculator(); calculator1.setVisible(true); calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - word.zl.
限制150内