java课设计算器连续运算带源码.docx
《java课设计算器连续运算带源码.docx》由会员分享,可在线阅读,更多相关《java课设计算器连续运算带源码.docx(27页珍藏版)》请在冰点文库上搜索。
java课设计算器连续运算带源码
java课设__计算器__连续运算_带源码
课程设计(论文)说明书
题目:
Java课程设计
数学表达式计算程序学院:
计算机科学与工程学院专业:
信息管理与信息系统姓名:
邓浩学号:
1100340117指导教师:
王华登
2013年6月20日
一(java课程设计要求
在老师给定的几个任务选题中,选择难度适合自己的课题,通过自己对设计目标的理解,独立完成所选课题要求实现的功能目标,编写软件代码和设计报告。
也可以根据自己的兴趣自选题目,难度适中符合要求即可。
课设要求独立完成。
可相互讨论或查阅参考资料,但不得与他人雷同,不得直接从网上或其它地方抄袭代码。
验收时和最后提交代码后会进行是否抄袭的检验,发现雷同或抄袭者成绩为不及格。
二(数学表达式计算程序,基本功能如下:
1.由用户输入一个简单的四则运算表达式,求出其计算结果后显示。
2.允许在表达式中出现常用的数学函数,如绝对值、取整、三角函数、倒数、平方根、平方、立方等。
三(选题分析
当时选择这个题时的原因是,这个题目类似于我们之前在Java实验课上学习的“计算器”实验。
相对来说比较容易实现,所以选择做“数学表达式计算程序”。
能够在之前的基础上实现跟多的功能。
四(本题思路分析
1.初步结构设想:
要有独立的数字按钮、小数点、可以运行加减乘除、清零、对于数学函数简单的可执行平方、立方、倒数„„,可以进行退格操作。
2.界面结构设想:
3.运行构想:
通过监听,将信息存储到一个链表里,然后通过操作键与功能键制定函数,运行后将值显示出来。
五(代码
1.定义
publicclassComputerPadextendsFrameimplementsActionListener//界面设计继承于结构,对这个类进行监听
{//对所需要的进行定义,按键、链表、运算符„„
NumberButtonnumberButton[];
OperationButtonoprationButton[];
Button小数点按钮,正负号按钮,退格按钮,立方按钮,绝对值按钮,
求倒数按钮,等号按钮,清零按钮,平方按钮,求根按钮;
Panelpanel;//通过面板来进行绘制界面
JTextFieldresultShow;//显示框中出现结果显示
String运算符号[]={"+","-","*","/"};
LinkedList链表;//信息存储于链表中
boolean是否按下等号=false;//设置运算判定
以上为,对整个系统所需要的所有内容的,总定义。
2.界面的绘制
publicComputerPad()//创建界面
{
super("邓浩的计算器");
链表=newLinkedList();//用链表继承每个按钮
numberButton=newNumberButton[10];//制定10个数字按钮
for(inti=0;i<=9;i++)
{
numberButton[i]=newNumberButton(i);//赋值数字按钮
numberButton[i].addActionListener(this);//对每个数字按钮进行监听
}
oprationButton=newOperationButton[4];//制定4个功能按钮
for(inti=0;i<4;i++)
{
oprationButton[i]=newOperationButton(运算符号[i]);//对+—*/
进行添加
oprationButton[i].addActionListener(this);//对每个功能按钮进
行监听
}
小数点按钮=newButton(".");//逐个添加函数运算符
正负号按钮=newButton("+/-");
等号按钮=newButton("=");
求倒数按钮=newButton("1/x");
退格按钮=newButton("退格");
清零按钮=newButton("C");
平方按钮=newButton("平方");
立方按钮=newButton("立方");
求根按钮=newButton("?
");
绝对值按钮=newButton("绝对值");
清零按钮.setForeground(Color.red);//设置显示的颜色
退格按钮.setForeground(Color.red);
等号按钮.setForeground(Color.red);
求倒数按钮.setForeground(Color.blue);
正负号按钮.setForeground(Color.blue);
小数点按钮.setForeground(Color.blue);
平方按钮.setForeground(Color.blue);
立方按钮.setForeground(Color.blue);
求根按钮.setForeground(Color.blue);
绝对值按钮.setForeground(Color.blue);
退格按钮.addActionListener(this);//对各个函数按钮进行监听
清零按钮.addActionListener(this);
等号按钮.addActionListener(this);
小数点按钮.addActionListener(this);
正负号按钮.addActionListener(this);
求倒数按钮.addActionListener(this);
平方按钮.addActionListener(this);
立方按钮.addActionListener(this);
求根按钮.addActionListener(this);
绝对值按钮.addActionListener(this);
resultShow=newJTextField(10);//结果显示
resultShow.setHorizontalAlignment(JTextField.RIGHT);//建立水平方
向的队列、链表
resultShow.setForeground(Color.blue);//数字设置为蓝色
resultShow.setFont(newFont("TimesRoman",Font.PLAIN,14));//设置
显示字体与大小
resultShow.setBorder(newSoftBevelBorder(BevelBorder.LOWERED));
//设置边界效果
resultShow.setBackground(Color.white);//设置背景
resultShow.setEditable(false);//设为这些显示是不能改变的
panel=newPanel();//建立平板
panel.setLayout(newGridLayout(4,6));//大小为4x5的
//横向逐个添加上去
panel.add(numberButton[1]);
panel.add(numberButton[2]);
panel.add(numberButton[3]);
panel.add(oprationButton[0]);
panel.add(清零按钮);
panel.add(平方按钮);
panel.add(numberButton[4]);
panel.add(numberButton[5]);
panel.add(numberButton[6]);
panel.add(oprationButton[1]);
panel.add(退格按钮);
panel.add(立方按钮);
panel.add(numberButton[7]);
panel.add(numberButton[8]);
panel.add(numberButton[9]);
panel.add(oprationButton[2]);
panel.add(求倒数按钮);
panel.add(求根按钮);
panel.add(numberButton[0]);
panel.add(正负号按钮);
panel.add(小数点按钮);
panel.add(oprationButton[3]);
panel.add(等号按钮);
panel.add(绝对值按钮);
add(panel,BorderLayout.CENTER);
add(resultShow,BorderLayout.NORTH);
//添加显示结果的窗口
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
setVisible(true);//可视的
setBounds(100,50,240,180);//设置大小
setResizable(false);//不能变大小
validate();
}
得到的界面效果是:
3.监听与数据处理
publicvoidactionPerformed(ActionEvente)//进行事件处理,监听事件为e
{
if(e.getSource()instanceofNumberButton)//e得到一个资源来自数字按钮
{
NumberButtonb=(NumberButton)e.getSource();//进行赋值给b
if(链表.size()==0)//未输入,显示空
{
intnumber=b.getNumber();
链表.add(""+number);
resultShow.setText(""+number);
是否按下等号=false;
}
elseif(链表.size()==1&&是否按下等号==false)//输入后显示一串数字
{
intnumber=b.getNumber();
Stringnum=(String)链表.getFirst();
Strings=num.concat(""+number);
链表.set(0,s);
resultShow.setText(s);
}
elseif(链表.size()==1&&是否按下等号==true)
{
intnumber=b.getNumber();
链表.removeFirst();//移至开头
链表.add(""+number);//在链表中加入输入的数字
是否按下等号=false;
resultShow.setText(""+number);
}
elseif(链表.size()==2)
{
intnumber=b.getNumber();
链表.add(""+number);
resultShow.setText(""+number);
}
elseif(链表.size()==3)
{
intnumber=b.getNumber();
Stringnum=(String)链表.getLast();
Strings=num.concat(""+number);//合并为一个字符串
链表.set(2,s);
resultShow.setText(s);
}
}
elseif(e.getSource()instanceofOperationButton)//如果得到e为运算键
{
OperationButtonb=(OperationButton)e.getSource();//把这个复制给b
if(链表.size()==1)//在链表中添加符号
{
Stringfuhao=b.get运算符号();
链表.add(fuhao);
}
elseif(链表.size()==2)//符号在第二个位子
{
Stringfuhao=b.get运算符号();
链表.set(1,fuhao);
}
elseif(链表.size()==3)
{
Stringfuhao=b.get运算符号();
Stringnumber1=(String)链表.getFirst();
Stringnumber2=(String)链表.getLast();
String运算符号=(String)链表.get
(1);
try
{
doublen1=Double.parseDouble(number1);//对n1,n2,n进行定义
doublen2=Double.parseDouble(number2);
doublen=0;
if(运算符号.equals("+"))//加法
{
n=n1+n2;
}
elseif(运算符号.equals("-"))//减法
{
n=n1-n2;
}
elseif(运算符号.equals("*"))//乘法
{
n=n1*n2;
}
elseif(运算符号.equals("/"))//除法
{
n=n1/n2;
}
链表.clear();
链表.add(""+n);
链表.add(fuhao);
resultShow.setText(""+n);//显示结果
}
catch(Exceptionee)//异常处理
{
}
}
}
elseif(e.getSource()==等号按钮)
{
是否按下等号=true;
if(链表.size()==1||链表.size()==2)//如果链表长度为1或2,直接显示
{
Stringnum=(String)链表.getFirst();
resultShow.setText(""+num);
}
elseif(链表.size()==3)//若链表长度为3需要运算
{
Stringnumber1=(String)链表.getFirst();
Stringnumber2=(String)链表.getLast();
String运算符号=(String)链表.get
(1);
try
{
doublen1=Double.parseDouble(number1);
doublen2=Double.parseDouble(number2);
doublen=0;
if(运算符号.equals("+"))
{
n=n1+n2;
}
elseif(运算符号.equals("-"))
{
n=n1-n2;
}
elseif(运算符号.equals("*"))
{
n=n1*n2;
}
elseif(运算符号.equals("/"))
{
n=n1/n2;
}
resultShow.setText(""+n);
链表.set(0,""+n);
链表.removeLast();//移动到表的最后
链表.removeLast();
}
catch(Exceptionee)//捕获异常
{
}
}
}
elseif(e.getSource()==小数点按钮)//当得到小数点时
{
if(链表.size()==0)
{
是否按下等号=false;
}
elseif(链表.size()==1)
{
Stringdot=小数点按钮.getLabel();//显示一个小点
Stringnum=(String)链表.getFirst();//与之前的组成一个数字
Strings=null;
if(num.indexOf(dot)==-1)//索引还没有点,就把点和数合并,
{
s=num.concat(dot);
链表.set(0,s);
}
else//不然就不变
{
s=num;
}
链表.set(0,s);
resultShow.setText(s);
}
elseif(链表.size()==3)
{
Stringdot=小数点按钮.getLabel();
Stringnum=(String)链表.getLast();
Strings=null;
if(num.indexOf(dot)==-1)
{
s=num.concat(dot);
链表.set(2,s);
}
else
{
s=num;
}
resultShow.setText(s);
}
}
elseif(e.getSource()==退格按钮)//退格键的功能操作
{
if(链表.size()==1)
{
Stringnum=(String)链表.getFirst();
if(num.length()>=1)
{
num=num.substring(0,num.length()-1);
链表.set(0,num);
resultShow.setText(num);
}
else
{
链表.removeLast();
resultShow.setText("0");
}
}
elseif(链表.size()==3)
{
Stringnum=(String)链表.getLast();
if(num.length()>=1)
{num=num.substring(0,num.length()-1);
链表.set(2,num);
resultShow.setText(num);
}
else
{
链表.removeLast();
resultShow.setText("0");
}
}
}
elseif(e.getSource()==正负号按钮)//正负号的功能操作
{
if(链表.size()==1)
{
Stringnumber1=(String)链表.getFirst();
try
{
doubled=Double.parseDouble(number1);
d=-1*d;
Stringstr=String.valueOf(d);//获得返回对象的值
链表.set(0,str);
resultShow.setText(str);
}
catch(Exceptionee)
{
}
}
elseif(链表.size()==3)
{
Stringnumber2=(String)链表.getLast();
try
{
doubled=Double.parseDouble(number2);
d=-1*d;
Stringstr=String.valueOf(d);
链表.set(2,str);
resultShow.setText(str);
}
catch(Exceptionee)
{
}
}
}
elseif(e.getSource()==求倒数按钮)//对于倒数的运算
{
if(链表.size()==1||链表.size()==2)
{
Stringnumber1=(String)链表.getFirst();
try
{
doubled=Double.parseDouble(number1);
d=1.0/d;
Stringstr=String.valueOf(d);
链表.set(0,str);
resultShow.setText(str);
}
catch(Exceptionee)
{
}
}
elseif(链表.size()==3)
{
Stringnumber2=(String)链表.getLast();
try
{
doubled=Double.parseDouble(number2);
d=1.0/d;
Stringstr=String.valueOf(d);
链表.set(2,str);
resultShow.setText(str);
}
catch(Exceptionee)
{
}
}
}
elseif(e.getSource()==平方按钮)//对平方运算
{
if(链表.size()==1||链表.size()==2)
{
Stringnumber1=(String)链表.getFirst();
try
{
doubled=Double.parseDouble(number1);
d=d*d;
Stringstr=String.valueOf(d);
链表.set(0,str);
resultShow.setText(str);
}
catch(Exceptionee)
{
}
}
elseif(链表.size()==3)
{
Stringnumber2=(String)链表.getLast();
try
{
doubled=Double.parseDouble(number2);
d=d*d;
Stringstr=String.valueOf(d);
链表.set(2,str);
resultShow.setText(str);
}
catch(Exceptionee)
{
}
}
}
elseif(e.getSource()==立方按钮)//对于立方的运算
{
if(链表.size()==1||链表.size()==2)
{
Stringnumber1=(String)链表.getFirst();
try
{
doubled=Double.parseDouble(number1);
d=d*d*d;
Stringstr=String.valueOf(d);
链表.set(0,str);
resultShow.setText(str);
}
catch(Exceptionee)
{
}
}
elseif(链表.size()==3)
{
Stringnumber2=(String)链表.getLast();
try
{
doubled=Double.parseDouble(number2);
d=d*d*d;
Stringstr=String.valueOf(d)