资源描述
湖南工业大学
课 程 设 计
资 料 袋
学院(系、部) 2012 ~ 2013 学年第 2 学期
课程名称 Java程序设计 指导教师 职称
学生姓名 专业班级 学号
题 目 Java计算器
成 绩 起止日期 2013年 06月24日~2013年 06月30日
目 录 清 单
序号
材 料 名 称
资料数量
备 注
1
课程设计任务书
1
2
课程设计说明书
1
3
源程序(电子文档)
1
4
5
6
湖南工业大学
课程设计任务书
2012 —2013学年第 2 学期
学院(系、部) 专业 班级
课程名称: Java程序设计
设计题目: Java计算器
完成期限:自 2013 年 06月 24日至 2013 年 06月 30日共 1 周
内
容
及
任
务
一、设计的任务及主要技术参数
1).设计的计算器可以完成加法、减法、乘法、除法的简单运算。
2).实现一些简单的扩展运算,如:将数据取正负号、倒数、退格、清零,开根号、、清空等功能。
3).添加小数点功能,用以实现浮点型数据的计算。
4).使用布局管理器设计一个计算器的界面,使用事件监听器处理数据的输入,并完成相关的计算。
二、设计任务
1) 系统分析(包括可行性分析、用户需求分析等)及功能分析;
2) 系统总体功能设计;
3)系统详细功能设计,采用了数据库的同学,给出数据库设计;
4) 程序设计及调试;
5) 设计说明书的书写。
三、设计工作量
可以完成一个采用java技术的简单计算器,每人至少要投入1周的时间来完成该系统的分析与设计,撰写出项目开发各个阶段需要的文档,每人独立完成自己的系统。
进
度
安
排
起止日期
工作内容
2013-06-24
选题,完成项目计划文档
2013-06-25
完成可行性分析文档、需求分析文档和完成设计文档
2013-06-26~2013-06-28
编码系统测试、客户提交文档
2013-06-29
完成课程设计说明书
2013-06-30
答辩,确定等级,交文档材料(含电子文档)、源程序
主
要
参
考
资
料
[1] Y.Daniel Liang著.万波译.Java语言程序设计(基础篇)(第6版)[M],北京:机械工业出版社,2009
[2] 韩万江,姜立新.软件项目管理案例教程(第2版) [M]. 北京: 机械工业出版社, 2010.
[3] 丁振凡. Java语言实用教程(第2版)[M]. 北京邮电大学出版社. 2008.1
[4] 丁振凡. Java语言实用教程实验指导(第2版)[M]. 北京邮电大学出版社. 2008.1
[5] 杨树林等. Java语言最新实用案例教程(第2版)[M]. 清华大学出版社. 2010.7
[6]朱福喜.《Java语言程序设计》(第二版).科学出版社
[7]陈国君等.《Java程序设计基础》(第二版).清华大学出版社
[8] Deitel.《Java大学基础教程》(第六版).电子工业出版社
[9] MaryCampione.《Java语言导学》(第四版).机械工业出版社
[10] Y.Daniel Liang.《Java语言程序设计基础篇》(第六版). 机械工业出版社
[11] Kathy Sierra.《Head First Java》(第二版).东南大学出版社
指导教师(签字): 年 月 日
系(教研室)主任(签字): 年 月 日
Java程序设计课程设计
设计说明书
Java计算器
起止日期: 2013 年 06月 24日 至 2013 年 06月 30日
学生姓名
班级
学号
成绩
指导教师(签字)
计算机与通信学院
2013年 6月30日
目 录
一.设计目的 --------------------------------------------------- 2
二.设计任务 --------------------------------------------------- 3
三.设计内容 --------------------------------------------------- 3
一)引言 --------------------------------------------------- 3
二)可行性研究 --------------------------------------------- 3
三)需求分析 ----------------------------------------------- 4
四)概要模型 ----------------------------------------------- 5
五)详细设计 ------------------------------------------------ 5
四、测试与评价 ------------------------------------------------- 9
五、结论 ------------------------------------------------------ 12
六、致谢 ------------------------------------------------------ 12附录 ---------------------------------------------------------- 13
Java计算器的设计与实现
摘要
本计算器是由java语言所编程设计的标准计算器,可以进行十进制下的四则运算(加、减、乘、除)、开平方、求倒数。通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
前言
近年来随着计算机和网络在社会领域的发展,java的应用正在不断地走向深入, Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
开发背景
人类已进入21世纪,科学技术突飞猛进,经济知识和信息产业初见端倪,特别是信息技术和网络技术的讯速发展和广泛应用,对社会的政治,经济,军事,文化等领域产生越来越深刻的影响,也正在改变人们的工作,生活学习,交流方式。信息的获取,处理,交流和应用能力,已经成为人们最重要的能力之一。 随着互联网的发展,现在互联网慢慢的进入大数据库时代,计算对于当今社会来说是不可或缺的,特别是大型的计算。因此我们必须要对计算机的计算作出一些突飞猛进的发展,才能够迎接接下来大数据库时代的挑战。对于我们大学生尤其是我们学计算机的人而言,更应该认清这一点,所以,我们现在要从基础做起,先做小型的计算器,积累经验,打好基础,为以后迎接更大的挑战做准备,所以做了这个简单的Java计算器。
一、 设计目的
本次设计是通过java编程技术来设计一个图形界面的计算器应用程序,完成简单的算术运算,该计算器可以实现加法、减法、乘法、除法的简单运算,也可以实现一些简单的扩展运算,开展这次课题设计的主要目的在于检测学生对java应用的熟练程度,发现问题并及时改正和提高,同时扩展学生对java知识的进一步了解和认识,强化学生的编程能力,为他们将来在新的旅途中能更好的发挥自身的才能!
二、 设计任务
1、任务
计一个图形界面的计算器应用程序,完成简单的算术运算。通过对计算器的编辑来检测和提升自己的java编程能力,并最终完成课程设计报告!
2、 要求
(1)设计的计算器可以完成加法、减法、乘法、除法、开平方的简单运算。
(2)实现一些简单的扩展运算,如:正负号、倒数、退格、清零等功能。
(3)添加小数点功能,用以实现浮点型数据的计算。
(4)使用布局管理器设计一个计算器的界面,使用事件监听器处理数据的输入,并完成相关的计算。
三、 设计内容
1、 引言
随着互联网的发展,大数据时代的来临和云计算的产生于发展,计算现在已成为一个很具研究性的方向。其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
现在我国的云计算还刚刚起步,这样的速度发展已经快要赶不上大数据时代的来临了。现在,我们很多的计算仍然只停留在简单的计算机计算,这样花费了很多的时间。在这个飞速发展的时代,这种简单的计算必然会被正在高速发展的云计算所取代。
根据现实状况,该计算器只要求进行简单的四则运算(加、减、乘、除)、求倒数、开平方的运算,以及实现正负号、退格、清零等简单的拓展运算。
2、 可行性分析
所谓可行性分析就是用最小的代价在尽可能短的时间内确定问题是否能够解决。这步工作的主要是要进行一次大大压缩简化了计算器的分析和设计的过程,也就是在较高层次上以比较抽象的方式进行计算器分析和设计的过程。可行性研究的最根本任务是对以后的行动方针提出建议,以避免时间、资源、人力和金钱的浪费,推荐一个较好的解决方案,并且为工程制定一个初步的计划。
(1)技术可行性:
该计算器具有简单四则运算(加、减、乘、除)、求倒数、开平方等功能,以及实现正负号、退格、清零等简单的拓展运算。
就目前的开发技术来说,该计算器需要的功能和目标完全能够达到:将默认布局管理器清零,然后自定义网格布局以及按钮的设置,调用系统的函数,在规定的时间内开发工作基本能够实现需求分析中所要求的功能。
这是一个简单的计算器,从投入的人力,财力与物理来讲是非常小的,只要一台电脑,这个计算器就可以用了。
该计算器设计清晰,很简洁明了,操作十分简单,完全能够进行一些简单的计算,能给我们的生活带来很大的方便,因此在操作方面具有可行性。
(2)社会上可行性分析
该项目为用户自行开发,在法律方面不会存在侵犯专利权、侵犯版权等问题,完全按照合同规定的责任履行。
(3)工具可行性
软件方面:信息时代对于软件的应用已不是人们的难题,人们在日常办公中用的计算机操作的系统等都属于软件部分。
硬件方面:计算机普及到今天,人们对于它的拥有已不少见,它的硬件设备完全能够满足人们的需求,而价格也能被人们所接受。
(4)结论
技术、经济、操作都有可行性,可以进行开发。
3、 需求分析
现在在我国广大的落后地区,计算方式还只是停留在纸上,甚至是算盘上,这样的机制已经不能适应时代的发展,因为它浪费了很多的时间,而且很容易出错,在信息时代,这种传统的计算方法必然被计算器所取代。
通过调查,很多人发现计算器比原来的笔纸计算和算盘计算要方便快速很多,而且可以很大程度的降低出错的概率,所以很多人非常喜欢并接受计算器。
(1)功能需求分析
计算器主要提供用户计算简单的算术运算,用户可以根据自己所需要进行的计算选择计算方式,通过点击按钮就可以实现,要想得到最后计算的结果只需点击“=”,就可以马上可以得出最后的运算结果。
本计算器有以下几个功能:
名称:Java计算器
功能:a、加减乘除四则运算
b、正负号、倒数、退格、清零等拓展功能
c、添加小数点功能,用以实现浮点型数据的计算
(2)性能需求分析
时间特性要求:在软件方面,响应时间有点慢,因为是用Eclipse做的,它占用内存比较大,更新处理时间比较快而且迅速。
(3)系统技术以及运行环境的需求分析
该计算器是用Java语言编写,运用网格布局实现用户对计算器的界面展示,通过按钮的控制数字和符号的改变用户只需要通过简单的操作,就可以了解本计算器的基本工作原理,用户只需要用鼠标点击按钮,就可以进行自己所需的计算,并可得出计算结果。
4、概要设计
(1)概念模型介绍:
Java计算器的流程:首先运行程序,打开计算器,然后用户才可自由的进行使用计算,然后将信息保存到字符串中。(程序流程如下图所示)
(2)系统功能结构设计
该计算器只有一个模块:只有一个简单的计算界面。根据需求分析阶段得到的功能需求,用户通过输入数据后,就可进行计算。
5、详细设计
该计算器是用Java语言编写,是基于普通用户的计算器,在该计算器中两大部分:一是主界面;而是构造监听器。
(1) 主界面:用户运行程序后进入该界面,还界面由一些按钮和一个显示屏组成,通过点击各个按钮即可实现相应的功能。包括四则运算、拓展运算等。
(主界面)
(2) 构造监听器:当用户点击按钮时,接听器会接收到相应的消息,做出相应的响应处理。构造监听器的代码如下:
class Bt implements ActionListener {
public void actionPerformed(ActionEvent e2) {
try {
if (e2.getSource() == hehe1){
lyj.setText("0");// 把显示屏清零
lyjstr.setLength(0);// 清空字符串缓冲区以准备接收新的输入运算数
}
else if (e2.getSource() == hehe2){
lyj.setText("0");// 把显示屏清零
lyjstr.setLength(0);
}
else if (e2.getSource() ==hehe23){// 单击"+/-"选择输入的运算数是正数还是负数
xlyj = Double.parseDouble(lyj.getText().trim());
lyj.setText("" + (-xlyj));
}
else if (e2.getSource() == hehe25){// 单击加号按钮获得xlyj的值和zlyj的值并清空y的值
xlyj = Double.parseDouble(lyj.getText().trim());
lyjstr.setLength(0);// 清空缓冲区以便接收新的另一个运算数
ylyj = 0d;
zlyj = 0;
}
else if (e2.getSource() ==hehe20){// 单击减号按钮获得xlyj的值和zlyj的值并清空y的值
xlyj = Double.parseDouble(lyj.getText().trim());
lyjstr.setLength(0);
ylyj = 0d;
zlyj = 1;
}
else if (e2.getSource() == hehe15){// 单击乘号按钮获得xlyj的值和zlyj的值并清空y的值
xlyj = Double.parseDouble(lyj.getText().trim());
lyjstr.setLength(0);
ylyj = 0d;
zlyj = 2;
}
else if (e2.getSource() == hehe10){// 单击除号按钮获得xlyj的值和zlyj的值并空ylyj的值
xlyj = Double.parseDouble(lyj.getText().trim());
lyjstr.setLength(0);
ylyj = 0d;
zlyj = 3;
}
else if (e2.getSource() == hehe26){// 单击等号按钮输出计算结果
lyjstr.setLength(0);
switch (zlyj) {
case 0:
lyj.setText("" + (xlyj + ylyj));
break;
case 1:
lyj.setText("" + (xlyj - ylyj));
break;
case 2:
lyj.setText("" + (xlyj * ylyj));
break;
case 3:
lyj.setText("" + (xlyj / ylyj));
break;
}
}
else if (e2.getSource() == hehe24){// 单击"."按钮输入小数
if (lyj.getText().trim().indexOf(".") != -1)// 判断字符串中是否已经包含了小数点
{
}
else{// 如果没数点有小
if (lyj.getText().trim().equals("0")){// 如果初时显示为0
lyjstr.setLength(0);
lyj.setText((lyjstr.append("0" + e2.getActionCommand()))
.toString());
}
else if (lyj.getText().trim().equals("")){// 如果初时显示为空则不做任何操作
} else {
lyj.setText(lyjstr.append(e2.getActionCommand())
.toString());
}
}
ylyj = 0d;
}
else if (e2.getSource() == hehe11){// 求平方根
xlyj = Double.parseDouble(lyj.getText().trim());
lyj.setText("数字格式异常");
if (xlyj < 0)
lyj.setText("负数没有平方根");
else
lyj.setText("" + Math.sqrt(xlyj));
lyjstr.setLength(0);
ylyj = 0d;
}
else if (e2.getSource() == hehe16){// 单击了"%"按钮
xlyj = Double.parseDouble(lyj.getText().trim());
lyj.setText("" + (0.01 * xlyj));
lyjstr.setLength(0);
ylyj = 0d;
}
else if (e2.getSource() == hehe21){// 单击了"1/X"按钮
xlyj = Double.parseDouble(lyj.getText().trim());
if (xlyj == 0) {
lyj.setText("除数不能为零");
}else{
lyj.setText("" + (1 / xlyj));
}
lyjstr.setLength(0);
ylyj = 0d;
}else if (e2.getSource() == hehe3){
lyjm = 0d;
lyjstr.setLength(0);
}else
if (e2.getSource() ==hehe5)
{
lyjm = Double.parseDouble(lyj.getText().trim());
lyj.setText("0");
lyjstr.setLength(0);
} else if (e2.getSource() ==hehe6)// “结果并加”是将显示的数字与已经存储的数据相加,要查看新的数字单击“清除记忆”
{
lyjm = lyjm + Double.parseDouble(lyj.getText().trim());
} else// 选择的是其他的按钮
{
if (e2.getSource() == hehe22)// 如果选择的是"0"这个数字键
{
if (lyj.getText().trim().equals("0"))// 如果显示屏显示的为零不做操作
{
} else {
lyj.setText(lyjstr.append(e2.getActionCommand())
.toString());
ylyj = Double.parseDouble(lyj.getText().trim());
}
} else if (e2.getSource() == hehe0)// 选择的是“退格”按钮
{
if (!lyj.getText().trim().equals("0"))// 如果显示屏显示的不是零
{
if (lyjstr.length() != 1) {
lyj.setText(lyjstr.delete(lyjstr.length() - 1,
lyjstr.length()).toString());// 可能抛出字符串越界异常
} else {
lyj.setText("0");
lyjstr.setLength(0);
}
}
ylyj = Double.parseDouble(lyj.getText().trim());
} else// 其他的数字键
{
lyj.setText(lyjstr.append(e2.getActionCommand())
.toString());
ylyj = Double.parseDouble(lyj.getText().trim());
}
}
} catch (NumberFormatException e) {
lyj.setText("数字格式异常");
e.printStackTrace();
} catch (StringIndexOutOfBoundsException e) {
lyj.setText("字符串索引越界");
}
}
}
四、 测试与评价
1、简单的运算:(以加法为例:123+456)
评价:计算的结果为579.0,为双精度型,计算的结果被设置在文本框的最右端,该计算器的一个特点是可直接在文本框中输入数据以及进行更改。
2、倒数的运算:(以123为例)
评价:输出的结果如图所示,倒数功能实现,计算时,不仅是结果,输入的数据同样可以先实现倒数功能后再进行相应的计算,没有影响!
3、退格的运算:(以123为例)
评价:输出的结果如图所示,本计算器退格键有一个特点是,就算是是计算后得出的结果也能实现退格,缺点是不能很好的处理小数点的问题,因为小数点也是字符串的一部分。
.4、正负号的运算:(以123为例)
评价:输出的结果如图所示,正负号添加能够很好的实现,但可以进行一些改进,比如在计算过程当中直接点击负号运算符输入负数进行计算!
5、平方根的运算:(以123为例)
评价:输出的结果如图所示,开平方能够正常的运行。但是可以设置保留几位有效数字,一般生活当中用不到这么多位小数。
6.总体分析:
该计算器基本运算没有问题,清零、正负号、求倒数、退格功能都能很好的实现,总体能完成一个计算器的基本功能,但仍有许多地方需要改进,比如小数点的实现所存在的一些问题,虽然在基本的运算过程当中不会造成太大影响,但这依然不能认为是一个很好的计算器,同时,在另一方面,该计算器还没能很好的实现连续计算的功能,必须每次按下等号按钮计算出结果后才能用产生的结果接着进行下一次的计算,改进的方法是在运算符上同时注册Result类,让运算符同时拥有计算结果的功能。
五、 结论
本次课程设计到此算是告一段落了,经过这次的学习,我学到了很多东西,在此基础上更加巩固了自己对java的认识与了解。
在做本项目是时候,会遇到很多小问题,比如说,在整个运算过程中要如何确保输入的计算数据哪个是第一个计算数据的,哪个是第二个计算数据的,同时也要区分运算符,因为该计算器程序应用的都是利用字符串来完成计算的,而且不能重复输出运算符,更不能将运算符错误的存储在了第一个计算数据的数值中,也得考虑到万一不小心重复点击了运算符按钮会不会造成第一个计算数据的重新赋值等等问题,最后想到利用布尔类型来很好的控制运算符的应用!
此次课程设计让我更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。在接下来的时间里,我觉得我要更加努力的往深一层次的方面看齐,了解更多有关java的知识,对java有更深一步的了解,我会一步一步的走下去!
六、 致谢
这次课程设计能够顺利的完成,要感谢老师的教导和同学的无私的帮助。首先是周浩老师,为我的设计改进提供了很多宝贵的意见,还有和同学一起讨论帮我解决了几个错误,老师上实验课时讲得详细并严格要求我们,为我们的课程设计起了促进作用。在此对老师和给予我帮助的同学表示最诚挚的感谢!
附录
源代码清单:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculotor extends Frame {
// 声明三个面板的布局
GridLayout lyjl1, lyj12, lyj13;
Panel haha0,haha1, haha2, haha3;
JTextField lyj;
Button hehe0, hehe1, hehe2, hehe3, hehe4, hehe5, hehe6, hehe7, hehe8, hehe9, hehe10, hehe11, hehe12, hehe13, hehe14,
hehe15, hehe16, hehe17, hehe18, hehe19, hehe20, hehe21, hehe22, hehe23, hehe24, hehe25, hehe26;
StringBuffer lyjstr;// 显示屏所显示的字符串
double xlyj, ylyj;// l和y都是运算数
int zlyj;// j表示单击了那一个运算符.0表示"+",1表示"-",2表示"*",3表示"/"
static double lyjm;// 记忆的数字
public Calculotor() {
super("计算器——李远吉");
lyjl1 = new GridLayout(1, 4, 10, 0);// 实例化三个面板的布局
lyj12 = new GridLayout(4, 1, 0, 15);
lyj13 = new GridLayout(4, 5, 10, 15);
lyj = new JTextField(27);// 显示屏
lyj.setHorizontalAlignment(JTextField.RIGHT);
lyj.setEnabled(false);
lyj.setText("0");
lyj.setFont(new Font("宋体", Font.BOLD, 20));
lyj.setBackground(Color.black);
// 实例化所有按钮、设置其前景色并注册监听器
hehe0 = new Button("退格");
hehe0.setForeground(Color.black);
hehe0.addActionListener(new Bt());
hehe1 = new Button("清除错误");
hehe1.setForeground(Color.black);
hehe1.addActionListener(new Bt());
hehe2 = new Button("全部清除");
hehe2.setForeground(Color.black);
hehe2.addActionListener(new Bt());
hehe3 = new Button("清除存储");
hehe3.setForeground(Color.black);
hehe3.addActionListener(new Bt());
hehe4 = new Button("清除记忆");
hehe4.setForeground(Color.black);
hehe4.addActionListener(new Bt());
hehe5 = new Button("开始记忆");
hehe5.setForeground(Color.black);
hehe5.addActionListener(new Bt());
hehe6 = new Button("结果并加");
hehe6.setForeground(Color.black);
hehe6.addActionListener(new Bt());
hehe7 = new Button("7");
hehe7.setForeground(Color.magenta);
hehe7.addActionListener(new Bt());
hehe8 = new Button("8");
hehe8.setForeground(Color.magenta);
hehe8.addActionListener(new Bt());
hehe9 = new Button("9");
hehe9.setForeground(Color.magenta);
hehe9.addActionListener(new Bt());
hehe10 = new Button("/");
hehe10.setForeground(Color.black);
hehe10.addActionListener(new Bt());
hehe11 = new Button("sqrt");
hehe11.setForeground(Color.black);
hehe11.addActionListener(new Bt());
hehe12 = new Button("4");
hehe12.setForeground(Color.magenta);
hehe12.addActionListener(new Bt());
hehe13 = new Button("5");
hehe13.setForeground(Color.magenta);
hehe13.addActionListener(new Bt());
hehe14 = new Button("6");
hehe14.setForeground(Color.magenta);
hehe14.addActionListener(new Bt());
hehe15 = new Button("*");
hehe15.setForeground(Color.black);
hehe15.addActionListener(new Bt());
hehe16 = new Button("%");
hehe16.setForeground(Color.black);
hehe16.addActionListener(new Bt());
hehe17 = new Button("1");
hehe17.setForeground(Color.magenta);
展开阅读全文