java计算器实验报告.docx

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

java计算器实验报告.docx

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

java计算器实验报告.docx

java计算器实验报告

 

Java计算器实验报告

 

计算机032

胡勇健

03095218

2005年5月5日

 

1.设计名称与要求

2.各模块功能的介绍和实现

3.系统的特色和不足

4.参考书

 

一.实验名称及其要求:

A)名称:

java计算器的设计

B)要求:

1.实验目的:

图形界面设计。

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

2.题意:

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

3.实验要求:

(1)设计图形界面添加菜单:

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

(2)运算:

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

 

二.各模块功能的介绍和实现:

A)GUI图形界面的组件:

a)所用到的Java类库包:

java.awt.*;基本的图形界面组件来源于awt包。

java.awt.event.*;事件的属性处理来源于awt.event包。

javax.swing.*;swing组件增加了awt包中所不具备的各种优越功能。

java.awt.datatransfer.*;用于计算器与外部的程序进行复制粘贴。

b)所用的各部分图形组件的定义:

FramemainFrame;//主框架

JTextFieldanswerText;//显示计算结果

JTextFieldmemoryState;//显示计算器内存的使用情况

MenuBarmenuGroup;//菜单栏

MenueditMenu,viewMenu,helpMenu;//编辑,查看,帮助菜单

MenuItemcopyItem,pasteItem;//复制,粘贴

MenuItemstandardModel;//标准型

CheckboxMenuItemnumGroup;//数字分组

MenuItemaboutCal;//关于计算器

ButtonbuttonBackSpace,buttonCE,buttonC;//退格,清除,清空按钮

ButtonbuttonMC,buttonMR,buttonMS,buttonMADD;//内存操作按钮

ButtonbuttonNum[];//数字按钮

ButtonbuttonAdd,buttonSub,buttonMul,buttonDiv;//+,-,*,/

ButtonbuttonDot,buttonSign,buttonEqual;//.+/-=

ButtonbuttonSqrt,buttonMod,buttonReciprocal;//sqrt%1/x

c)组件的初始化以及对界面的排版

对主框架的初始化操作

voidinitMainFrame()函数是对主框架进行初始化,设置其框架大小270*250,

初始位置270*250,背景颜色Color.lightGray,是否显示true,能否改变窗口大小false,以及增加了addWindowListener委托事件,当关闭窗口时调用System.exit(0)系统指令,结束程序。

voidinitMainFrame()

{

mainFrame=newFrame("计算器");

mainFrame.setSize(270,250);

mainFrame.setLocation(200,140);

mainFrame.setBackground(Color.lightGray);

mainFrame.setResizable(false);

mainFrame.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

});

}

对文本框的初始化操作

initTextField()是对文本textBufferanswerTextmemoryState的初始化,

textBuffer是用于对文本的缓冲处理,StringBuffer类优于String类是因为StringBuffer是对字符串直接操作,从而节省了内存。

由于在这个计算器程序中,对字符串的操作量很大,因此,StringBuffer在这方面体现出了其本身的优势。

answerText和memoryState用swing的组件JTextField是因为JTextField显示文本框时可以在文本框的右边显示,符合Windows自带计算器的特点。

answerText和memoryState的背景色为白色,都不能进行编辑。

answerText为右对齐,大小为23个字符,而memoryState为2个字符。

voidinitTextField()

{

textBuffer=newStringBuffer("");

answerText=newJTextField(textBuffer.toString(),23);

answerText.setHorizontalAlignment(JTextField.RIGHT);

answerText.setEditable(false);

answerText.setBackground(Color.white);

memoryState=newJTextField

(2);

memoryState.setEditable(false);

memoryState.setBackground(Color.white);

}

对各按钮的初始化操作

initButtons()函数是对各按钮进行初始化,为每一个按钮增加其标签并增加了addActionListener(this)功能,用于给各按钮增加属性,具体的功能代码,请见actionPerformed(ActionEvente);其中,数字按钮、四则运算按钮、小数点按钮都增加了键盘输入功能addKeyListener其参数为匿名类KeyListener的适配器newKeyAdapter(),当在键盘上按下相应的键时,为其增加相应的属性功能。

voidinitButtons()

{

buttonBackSpace=newButton("BackSpace");

buttonBackSpace.addActionListener(this);

buttonCE=newButton("CE");

buttonCE.addActionListener(this);

buttonC=newButton("C");

buttonC.addActionListener(this);

buttonMC=newButton("MC");

buttonMC.addActionListener(this);

buttonMR=newButton("MR");

buttonMR.addActionListener(this);

buttonMS=newButton("MS");

buttonMS.addActionListener(this);

buttonMADD=newButton("M+");

buttonMADD.addActionListener(this);

buttonNum=newButton[10];

for(inti=0;i

{

buttonNum[i]=newButton(Integer.toString(i));

buttonNum[i].addActionListener(this);

buttonNum[i].addKeyListener(newKeyAdapter(){

publicvoidkeyPressed(KeyEvente){

if(Character.isDigit(e.getKeyChar()))

{

textBuffer.append(e.getKeyChar());

answerText.setText(textBuffer.toString());

AddNum();

}

}

});

}

buttonAdd=newButton("+");

buttonAdd.addActionListener(this);

buttonAdd.addKeyListener(newKeyAdapter(){

publicvoidkeyPressed(KeyEvente){

if(e.getKeyChar()=='+')

AddFunction

(1);

}

});

buttonSub=newButton("-");

buttonSub.addActionListener(this);

buttonSub.addKeyListener(newKeyAdapter(){

publicvoidkeyPressed(KeyEvente){

if(e.getKeyChar()=='-')

AddFunction

(2);

}

});

buttonMul=newButton("*");

buttonMul.addActionListener(this);

buttonMul.addKeyListener(newKeyAdapter(){

publicvoidkeyPressed(KeyEvente){

if(e.getKeyChar()=='*')

AddFunction(3);

}

});

buttonDiv=newButton("/");

buttonDiv.addActionListener(this);

buttonDiv.addKeyListener(newKeyAdapter(){

publicvoidkeyPressed(KeyEvente){

if(e.getKeyChar()=='/')

AddFunction(4);

}

});

buttonDot=newButton(".");

buttonDot.addActionListener(this);

buttonDot.addKeyListener(newKeyAdapter(){

publicvoidkeyPressed(KeyEvente){

if(e.getKeyChar()=='.')

{

textBuffer.append(e.getKeyChar());

answerText.setText(textBuffer.toString());

AddNum();

}

}

});

buttonSign=newButton("+/-");

buttonSign.addActionListener(this);

buttonEqual=newButton("=");

buttonEqual.addActionListener(this);

buttonEqual.addKeyListener(newKeyAdapter(){

publicvoidkeyPressed(KeyEvente){

if(e.getKeyChar()=='=')

OnGo();

}

});

buttonSqrt=newButton("sqrt");

buttonSqrt.addActionListener(this);

buttonMod=newButton("%");

buttonMod.addActionListener(this);

buttonReciprocal=newButton("1/x");

buttonReciprocal.addActionListener(this);

}

 

对菜单的初始化操作

initMenu()函数是对各菜单的初始化,先为其生成实例对象,再添加到MenuBar的实例对象menuGroup中,MenuItem各项添加到相应的Menu中。

voidinitMenu()

{

/*

*先为各个菜单项生成实例对象,并为其设置相应的标签。

MenuItem各项

*还要设置addActionListener(this)增加委托事件任务。

*/

menuGroup=newMenuBar();

editMenu=newMenu("编辑(E)");

viewMenu=newMenu("查看(V)");

helpMenu=newMenu("帮助(H)");

copyItem=newMenuItem("复制(C)Ctrl+C",newMenuShortcut(KeyEvent.VK_C));

copyItem.addActionListener(this);

pasteItem=newMenuItem("粘贴(P)Ctrl+V",newMenuShortcut(KeyEvent.VK_V));

pasteItem.addActionListener(this);

standardModel=newMenuItem("●标准型(T)");

standardModel.addActionListener(this);

numGroup=newCheckboxMenuItem("数字分组(I)",false);

numGroup.addItemListener(this);

aboutCal=newMenuItem("关于计算器(A)");

aboutCal.addActionListener(this);

/*再把各个菜单相继加入到MenuBar中*/

menuGroup.add(editMenu);

menuGroup.add(viewMenu);

menuGroup.add(helpMenu);

editMenu.add(copyItem);

editMenu.add(pasteItem);

viewMenu.add(standardModel);

viewMenu.add(numGroup);

helpMenu.add(aboutCal);

}

 

对总框架的总体布局

OverallArrangement()是根据mainFrame的框架大小,把文本框answerText,内存使用的情况文本框memoryState,内存操作键MRMSM+MC,退格键BackSpace清除键CE,清空键C,以及主键盘区的各键按照一定的比例位置加入到mainFrame中.

voidOverallArrangement()

{

PaneltextPanel=newPanel();//文本框的容器

PanelupperPanel=newPanel();//计算器上部分的容器

PanelcenterPanel=newPanel();//计算器中部的容器

PanelmainPanel=newPanel();//主键盘区的容器

PanelleftPanel=newPanel();//内存区的容器

PanelrightPanel=newPanel();//数字及相应的操作键盘区

mainFrame.setMenuBar(menuGroup);//为主框架设置菜单栏

mainFrame.add(upperPanel,BorderLayout.NORTH);//把上容器放在主框架的北面

mainFrame.add(centerPanel);//把中容器放在主框架的中部

mainFrame.add(mainPanel,BorderLayout.SOUTH);//把主容器放在主框架的南面

/*设置主框架的上半部分*/

textPanel.add(answerText);//把文本框添加到文本容器中

upperPanel.add(textPanel);//把文本容器放入上容器中

/*设置主框架的中部*/

//采用流式布局,各组件相互间隔10个像素

centerPanel.setLayout(newFlowLayout(FlowLayout.CENTER,10,10));

centerPanel.add(memoryState);//把内存记忆框放在中容器中

centerPanel.add(buttonBackSpace);//把退格键放在中容器中

centerPanel.add(buttonCE);//把清除键放在中容器中

centerPanel.add(buttonC);//把清空键放在中容器中

/*设置主框架的下半部分*/

leftPanel.setLayout(newGridLayout(4,1,0,2));//左下角的容器采用4*1的网式布局

leftPanel.add(buttonMC);//添加MC

leftPanel.add(buttonMR);//添加MR

leftPanel.add(buttonMS);//添加MS

leftPanel.add(buttonMADD);//添加M+

mainPanel.add(leftPanel,BorderLayout.WEST);//把此容器放在主容器的西面

 

/*设置主键盘区*/

rightPanel.setLayout(newGridLayout(4,5,3,3));//采用4*5的网式布局,相互间隔3各像素

/*添加各键*/

rightPanel.add(buttonNum[7]);

rightPanel.add(buttonNum[8]);

rightPanel.add(buttonNum[9]);

rightPanel.add(buttonDiv);

rightPanel.add(buttonSqrt);

rightPanel.add(buttonNum[4]);

rightPanel.add(buttonNum[5]);

rightPanel.add(buttonNum[6]);

rightPanel.add(buttonMul);

rightPanel.add(buttonMod);

rightPanel.add(buttonNum[1]);

rightPanel.add(buttonNum[2]);

rightPanel.add(buttonNum[3]);

rightPanel.add(buttonSub);

rightPanel.add(buttonReciprocal);

rightPanel.add(buttonNum[0]);

rightPanel.add(buttonSign);

rightPanel.add(buttonDot);

rightPanel.add(buttonAdd);

rightPanel.add(buttonEqual);

mainPanel.add(rightPanel,BorderLayout.CENTER);

}

计算器构造函数是对各布局函数的调用

SimpleCalculator()

{

initMainFrame();

initTextField();

initButtons();

initMenu();

OverallArrangement();

reSet();

mainFrame.setVisible(true);

}

 

B)计算运算部分程序的执行过程:

a)运算部分变量的定义

stringBuffertextBuffer;//记录数值的字符串

intnumDot;//小数点的个数

intoperator;//操作符:

1-加法2-减法3-乘法4-除法

doublefirstValue,secondValue,result;//第一、二个数及结果

booleanenterSecond;//是否已经输入了第二个数

intforFirOrSec;//此时输入的是第一个还是第二个数

booleanb_remFir,b_remSec,b_remFun;//指示是否此时还记的上次的数和运算符

intremFun;//记住上次的运算符

doubleremFir,remSec;//记住上次参加运算的第一二个数

booleanisNumGroup=false;//记录是否为数字分组

booleancanBeBack;//是否可以使用退格键

doublememory;//用于内存操作时保存的数据

 

b)各功能函数简介

reset函数

reSet()是把各属性设置为原始值,当按下

voidreSet()

{

answerText.setText("0.");

textBuffer=newStringBuffer("");

numDot=0;

remFun=operator=0;

firstValue=secondValue=result=0.0;

enterSecond=false;

forFirOrSec=1;

b_remFir=b_remSec=b_remFun=false;

remFir=remSec=0.0;

canBeBack=true;

}

showScreen函数

showScreen()是当按下了数字键后,在屏幕上显示。

如果有数字分组项,则调用数字分

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

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

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

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