版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、人机交互实验报告 简单计算器的功能实现院系:信息工程学院 专业: 组员姓名:_ 指导教师:_20.10年11月21日i目录一、实验目的3二、实验内容3三、实验设计的基本思想和方法要求43.1 软件开发方式3.2 开发语言3.3 开发集成环境3.4 设计思路3.5 系统硬件要求3.6 软件要求四、实验过程和步骤4.1 需求分析4.2 概要设计4.3 详细设计4.3.1 类的设计4.3.2 算法的设计4.3.3 界面的设计4.4 编写代码4.5 系统测试4.5.1 测试目的4.5.2 测试过程五、实验心得44445555566666777、实验目的信息技术的高速发展给人类生产、生活带来了广泛而深刻
2、的影响。新产品、新 概念层出不穷,不断冲击着人们的视听。这些高科技成果为人们带来了便捷、快 乐的同时,也促进了人机交互技术的发展。为使我们更进一步的了解人机交互这 门技术,实现简单计算器的功能实验意在巩固我们所学的基础理论和专业知识, 掌握利用状态转换网络进行系统设计的方法,增强我们分析问题解决问题的能 力,提高我们的动手能力和创新能力。二、实验内容实现一个简单的计算器程序,具体内容如下:设计一个四则运算计算程序,实现“ operand1 operator operand2opera nd1可以是整数或者小数或者是上一次的运算结果,opera nd2是整数或者小数,操作符是“ + - * /
3、”。另外还要实现辅助键的功能,CE (Clear Entry)键清零,C键取消用户上一次的操作。界面如下图:三、实验设计的基本思想和方法要求3.1 软件开发方式本次实验采用队友软件开发方式, 小组成员根据实验要求进行需求分析, 根据 平时使用计算器的经验讨论出各个功能模块的相关设计及其基本实现方法, 利用 状态转换网络进行系统设计, 由组长进行分工, 负责整个设计, 组长协同组员完 成各个模块的设计编码实现和文档,最终完成编码的整合及测试工作。3.2 开发语言由于 Java 语言作为一种完全面向对象的语言, 它吸取了其他语言的各种优点, 设计简洁而优美,使用起来方便而有效。所以本次实验设计采用
4、 Java 语言进行 编码, Java 语言中的文本框、事件监听器、标签、按钮等多种组件均被用在本 次实验中。3.3 开发集成环境Java 不仅提供了一个丰富的语言和运行环境,而且还提供了一个免费的开发工具集,即JDK。由于本次实验采用Java语言进行编码,故开发集成环境选择 安装在 JDK 环境下,运用不仅仅提供最基本的编辑、编译功能,而且还提供了 强大附加功能的 Myeclipse-7.5 进行集成编码测试。3.4 设计思路本实验设计的计算器应用程序 JFrame 继承自框架类 (Frame )。通过 Swing 包中的可视化组件进行界面设计, 通过对面板的监听以进行后台的计算。 设计中
5、采用模型 -视图-控制器( MVC )模式,用模型存储内容,用视图显示内容,用 控制器处理输入。同时用类来实现抽象和封装,实现模块化处理3.5系统硬件要求内存1024MB,硬盘SCSI 36GX2 , CPU双至强2 .0,双千兆卡,250W 400W电源。3.6软件要求由于本次实验采用Java语言进行编码实现,故需要安装 JDK环境,或者安装 在JDK环境下可以进行编译运行Java编码的软件,如Myeclipse等软件。四、实验过程和步骤在本次实验过程中,系统设计主要由五部分组成:需求分析、概要设计、详细 设计、编写代码和系统测试。如图 4-1所示:图4-164.1需求分析在日常生活中经常需
6、要使用到计算器,比如科学计算、数值计算、会计业务等。 用Java语言实现一个简单精巧实用的计算器,不仅使我们更熟悉Java语言的使 用,而且更进一步了解人机交互这门技术, 熟悉各个状态间的转换关系。本次实 验项目需要实现一个简单的四则运算的计算器,拥有加、减、乘、除等基本运算 功能及相应的状态转换。4.2概要设计本次实验设计的简单计算器包含的功能有:加、减、乘、除等基本功能。计算 器的屏显为JTEXTFIELD控件,显示屏下面的数字、操作符按键为JBUTTON控7#件,每种计算功能均为独立设计算法CE( Clear Entry )键可以清除所有已输#入的数据从头计算, C 键取消用户上一次的操
7、作, 重新输入数据可以继续当前的计算。4.3 详细设计详细设计部分则是在概要设计的基础上对计算器的功能实现做出更为详细的 介绍。主要对各个设计模块中的各个类做出说明, 包括对每个类如何在以后的程 序设计中的定义做出介绍,并做出相应的说明,同时对各个参数也会做出介绍。4.3.1 类的设计本实验使用类对计算器的各个功能进行抽象和封装。首先定义计算器类Calculator ,主要进行计算器的界面设计。然后分别对输入数字、输入运算符、 输入退格和清除分别设计类 A 、类 Operating 、类 Clear ,以实现对相应操作的 抽象和封装。实验中继承的类是默认的系统软件包 java.lang 中的
8、Object 类。4.3.2 算法的设计对每个类单独设计算法,以增大内聚性,减小耦合性。详细算法见源代码。4.3.3 界面的设计界面设计秉持着简洁明了,符合人们习惯的原则。本实验中,先将JLable标签、JtextField文本框、Jbutton 按钮等轻量级控件 放在中间容器 Container 中,再将容器添加到顶层容器 mainJFrame 中。同时 对按钮创建按钮事件监听器,以随时对按钮事件进行监听。4.4 编写代码这一部分主要根据前面的详细设计内容用具体的语言实现计算器系统, 主要采 用 Java 语言实现,这一部分主要是将前一阶段的设计思想用代码的形式实现4.5 系统测试4.5.1
9、 测试目的 测试是软件设计中一个独立的、关键的阶段,也是保证软件质量的重要手段。 为了发现系统的错误, 使系统更加完善, 就必须进行测试, 测试阶段的目标就是 为了验证各阶段所完成的工作是否满足需求分析和详细的设计要求, 识别出期望 的结果和真正结果之间的差别, 以便修正设计和代码实现中潜在的错误, 保证系 统运行的正确性和功能的完备性,提高系统运行的性能。4.5.2 测试过程(1)代码审查人工测试源程序由编写程序本人非正式的进行,小组内的其他成员再进行核查。(2)软件调试 在成功测试之后,发现的是故障的表现,小组成员对发现的错误进行了诊断, 找到其发生的原因和位置,然后改正错误。组员的调试工
10、作包括: 对错误进行定位并分析原因。对于错误部分重新编码以改正错误。重新调试。五、实验心得自从拿到题目到完成整个编程, 从理论到实践, 可以学到很多很多的东西, 同时不仅可以巩固了以前所学过的知识, 而且学到了很多在书本上所没有学到过 的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的, 只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结 论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到了种种问题,尤其是运行程序时不断发现意想不到的bug,但这毕竟独立做的,难免会遇到过问题。同时在设计的过程中发现了自己的不足之 处,对
11、以前所学过的知识理解得不够深刻, 掌握得不够牢固,比如说算法和监听 等,以后还得继续加强。状态转换图:输入数字输入运算符除数为0input operationerror至算符begin输入运算符输出结果清除清除backspace退格结果 输入运input number退格输出:输入数字输出结果output resultelim in ati on11#附源代码:#import java.awt.*;import javax.swing.*;import java.awt.event.*; public class a JFrame mainJFrame;Container con;JLabel
12、 JLabel1;JTextField usertext1;JTextField usertext2;JButton b1=new JButton("7");JButton b2=new JButton("8");JButton b3=new JButton("9");JButton b4=new JButton("C");JButton b5=new JButton("CE");JButton b6=new JButton("4");JButton b7=new JButt
13、on("5");JButton b8=new JButton("6");JButton b9=new JButton(" + ");JButton b10=new JButton(" - ");JButton b11=new JButton("1");JButton b12=new JButton("2");120 ");JButton b13=new JButton("3");JButton b14=new JButton(" * &
14、quot;);JButton b15=new JButton(" / ");JButton b16=new JButton("JButton b17=new JButton(" . ");JButton b18=new JButton("II);public a()trymainJFrame=new JFrame("Quantum Calc");con=mainJFrame.getContentPane();JLabel1=new JLabel(" State:"usertext1=new JT
15、extField("begin");usertext1.setColumns(10);文本框宽度usertext1.setHorizontalAlignment(JTextField.LEFT);本框的水平方向向为左/ 设置/ 设置文14usertext1.setEditable(false);/ 设置文本框为不可编辑状态usertext1.setBackground(Color.white);usertext2=new JTextField("0");本框初始状态为 "0"usertext2.setColumns(20);文本框宽度
16、usertext2.setHorizontalAlignment(JTextField.RIGHT);本框的水平方向向为右usertext2.setEditable(false);框为不可编辑状态usertext2.setBackground(Color.white);con.setLayout(new FlowLayout();con.add(JLabel1);con.add(usertext1);con.add(usertext2);/ 设置面板mainJFrame.setSize(260,225);mainJFrame.setVisible(true);mainJFrame.setDef
17、aultCloseOperation(JFrame.EXIT_/ 设置文/ 设置/ 设置文/ 设置文本_CLOSE);16A aa=new A();Opertion op=new Opertion();Clear clar=new Clear();/ 设置按钮监听b1.addActionListener(aa);b2.addActionListener(aa); b3.addActionListener(aa); b4.addActionListener(clar); b5.addActionListener(clar); b6.addActionListener(aa); b7.addAct
18、ionListener(aa); b8.addActionListener(aa); b9.addActionListener(op); b10.addActionListener(op); b11.addActionListener(aa); b12.addActionListener(aa); b13.addActionListener(aa); b14.addActionListener(op); b15.addActionListener(op);b16.addActionListener(aa);18b17.addActionListener(aa);b18.addActionLis
19、tener(op);/ 添加按钮到面板con.add(b1);con.add(b2);con.add(b3);con.add(b4);con.add(b5);con.add(b6);con.add(b7);con.add(b8);con.add(b9);con.add(b10);con.add(b11);con.add(b12);con.add(b13);con.add(b14);con.add(b15);con.add(b16);con.add(b17);19con.add(b18);catch(Exception e)System.out.println(e.getMessage();/S
20、tring s1="",s2="",flag="",s3="",s4=""int i=0; / 记录小数点个数/ 输入数字class A implements ActionListenerpublic void actionPerformed(ActionEvent e)usertext1.setText("input number");if(e.getSource()=b1)s1+=b1.getText();usertext2.setText(s1); if(s1.equa
21、ls("0") s1=b1.getText();usertext2.setText(s1);else20if(e.getSource()=b2) if(s1.equals("0") s1=b2.getText();usertext2.setText(s1);else s1+=b2.getText();usertext2.setText(s1); if(e.getSource()=b3) if(s1.equals("0") s1=b3.getText();usertext2.setText(s1);else s1+=b3.getText
22、();usertext2.setText(s1); if(e.getSource()=b6) if(s1.equals("0") s1=b6.getText();usertext2.setText(s1);else s1+=b6.getText();usertext2.setText(s1); if(e.getSource()=b7) if(s1.equals("0") s1=b7.getText();usertext2.setText(s1);else s1+=b7.getText();usertext2.setText(s1); if(e.getSo
23、urce()=b8) if(s1.equals("0") s1=b8.getText();usertext2.setText(s1);else s1+=b8.getText();usertext2.setText(s1); 21else s1+="0"usertext2.setText(s1);else s1+=b11.getText();usertext2.setText(s1); if(e.getSource()=b12) if(s1.equals("0") s1=b12.getText();usertext2.setText(s
24、1);else s1+=b12.getText();usertext2.setText(s1); if(e.getSource()=b13) if(s1.equals("0") s1=b13.getText();usertext2.setText(s1); else s1+=b13.getText();usertext2.setText(s1); if(e.getSource()=b16)if(s1.length()>0)if(Float.parseFloat(s1)=0)if(usertext2.getText()="0.") s1+="
25、;0"usertext2.setText(s1); else s1="0"usertext2.setText(s1);if(e.getSource()=b17)if(i=0) if(s1="0"|s1="") s1="0."i+;else s1+="." i+ ;usertext2.setText(s1);class Opertion implements ActionListenerpublic void actionPerformed(ActionEvent e)/ 加法运算if(
26、e.getSource()=b9)23usertext1.setText("input operation");flag=b9.getText();if(s2!="") s2=String.valueOf(Float.parseFloat(usertext2.getText()+Float.parseFloat (s2);else s2=usertext2.getText();/ 减法运算if(e.getSource()=b10)usertext1.setText("input operation");flag=b10.getText
27、();if(s2!="") s2=String.valueOf(Float.parseFloat(usertext2.getText()+Float.parseFloat (s2);else s2=usertext2.getText();s1=""/ 乘法运算if(e.getSource()=b14) flag=b14.getText();if(s2!="") s2=String.valueOf(Float.parseFloat(usertext2.getText()+Float.parseFloat (s2);else s2=use
28、rtext2.getText();s1=""/ 除法运算if(e.getSource()=b15)usertext1.setText("input operation");flag=b15.getText();if(s2!="")s2=String.valueOf(Float.parseFloat(usertext2.getText()+Float.parseFloat (s2);else s2=usertext2.getText();s1=""/ 运算结果25if(e.getSource()=b18)i=0;if
29、(flag="") usertext1.setText("output result");if(s1="") elseusertext2.setText(String.valueOf(Float.parseFloat(s1);if(flag="other") usertext1.setText("output result");if(flag="other1")usertext1.setText("output result");if(s3="&
30、quot;)if(s4="") elseusertext2.setText(String.valueOf(Float.parseFloat(s4);elseif(s4="")usertext2.setText(String.valueOf(Float.parseFloat(s3);elseusertext2.setText(String.valueOf(Float.parseFloat(s4)+Float.parseFloat(s3);if(flag=" + ")usertext1.setText("outputresult
31、");if(s1="")usertext2.setText(String.valueOf(Float.parseFloat(s2); else usertext2.setText(String.valueOf(Float.parseFloat(s2)+Float.parseFloat(s1 );if(flag=" - ")usertext1.setText("outputresult");if(s1="")usertext2.setText(String.valueOf(Float.parseFloat(s2); elseusertext2.setText(String.valueOf(Float.parseFloat(s2)-Float.parseFloat(s1) );if(flag=" * ")usertext1.setText("outputresult");if(s1="")usertext2.setText(String.valueOf(Float.parseFloat(s2); elseusertext2.setText(String.valueOf(Fl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年简易劳动合同范本下载
- 2025年个人定期存单质押借款合同
- 2025关于编制商品房买卖合同模板
- 2025标准版买卖合同的模板
- 2025年学法普法知识试题库(附答案解析)
- 2025YY医学院附属Y市Y医院Y采购合同
- 剧情模拟测试题及答案
- 特斯拉协议书
- 门市买卖协议书
- 巴塞尔协议书内容识别
- 2025年学习两会精神应知应会知识测试题附含答案
- 水性涂料项目建设工程方案
- 2025年医养结合养老机构运营中的服务质量评估与改进报告
- 工程资金监管协议书示范文本
- GB/T 46229-2025喷砂用橡胶软管
- 化妆品成分对特定皮肤问题的作用-洞察及研究
- 中药硬膏热贴敷课件
- 拉丁舞伦巴教学课件
- 2025年河北省政府采购评审专家考试真题含答案
- 2025年卫生职称副高级考试《输血技术》副高真题含答案解析
- 给村医培训课件
评论
0/150
提交评论