计算器文档.docx

上传人:b****6 文档编号:6614225 上传时间:2023-01-08 格式:DOCX 页数:15 大小:49.11KB
下载 相关 举报
计算器文档.docx_第1页
第1页 / 共15页
计算器文档.docx_第2页
第2页 / 共15页
计算器文档.docx_第3页
第3页 / 共15页
计算器文档.docx_第4页
第4页 / 共15页
计算器文档.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

计算器文档.docx

《计算器文档.docx》由会员分享,可在线阅读,更多相关《计算器文档.docx(15页珍藏版)》请在冰豆网上搜索。

计算器文档.docx

计算器文档

 

河北经贸大学课程设计报告

——Java程序设计实训

计算器的研究与实现

 

专业名称:

软件工程

班级:

201007111376

学生姓名:

宋玲玉

指导老师:

赵彦霞

完成时间:

2012年12月26

摘要

随着人们通讯或了解信息的越来越数据化,特别是要求高速度的获取想要的信息计算机的要求越来越高,不仅是其容量上越来越大,特别是在其功能上要求的实现越来越多,数据类型和精确度越来越高。

通过一年来对JAVA课程设计的学习,我已经掌握了一些常用的控件的使用方法,对简单的程序设计的常用算法也有了一定的了解,还掌握了对图形和动画的一些基本操作。

为了进一步加深理解、验证、巩固课堂教学内容,加深对可视化编程思想的理解,强化VisualBasic对程序流程控制、常用控件的属性、事件、方法的理解和使用;为了进一步提高编程能力、程序的调试能力,理论联系实际的能力;巩固所学的这些程序设计的方法,为了达到后续课程对实际编程计算能力的要求,特选定“简易计算器”这个小题目作为课程设计实践教学环节的题目,有助于培养综合运用所学知识解决实际问题的能力,可以充分发挥想象力和创新能力;有助于提高独立思考能力,和自学能力。

该程序是一个基于JAVA的程序设计界面时间懂得功能较简单计算机系统,实现了用户简单计算功能。

 

目录

摘要I

1引言1

1.1任务与分析1

1.2实验目的与要求1

1.2.1实验目的1

1.2.2实验要求1

2方案设计2

2.1总体设计2

2.2功能设计2

3需求描述2

4操作说明3

4.运行环境说明Eclipse运行环境4

5.练习效果(如图1所示)5

6系统测试报告5

7收获及体会6

8总结6

计算器的研究与实现

1引言

1.1任务与分析

本软件应具有运算加减乘除四则基本运算,其中涉及到了JAVA的很多知

识点,例如:

在界面设计中应熟悉掌握各个控件的属性,各种循环语句,选择语句,控件组等等。

有助于培养综合运用所学知识解决实际问题的能力,可以充分发挥想象力和创新能力;有助于提高独立思考能力,和自学能力。

1.2实验目的与要求

1.2.1实验目的

进一步掌握JAVA进行图形用户界面的定义和操作,进一步掌握类的继承和派生方法。

综合利用上述知识,学习设计并编写实用的JAVA简单GUI应用程序。

熟悉java,awt包中组件,掌握图形界面设计方法,理解委托事件处理模型。

设计并实现Windows系统中“计算器”的窗口及功能。

1.2.2实验要求

设计图形界添加菜单:

窗口上添加各种组件及菜单,并处理组建及菜单的事件监听程序。

运算:

实现多种运算,保证运算正确性。

2方案设计

2.1总体设计

本软件按照一般计算器的界面以及功能设计,具有最为基础的加减乘除四则运算。

先建立一个新的项目文件,里面包含一个Form1的窗体。

然后,添加控件,包括一个Text框(Text1)。

一个控件数组,包含16个按钮,这17个按钮使用的名称都是Command1,只是Index属性不同。

按下数字键在液晶屏上会出现数字,这是最基本的功能。

第一次按下运算键,再按下数字键,将重新输入第二个数字,再次按下运算键,将算出前两个数的结果,然后按下数字键,将又重新输入新的数字。

输入数字后,按下“等于键”将仍输出原来的数字,输入运算符和第二个数字后在按下“等于”,将得到二者的结果。

然后又重复第二、三步。

2.2功能设计

2.2.1main类是程序的核心类,也是入口类。

2.2.2对成员变量的初始化,包括存放表达式的字符串length、用来存放后缀表达式的数组output[]、用来存放处理完毕表达式的数组input[],以及一些为了将String类型的表达式字符串字符中数字与符号分开的必要的成员变量的声明等。

2.2.3优先级判断:

分别有两个方法,doOper1和doOper2,对不同符号的优先级进行判断,并作出相应操作。

2.2.4进行计算的calculate类,利用堆栈对表达式进行计算并输出结果。

2.2.5NewJFrame类,继承自javax.swing.JFrame,完成与图形化界面有关的设计。

2.2.6Stack类,有关堆栈的基本操作,方便其他类中对堆栈相关操作的方法调用

3需求描述

3.1、要有友好、易于操作的界面。

3.2、能够实现输入:

数学表达式(数字加、减、乘、除)输出:

表达式的正确结果

3.3、有错误提醒和报错处理功能

4操作说明

计算器以帮助用户完成数据的运算,我们制作的计算器是标准的计算器,既可以完成简单的计算。

使用时可以先输入所要运算的算式一个数,在数字显示区会显示相应的数,然后选择运算符,在输入第二个数,最后选择“=”按钮如1+1=,或者1+1+1=,即可得到运算结果。

4.1、本计算器支持十进制运算。

4.2、数字键0——9用于数字的键入,可键入个位数,也可连续键入多位数。

4.3、“(”及“)”用于左右括号的运算,加上括号即进行优先运算,内层的括号先于外层括号计算,有括号的计算先于没有括号的。

4.4、“.”用于小数点的键入

4.5、“+”“-”“*”“/”“=”分别用于加、减、乘、除及相等的运算。

功能结构图

4.运行环境说明Eclipse运行环境

5.练习效果(如图1所示)

本实例代码编写完毕,分别存盘为:

C:

j2sdk1.4.0\javaprograms\Calculator.java和CalculatorGUI.java。

打开计算机的命令提示符窗口,然后在命令提示符窗口中,定位到javaprograms目录,输入javacCalculatorGUI.java来编译程序,用javaCalculatorGUI命令便可以看到制作效果。

图1练习效果

6系统测试报告

可以完成基本的加减乘除,同样在修改后也能完成连续的加减乘除,

问题

原因

解决方法

如果计算后按等号再按数据重新计算,数据不能清0,即使按了1+2=3再按12就会出现312

因为在等号后,再按数据会执行TextBox1.Text=CDbl(TextBox1&btn.Text)则会直接将按下去的值append到结果上去

添加一下equalpressed变量,如果按了等号再按数字就会直接重新计算

智能计算1

+1不能计算1+1+1

操作键部分代码不能执行加号前的数据处理,只能通过等号来处理

添加一个caculated变量来控制,在数据输入时刻间断有没有按下操作键,则需要计算器,则在按下下一个操作键的时候将前一个操作键的数据处理,然后在保存于中间变量

7收获及体会

对Java数据结构有关堆栈和队列的内容有了更加深入和深刻的体会。

更加熟练了对Eclipse环境编写代码的运用。

编程过程中查找了相关资料,提高了搜集和整理资料的能力。

编写两个程序提高了对时间的统筹和策划能力。

提高了对开发文档的书写能力。

8总结

这个程序实现了简单的计算器功能。

进一步了解了面板容器,布局管理器,标签,按钮的使用方法以及内部类形式定义监听器类,让不同的组件注册不同的监听器等设计技巧。

通过这次课程设计,让我受到了很大的启发。

我觉得做好一个程序,灵活运用是关键。

这次题目设计让我对图形用户界面的相关知识有了更深一步的了解,对GUI的应用有了更多的体会。

做一个程序做重要的是思路清晰,只要把思路理顺了,就有利于在编程过程中少走弯路。

附加程序及注释

(1)编程思路:

本例因为要制作计算器,所以首先定义具有计算功能的类Calculator。

在类Calculator中定义处理加减乘除运算的函数,分别命名为opAdd(),opSubtract(),opMultiply(),opDivide()。

然后,因为要实现实现人机交互的效果,所以先要定义实现用户界面类CalculatorGUI。

通过Panel类的setLayout()函数进行用户界面的布局。

此外,要通过actionPerformed(ActionEventevent))函数来实现对按钮事件的监听,并根据不同的按钮事件进行不同的运算。

最后,因为要实现用户界面类与处理运算类的融合.,所以要在用户界面类(CalculatorGUI)中定义处理运算类(Calculator)的对象,这样,就完成了计算器的功能。

(2)程序实现及注释:

//Calculator.java

publicclassCalculator{

privatestaticfinalcharNO_OP='\0';

privatestaticfinalcharPLUS='+';

privatestaticfinalcharSUBTRACT='-';

privatestaticfinalcharMULTIPLY='*';

privatestaticfinalcharDIVIDE='/';

privatefloatnumber1=0.0F;

//privatefloatnumber2=Float.NaN;

privatecharoperator=NO_OP;

//等于运算

publicStringopEquals(Stringnumber){

floatresult;

if(operator==NO_OP){

result=parseNumber(number);

}else{

result=performOperation(parseNumber(number));

}

operator=NO_OP;

number1=result;

returnFloat.toString(result);

}

//加法运算

publicStringopAdd(Stringnumber){

floatresult;

if(operator==NO_OP){

result=parseNumber(number);

}else{

result=performOperation(parseNumber(number));

}

operator=PLUS;

number1=result;

returnFloat.toString(result);

}

//减法运算

publicStringopSubtract(Stringnumber){

floatresult;

if(operator==NO_OP){

result=parseNumber(number);

}else{

result=performOperation(parseNumber(number));

}

operator=SUBTRACT;

number1=result;

returnFloat.toString(result);

}

//乘法运算

publicStringopMultiply(Stringnumber){

floatresult;

if(operator==NO_OP){

result=parseNumber(number);

}else{

result=performOperation(parseNumber(number));

}

operator=MULTIPLY;

number1=result;

returnFloat.toString(result);

}

//除法运算

publicStringopDivide(Stringnumber){

floatresult;

if(operator==NO_OP){

result=parseNumber(number);

}else{

result=performOperation(parseNumber(number));

}

operator=DIVIDE;

number1=result;

returnFloat.toString(result);

}

//处理运算符

privatefloatperformOperation(floatnumber2){

floatresult=0.0F;

switch(operator){

casePLUS:

result=number1+number2;

break;

caseSUBTRACT:

result=number1-number2;

break;

caseMULTIPLY:

result=number1*number2;

break;

caseDIVIDE:

result=number1/number2;

break;

}

returnresult;

}

//将字符串类型转换为浮点型

privatestaticfloatparseNumber(Stringnumber){

floatreal_number;

try{

real_number=Float.parseFloat(number);

}catch(NumberFormatExceptione){

real_number=Float.NaN;

}

returnreal_number;

}

}

//CalculatorGUI.java

importjava.awt.*;

importjava.awt.event.*;

publicclassCalculatorGUI{

//定义按钮

privateButtonkey0,key1,key2,key3,key4;

privateButtonkey5,key6,key7,key8,key9;

privateButtonkeyequal,keyplus,keyminus;

privateButtonkeyperiod,keymult,keydiv;

//定义存放按钮的区域

privatePanelbuttonArea;

//定义存放运算结果的区域

privateLabelanswer;

//用来实现运算功能的类的对象实例化

privateCalculatorcalculator;

privatebooleanreadyForNextNumber;

publicCalculatorGUI(){

calculator=newCalculator();

readyForNextNumber=true;

answer=newLabel("0.0",Label.RIGHT);

key0=newButton("0");

key1=newButton("1");

key2=newButton("2");

key3=newButton("3");

key4=newButton("4");

key5=newButton("5");

key6=newButton("6");

key7=newButton("7");

key8=newButton("8");

key9=newButton("9");

keyequal=newButton("=");

keyplus=newButton("+");

keyminus=newButton("-");

keymult=newButton("*");

keydiv=newButton("/");

keyperiod=newButton(".");

buttonArea=newPanel();

}

publicvoidlaunchFrame(){

buttonArea.setLayout(newGridLayout(4,4));

buttonArea.add(key7);

buttonArea.add(key8);

buttonArea.add(key9);

buttonArea.add(keyplus);

buttonArea.add(key4);

buttonArea.add(key5);

buttonArea.add(key6);

buttonArea.add(keyminus);

buttonArea.add(key1);

buttonArea.add(key2);

buttonArea.add(key3);

buttonArea.add(keymult);

buttonArea.add(key0);

buttonArea.add(keyperiod);

buttonArea.add(keyequal);

buttonArea.add(keydiv);

//设置事件接收句柄

OpButtonHanlderop_handler=newOpButtonHanlder();

NumberButtonHanldernumber_handler=newNumberButtonHanlder();

key0.addActionListener(number_handler);

key1.addActionListener(number_handler);

key2.addActionListener(number_handler);

key3.addActionListener(number_handler);

key4.addActionListener(number_handler);

key5.addActionListener(number_handler);

key6.addActionListener(number_handler);

key7.addActionListener(number_handler);

key8.addActionListener(number_handler);

key9.addActionListener(number_handler);

keyperiod.addActionListener(number_handler);

keyplus.addActionListener(op_handler);

keyminus.addActionListener(op_handler);

keymult.addActionListener(op_handler);

keydiv.addActionListener(op_handler);

keyequal.addActionListener(op_handler);

//新建一个帧,并且加上消息监听

Framef=newFrame("Calculator");

f.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

});

f.setSize(200,200);

f.add(answer,BorderLayout.NORTH);

f.add(buttonArea,BorderLayout.CENTER);

f.setVisible(true);

}

//响应按钮事件,并根据不同的按钮事件进行不同的运算

privateclassOpButtonHanlderimplementsActionListener{

publicvoidactionPerformed(ActionEventevent){

charoperator=event.getActionCommand().charAt(0);

Stringresult="";

switch(operator){

case'+':

result=calculator.opAdd(answer.getText());

break;

case'-':

result=calculator.opSubtract(answer.getText());

break;

case'*':

result=calculator.opMultiply(answer.getText());

break;

case'/':

result=calculator.opDivide(answer.getText());

break;

case'=':

result=calculator.opEquals(answer.getText());

break;

}

answer.setText(result);

readyForNextNumber=true;

}

}

//处理连续运算时主界面的显示

privateclassNumberButtonHanlderimplementsActionListener{

publicvoidactionPerformed(ActionEventevent){

if(readyForNextNumber){

answer.setText(event.getActionCommand());

readyForNextNumber=false;

}else{

answer.setText(answer.getText()+event.getActionCommand().charAt(0));

}

}

}

//主函数,也是该应用程序的执行入口处

publicstaticvoidmain(Stringargs[]){

CalculatorGUIcalcGUI=newCalculatorGUI();

calcGUI.launchFrame();

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1