java程序设计计算器1.docx
《java程序设计计算器1.docx》由会员分享,可在线阅读,更多相关《java程序设计计算器1.docx(17页珍藏版)》请在冰豆网上搜索。
java程序设计计算器1
JAVA程序设计
——计算器
题目:
计算器
系别:
计算机工程系
目录
1、设计目的3
2、设计题目分析3
2.1题目简介3
3、课程设计内容4
3.1总体设计:
4
3.2详细设计:
5
3.3调试与测试:
6
4、设计心得与总结:
9
附录10
1、设计目的
(1)复习巩固java语言的基础知识,进一步加深对java语言的理解和掌控
(2)课程设计为大家提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机结合起来,锻炼我们的分析解决实际问题的能力。
提高我们适应实际,实践编程的能力。
(3)培养我们在项目开发中创新意识及能力,通过亲身实践,利用所学编写简单的面向对象程序,提高对面向对象及JAVA语言的理解。
2、设计题目分析
2.1题目简介
利用JAVA语言设计一个简单的科学计算器,实现加减乘除及开根号、对数、平方、三角正/余弦、求倒数、进制转换的简单功能。
2.2设计要求及需求分析
设计要求:
由于现代用户更倾向于由鼠标方便操作的图形用户界面,所以我们采用GUI来实现计算器,并采用Swing组件,AWT事件处理等实现具体功能。
需求分析:
在我们日常生活中,计算开支、收入时,大额数字或是多倍小数的计算都需要计算器的帮助,而在学习一些科目时,也常常要处理数字。
虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,不仅操作不便,很多功能也根本用不到。
所以我们想用自己所学设计开发一个属于自己的简单计算器来完成日常学习生活的需求。
3、课程设计内容
3.1总体设计:
系统总体设计框架
PANEL0
PANEL2
PANEL
Panel:
5*6的数字及运算键
Panel2:
进制转换的单选按钮及倒退清空键
Panel0:
输入及运行结果
3.2详细设计:
以下是其中一些类功能的说明:
JFrameframe;//构造新窗体
JPanelpanel,panel0,panel2,panel3;//定义面板
JButtonbutton;//定义按钮
JRadioButton//定义单选按钮
JLabel//定义标签
Container//定义容器
方法参数说明:
布尔型的border,设置当前选中图形中一组文字单元的边框
frame.setVisible,设置窗口的可见性
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);设置
关闭窗口的默认执行动作(布尔型数据)
frame.setIconImage;设置窗口最小化图标
frame.setSize(int,int);设置窗口尺寸
方法调用:
主函数中的newCalculator()调用了前面的publicCalculator()
流程图:
3.3调试与测试:
包括程序调试过程、数据测试结果分析,测试过程中遇到的主要问题及采取的解决措施;(列出主要问题的出错现象、出错原因、解决方法及效果等)。
主要问题:
1.标点符号问题,经常出现漏打分号,忽略中英文标点转换等问题,所以一定要谨慎仔细.
2.进制转换的实现及正/余弦计算经常出现问题,结果不正确,经过查阅资料及反复调试,我们终于克服了这一难题.
3.界面设计,开始我们的设计不太合理,各类功能键排序不合理,看起来杂乱无章,既不美观也不实用。
经过多次调整程序终于能使界面美观实用。
4.要注意类、成员变量、成员方法的命名,其中,class后的类名由一个或多个英文
单词构成,每个单词的第一个字符必须是大写;而成员变量和成员方法名的第一个单词的第一个字母必须小写,其他单词第一个字母大写。
以下是其中一些主要功能演示过程:
初始界面:
计算界面
4、设计心得与总结:
通过此次的JAVA设计实践,我们不但进一步理解掌握了课上老师教授的知识,而且通过查找资料学会了课上没有的东西,进一步理解了面向对象的含义,发现了很多它比面向过程突出的地方,第一次接触了图形界面,初步了解了GUI方面的知识。
在实践中我们遇到了很多问题,但我们都努力克服,并最终成功的完成了这次课程设计。
通过编写这个相对复杂的程序,我们认识解决实际问题前应先建立模型,再通过建立的模型使问题简单化,从而解决问题。
并且这次编写的程序大部分是通过调用各包中的方法来实现的,这也让我们充分理解了包和类的调用关系。
由于这次编写的程序比较复杂,所以不能一次性编写、调试,也由此让我们学会把程序分块,逐个编写、调试。
附录
packagecalculate;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.lang.*;
publicclassCalculator{
privateJLabeldisplay;
privateJPanelpanel;
privateJPanelpanel0;
privateJPanelpanel2;
privateJPanelpanel3;
privateButtonb1,b2,b3;
privateJRadioButton[]a;
privateIntegerjin,jinzhi1;
privatedoubleresult,qresult;
privatedoubleq0,w0,displayText,qdisplayTest;
privateStringlastCommand,qlastCommand;
privateStringlastCommand1,qlastCommand1;
privatebooleanstart,T;
privateJLabeldis;
JFrameframe;
publicCalculator(){
frame=newJFrame("科学计算器");//窗口设置
frame.setContentPane(createContentpane());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(250,200);
Stringname="zyj.gif";
Imageimage=Toolkit.getDefaultToolkit().getImage(name);
frame.setIconImage(image);
frame.setSize(370,330);
frame.setVisible(true);
}
publicContainercreateContentpane(){
//设计版面
ContainercontentPane=newContainer();
contentPane.setLayout(newBorderLayout(5,10));
result=0;
lastCommand="=";
lastCommand1="=";
qlastCommand="=";
start=true;
T=false;
dis=newJLabel("",SwingConstants.RIGHT);//显示界面设置
dis.setForeground(Color.BLACK);
display=newJLabel("0",SwingConstants.RIGHT);
display.setForeground(Color.RED);
dis.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.black),
BorderFactory.createEmptyBorder(5,5,5,5)));
display.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.black),
BorderFactory.createEmptyBorder(5,5,5,5)));
ActionListenerinsert=newInsertAction();
ActionListenercommand=newCommandAction();
ActionListenerjinzhi=newJinzhiAction();
panel0=newJPanel();
panel0.setLayout(newGridLayout(2,1,3,3));
panel0.add(dis);
panel0.add(display);
contentPane.add(panel0,BorderLayout.NORTH);
panel=newJPanel();//数字键按钮以及操作按钮等
panel.setLayout(newGridLayout(4,6));
addButton("7",insert);
addButton("8",insert);
addButton("9",insert);
addButton("/",command,Color.red);
addButton("sin",command);
addButton("cos",command);
addButton("4",insert);
addButton("5",insert);
addButton("6",insert);
addButton("*",command,Color.red);
addButton("+/-",command);
addButton("x^2",command);
addButton("1",insert);
addButton("2",insert);
addButton("3",insert);
addButton("-",command,Color.red);
addButton("(",command);
addButton(")",command);
addButton("0",insert);
addButton(".",insert);
addButton("=",command,Color.red);
addButton("+",command,Color.red);
addButton("Sqrt",command);
addButton("exp",command);
contentPane.add(panel,BorderLayout.SOUTH);
panel2=newJPanel();
panel2.setLayout(newGridLayout(2,3,4,4));
ButtonGroupgroup=newButtonGroup();
a=newJRadioButton[3];//进制转换按钮
a[0]=newJRadioButton("二进制运算");
a[1]=newJRadioButton("十进制运算",true);
a[2]=newJRadioButton("八进制运算");
for(inti=1;i<2;i++){
group.add(a[i]);
panel2.add(a[i]);
a[i].addActionListener(jinzhi);
}
JButtonb1=newJButton("Backspace");/*Backspace键*/
JButtonb2=newJButton("CE");
JButtonb3=newJButton("C");
b1.addActionListener(newActionListener()
{publicvoidactionPerformed(ActionEvente)
{Strings1=display.getText();
intl=s1.length();
display.setText(s1.substring(0,l-1));
}
});
panel2.add(b1);
/*C键监听*/
b3.addActionListener(newActionListener()
{publicvoidactionPerformed(ActionEvente)
{display.setText("0");
result=0;
start=true;
}
});
panel2.add(b2);
/*CE键监听*/
b2.addActionListener(newActionListener()
{publicvoidactionPerformed(ActionEvente)
{display.setText("0");
lastCommand="=";
dis.setText("");
start=true;
}
});
panel2.add(b3);
contentPane.add(panel2,BorderLayout.CENTER);
returncontentPane;}
privatevoidaddButton(Stringlable,ActionListenerlistener){//构造关于添加按钮的函数
JButtonbutton=newJButton(lable);
button.addActionListener(listener);
panel.add(button);}
privatevoidaddButton(Stringlable,ActionListenerlistener,Colorcolor){//同上,函数的重写
JButtonbutton=newJButton(lable);
button.addActionListener(listener);
button.setForeground(color);
panel.add(button);}
privateclassInsertActionimplementsActionListener//关于输入数字的监听
{
publicvoidactionPerformed(ActionEventevent){
Stringinput=event.getActionCommand();
if(start){
display.setText("");
start=false;
}
display.setText(display.getText()+input);
}
}
privateclassJinzhiActionimplementsActionListener{//进制运算监听函数
publicvoidactionPerformed(ActionEvente){
Strings=e.getActionCommand();
Integerm=newInteger((display.getText().trim()));
inta[]=newint[32];
intb=1,i,j=0,k=0;
intc=0;
if(s.equals("二进制运算"))
{
for(i=0;i<32;i++)
{a[i]=m%2;
m=m/2;
b=b*10;
c=c+b/10*a[i];
if(m==0)
break;
}
display.setText(""+c);
}
if(s.equals("八进制运算"))
{
for(i=0;i<32;i++)
{a[i]=m%8;
m=m/8;
b=b*10;
c=c+b/10*a[i];
if(m==0)
break;
}
display.setText(""+c);
}
}}
privateclassCommandActionimplementsActionListener{//各命令监听设置
publicvoidactionPerformed(ActionEventevt){
Stringcommand=evt.getActionCommand();
displayText=Double.parseDouble(display.getText());
if(command.equals("(")||command.equals("sin")||command.equals("+/-")||command.equals("cos")||command.equals("Sqrt")||command.equals("exp"))
dis.setText(dis.getText());
elseif(!
qlastCommand.equals("="))
dis.setText(dis.getText()+displayText);
elseif(lastCommand.equals("="))//在主显示窗口上方输入命令
dis.setText(display.getText());
else
dis.setText(dis.getText()+displayText);
if(command.equals("(")){//左括号的处理工作
qresult=result;
qlastCommand1=lastCommand1;
qlastCommand=lastCommand;
qdisplayTest=displayText;
result=0;
lastCommand1="=";
lastCommand="=";
}
if(!
(command.equals("sin")||command.equals("+/-")||command.equals("cos")||command.equals("Sqrt")||command.equals("exp")))
dis.setText(dis.getText()+command);//在主显示窗口上方输入命令
cal(command);//实现计算功能函数
if(command.equals(")")){//右括号的处理工作
cal(command);
result=qresult;
lastCommand1=qlastCommand1;
lastCommand=qlastCommand;
start=false;
}
}
}
publicvoidcal(Stringcommand){
if(T){
calculate(displayText);
lastCommand=lastCommand1;
lastCommand1="=";
T=false;
result=w0;
}
if(start){
if(command!
="(")
lastCommand=command;
}
elseif(command.equals("sin")||command.equals("+/-")||command.equals("cos")||command.equals("Sqrt")||command.equals("exp")){
calcul(displayText,command);
}
elseif(command.equals("=")){
displayText=Double.parseDouble(display.getText());
calculate(displayText);
lastCommand="=";
dis.setText(""+result);
start=false;
}
elseif(command.equals(")")){
displayText=Double.parseDouble(display.getText());
calculate(displayText);
lastCommand="=";
start=false;
}
elseif(lastCommand.equals("*")||lastCommand.equals("/")){
displayText=Double.parseDouble(display.getText());
calculate(displayText);
lastCommand=lastCommand1;
lastCommand1="=";
lastCommand=command;
start=true;
}
elseif(command.equals("+")||command.equals("-")){
calculate(Double.parseDouble(display.getText()));
lastCommand=comman