JAVA实现计算器课程设计解读
更新时间:2023-05-26 09:06:10 阅读量: 实用文档 文档下载
- java课程设计计算器推荐度:
- 相关推荐
JAVA课程设计
计
算器
设计计算机科学系
计算器的设计
目录
第一章绪论 (2)
1.1开发环境 (2)
1.2基本功能介绍 (2)
第二章系统设计 (3)
2.1系统流程图 (3)
2.2系统功能框图 (3)
2.3需求分析 (4)
第三章软件设计 (5)
3.1界面设计 (5)
3.2代码设计 (5)
第四章测试分析 (10)
3.1 程序运行情况: (10)
3.2程序异常处理: (10)
3.3测试用例 (11)
3.3.1 加法测试 (11)
3.3.2减法测试 (11)
3.3.3乘法测试 (12)
3.3.4除法测试 (13)
第五章结束语 (14)
第六章参考文献 (14)
计算器的设计
第一章绪论
1.1开发环境
本系统是利用Java 语言在NetBeans IDE6.5 环境下开发的,Java 语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
为了进一步巩固课堂上所学到的知识,深刻把握Java 语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java 程序设计课程设计。
通过此次课程设计,巩固所学Java 语言基本知识,增进Java 语言编辑基本功,掌握JDK 、Editplus 、Eclipse 、JCreator 等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java 语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
1.2 基本功能介绍
本系统实现了一个简单而实用的计算器,通过这个计算器我们可以进行一些基本的运算操作,它可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制, 十进制,十六进制)之间的相互转换,八进制最多可以输入19 位数,十进制最多可以输入18 位数,十六进制最多可以输入14 位
数,backspace 表示退格,clear 表示初始化,在window 下直接运行(Jsp2003.bat )即可,界面为灰白对称。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
T
/ \ 初始化数据
?
doubl e result - 0;几存1诸结果匸
boclean newnum^irue; //是否新数’
,st rirys la stcp^^;/府储援作符*J
:丈本眶显示新散:t活
etlf 熾字*
new num =御脣
哀本框接着显示"
txt- s etTe)tt(twt.getTeKt(卄
“数字">
2.2系统功能框图
计算器的设计
第二章系统设计
2.1系统流程图
慢下敌宇按钮? I__
把当前文奉框的内容转再double后侍给«lc 丹法
ca lic( Double, parse double (tJ(t-
£etText(})>-
皿坷1=嗨作符u
■■e'.',riu!r|
- :ruz
说明:在程序中构建类testZ ,在其中封装起界面、文本框、按钮、数字、运算符等等成员,再引入成员函数testZ ()进行计算器的模拟界面设计;其次设计出事件处理函数,如:运算事件、符号事件、等号事件等等;最后设计运算函数的响应事件。这样设计的好处在于使得程序的实现思维更清晰,易懂,可读性增强。反之则不然。
2.3 需求分析
首先分析这个说要完成的功能,它的主要任务是完成十六进制、十进制、八进制和二进制之间的相互转化,需要包含负数,但不用考虑小数。
其次,确定接口参数。根据功能可知,它传递给外部的就是一个转后的数据,而外部除了需要传递给转化前的数据以外,是否还需要其他参数呢?我们都知道,十进制的负数同样可以利用其他进制进行表示,例如二进制,转化方法是:求十进制数的绝对值对应的二进制数,最高位为1;然后对二进制逐位求反,最高位除外;接着最低一位加1,需要进位的话依次进位,最高位除外。如今的问题就摆在了我们面前,我们如何知道这个数的最高位是第几位呢,也许有人会说,那就用转化后的前面再加上一位,好,即使这样可以成立,那么-1 转化后就是11,3 转化后也为11,现在如果需要现在的把这个数二进制数再转化为十进制,那么我们如何知道原来的是正数还是负数呢,如果要转化为十六进制,八进制又当如何呢?经过以上的分析发现,还应该有另外一个参数——二进制时的宽度,只有这样才能知道谁是最高位,因此就称这个参数为位宽。
最后,设计类。根据第二步的分析,因为位宽对每一个方法都是一样,所以可能把它作为类的成员变量,而另外两个参数转化前的值和转化后的值就分别作为输入参数和返回值。而类对外的接口只有各个转化的方法,因此这几个方法设计为public 权限,而其它所有的辅助方法都为private 权限。位宽通过构造函数传递,外部不能直接访问和修改,设置也设置为private 权限。为了减少计算量,所有的转化都以二进制为中介。例如十六进制到十进制,是十六进制一二进制一十进制。
计算器的设计
第三章软件设计
3.1界面设计
^0 O 0
这个就是计算器界面,简洁易用,我们可以从中的数字按键和运算符按钮
进行相应的数学计算,总共由17个按钮(10个数字符+5个运算符号+1个
小数点+ 1个“ clear ”按钮),一个标签、再加一个文本框组成。
3.2代码设计
import java.awt.*;
import java.awt.eve nt.*;
import javax.swi ng.*;
public class Caculator
{
public static void main( Stri ng[] args)
{
JFrame frame = new JFrame("Caculator"); frame.setDefaultCloseOperatio
n(J Frame.EXIT_ON_CLOSE); frame.getC onten tPa ne().add( new
CaculatorPa nel()); frame.pack();
frame.setVisible(true);
}
}
class CaculatorPa nel exte nds JPa nel
{
private JLabel n amelabel,resultlabel;
private JTextField resultField;
private JPanel labelPanel,numberPanel,toolPanel;
private JButton s1,s2,s3,s4,s5,s6,s7, s8, s9,s0,
p1,p2,t1,t2,t3,t4,clear;
private boolean end,add,sub,mul,div;
private String str;
private double num1,num2;
public CaculatorPanel()
{
namelabel = new JLabel(" 计算器"); resultField = new
JTextField(10);
ButtonListener listener = new ButtonListener(); clear = new
JButton("clear");
clear.addActionListener(listener);
s1 = new JButton("1"); s1.addActionListener(listener); s2 = new JButton("2"); s2.addActionListener(listener); s3 = new JButton("3");
s3.addActionListener(listener); s4 = new JButton("4");
s4.addActionListener(listener); s5 = new JButton("5");
s5.addActionListener(listener); s6 = new JButton("6");
s6.addActionListener(listener); s7 = new JButton("7");
s7.addActionListener(listener); s8 = new JButton("8");
s8.addActionListener(listener); s9 = new JButton("9");
s9.addActionListener(listener); s0 = new JButton("0");
s0.addActionListener(listener); p1 = new JButton(".");
p1.addActionListener(listener); p2 = new JButton("=");
p2.addActionListener(listener); t1 = new JButton("+");
t1.addActionListener(listener); t2 = new JButton("-");
t2.addActionListener(listener); t3 = new JButton("*");
t3.addActionListener(listener); t4 = new JButton("/");
t4.addActionListener(listener);
labelPanel = new JPanel(); labelPanel.add(namelabel);
labelPanel.add(resultField); labelPanel.add(clear);
numberPanel = new JPanel(); numberPanel.setLayout(new GridLayout(4,3));
numberPanel.add(s1); numberPanel.add(s2); numberPanel.add(s3);
numberPanel.add(s4); numberPanel.add(s5);
numberPanel.add(s6);
numberPanel.add(s7);
numberPanel.add(s8);
numberPanel.add(s9);
numberPanel.add(s0); numberPanel.add(p1); numberPanel.add(p2);
toolPanel = new JPanel(); toolPanel.setLayout(new GridLayout(4,1));
toolPanel.add(t1);
toolPanel.add(t2);
toolPanel.add(t3);
toolPanel.add(t4);
setPreferredSize(new Dimension(500,200));
setBackground(Color.cyan); add(labelPanel);
add(numberPanel);
add(toolPanel);
}
public void num(int i){
String s = null;
s=String.valueOf(i);
if(end){
// 如果数字输入结束,则将文本框置零,重新输入
resultField.setText("0");
end=false;
}
if((resultField.getText()).equals("0")){
// 如果文本框的内容为零,则覆盖文本框的内容resultField.setText(s); }
else{
// 如果文本框的内容不为零,则在内容后面添加数字str =
resultField.getText() + s;
resultField.setText(str);
}
}
private class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e)
{ // 数字事件
if(e.getSource()==clear)
resultField.setText("0");
else if(e.getSource()==s1) num(1);
else if(e.getSource()==s2) num(2);
else if(e.getSource()==s3) num(3);
else if(e.getSource()==s4) num(4);
else if(e.getSource()==s5) num(5);
else if(e.getSource()==s6) num(6);
else if(e.getSource()==s7) num(7);
else if(e.getSource()==s8) num(8);
else if(e.getSource()==s9) num(9);
else if(e.getSource()==s0) num(0);
// 符号事件
else if(e.getSource()==t1) sign(1);
else if(e.getSource()==t2)
sign(2);
else if(e.getSource()==t3)
sign(3);
else if(e.getSource()==t4)
sign(4);
// 等号
else if(e.getSource()==p1){
str=resultField.getText();
if(str.indexOf(".")<=1){
str+=".";
resultField.setText(str);
}
}
else if(e.getSource()==p2){
num2=Double.parseDouble(resultField.getText());
if(add){
num1=num1 + num2;} else if(sub){ num1=num1 - num2;} else
if(mul){ num1=num1 * num2;} else if(div){ num1=num1 / num2;}
resultField.setText(String.valueOf(num1)); end=true;
}
} public void sign(int s){ if(s==1){ add=true; sub=false; mul=false;
div=false;
}
else if(s==2){ add=false; sub=true; mul=false; div=false;
}
else if(s==3){ add=false; sub=false; mul=true; div=false;
}
else if(s==4){ add=false; sub=false; mul=false; div=true;
} num1=Double.parseDouble(resultField.getText()); end=true;
}
}
}
第四章测试分析
4.1程序运行情况:
程序正常的响应按钮事件,输入的数值长度受变量length 的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的 E ,当结果太大的时候,有可能超出可能表示的最大值, (结果溢出) ,这个时候就要对结果
进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于某一个值就抛出一个This_number_too_big 类型的类,再使用try-catch ,捕捉输出结果的方法抛出的异常对象。然后进行,重制归零的处理。
4.2程序异常处理:
当结果超出Double.MAX_VALUE 时,将抛出一个This_number_too_big 类的异常对象,这个是我自定义的一个异常类它继承自Exception 类,然后使用try-catch 去捕捉这个异常,异常的处理如下:
try
{ js();}
catch(This_number_too_big e)
{
lab.setText("0"); number=0;
mark='n';
Refresh=false;
System.out.println("The number is too big");
} // 如果出现异常则初始化效果如同clear 键
正在阅读:
JAVA实现计算器课程设计解读05-26
2011年中国海洋灾害公报10-12
县2022年棚户区改造工作进展情况报告08-02
人民公社06-15
最高人民法院对房屋租赁合同的司法观点汇总01-03
单片机控制的水箱液位检测装置03-14
2019年4月信访局副局长述职报告范文03-25
高层建筑结构受力特点和结构概念设计08-31
2016年普通高等学校招生全国统一考试--英语(天津卷)08-15
四年级三位数乘二位数竖式计算06-08
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 计算器
- 解读
- 课程
- 实现
- 设计
- JAVA
- 外研室新标准英语(三年级起)1-8册单词表
- 中级无机化学(1-5章) (朱文祥 著) 高等教育出版社 课后答案 第4章有机金属化合物-习题答案
- 湖南省教育科学十一五规划重点课题
- 东莞市XX拉链有限公司TQP质量手册
- 提取有效信息方法与技巧
- 分管教学副校长及教研组长论坛
- 小升初模拟测试题数学卷
- 界面剂价格,最新全国界面剂规格型号价格大全
- 排球基本知识和比赛规则
- 专项1 高中数学计算基础
- 09年监理工程师考试合同管理体制习题三
- 销售人员日常活动表格(1)
- 1-4直放站原理与应用第四部分-广东移动培训教材_秦岩
- 《岳阳楼记》和《醉翁亭记》对比阅读7篇
- 代销收入会计与税收核算差异分析
- 石大海工大四课程设计桩基设计报告
- 论苏州园林景观的造型艺术
- 149首儿歌童谣大全
- Microchip推出15款全新8位PIC&174;单片机, 扩展USB产品组合
- 考研复试面试问题汇总