Java计算器课程设计文档和代码Word文档格式.docx
- 文档编号:17029994
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:17
- 大小:103.03KB
Java计算器课程设计文档和代码Word文档格式.docx
《Java计算器课程设计文档和代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《Java计算器课程设计文档和代码Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
点击关闭windows窗口的控制类。
●classHandleNum:
字符串输入控制类。
●ClassHandleEqual:
等号出发事件的响应机制类。
属性包括:
0~9的数字键
JButtonnum1;
JButtonnum2;
JButtonnum3;
JButtonnum4;
JButtonnum5;
JButtonnum6;
JButtonnum7;
JButtonnum8;
JButtonnum9;
JButtonnum0;
+-*/四个控制按钮
JButtonplus;
JButtonminus;
JButtonmutiply;
JButtondivide;
.+/-两个按钮
JButtonpoint;
JButtonsign;
Backspacece=三个按钮
JButtonbs;
JButtonce;
JButtonequal;
将这些按钮按照一定的顺序添加到现实面板中。
Panelp1,p2,p3,p4;
//为了布局的方便,利用borderLayout,通过几个面板来添加
Stack<
Double>
OPNT=newStack<
();
//用来记录操作数的栈
String>
OPTR=newStack<
//用来记录操作符的栈,栈底压入“#”,取到了“#"
代表已到栈底
booleanpointswitch=true;
//小数点开关
booleanoprateswitch=false;
//运算符开关
booleansiginswitch=true;
//正负号开关
方法:
publicvoidactionPerformed(ActionEvente)
当按下了控制按钮,根据搜索控制开关来确定能否继续添加,各个相应的处理机制。
publicdoublesegmentation(StringmyString)
字符串优先级计算代码的核心函数。
publicintcompare(charch1,charch2)
1值为ch1大于ch2;
-1为ch1小于ch2;
0为ch1等于ch2
publicdoubleoprate(doublea,charb,doublece)
通过参数b来判断加减乘除
五.计算器界面的设计
本程序的实现使用了swing和awt两个包,主题程序界面按键根据微软计算器的布置界面进行设置,采用比较人性化的常规按键排布。
返回计算结果的“=”号键使用了两倍于普通按键面积的设计,使的击中的概率更加大。
整体界面是采用了BorderLayout布局,通过4个panel进行布局的详细划分,panel3用来存储位于panel4左下角的GridLayout(1,2,4,4)布局,panel1、panel2、panel3分别用来表示BorderLayout的上中下三个模块。
Panel1中添加了一个Labeldisplay,display用来作为显示器,实时的显示输入和计算的数据。
其中display需要设置为右对齐和只读属性。
Panel2中添加数字输入键和基本操作符键,panel采用了GridLayout布局,将整个panel2平分为4*4个空间,其中,数字键采用了15磅字体和蓝色文字,操作符采用了15磅字体和红色文字,是的界面更加显眼和便于区分。
Panel4中首先划分为GridLayout(1,2,4,4),在Panel4中,再次使用了GridLayout(1,2,4,4)将panel4的左侧一分为二,左边为panle3,这个的基础上程序往panel3中添加了backspace和ce两个按键,在Panel4的右侧单元格中添加了“=”号按钮,这个时候的“=”号就是相当于两个普通按钮的长度和大小。
整个程序界面的设计工作基本完成。
六.系统测试截图
1.系统初始运行界面
图1系统初始运行界面截图
2.计算器按键测试
图2系统按键测试截图
3.运算符重复输入测试
图3加号重复输入测试截图
3.被除数为0的测试
图41/0的结果Infinity截图
4.小数点重复性检查
图5小数点重复输入错误检查截图
5.backspace按键越界操作
图6使用backspace键做越界操作的截图
6.优先级程序计算
图7计算2/3+6*9-3截图
7.计算结果
图8上面有优先级的公式计算结果
七.设计步骤
本次最先开始程序界面的设计,通过界面的设计,这样心中更加清楚功能的完成。
所以先实现了一个类CalFrame,将每一个需要的组件全都进行添加进来,并运用了相应的布局方式。
这样一个界面就显示出来了。
其实在这个过程中还进行了很多次布局方式的尝试,但最后也是以上面所说的这种来完成。
因为一共才学习了四种布局方式,应用能力有局限。
接下来逐步实现逻辑功能。
即每个组件的事件响应。
因为后面还涉及到运算符的优先级的问题,需要应用到栈,所以先完成一些简单的操作。
接下来完成的是数字键的事件响应。
这样后面的其他按钮的事件响应才能继续下去。
因此完成基本的数据显示是必须得。
这个实现是很简单的,通过actionPerformed的实现,获取到了信息来实现相应功能的输出。
在actionPerformed中需要完成的还有ce以及backspace按钮的事件响应。
首先弄清楚了虽然两个键代表的是清空和清除。
backspace按钮的事件响应。
完成逐一删除单个数字的功能,利用到字符串中的取出相应长度的子字符串来完成显示框的显示。
Ce则是将所以相关的控制开关和栈重置。
在完成了基本的这些操作后,将要进行的是运算符的运算过程。
考虑到优先级的问题,将应用栈来完成。
因此先定义了两个静态的栈来存入用户每次在按下等号之前输入的字符串的使用正则表达式的分解操作数和操作符。
对于每个运算符的处理都是一样的,即将每次按下运算符时将显示框中的内容压入栈中,并且将该运算符压入栈中。
最后是对等于号的事件响应。
通过慢慢的添加,计算器的运算功能就完成了。
八.总结
这个学期的java课程设计--计算器对我来说是一个不断学习,逐步完善的过程。
开始的时候拿到题目看到只有四则混合运算就理所当然的认为应该是非常简单的的一个程序而已。
首先开始了程序的界面的设计。
并且将一些简单的按钮的事件响应完成了。
剩下了运算符优先级的问题以及数据的处理问题。
于是在同学的帮助下利用正则表达式来完成输入字符串的切割,但是如果自己一个人单挑来说,对于题目中的数据处理的问题一时不知道该如何与正则表达式连接上。
最后我还是选择用栈来处理。
这个过程让我明白了学习知识的时候实践与理论之间是有很大的差异的。
应用能力我还有待加强。
于是我开始熟悉栈的使用。
以前在c++的学习中接触过栈,这次的使用思想是一样的,只需要在了解一下java中的相关一些函数便可。
但实际在写程序的过程中,由于有一些特殊情况的考虑与进出入栈的联系,还是碰到了一些问题。
但在后来我慢慢的整理清楚思路以后,逻辑列清楚了,便也将这些问题解决了。
逐步的将各项功能都完善了。
当然目前我的计算器也只是完成了四则混合运算,实际上还应该有很多功能可以添加入计算器的。
本次java课程设计也让我明白只要我一步步去做,那么程序功能便会不断强大。
同时很重要的一点便是以后要多加强自己的动手实践能力。
参考文献
[1]StrutsWeb设计与开发大全/邱哲,王俊标,马斗编著.北京:
清华大学出版社,2006.2
[2]JSP应用开发详解/刘晓华,张建,周慧贞编著.—3版.—北京:
电子工业出版社,2007.1
附录A:
程序源代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.*;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassMyCalculator{
publicstaticvoidmain(String[]args){
newCalFrame();
}
}
classCalFrameextendsJFrame{
Stringopnt,optr;
Stack<
Labeldisplay;
//显示
JButton[]num=newJButton[10];
//按键设计
JButtonplus;
JButtonminus;
JButtonmutiply;
JButtondivide;
JButtonbs;
JButtonpoint;
JButtonsign;
JButtonlbracket;
JButtonrbracket;
Stringdisp="
"
;
//用户输入的表达式
Stringresult="
;
//用户输入的字符串
CalFrame(){
OPTR.push("
#"
);
for(inti=0;
i<
=9;
++i){
num[i]=newJButton(String.valueOf(i));
}
plus=newJButton("
+"
plus.setForeground(Color.red);
plus.setFont(newFont("
Dialog"
1,15));
minus=newJButton("
-"
minus.setForeground(Color.red);
minus.setFont(newFont("
mutiply=newJButton("
*"
mutiply.setForeground(Color.red);
mutiply.setFont(newFont("
divide=newJButton("
/"
divide.setForeground(Color.red);
divide.setFont(newFont("
equal=newJButton("
="
equal.setForeground(Color.red);
equal.setFont(newFont("
point=newJButton("
."
point.setFont(newFont("
sign=newJButton("
+/-"
sign.setFont(newFont("
bs=newJButton("
backspace"
bs.setForeground(Color.red);
bs.setFont(newFont("
1,8));
ce=newJButton("
ce"
ce.setFont(newFont("
p1=newPanel();
p1.setLayout(newBorderLayout());
display=newLabel("
0."
Label.RIGHT);
display.setBackground(Color.white);
p1.add(display,BorderLayout.NORTH);
p2=newPanel();
p2.setLayout(newGridLayout(4,4,4,4));
p2.add(num[7]);
p2.add(num[8]);
p2.add(num[9]);
p2.add(divide);
p2.add(num[4]);
p2.add(num[5]);
p2.add(num[6]);
p2.add(mutiply);
p2.add(num[1]);
p2.add(num[2]);
p2.add(num[3]);
p2.add(minus);
p2.add(num[0]);
p2.add(sign);
p2.add(point);
p2.add(plus);
p3=newPanel(newGridLayout(1,2,4,4));
p3.add(bs);
p3.add(ce);
p4=newPanel(newGridLayout(1,2,4,4));
p4.add(p3);
p4.add(equal);
setTitle("
超级计算器"
setLayout(newBorderLayout());
add(p1,BorderLayout.NORTH);
add(p2,BorderLayout.CENTER);
add(p4,BorderLayout.SOUTH);
setVisible(true);
pack();
setResizable(false);
setBounds(600,350,300,230);
addWindowListener(newHandleWin());
num[i].setForeground(Color.blue);
num[i].setFont(newFont("
num[i].addActionListener(newHandleNum(this,i));
plus.addActionListener(newHandleNum(this));
minus.addActionListener(newHandleNum(this));
mutiply.addActionListener(newHandleNum(this));
divide.addActionListener(newHandleNum(this));
point.addActionListener(newHandleNum(this));
sign.addActionListener(newHandleNum(this));
bs.addActionListener(newHandleNum(this));
ce.addActionListener(newHandleNum(this));
equal.addActionListener(newHandleEqual(this));
}
classHandleWinextendsWindowAdapter{//关闭计算器
publicvoidwindowClosing(WindowEvente){
(e.getWindow()).dispose();
System.exit(0);
//
classHandleNumimplementsActionListener{//字符串的输入
JFramemy_Num;
intitemp=0;
HandleNum(JFramef,inta){
my_Num=f;
itemp=a;
HandleNum(JFramef){
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==num[itemp]){//输入数字字符
oprateswitch=true;
siginswitch=false;
disp=disp+itemp;
display.setText(disp);
}
if(oprateswitch&
&
e.getSource()==plus){//输入加号
pointswitch=true;
oprateswitch=false;
siginswitch=true;
disp=disp+"
e.getSource()==minus){//输入减号
e.getSource()==mutiply){//输入乘号
e.getSource()==divide){//输入除号
pointswitch==true&
e.getSource()==point){//输入小数点
pointswitch=false;
if(siginswitch&
e.getSource()==sign){//输入负号
—"
if(e.getSource()==bs){//点击backspace
if(!
disp.isEmpty()){
disp=disp.substring(0,disp.length()-1);
if(disp.isEmpty())
disp="
"
display.setText(disp);
}
if(e.getSource()==ce){//点击ce
disp="
classHandleEqualimplementsActionListener{//等于号触发的事件
Framemy_Equal;
HandleEqual(JFramef){
my_Equal=f;
if(e.getSource()==equal){
disp=disp+"
disp=String.valueOf(segmentation(disp));
display.setTex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 计算器 课程设计 文档 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)