java课程设计 设计一个图形界面的计算器完成简单的算术运算Word格式文档下载.docx
《java课程设计 设计一个图形界面的计算器完成简单的算术运算Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《java课程设计 设计一个图形界面的计算器完成简单的算术运算Word格式文档下载.docx(35页珍藏版)》请在冰豆网上搜索。
3.系统设计原则
基于计算器系统要具有适用性广、操作简便等特点.本系统预计要达到以下几个目标:
(1)、满足以上的功能要求;
(2)、能够运行在常见的计算机及其配置上;
三、设计思路
1.关于布局问题
本次课程设计程序继承来自框架类(Frame),总体布局上选用布局管理器BorderLayout:
(1)将单行文本框加入到“North”区域
(2)将面板panel加入到“Center”区域,同时panel包含了各种数字按钮和符号按钮。
面板panel采用Girdlayout布局,选用5行*5列,将各种按钮添加到面板panel,并增加按钮监听事件。
布局完成后的效果图如下:
2.关于数据存储问题
计算器完成的是一个数学表达式,本次课程设计我选用的是使用链表(Linkedlist类)来存储数字和运算符号。
程序运行后,输入的所有数字及运算符号都全部存储在链表中,待最后运算时,再一一求出来进行计算。
3.关于事件监听的处理问题
计算器的各种按钮都需要一个对象来进行监视,以便对发生的事件做出处理。
计算器的各种按钮通过调用相应的方法将某个对象作为自己的监视器。
例如计算器中的数字按钮,其方法为:
AddActionListener(监视器);
对于获取了监视器的数字按钮,通过相应的操作就会导致事件的发生,并通知监视器,监视器就会做出相应的处理。
四、详细设计
1.计算器系统主要功能模块
(1)、系统主要模块实现的功能
系统输入模块实现数字以及计算符号输入的功能,输出模块的结果在文本框中实现显示。
(2)、系统输入窗体实现的效果
系统输入窗体设计效果如图所示:
上图为按数字键1234567890后,在文本框中的显示
(3)、系统主要模块功能描述
功能描述:
菜单项“计算器”主要服务于使用者.它包含了“输入”、“输出”、
两个功能。
输入功能:
当使用者将数字输入后,会出现数字的显示;
当使用者将计算符号输入时候会有计算符号的录入。
输出功能:
点击“输出”选项后.可实现计算的结果。
2.系统的实现
(1)系统源文件类之间的关系
计算器系统共有3个java源文件:
Calculator,NumberButton,OperationButton。
主要类之间的主要关系如图下图所示
计算器系统的类关系图
2、系统源文件类实现的功能
Calculator.java文件生成的类该JAVA文件生成的类负责创建计算器的主窗口及各种运算的实现。
该类含有main方法,整个程序从此类开始执行
NumberButton.java该文件生成的类负责为主类创建数字按钮对象,使用鼠标单击数字按钮可依次输入参加运算的数值的各位数字
OperationButton.java该文件生成的类负责为主类创建运算符号按钮对象。
使用鼠标单击运算符号可选择所要进行的运算
下表为表格形式
序号
文件名
主要功能
1
Calculator.java
该JAVA文件生成的类负责创建计算器的主窗口。
2
NumberButton.java
该文件生成的类负责为主类创建数字按钮对象,使用鼠标单击数字按钮可依次输入参加运算的数值的各位数字
3
OperationButton.java
该文件生成的类负责为主类创建运算符号按钮对象。
.
3.系统类的成员变量及方法描述
(1)主类Calculator
①成员变量
Calculator类成员变量表
成员变量描述
变量类型
名称
数字按钮数组
NumberButton[]
NumberButton
运算符号按钮数组
OperationButton[]
OperationButton
小数点按钮
JButton
正负号按钮
退格按钮
平方按钮
清零按钮
等号按钮
显示计算结果
JTextField
resultShow
储存数据的链表
LinkedList
mylist
求平方根
sqrt
判断素数
素数
log
立方按钮
倒数按钮
②方法
Calculator类方法
功能
备注
Calculator
创建窗口
构造方法
ActionPerfomed
处理ActionPerfomed事件
接口方法
Main
程序开始运行
(2)NumberButton类
NumberButton类变量
按钮代表的数字
Int
number
NumberButton类方法
方法名
创建数字按钮
getNumber
获取按钮代表的数字
(3)OperationButton类
①成员变量
OperationButton类成员变量
按钮代表的符号
String
Operator
OperationButton类方法
创建符号按钮
getOperator
获取按钮代表的符号
五、运行调试与分析讨论
1.测试加法运算按键12+20得出的结果如下图
2.测试减法运算按键12-20得出的结果如下图
3.测试乘法运算按键12*20得出的结果如下图
4.测试除法运算按键12/20得出的结果如下图
5测试退格运算,按键123456789,按退格键3次,得到的结果如下图
6.测试倒数运算,按键5,再按倒数键“1/X”,得到的结果如下图
7.测试平方键,按键4,再按平方键,得到的结果如下图
8.测试立方键,按键4,再按立方键,得到的结果如下图
9.测试开平方键,按键4,再按键“sqrt”,得到的结果如下图
10..测试素数键,按键29,再按键“素数”,得到的结果如下图
六、设计体会与小结
这次课程设计总体上来说难度不大,但是个别细节遇到很多的问题。
在课设过程中,我自己学习了swing的使用以及数据结构中的链表用java的实现。
在这次课程设计中,我学习到了很多布局方面的知识,还有就是链表的实现。
数据结构已经很久没有用过了,刚上手时感觉有些生疏,但是随着时间的推移,用java实现链表也渐渐的变得顺手了。
这次课程设计的程序构架很简单,没有用到很困难的算法,但是这样编写出来的程序也有优点,就是修改的时候一目了然。
总的来说,时间虽紧,这次课程设计学习的东西很是挺多的。
最后感谢在课程设计中帮助过我的同学和老师。
七、参考文献
[1]耿祥义.《Java2实用教程(第三版)》北京清华大学出版社2006.8
[2]朱福喜.《Java语言程序设计》.北京清华大学出版社.2005
[3]朱福喜,尹为民,余振坤.《Java语言与面向对象程序设计》.武汉武汉大学出版社.2002
附录
程序代码
packageTZB;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.border.*;
importjava.util.LinkedList;
publicclassCalculatorextendsJFrameimplementsActionListener{
NumberButtonnumberButton[];
OperationButtonoprationButton[];
JButton小数点按钮,正负号按钮,退格按钮,平方按钮,等号按钮,清零按钮,sqrt,素数,log,立方按钮,倒数按钮;
JPanelpanel;
JTextFieldresultShow;
String运算符号[]={"
+"
"
-"
*"
/"
};
LinkedList<
String>
mylist;
boolean等号=false;
JTextAreablank;
//GUI的设计及监视器的添加
publicCalculator(){
super("
计算器"
);
mylist=newLinkedList<
();
numberButton=newNumberButton[10];
for(inti=0;
i<
=9;
i++){
numberButton[i]=newNumberButton(i);
numberButton[i].addActionListener(this);
}
oprationButton=newOperationButton[4];
4;
oprationButton[i]=newOperationButton(运算符号[i]);
oprationButton[i].addActionListener(this);
小数点按钮=newJButton("
."
正负号按钮=newJButton("
+/-"
等号按钮=newJButton("
="
平方按钮=newJButton("
平方"
立方按钮=newJButton("
立方"
倒数按钮=newJButton("
1/x"
退格按钮=newJButton("
退格"
清零按钮=newJButton("
C"
sqrt=newJButton("
sqrt"
log=newJButton("
log"
素数=newJButton("
素数"
清零按钮.setForeground(Color.blue);
退格按钮.setForeground(Color.blue);
等号按钮.setForeground(Color.blue);
平方按钮.setForeground(Color.blue);
立方按钮.setForeground(Color.blue);
倒数按钮.setForeground(Color.blue);
正负号按钮.setForeground(Color.blue);
小数点按钮.setForeground(Color.blue);
sqrt.setForeground(Color.blue);
log.setForeground(Color.blue);
素数.setForeground(Color.blue);
退格按钮.addActionListener(this);
清零按钮.addActionListener(this);
等号按钮.addActionListener(this);
小数点按钮.addActionListener(this);
正负号按钮.addActionListener(this);
平方按钮.addActionListener(this);
立方按钮.addActionListener(this);
倒数按钮.addActionListener(this);
sqrt.addActionListener(this);
log.addActionListener(this);
素数.addActionListener(this);
resultShow=newJTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(newFont("
TimesRoman"
Font.PLAIN,24));
resultShow.setBorder(newSoftBevelBorder(BevelBorder.LOWERED));
resultShow.setBackground(Color.white);
resultShow.setEditable(false);
panel=newJPanel();
panel.setLayout(newGridLayout(5,5));
//GridLayout布局5*5
panel.add(numberButton[1]);
panel.add(numberButton[2]);
panel.add(numberButton[3]);
panel.add(oprationButton[0]);
panel.add(清零按钮);
panel.add(numberButton[4]);
panel.add(numberButton[5]);
panel.add(numberButton[6]);
panel.add(oprationButton[1]);
panel.add(退格按钮);
panel.add(numberButton[7]);
panel.add(numberButton[8]);
panel.add(numberButton[9]);
panel.add(oprationButton[2]);
panel.add(倒数按钮);
panel.add(numberButton[0]);
panel.add(正负号按钮);
panel.add(小数点按钮);
panel.add(oprationButton[3]);
panel.add(等号按钮);
panel.add(sqrt);
panel.add(立方按钮);
panel.add(素数);
panel.add(log);
panel.add(平方按钮);
add(panel,BorderLayout.CENTER);
add(resultShow,BorderLayout.NORTH);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
setVisible(true);
setBounds(400,240,400,300);
setResizable(true);
validate();
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()instanceofNumberButton)//触发数字
{
NumberButtonb=(NumberButton)e.getSource();
if(mylist.size()==0){
intnumber=b.getNumber();
mylist.add("
"
+number);
//查看链表动态变化
for(inti=0;
mylist.size();
System.out.print(mylist.get(i)+"
"
}
System.out.println();
resultShow.setText("
等号=false;
elseif(mylist.size()==1&
&
等号==false){
Stringnum=(String)mylist.getFirst();
Strings=num.concat("
mylist.set(0,s);
resultShow.setText(s);
}elseif(mylist.size()==1&
等号==true){
mylist.removeFirst();
}elseif(mylist.size()==2){
}elseif(mylist.size()==3){
Stringnum=(String)mylist.getLast();
mylist.set(2,s);
}elseif(e.getSource()instanceofOperationButton)//触发运算符
OperationButtonb=(OperationButton)e.getSource();
if(mylist.size()==1){
Stringfuhao=b.get运算符号();
mylist.add(fuhao);
mylist.set(1,fuhao);