资源描述
目 录
1设计目标………………………………………………………………………2
2 设计题目及要求……………………………………………………3
3设计算法分析………………………………………………………………4
3.1 模块调用层次图………………………………………………………4
3.2 关键算法描述………………………………………………………5
3.3 系统特点………………………………………………………7
4程序代码………………………………………………………………………8
5调试情况……………………………………………………………………16
6结论……………………………………………………………………………18
参考文件 ………………………………………………………………19
简易计算器
1.设计目标
本课程设计目标就是要经过一次集中强化训练,使学生能立即巩固已学知识,补充未学但又必需内容。进行课程设计目标在于加深对程序设计基础中基础理论和基础知识了解,促进理论和实践结合,深入提升程序设计能力。具体目标以下:
1.使学生更深入地了解和掌握该课程中相关基础概念,程序设计思想和方法。
2.培养学生综合利用所学知识独立完成课题能力。
3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应含有素质。
4.提升学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关基础素质。
5.培养学生从资料文件、科学试验中取得悉识能力,提升学生从她人经验中找四处理问题新路径悟性,初步培养工程意识和创新能力。
6.对学生掌握知识深度、利用理论去处理问题能力、试验能力、课程设计能力、书面及口头表示能力进行考评。
2.设计题目及要求
【1】设计题目
简易计算器
【2】设计要求
1)独自一人完成课程设计,不得剽窃。
2)应用自己所学课程知识完成对计算器基础任务。
3)查阅相关资料,学习和掌握项目中包含新知识,提升自学能力。
4)经过应用java程序编写计算器来提升自己对简单图形界面有一定掌握和了解。
5)设计简易计算器应能够实现+-×÷求倒数等基础运算功效,类似于Windows中计算器。
6)设计一个简单,亲和图形界面(GUI)计算机应用程序
3.设计算法分析
3.1 模块调用层次图
【1】变量描述
数组:
1 JButton b[] = new JButton[10];
创建按钮类型数组,为数字键0-9这 10个按钮。
全局变量:
1 JFrame frame;
创建一个jFrame类型框架,为frame,用来存放需要显示部分东西。
2 JTextField show;
创建一个JtextField类型展示框,为show。上面用来显示输出或计算结果。
3 double sum = 0, getValue;
创建一个类型为双精度变量,其初始值为0.返回计算后得到值。
4 JDialog about;
创建一个类型为Jdialog对话框abhout,其显示该计算器部分相关内容。
5 final int slength = 30;
创建一个为类型为整形slength,其值为30,意味该计算器显示有效长度最大值为30,超出30话,计算器将不能够全部显示。
6 JButton bc, c, ce, ab, jia, jian, cheng, chu, equ, point, sqrt, ds, bfh,zf;
创建类型为Jbuttond按钮退格,清空,复位,相关,加,减,乘,除,等号,小数点,2次方根,倒数,百分号,正负号,当按下这些按钮话,便会触发对应监听器,依据这些监听器设置,实施对应程序。
7 int i = 0, j = 0, p = 0, l, action;
创建类型为整形初始化书i、j、p。这多个按钮在算法初始化时实现。
8 Panel dispMain = new Panel()
创建类型为panel面板dispMain,用来存放另部分控件。
函数:
1 public void disp()
创建无值函数disp(),用来存放界面所需要展示元素,包含有面板,按钮,弹出对话框,显示框等。
2 public void actionPerformed(ActionEvent e)
创建无值函数actionPerformed(ActionEvent e),其许可输入值类型为ActionEvent e,在里面编写是加减陈除等部分算法。
3 public void setSum()
创建无值函数setSum(),显示出经过算法计算出结果,
4 public void windowClosing(WindowEvent e)
创建无值函数windowClosing(WindowEvent e),当显示程序界面右上角x时,将关闭程序。
5 public static void main(String args[])
创建静态无值函数main主函数,用来调用以上所表示函数。
【2】程序步骤
1 系统模块调用层次图
Main()
disp()
actionPerformed(ActionEvent e)
setSum()
windowClosing(WindowEvent e)
3.2关键算法描述
经过该步骤可实现累加功效:
setSum();
j++;
p = 0;
i = 0;
action = ?
判定最终一个操作数类型:
else if (e.getSource() == equ) { // 等号,运算最终一个操作数
switch (action) {
case 1:
show.setText(String.valueOf(sum += getValue));
break;
case 2:
show.setText(String.valueOf(sum -= getValue));
break;
case 3:
show.setText(String.valueOf(sum *= getValue));
break;
case 4:
show.setText(String.valueOf(sum /= getValue));
break;
}
设定数字按钮触发算法:
for (l = 0; l < 10; l++) { // 0~9数字键触发
if (e.getSource() == b[l]) {
if (i == 0)
show.setText("");
String s = show.getText();
if (s.length() < slength)
show.setText(show.getText() + e.getActionCommand());
if (e.getSource() == b[0] && getValue == 0 && p == 0)
show.setText("0");
if (e.getSource() != b[0] && getValue == 0 && p == 0)
show.setText(e.getActionCommand());
i++;// i用来标识数字键触发状态
设定计算器关闭方法:
public void windowClosing(WindowEvent e) {
if (e.getSource() == about)
about.setVisible(false);
else if (e.getSource() == frame)
System.exit(0);
为按钮绑定监听器:
about.addWindowListener(this);
3.3 系统特点:
【1】该计算器基础运算没有问题,清零、正负号、求倒数、退格功效全部能很好实现,总体能完成一个计算器基础功效,但仍有很多地方需要改善,比如小数点实现所存在部分问题,即使在基础运算过程当中不会造成太大影响,但这仍然不能认为是一个很好计算器,同时,在其次,该计算器还没能很好实现连续计算功效,必需每次按下等号按钮计算出结果后才能用产生结果接着进行下一次计算,改善方法是在运算符上同时注册Result类,让运算符同时拥有计算结果功效.
【2】因为简易计算器属于一个题,所以相关计算器全部全部是由自己完成.
4. 程序代码
【1】程序代码
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class Calculator extends WindowAdapter implements ActionListener {
JFrame frame;
JTextField show;
JButton bc, c, ce, ab, jia, jian, cheng, chu, equ, point, sqrt, ds, bfh,
zf;
// 按钮 退格,清空,复位,相关,加,减,乘,除,等号,小数点,2次方根,倒数,百分号,正负号
JButton b[] = new JButton[10]; // 按钮数组,数字键0~9
double sum = 0, getValue;
int i = 0, j = 0, p = 0, l, action;
JDialog about;
final int slength = 30; // 设置结果显示有效长度
public void disp() {
frame = new JFrame();
frame.setTitle("xx个人计算器");
frame.setSize(360, 230);
frame.setLocation(380, 260);
frame.setBackground(Color.LIGHT_GRAY);
frame.setLayout(new FlowLayout(FlowLayout.CENTER));
frame.setResizable(false);
//计算器disTop模块,包含数字显示文本框、back,ce,c,about按钮
show = new JTextField(31);
show.setText("0");
show.setHorizontalAlignment(SwingConstants.RIGHT);
show.setEditable(false);
frame.add(show);
Panel dispTop = new Panel();
frame.add(dispTop);
dispTop.setLayout(new GridLayout(1, 4, 3, 3));
bc = new JButton(" Back ");
bc.setForeground(Color.BLUE);
dispTop.add(bc);
ce = new JButton(" CE ");
ce.setForeground(Color.BLUE);
dispTop.add(ce);
c = new JButton(" C ");
c.setForeground(Color.BLUE);
dispTop.add(c);
//广告按钮,显示计算器制作者
ab = new JButton(" About ");
ab.setForeground(Color.BLUE);
dispTop.add(ab);
about = new JDialog(frame, "相关计算器", true);
Label ct = new Label("本 计 算 器 由 xx 制 作", 1);
ct.setForeground(Color.RED);
about.add(ct, "Center");
about.setSize(200, 100);
about.setLocation(500, 300);
//关键按钮显示面板包含disLeft和disRight
Panel dispMain = new Panel();
frame.add(dispMain);
dispMain.setLayout(new GridLayout(1, 2, 10, 10));
//disLeft面板,包含0-9、+/-、。这十二个按钮
Panel dispLeft = new Panel();
dispMain.add(dispLeft);
dispLeft.setLayout(new GridLayout(4, 3, 3, 3));
Panel dispRight = new Panel();
//disRight面板,包含+、-、*、/、sqrt、%、1/x、=这个人多个按钮
dispMain.add(dispRight);
dispRight.setLayout(new GridLayout(4, 2, 3, 3));
//新建0-9这是个按钮,并将其添加到disLeft中
for (l = 9; l >= 0; l--) {
b[l] = new JButton(String.valueOf(l));
dispLeft.add(b[l]);
b[l].addActionListener(this);
}
//新建其它按钮,并分别将其添加到各自面板中
jia = new JButton("+");
jia.setForeground(Color.RED);
jian = new JButton("-");
jian.setForeground(Color.RED);
cheng = new JButton("*");
cheng.setForeground(Color.RED);
chu = new JButton("/");
chu.setForeground(Color.RED);
equ = new JButton("=");
equ.setForeground(Color.RED);
point = new JButton(".");
zf = new JButton(" +/- ");
sqrt = new JButton("sqrt");
bfh = new JButton("%");
ds = new JButton("1/x");
dispRight.add(chu);
dispRight.add(sqrt);
dispRight.add(cheng);
dispRight.add(bfh);
dispRight.add(jian);
dispRight.add(ds);
dispRight.add(jia);
dispRight.add(equ);
dispLeft.add(zf);
dispLeft.add(point);
//为各个按钮绑定 监听器
about.addWindowListener(this);
bc.addActionListener(this);
ce.addActionListener(this);
c.addActionListener(this);
ab.addActionListener(this);
jia.addActionListener(this);
jian.addActionListener(this);
cheng.addActionListener(this);
chu.addActionListener(this);
equ.addActionListener(this);
point.addActionListener(this);
zf.addActionListener(this);
sqrt.addActionListener(this);
bfh.addActionListener(this);
ds.addActionListener(this);
frame.addWindowListener(this);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
getValue = Double.valueOf(show.getText()).doubleValue();
if (e.getSource() == jia) { // 加运算,可连加
if (j == 0) {
sum = getValue;
} else if (action == 1) {
sum += getValue;
}
setSum();
j++;
p = 0;
i = 0;
action = 1;
} else if (e.getSource() == jian) { // 减运算,可连减
if (j == 0) {
sum = getValue;
} else if (action == 2) {
sum -= getValue;
}
setSum();
j++;
p = 0;
i = 0;
action = 2;
} else if (e.getSource() == cheng) { // 乘运算,可连乘
if (j == 0) {
sum = getValue;
} else if (action == 3) {
sum *= getValue;
}
setSum();
j++;
p = 0;
i = 0;
action = 3;
} else if (e.getSource() == chu) { // 除运算,可连除
if (j == 0)
sum = getValue;
else if (action == 4) {
sum /= getValue;
}
setSum();
j++;
p = 0;
i = 0;
action = 4;
} else if (e.getSource() == equ) { // 等号,运算最终一个操作数
switch (action) {
case 1:
show.setText(String.valueOf(sum += getValue));
break;
case 2:
show.setText(String.valueOf(sum -= getValue));
break;
case 3:
show.setText(String.valueOf(sum *= getValue));
break;
case 4:
show.setText(String.valueOf(sum /= getValue));
break;
}
setSum();
i = 0;
j = 0;
action = 0;
} else if (e.getSource() == point) { // 小数点,只能按一个小数点
if (p == 0)
show.setText(show.getText() + e.getActionCommand());
p = 1;
} else if (e.getSource() == c || e.getSource() == ce) { // 清空和复位
i = 0;
j = 0;
p = 0;
sum = 0;
action = 0;
show.setText("0");
} else if (e.getSource() == bc) { // 退格
String s = show.getText();
if (s.length() > 1) {
show.setText("");
for (l = 0; l < s.length() - 1; l++) { // 按一下,删除尾部一位
char a = s.charAt(l);
show.setText(show.getText() + a);
}
} else
show.setText("0");
} else if (e.getSource() == ab) { // 相关
about.setVisible(true);
} else if (e.getSource() == sqrt) { // 开2次方根
sum = Math.sqrt(getValue);
setSum();
i = 0;
} else if (e.getSource() == ds) { // 求倒数
sum = 1 / getValue;
setSum();
i = 0;
} else if (e.getSource() == bfh) { // 百分号
sum = getValue / 100;
setSum();
i = 0;
} else if (e.getSource() == zf) { // 正负号切换,正号不显示
String s = show.getText();
char a = s.charAt(0);
if (a == '-') {
show.setText("");
for (l = 1; l < s.length(); l++) { // 去掉负号
show.setText(show.getText() + s.charAt(l));
}
} else if (getValue != 0) { // 加上负号
show.setText("-" + s);
}
}
for (l = 0; l < 10; l++) { // 0~9数字键触发
if (e.getSource() == b[l]) {
if (i == 0)
show.setText("");
String s = show.getText();
if (s.length() < slength)
show.setText(show.getText() + e.getActionCommand());
if (e.getSource() == b[0] && getValue == 0 && p == 0)
show.setText("0");
if (e.getSource() != b[0] && getValue == 0 && p == 0)
show.setText(e.getActionCommand());
i++;// i用来标识数字键触发状态
}
}
}
public void setSum() { // 把计算结果显示出来
show.setText(String.valueOf(sum));
String s = show.getText();
char a = s.charAt((s.length() - 1));
char b = s.charAt((s.length() - 2));
if (a == '0' && b == '.') { // 假如是整数,则去掉后面小数点和0
show.setText(String.valueOf(Math.round(sum)));
}
}
public void windowClosing(WindowEvent e) {
if (e.getSource() == about)
about.setVisible(false);
else if (e.getSource() == frame)
System.exit(0);
}
public static void main(String args[]) {
new Calculator().disp();
}
}
【2】程序实施结果
因为计算器结果是依据输入值而确定,当输出不一样值会全部得不一样结果,故程序实施结果将在调制中进行从而得出。
【3】结果讨论
5.调试情况
1)按钮测试:只要测试程序界面显示是否正常,按钮是否能够正确使用
程序整个界面图所表示:
经过测试,按钮、显示框显示正常,无错位无延迟。
测试about弹出对话框,显示正常,结果图所表示:
2)运算测试:关键测试计算器运算功效
测试用例:
1加法测试:8222+1500.2,结果为9722.2。结果正确,结果图所表示:
2减法测试:0.58-2.891,结果为-2.311。结果正确,结果图所表示:
3乘法测试:458*(-156.22),结果为-71548.46。结果正确,结果图所表示:
0*-7.234,结果为0 。结果正确,结果图所表示:
4 除法测试:7.2/0,结果为infinity。结果正确,结果图所表示:
0/88,结果为0。结果正确,结果图所表示:
100/15.3,结果为6.54。结果正确,结果图所表示:
6.结论
此次课程设计到此算是告一段落了,经过这次学习,我学到了很多东西,在此基础上愈加巩固了自己对java认识和了解。
在做本项目是时候,会碰到很多小问题,比如说,在整个运算过程中要怎样确保输入计算数据哪个是第一个计算数据,哪个是第二个计算数据,同时也要区分运算符,因为该计算器程序应用全部是利用字符串来完成计算,而且不能反复输出运算符,更不能将运算符错误存放在了第一个计算数据数值中,也得考虑到万一不小心反复点击了运算符按钮会不会造成第一个计算数据重新赋值等等问题,最终想到利用布尔类型来很好控制运算符应用!
因为时间仓促,该程序还有些不足之处,1)该程序未添加异常处理事件,在异常发生时候,不能够对程序进行处理,不过当该程序发生异常如溢出是,会爱文本显示框内显示infinity字符,提醒不可操作或操作错误。2)人机交互界面还是稍有欠缺,相信以后或有所改善。
此次课程设计让我更了解熟悉了Java中图形用户界面和它编程方法。在完成课题过程中也不停充实了自己,学习到了很多以前没有学习到知识,收获很大。最大收获就是对大学学习总结和培养了处理困难信心和能力,使我对所学知识能够融会贯通,又不停丰富了新知识。Java计算器设计使得我们对所学专业课有了更为深刻认识,使得悉识得到了巩固和提升。
在接下来时间里,我认为我要愈加努力往深一层次方面看齐,了解更多相关java知识,对java有更深一步了解,我会一步一步走下去!
参考文件
[1] 丁振凡. Java语言实用教程(第2版)[M]. 北京邮电大学出版社. .1
[2] 丁振凡. Java语言实用教程试验指导(第2版)[M]. 北京邮电大学出版社. .1
[3] 杨树林等. Java语言最新实用案例教程(第2版)[M]. 清华大学出版社. .7
[4] 张帆等. Java范例开发大全. 清华大学出版社. .8
展开阅读全文