java计算器改进.docx
- 文档编号:9848234
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:18
- 大小:97.16KB
java计算器改进.docx
《java计算器改进.docx》由会员分享,可在线阅读,更多相关《java计算器改进.docx(18页珍藏版)》请在冰点文库上搜索。
java计算器改进
JAVA应用与开发
程序设计报告
(2013/2014学年第2学期)
题目:
科学计算器
班级网络工程二班
学生姓名谢川东
学号1106840541
所属分组
日期6.11
评分细则
评分项
100-90优秀A;89-80良好B;79-70中等C;69-60及格D;59-0不及格E
出勤
(10%)
纪律
(10%)
程序演示
(10%)
程序完成情况
(20%)
报告
(50%)
综合
一、
课题内容和要求
实现类似Windows操作系统“计算器”的功能。
可以完成任意的通常借助手持计算器来完成的标准运算。
“计算器”可用于基本的算术运算,比如加减运算等。
同时它还具有科学计算器的功能,比如对数运算和阶乘运算等。
二、需求分析
实现现实计算器的基本运算,加减乘除,还有科学计算,部分函数运算。
在clear模块中实现回退,操作数清零,还有整体清零。
在num模块中实现数字的按键输入,对计算器实现操作数的输入。
在signs模块中实现科学计算,函数的运算。
在Msigns模块中实现寄存器的相关功能。
三、概要设计
程序分为两个大的部分。
程序所需要的方法,和相关的基础类。
程序所需的方法里,有程序的初始化,按钮的统一使用方法设置,以及对计算器的版面设置。
在相关的基础类里,主要是运算符号,清除按钮,数字输入,小数点,寄存器的事件监听。
界面上,采用borderlayout的布局,分成三个部分,左边,右上,右下。
左边放置寄存器的按钮,右上放置清除按钮,右下则是数字按钮和运算按钮。
在此说明系统主要的设计架构、界面布局,设计的类图,每个类中成员设计说明(变量和方法的作用、用途等),有数据库的要说明主要的数据表。
四、详细设计
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.text.DecimalFormat;
importjavax.swing.BorderFactory;
importjavax.swing.ButtonGroup;
importjavax.swing.JButton;
importjavax.swing.JCheckBoxMenuItem;
importjavax.swing.JFrame;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JPanel;
importjavax.swing.JRadioButtonMenuItem;
importjavax.swing.JTextField;
publicclassCalucatorextendsJFrame{
privateJTextFieldtf;
privateJPanelpanel1,panel2,panel3,panel4;
privatebooleanIfResult=true,flag=false;
privateStringoper="=";
privatedoubleresult=0;
privatedoubleMs=0;
privatedoubleM=0;
privateNumnumActionListener;
privateDecimalFormatdf;
publicCalucator(){
super("科学计算器");//设置标题栏
df=newDecimalFormat("#.####");//保留四位小数
this.setLayout(newBorderLayout(10,5));
panel1=newJPanel(newGridLayout(1,3,10,10));
panel2=newJPanel(newGridLayout(5,6,5,5));//5行6列
panel3=newJPanel(newGridLayout(5,1,5,5));
panel4=newJPanel(newBorderLayout(5,5));
numActionListener=newNum();//实现数字监听
/**
*文本域,即为计算器的屏幕显示区域
*/
tf=newJTextField();
tf.setEditable(false);//文本区域不可编辑
tf.setBackground(Color.white);//文本区域的背景色
tf.setHorizontalAlignment(JTextField.RIGHT);//文字右对齐
tf.setText("0");
tf.setBorder(BorderFactory.createLoweredBevelBorder());
init();//对计算器进行初始化
}
/**
*初始化操作
*添加按钮
*/
privatevoidinit(){
addButton(panel1,"Backspace",newClear(),Color.black);
addButton(panel1,"CE",newClear(),Color.black);
addButton(panel1,"C",newClear(),Color.black);
addButton(panel2,"1/x",newSigns(),Color.black);
addButton(panel2,"ln",newSigns(),Color.black);
addButton(panel2,"7",numActionListener,Color.black);
addButton(panel2,"8",numActionListener,Color.black);
addButton(panel2,"9",numActionListener,Color.black);
addButton(panel2,"÷",newSigns(),Color.black);
addButton(panel2,"n!
",newSigns(),Color.black);
addButton(panel2,"sqrt",newSigns(),Color.black);
addButton(panel2,"4",numActionListener,Color.black);
addButton(panel2,"5",numActionListener,Color.black);
addButton(panel2,"6",numActionListener,Color.black);
addButton(panel2,"×",newSigns(),Color.black);
addButton(panel2,"sin",newSigns(),Color.black);
addButton(panel2,"x^2",newSigns(),Color.black);
addButton(panel2,"1",numActionListener,Color.black);
addButton(panel2,"2",numActionListener,Color.black);
addButton(panel2,"3",numActionListener,Color.black);
addButton(panel2,"-",newSigns(),Color.black);
addButton(panel2,"cos",newSigns(),Color.black);
addButton(panel2,"x^3",newSigns(),Color.black);
addButton(panel2,"0",numActionListener,Color.black);
addButton(panel2,"-/+",newClear(),Color.black);
addButton(panel2,".",newDot(),Color.black);
addButton(panel2,"+",newSigns(),Color.black);
addButton(panel2,"tan",newSigns(),Color.black);
addButton(panel2,"%",newSigns(),Color.black);
addButton(panel2,"π",numActionListener,Color.orange);
addButton(panel2,"e",numActionListener,Color.orange);
addButton(panel2,"′″",newSigns(),Color.orange);
addButton(panel2,"=",newSigns(),Color.black);
JButtonbtns=newJButton("计算器");
btns.setBorder(BorderFactory.createLoweredBevelBorder());
btns.setEnabled(false);//按钮不可操作
btns.setPreferredSize(newDimension(20,20));
panel3.add(btns);//加入按钮
addButton(panel3,"MC",newMsigns(),Color.red);
addButton(panel3,"MC",newMsigns(),Color.red);
addButton(panel3,"MR",newMsigns(),Color.red);
addButton(panel3,"MS",newMsigns(),Color.red);
addButton(panel3,"M+",newMsigns(),Color.red);
panel4.add(panel1,BorderLayout.NORTH);
panel4.add(panel2,BorderLayout.CENTER);
this.add(tf,BorderLayout.NORTH);
this.add(panel3,BorderLayout.WEST);
this.add(panel4);
pack();
this.setResizable(false);//窗口不可改变大小
this.setLocation(300,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
*统一设置按钮的的使用方式
*@parampanel
*@paramname
*@paramaction
*@paramcolor
*/
privatevoidaddButton(JPanelpanel,Stringname,ActionListeneraction,Colorcolor){
JButtonbt=newJButton(name);
panel.add(bt);//在面板上增加按钮
bt.setForeground(color);//设置前景(字体)颜色
bt.addActionListener(action);//增加监听事件
}
/**
*计算器的基础操作(+-×÷)
*@paramx
*/
privatevoidgetResult(doublex){
if(oper=="+"){result+=x;}
elseif(oper=="-"){result-=x;}
elseif(oper=="×"){result*=x;}
elseif(oper=="÷"){result/=x;}
elseif(oper=="="){result=x;}
tf.setText(df.format(result));
}
/**
*运算符号的事件监听
*/
classSignsimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
/*
*用ActionEvent对象的getActionCommand()方法
*取得与引发事件对象相关的字符串
*/
Stringstr=e.getActionCommand();
/*sqrt求平方根*/
if(str.equals("sqrt")){
doublei=Double.parseDouble(tf.getText());
if(i>=0){
/*
*String.valueOf()转换为字符串
*df.format()按要求保留四位小数
*Math.sqrt()求算数平方根
*/
tf.setText(String.valueOf(df.format(Math.sqrt(i))));
}
else{
tf.setText("负数不能开平方根");
}
}
/*ln求常用对数*/
elseif(str.equals("ln")){
doublei=Double.parseDouble(tf.getText());
if(i>0)
{
tf.setText(String.valueOf(df.format(Math.log(i))));
}
else
{
tf.setText("不在定义域内");
}
}
/*%求百分比*/
elseif(str.equals("%")){
tf.setText(df.format(Double.parseDouble(tf.getText())/100));
}
/*1/x求倒数*/
elseif(str.equals("1/x")){
if(Double.parseDouble(tf.getText())==0){
tf.setText("除数不能为零");
}else{
tf.setText(df.format(1/Double.parseDouble(tf.getText())));
}
}
/*sin求正弦函数*/
elseif(str.equals("sin")){
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(Math.sin(i))));
}
/*cos求余弦函数*/
elseif(str.equals("cos")){
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(Math.cos(i))));
}
/*tan求正切函数*/
elseif(str.equals("tan")){
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(Math.tan(i))));
}
/*n!
求阶乘*/
elseif(str.equals("n!
")){
doublei=Double.parseDouble(tf.getText());
if((i%2==0)||(i%2==1))//判断为整数进行阶乘操作
{
intj=(int)i;//强制类型转换
intresult=1;
for(intk=1;k<=j;k++)
result*=k;
tf.setText(String.valueOf(result));
}
else
{
tf.setText("无法进行阶乘");
}
}
/*x^2求平方*/
elseif(str.equals("x^2")){
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(i*i)));
}
/*x^3求立方*/
elseif(str.equals("x^3")){
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(i*i*i)));
}
/*′″角度转换*/
/**
*将角度值转换成弧度值,方便三角函数的计算
*/
elseif(str.equals("′″")){
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(i/180*Math.PI));
}
else{
if(flag){
IfResult=false;
}
if(IfResult){
oper=str;
}else{
getResult(Double.parseDouble(tf.getText()));
oper=str;
IfResult=true;
}
}
}
}
/**
*清除按钮的事件监听
*/
classClearimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
/*
*用ActionEvent对象的getActionCommand()方法
*取得与引发事件对象相关的字符串
*/
Stringstr=e.getActionCommand();
if(str=="C"){
tf.setText("0");
IfResult=true;
result=0;
}elseif(str=="-/+"){
doublei=0-Double.parseDouble(tf.getText().trim());
tf.setText(df.format(i));
}elseif(str=="Backspace"){
if(Double.parseDouble(tf.getText())>0){
if(tf.getText().length()>1){
tf.setText(tf.getText().substring(0,tf.getText().length()-1));
//使用退格删除最后一位字符
}else{
tf.setText("0");
IfResult=true;
}
}else{
if(tf.getText().length()>2){
tf.setText(tf.getText().substring(0,tf.getText().length()-1));
}else{
tf.setText("0");
IfResult=true;
}
}
}elseif(str=="CE"){
tf.setText("0");
IfResult=true;
}
}
}
/**
*数字输入的事件监听
*/
classNumimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
Stringstr=e.getActionCommand();
if(IfResult){
tf.setText("");
IfResult=false;
}
if(str=="π")
{
tf.setText(String.valueOf(Math.PI));
}
elseif(str=="e")
{
tf.setText(String.valueOf(Math.E));
}
else{
tf.setText(tf.getText().trim()+str);
if(tf.getText().equals("0")){
tf.setText("0");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 计算器 改进