




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
昆 明 理 工 大 学 理 学 院信息与计算科学专业 操作性实验报告年级: 10级 姓名: 刘陈 学号: 201011101128 指导教师: 朱志宁 实验课程名称: java程序设计 开课实验室: 理学院机房 实验成绩:学风(5)观察能力(15)操作能力(30)调试能力(50)其它总分实验内容:1实验/作业题目: 计算器2实验/作业课时:各2学时,共4学时 3实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能): 实验环境:eclipse 实验内容:编写一个简单的计算器,能实现如图所示的功能,利用面向对象的思想进行程序设计。 完成实验要求的知识或技能:通过这个实验,掌握java图形界面的设计、事件响应的操作和面向对象的编程思想。4程序结构(程序中的函数调用关系图)5算法描述、流程图或操作步骤:第一个CalcControler类:package Calculator;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JTextField;public class CalcControler implements ActionListener JTextField textField;String op1, op2, operator;String errMsg = Error;int state = 0;CalcControler(JTextField tf)textField = tf;public void actionPerformed(ActionEvent e)String s;s = e.getActionCommand();switch (state) case 0:inputState0(s);break;case 1:inputState1(s);break;case 2:inputState2(s);break;case 3:inputState3(s);break;case 4:inputState4(s);break;case 5:inputState5(s);break;default:System.out.println(Unknow state error!);System.exit(1);private boolean isDigit(String s) boolean b;b = s.equals(0) | s.equals(1) | s.equals(2) | s.equals(3)| s.equals(4) | s.equals(5) | s.equals(6)| s.equals(7) | s.equals(8) | s.equals(9);return b;private int fN(float fop1) int ruslt = 0;if (fop1 = 0 | fop1 = 1) ruslt = 1; else ruslt = (int) (fop1 * fN(fop1 - 1);return ruslt;private boolean isOperator(String s) return s.equals(+) | s.equals(-) | s.equals(*) | s.equals(/)| s.equals(x2) | s.equals(x3) | s.equals(xy)| s.equals(sqrt) | s.equals(sin) | s.equals(cos)| s.equals(tan) | s.equals(n!) | s.equals()| s.equals();private void inputState0(String s) if (isDigit(s) | s.equals(+/-) | s.equals(.) state = 2;textField.setText(0);inputState2(s);if (isOperator(s) op1 = 0;operator = s;state = 4;if (s.equals(1/x) textField.setText(errMsg);state = 1;private void inputState1(String s) if (isDigit(s) | s.equals(+/-) | s.equals(.) textField.setText(0);state = 0;inputState0(s); else state = 0;textField.setText(0);private void inputState2(String s) if (isDigit(s) String text = textField.getText();if (text.equals(0)text = s;elsetext = text + s;textField.setText(text);if (s.equals(.) String text = textField.getText();if (!text.contains(.) text = text + s;textField.setText(text);if (s.equals(+/-) String text = textField.getText();if (text.charAt(0) = -)text = text.substring(1);elsetext = - + text;textField.setText(text);if (isOperator(s) | s.equals(1/x) state = 3;op1 = textField.getText();inputState3(s);if (s.equals(=) state = 3;op1 = textField.getText();if (s.equals(C)textField.setText(0);if (s.equals(Backspace) String text = textField.getText();if (text.length() = 1)textField.setText(0);elsetextField.setText(text.substring(0, text.length() - 1);private void inputState3(String s) if (isDigit(s) | s.equals(.) op1 = ;textField.setText(0);state = 2;inputState2(s);if (s.equals(+/-) state = 2;op1 = ;inputState2(s);if (isOperator(s) operator = s;state = 4;if (operator.equals(x2) | operator.equals(x3)| operator.equals(sin) | operator.equals(cos)| operator.equals(tan) | operator.equals(sqrt)| operator.equals(n!) inputState6(s);if (s.equals(1/x) Float fOp1 = new Float(op1);if (fOp1.floatValue() = 0.0) state = 1;textField.setText(errMsg); else float f = 1.0f / fOp1.floatValue();op1 = String.valueOf(f);textField.setText(op1);if (s.equals(C) | s.equals(Backspace) state = 0;textField.setText(0);private void inputState4(String s) if (isDigit(s) | s.equals(+/-) | s.equals(.) textField.setText(0);state = 5;inputState5(s);if (isOperator(s)operator = s;if (s.equals(1/x) state = 3;operator = ;inputState3(s);if (s.equals(C) | s.equals(Backspace) state = 0;textField.setText(0);private void inputState5(String s) if (isDigit(s) String text = textField.getText();if (text.equals(0)text = s;elsetext = text + s;textField.setText(text);if (s.equals(.) String text = textField.getText();if (!text.contains(.) text = text + s;textField.setText(text);if (s.equals(+/-) String text = textField.getText();if (text.charAt(0) = -)text = text.substring(1);elsetext = - + text;textField.setText(text);if (isOperator(s) op2 = textField.getText();Float f1, f2;f1 = new Float(op1);f2 = new Float(op2);float fop1, fop2;fop1 = f1.floatValue();fop2 = f2.floatValue();if (operator.equals(+)fop1 = fop1 + fop2;else if (operator.equals(-)fop1 = fop1 - fop2;else if (operator.equals(*)fop1 = fop1 * fop2;else if (operator.equals(/) if (fop2 != 0.0f)fop1 = fop1 / fop2;else state = 1;textField.setText(errMsg);return; else System.out.println(Unknown operator error!);state = 1;textField.setText(errMsg);return;op1 = String.valueOf(fop1);textField.setText(op1);operator = s;state = 4;if (s.equals(1/x) op1 = textField.getText();state = 3;inputState3(s);if (s.equals(=) op2 = textField.getText();Float f1, f2;f1 = new Float(op1);f2 = new Float(op2);float fop1, fop2;fop1 = f1.floatValue();fop2 = f2.floatValue();if (operator.equals(+)fop1 = fop1 + fop2;else if (operator.equals(-)fop1 = fop1 - fop2;else if (operator.equals(*)fop1 = fop1 * fop2;else if (operator.equals(/) if (fop2 != 0.0f)fop1 = fop1 / fop2;else state = 1;textField.setText(errMsg);return; else if (operator.equals(xy)fop1 = (float) Math.pow(fop1, fop2);else System.out.println(Unknown operator error!);state = 1;textField.setText(errMsg);return;op1 = String.valueOf(fop1);textField.setText(op1);state = 3;if (s.equals(C) state = 0;textField.setText(0);if (s.equals(Backspace) String text = textField.getText();if (text.length() = 1)textField.setText(0);elsetextField.setText(text.substring(0, text.length() - 1);private void inputState6(String s) Float f1;f1 = new Float(op1);float fop1;fop1 = f1.floatValue();if (operator.equals(sqrt) if (fop1 0) textField.setText(errMsg);return; elsefop1 = (float) Math.sqrt(fop1); else if (operator.equals(x2)fop1 = fop1 * fop1;else if (operator.equals(x3)fop1 = fop1 * fop1 * fop1;else if (operator.equals(sin)fop1 = (float) Math.sin(fop1);else if (operator.equals(cos)fop1 = (float) Math.cos(fop1);else if (operator.equals(tan)fop1 = (float) Math.tan(fop1);else if (operator.equals(n!)fop1 = this.fN(fop1);op1 = String.valueOf(fop1);textField.setText(op1);第二个CalcultorFrame类:package Calculator;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Frame;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class CalcultorFrame extends Frame private static final long serialVersionUID = 1L;CalcPanel panel;public CalcultorFrame() MenuBar menuBar = new MenuBar();Menu menuFile = new Menu();MenuItem menuFileExit = new MenuItem();menuFile.setLabel(File);menuFileExit.setLabel(Exit);menuFileExit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) CalcultorFrame.this.windowClosed(););menuFile.add(menuFileExit);menuBar.add(menuFile);setTitle(Calculator);setMenuBar(menuBar);setSize(new Dimension(400, 400);this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) CalcultorFrame.this.windowClosed(););panel = new CalcPanel();add(panel, BorderLayout.CENTER);protected void windowClosed() System.exit(0);第三个CalcPanel类:package Calculator;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Color;import java.awt.GridLayout;import javax.swing.JPanel;import javax.swing.JTextField;public class CalcPanel extends JPanel private static final long serialVersionUID = 1L;JTextField textField;JPanel buttonPanel;Button numButtons;Button btnDot, btnPosMinus, btnBackspace, btnDivide1, btnEqual, btnClear;Button btnAdd, btnSubtract, btnMultiply, btnDivide;Button btnX2, btnX3, btnXY, btnSin, btnCos, btnTan, btnSqrt, btnN, btnLeft,btnRight;CalcControler controler;public CalcPanel() textField = new JTextField(34);controler = new CalcControler(textField);textField.setHorizontalAlignment(JTextField.RIGHT);textField.setEditable(false);buttonPanel = new JPanel();numButtons = new Button10;for (int i = 0; i 10; i+) numButtonsi = new Button( + i);btnDot = new Button(.);btnPosMinus = new Button(+/-);btnBackspace = new Button(Backspace);btnDivide1 = new Button(1/x);btnEqual = new Button(=);btnClear = new Button(C);btnAdd = new Button(+);btnSubtract = new Button(-);btnMultiply = new Button(*);btnDivide = new Button(/);btnLeft = new Button();btnRight = new Button();btnX2 = new Button(x2);btnX3 = new Button(x3);btnXY = new Button(xy);btnSqrt = new Button(sqrt);btnSin = new Button(sin);btnCos = new Button(cos);btnTan = new Button(tan);btnN = new Button(n!);buttonPanel.setLayout(new GridLayout(6, 5);buttonPanel.add(btnLeft).setForeground(Color.black);buttonPanel.add(btnRight).setForeground(Color.black);buttonPanel.add(btnSin).setForeground(Color.black);buttonPanel.add(btnCos).setForeground(Color.black);buttonPanel.add(btnTan).setForeground(Color.black);buttonPanel.add(btnX2).setForeground(Color.black);buttonPanel.add(btnX3).setForeground(Color.black);buttonPanel.add(btnXY).setForeground(Color.black);buttonPanel.add(btnSqrt).setForeground(Color.black);buttonPanel.add(btnN).setForeground(Color.black);buttonPanel.add(numButtons7).setForeground(Color.black);buttonPanel.add(numButtons8).setForeground(Color.black);buttonPanel.add(numButtons9).setForeground(Color.black);buttonPanel.add(btnAdd).setForeground(Color.black);buttonPanel.add(btnClear).setForeground(Color.black);buttonPanel.add(numButtons4).setForeground(Color.black);buttonPanel.add(numButtons5).setForeground(Color.black);buttonPanel.add(numButtons6).setForeground(Color.black);buttonPanel.add(btnSubtract).setForeground(Color.black);buttonPanel.add(btnBackspace).setForeground(Color.black);buttonPanel.add(numButtons1).setForeground(Color.black);buttonPanel.add(numButtons2).setForeground(Color.black);buttonPanel.add(numButtons3).setForeground(Color.black);buttonPanel.add(btnMultiply).setForeground(Color.black);buttonPanel.add(btnDivide1).setForeground(Color.black);buttonPanel.add(numButtons0).setForeground(Color.black);buttonPanel.add(btnDot).setForeground(Color.black);buttonPanel.add(btnPosMinus).setForeground(Color.black);buttonPanel.add(btnDivide).setForeground(Color.black);buttonPanel.add(btnEqual).setForeground(Color.black);for (int i = 0; i 10; i+) numButtonsi.addActionListener(controler);btnAdd.addActionListener(controler);btnBackspace.addActionLi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 系统架构设计的跨领域应用考题试题及答案
- 生态公需科目试题及答案
- 育婴师知识考察内容分享试题及答案
- 药物流通中的供应链管理试题及答案
- 护士资格证考试护理管理实际案例试题及答案
- 备考卫生管理考试时的经验分享试题及答案
- 系统梳理文化产业管理考试验证
- 网络规划设计师实战模拟试题及答案
- 药品研发考核试题及答案
- 系统规划与管理师考试模拟题分享试题及答案
- 项目经理变更说明(申请)
- 《将进酒》课件23张
- 机房动力环境监控课件
- 医疗垃圾收集流程及鹅颈式打结方法考评标准
- 油气管道高后果区管段识别分级表
- 班前安全活动记录(真石漆班组)
- 县级城投公司人事管理制度
- 无损检测超声波检测课件
- 生产中断影响及生产组织管理考核办法
- 【图文】GB8624-2012建筑材料及制品燃烧性能分级(精)
- (完整版)【昆明】重庆机场鸟害防治材料课件
评论
0/150
提交评论