资源描述
JAVA课程设计计算机袁
24
2020年4月19日
文档仅供参考
武汉理工大学华夏学院
课程设计报告书
课程名称: JAVA课程设计
题 目: 计算器的设计与实现
系 名: 信息工程系
专业班级: 计算机1121班
姓 名: 袁世杰
学 号:
指导教师: 刘春燕
9 月 11 日
课程设计任务书
学生姓名: 袁世杰 专业班级: 计算机1121班
指导教师: 刘春燕 工作单位: 信息工程系
设计题目: 计算器的设计与实现
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算
(1)完成加法,减法,乘法和除法的计算;
(2)具有小数点,正负号,退格和清零功能;
设计报告撰写格式要求:
1、明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。严格要求自己,要独立思考,按时、独立完成课程设计任务。
2、设计报告:要求层次清楚、整洁规范、不得相互抄袭,凡正文内容有整段完全相同者一律以抄袭论处。设计报告正文字数不少于0.2万字(不包括附录)
时间安排:
消化资料、系统调查 1天
项目原型开发 1天
系统功能实现 1天
系统验收 1天
指 导 教 师 签 字: 9 月 5 日
系 主 任 签 字: 年 9 月 5 日
1 目标
设计一个图形界面(GUI)的计算器应用程序,完成简单的加、减、乘、除等算术运算。经过对计算器的编辑来检测和提升自己的java编程能力。
2 软件开发环境与技术简介
2.1 开发工具介绍
NetBeans包括开源的开发环境和应用平台,NetBeans IDE能够使开发人员利用Java平台能够快速创立Web、企业、桌面以及移动的应用程序,NetBeans IDE已经支持PHP、Ruby、JavaScript、Groovy、Grails和C/C++等开发语言。
NetBeans项目由一个活跃的开发社区提供支持, NetBean开发环境提供了丰富的产品文档和培训资源以及大量的第三方插件。
NetBeans是开源软件开发集成环境,是一个开放框架,可扩展的开发平台,能够用于Java、C/C++,PHP等语言的开发,本身是一个开发平台,能够经过扩展插件来扩展功能。
2.2 硬件环境
带有windows xp系统的计算机
2.3 软件环境
NetBeans IDE 6.9.1
3 系统需求分析
(1)设计的计算器能够完成加法、减法、乘法、除法的简单运算。
(2)实现一些简单的扩展运算,如:正负号、倒数、退格、清零等功能。
(3)添加小数点功能,用以实现浮点型数据的计算。
(4)使用布局管理器设计一个计算器的界面,使用事件监听器处理数据的输入,并完成相关的计算。
4 系统总体设计
4.1 系统功能简介
(1)完成加法,减法,乘法和除法的计算;
(2)具有小数点,正负号,退格和清零功能;
4.2 系统功能模块规划
(1)根据所设计出来的界面,首先要设计其GUI界面,总体界面有一个文本框,20个按钮,总体界面用GridLayout布局,文本框放置在最NORTH,然后0到9以及+,-,*,/等按钮放置到一个面板Panel中,完成界面设计。
(2)设计计算流程,首先点击数字按钮时,将按钮数值添加到文本框当中,并将该数值保存到一个字符串中,再次点击数字按钮时,将之前保存的字符串与新的数值拼接起来,再添加到文本框当中,直到点击运算符按钮时,将文本框当中的字符串保存在一个字符串变量中,然后重置文本框内容,将运算符号显示到文本框中,随后输入第二个计算数据时,用同样的办法保存数据,最后经过控制“=”运算符先将字符串数据转化成双精度类型,然后计算出结果并显示到文本框当中。
5 系统详细设计
5.1程序流程图
开始显示界面
输入数字
将数字赋给x
输入字符
将x的值给y,x取新数
将字符赋给operation
点“=”输出结果
退格或清零操作
5.2程序分析
(1)类Calculator继承自ActionListener接口,经过这一接口来处理界面中的按钮所触发的动作事件。ActionListener接口能够接收ActionEvent,该接口有一个事件方法actionPerformed(ActionEvent e ),在该方法中将触发需要实现的功能。
(2)ActionEvent类继承自AWTEvent,代表的是一个语义事件,用来指出某组件(component)所定义“行动”发生了。这种事件由一个组件(如Button)引发,而触动的时机则是当这组件的某种特定动作(如该Button被单击)发生之时。此事件产生后,系统会将它分配给该组件所注册(用addActionListenert()方法实现注册)的每一个ActionListener(监听者),来接收并处理这种事件。因此如果一个按钮组件注册一个addActionListener方法,那么当用户用鼠标单节此按钮时,就会产生ActionEvent事件。
(3)在程序运行中,每当单击数字按钮和运算符按钮,都会触发动作actionPerformed(ActionEvent e),利用类ActionEvent得getActionCommand()方法确定是由哪一个按钮触发的,进行相应的计算操作。
(4)在AWT中提供了五种布局管理类。布局管理器指明了容器中构件的位置和尺寸大小。经过布局管理器,只需知道放置的构件同其它构件的相对应的位置即可,有助于实现软件的平台无关性。本程序中用到的布局管理管理器的BorderLayout、GridLayout。其中BorderLayout类使用地理上的方向North、South、West和Center来确定构件添加的位置。其中前四个方向占据屏幕的四边,而Center方向占据剩下的空白;GridLayout是比较复杂可是却很灵活得AWT布局,能够精确地指定组件的放置位置,它是在将屏幕划分成网格的基础上,允许每个机构占据一个或多个单元(显示区域)。在程序中用到GridLayout的构件函数GridLayout(int rows ,int cols,int hasp,int vgap)其中的参数分别表示行数,列数,水平间距和垂直间距。
(5)AWT中提供了能够用来盛装构件的面板(Panel),能够把对象放在面板上,在把面板镶到窗口中,每一个面板有颜色、大小,甚至页面设计等属性。
5.3部分代码及解析
1.需要调用的类
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class hutest extends JFrame implements ActionListener,DocumentListener{
JTextField text;//文本诓
String x="",y="",operation="";
boolean flag1=true,flag2=true,flag3=true,flag4=true,flag5=true;
}
2.主函数
public static void main(String args[]){
new hutest();
}
3界面设计
public hutest(){
super("计算器");
Container c=this.getContentPane();//获得一个容器
c.setLayout(null);//布局为空
text=new JTextField();
text.setSize(480,38);//大小
text.setLocation(10,50);//位置
text.setHorizontalAlignment(JTextField.RIGHT);//文本旷右边
c.add(text);
text.getDocument().addDocumentListener(this);//文本框注册事件
JPanel pan2=new JPanel();//面板
pan2.setSize(480,240);
pan2.setLocation(10,150);
pan2.setLayout(new GridLayout(4,5,10,10));
String str[]={"1","2","3","+","c","4","5","6","-","退格","7","8","9","*","倒数","0","+/-",".","/","="};
for(int i=0;i<str.length;i++){
JButton button=new JButton(str[i]);
button.addActionListener(this);
pan2.add(button);
}
c.add(pan2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500,450);
this.setVisible(true);
}
4运算符的控制和值的输入输出
public void changedUpdate(DocumentEvent e){}
public void insertUpdate(DocumentEvent e){
x=text.getText();//获得文本诓 的内容
// System.out.println("y="+y+" x="+x);
}
public void removeUpdate(DocumentEvent e){
}
public void actionPerformed(ActionEvent e){
String z=e.getActionCommand();//记录按纽上的字符
try{
if(Character.isDigit(z.charAt(0))){
text.setText(text.getText()+z);
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
}
else if(z.equals("+")&&flag1){
operation="+";y=x;text.setText("");flag1=false;
}
else if(z.equals("-")&&flag2){
operation="-";y=x;text.setText("");flag2=false;
}
else if(z.equals("*")&&flag3){
operation="*";y=x;text.setText("");flag3=false;
}
else if(z.equals("/")&&flag4){
operation="/";y=x;text.setText("");flag4=false;
}
else if(z.equals("倒数")){
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
y=x;Double y2=Double.parseDouble(y);double y22=1/y2;text.setText(y22+"");
}
else if(z.equals("+/-")){
y=x;
double yy=-Double.parseDouble(y);text.setText(yy+"");
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
}
else if(z.equals(".")){
if(x.indexOf(".")==-1){
text.setText(x+".");
}
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
}
else if(z.equals("=")){
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
Double op1=Double.parseDouble(y);
Double op2=Double.parseDouble(x);
if(operation.equals("+")){x=op1+op2+"";text.setText(x);}
else if(operation.equals("-")){x=op1-op2+"";text.setText(x);}
else if(operation.equals("*")){x=op1*op2+"";text.setText(x);}
else if(operation.equals("/")){x=op1/op2+"";text.setText(x);}
else if(operation.equals("%")){x=op1%op2+"";text.setText(x);}
}
else if(z.equals("c")){
x="";text.setText("");
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
}
else if(z.equals("退格")){
text.setText(x.substring(0,x.length()-1));
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
}
}catch(Exception ex){x="";y="";operation="";text.setText("");}
}
6 系统测试与运行
(1)界面显示
(2)输入数字“13”
(3)点击“+”后输入“14”。
(4)点击“=”,获得结果。
(5)输入数字“10”
(6)取倒数运算后,获得结果。
(7)点击“退格”,获得结果
7 总 结
本次课程设计到此算是告一段落了,经过这次的学习,我学到了很多东西,在此基础上更加巩固了自己对java的认识与了解。
在做本项目是时候,会遇到很多小问题,比如说,在整个运算过程中要如何确保输入的计算数据哪个是第一个计算数据的,哪个是第二个计算数据的,同时也要区分运算符,因为该计算器程序应用的都是利用字符串来完成计算的,而且不能重复输出运算符,更不能将运算符错误的存储在了第一个计算数据的数值中,也得考虑到万一不小心重复点击了运算符按钮会不会造成第一个计算数据的重新赋值等等问题,最后想到利用布尔类型来很好的控制运算符的应用!
此次课程设计让我更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。
在接下来的时间里,我觉得我要更加努力的往深一层次的方面看齐,了解更多有关java的知识,对java有更深一步的了解,我会一步一步的走下去!
8 参 考 文 献
[1] 王建华. ASP NET 2.0 动态网站开发技术与实践[M].北京:电子工业出版社, .
[2]徐迎晓 《Java语法及网络应用设计》 清华大学出版社
[3]戴特尔(美)《Java 大学简明教程——实例程序设计》
附录A:系统核心代码
public void changedUpdate(DocumentEvent e){}
public void insertUpdate(DocumentEvent e){
x=text.getText();//获得文本诓 的内容
// System.out.println("y="+y+" x="+x);
}
public void removeUpdate(DocumentEvent e){
}
public void actionPerformed(ActionEvent e){
String z=e.getActionCommand();//记录按纽上的字符
try{
if(Character.isDigit(z.charAt(0))){
text.setText(text.getText()+z);
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
}
else if(z.equals("+")&&flag1){
operation="+";y=x;text.setText("");flag1=false;
}
else if(z.equals("-")&&flag2){
operation="-";y=x;text.setText("");flag2=false;
}
else if(z.equals("*")&&flag3){
operation="*";y=x;text.setText("");flag3=false;
}
else if(z.equals("/")&&flag4){
operation="/";y=x;text.setText("");flag4=false;
}
else if(z.equals("倒数")){
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
y=x;Double y2=Double.parseDouble(y);double y22=1/y2;text.setText(y22+"");
}
else if(z.equals("+/-")){
y=x;
double yy=-Double.parseDouble(y);text.setText(yy+"");
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
}
else if(z.equals(".")){
if(x.indexOf(".")==-1){
text.setText(x+".");
}
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
}
else if(z.equals("=")){
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
Double op1=Double.parseDouble(y);
Double op2=Double.parseDouble(x);
if(operation.equals("+")){x=op1+op2+"";text.setText(x);}
else if(operation.equals("-")){x=op1-op2+"";text.setText(x);}
else if(operation.equals("*")){x=op1*op2+"";text.setText(x);}
else if(operation.equals("/")){x=op1/op2+"";text.setText(x);}
else if(operation.equals("%")){x=op1%op2+"";text.setText(x);}
}
else if(z.equals("c")){
x="";text.setText("");
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
}
else if(z.equals("退格")){
text.setText(x.substring(0,x.length()-1));
flag1=true;flag2=true;flag3=true;flag4=true;flag5=true;
}
}catch(Exception ex){x="";y="";operation="";text.setText("");}
}
展开阅读全文