java实现简易计算器 有报告和源码.docx
- 文档编号:30077573
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:45
- 大小:293.88KB
java实现简易计算器 有报告和源码.docx
《java实现简易计算器 有报告和源码.docx》由会员分享,可在线阅读,更多相关《java实现简易计算器 有报告和源码.docx(45页珍藏版)》请在冰豆网上搜索。
java实现简易计算器有报告和源码
Java课程设计报告
题目模拟计算器______________
学生姓名_____________________
指导教师______________________
学院_信息科学与工程学院_______
专业班级________________
完成时间_2015-1-17______________
3.2.3复位、回退、时间显示事件12
3.2.4集合及其计算操作事件13
3.2.5三角函数计算事件14
第一章需求分析
1.1任务要求
设计实现一个模拟计算器,能进行整数的加、减、乘、除等四则运算。
1.2实现的功能
(1)能进行简单的实数加、减、乘、除运算
(2)能进行度数与弧度数的转换,可以进行三角函数sin,cos,tan的计算
(3)能实现幂操作,所以乘方,开方,立方,求倒数等都能实现
(4)能够求一定范围内的数阶乘
(5)能显示数学上常用常数π和e,
(6)能实现数据存储即集合操作,可以输入数据,求和,求平均值,方差
(7)也能删除集合中的数据
(8)能显示时间
(9)能复位清0和回退
(10)有使用帮助菜单和作者信息
(11)有异常报错处理
第二章总体设计
2.1总体结构
本程序主要涉及的类有CaculatorFrame,窗口框架类,可以添加面板及菜单栏;CaculatorPanel,面板类,往上面添加显示框,按钮等组件,确定组件的布局;各种监听事件类,用来实现计算功能;help和information类,使用帮助类和作者信息类。
2.2模块关系
注册菜单事件
添加
添加
按钮注册事件
2.3按钮功能说明
‘C键’:
复位清0.
‘D键’:
回退操作,输入错误时,可回退重输.
‘time键’:
显示时间.
‘m键’:
集合存储数据,按下m键,把当前数据存入集合
‘del键’:
删除集合中的最后一个元素.
‘sum键’:
集合中的元素求和.
‘ave键’:
集合中的元素求平均值.
‘var键’:
集合中的元素求方差.
‘n!
键’:
求阶乘,不能为小数或负数,结果也不能超出整形范围.
‘pow键’:
求幂操作.
‘帮助菜单’:
可以看使用帮助和作者信息.
第三章详细设计
3.1界面设计
3.1.1窗口设计
窗体类中的属性有一个菜单类,两个菜单项,一种字体。
窗体的构造方法中设置了窗体的一些常用属性,添加了菜单栏,给菜单注册了事件,用于打开帮助文档;一个面板,还注册了窗口退出事件,若无此项,点击窗体右上角退出项,虽然窗体消失,但程序并未结束,还会占用内存
//窗体类
classCaculatorFrameextendsJFrameimplementsActionListener{
privateJMenuBarmyBar;
privateJMenumenu;
privateJMenuItemmenuItem1,menuItem2;
privateFontfont;
CaculatorFrame(){
setTitle("计算器");
setResizable(false);
setSize(200,300);
font=newFont("宋体",Font.PLAIN,12);
myBar=newJMenuBar();
menu=newJMenu("帮助");
menu.setFont(font);
menuItem1=newJMenuItem("使用说明");
menuItem2=newJMenuItem("作者信息");
menuItem1.addActionListener(this);
menuItem2.addActionListener(this);
menuItem1.setFont(font);
menuItem2.setFont(font);
menu.add(menuItem1);
menu.add(menuItem2);
myBar.add(menu);
this.setJMenuBar(myBar);
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();//获取当前屏幕大小
setLocation(screenSize.width/3,screenSize.height/3);//设置窗体位置
CaculatorPanelpanel=newCaculatorPanel();
this.add(panel);
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
}
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand().equals("使用说明"))
newhelp(this);
elseif(e.getActionCommand().equals("作者信息"))
newinformation(this);
}
}
help类和information类都是继承JDialog,对话窗口,点击菜单项,则弹出来。
//帮助菜单
classhelpextendsJDialog{
JTextAreahelps;
help(JFramejframe){
this.setTitle("使用说明");
this.setSize(300,220);
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();//获取当前屏幕大小
setLocation(screenSize.width/3,screenSize.height/3);//设置窗体位置
helps=newJTextArea();
helps.setEditable(false);
helps.append("1.C键用于复位清0\n");
helps.append("2.D键用于删除一位输错的数字\n");
helps.append("3.time键用于显示当前日期,时间\n");
helps.append("4.m键用于存储数据,存放在一个集合当中\n");
helps.append("5.sum键用于对存储的数据进行求和操作\n");
helps.append("6.ave键用于对存储的数据进行求平均值\n");
helps.append("7.var键用于对存储的数据进行求方差\n");
helps.append("8.n!
键求阶乘,负数和小数不能求\n");
helps.append("9.pow键求幂操作\n");
helps.append("10.e键为自然数常数\n");
this.getContentPane().add(helps,BorderLayout.CENTER);
this.show();
}
}
//作者信息菜单
classinformationextendsJDialog{
JTextAreahelps;
information(JFramejframe){
this.setTitle("作者信息");
this.setSize(300,220);
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();//获取当前屏幕大小
setLocation(screenSize.width/3,screenSize.height/3);//设置窗体位置
helps=newJTextArea();
helps.setBackground(Color.cyan);
helps.setEditable(false);
helps.append("计科1202\n");
helps.append("宁翔\n");
helps.append("2015-1-14\n");
this.getContentPane().add(helps,BorderLayout.CENTER);
this.show();
}
}
3.1.2面板设计
有答案显示框与按钮面板:
privateJTextFieldshowAnswer;
privateJPanelbuttonPanel;
两者用边界布局:
add(showAnswer,BorderLayout.NORTH);
add(buttonPanel,BorderLayout.CENTER);
添加按钮的方法:
传递按钮上面的文本,注册的监听事件,以及设置按钮的颜色
privatevoidaddButton(StringbuttonContext,ActionListeneractionListener,Colorcolor){
JButtonbutton=newJButton(buttonContext);
button.setBorder(newRoundBorder());
button.setForeground(color);
button.addActionListener(actionListener);
buttonPanel.add(button);
}
监听事件的实例化:
CaculatorAction1ca1=newCaculatorAction1();
CaculatorAction2ca2=newCaculatorAction2();
CaculatorAction3ca3=newCaculatorAction3();
CaculatorAction4ca4=newCaculatorAction4();
CaculatorAction5ca5=newCaculatorAction5();
按钮在面板上呈网格布局,并添加多个按钮:
buttonPanel.setLayout(newGridLayout(8,4,10,10));//按钮布局
addButton("C",ca3,Color.blue);
addButton("D",ca3,Color.blue);
addButton("time",ca3,Color.blue);
addButton("del",ca4,Color.green);
addButton("m",ca4,Color.green);
addButton("sum",ca4,Color.green);
addButton("ave",ca4,Color.green);
addButton("var",ca4,Color.green);
addButton("sin",ca5,Color.cyan);
addButton("cos",ca5,Color.cyan);
addButton("tan",ca5,Color.cyan);
addButton("°",ca5,Color.cyan);
addButton("π",ca1,Color.black);
addButton("e",ca1,Color.black);
addButton("n!
",ca2,Color.red);
addButton("pow",ca2,Color.red);
addButton("7",ca1,Color.black);
addButton("8",ca1,Color.black);
addButton("9",ca1,Color.black);
addButton("/",ca2,Color.red);
addButton("4",ca1,Color.black);
addButton("5",ca1,Color.black);
addButton("6",ca1,Color.black);
addButton("*",ca2,Color.red);
addButton("1",ca1,Color.black);
addButton("2",ca1,Color.black);
addButton("3",ca1,Color.black);
addButton("-",ca2,Color.red);
addButton("0",ca1,Color.black);
addButton(".",ca1,Color.black);
addButton("=",ca2,Color.red);
addButton("+",ca2,Color.red);
3.2计算功能设计
我把事件监听类作为面板类的成员内部类,这样做的好处是内部类可以使用外部内的函数与变量,不用再传递参数了,是代码简洁很多,所以有些共用的方法和属性。
属性:
privatedoubleresult;//计算结果
privateStringcommand;//运算符
privatebooleanstart;//标志位,用来判断是否可以继续输入
privateDecimalFormatdf;//输出格式
privateArrayList
方法:
//初始化计算信息
privatevoidinit(){
result=0;
command="=";
start=true;
list=newArrayList
}
//数值格式转换,若为整数,则输出整数,若结果大于4位小数,则保留4位
publicStringtransform(doubleresult){
Stringstr=null;
if(result-(int)result==0)//判断是否位整数
str=Integer.toString((int)result);
else{
str=Double.toString(result);
if(str.substring(str.indexOf('.')+1).length()>=4)
str=df.format(result);//小数大于4位,则取4位
}
returnstr;
}
//获得按钮字符串,这是ActionListener自带的方法
getActionCommand();
3.2.1数据显示事件
首先获得按钮上的字符串,判断当前Start值,若为false,则继续显示输入数据,若为true,则清空后,再显示;若是小数点按钮,判断一下当前数据是否已包含小数点,若有,则不重复输出;若为π或e,则输出相应值;若为数字按钮,则直接显示。
//监听事件1,显示数字
classCaculatorAction1implementsActionListener{
publicvoidactionPerformed(ActionEvente){
Stringinput=e.getActionCommand();
if(start==true){
showAnswer.setText("");
start=false;
}//用start判断,若为true,则先把答案框清空,再显示数据
if(input.equals(".")){
if(showAnswer.getText().contains("."))
input="";
}//若数据中已有小数点,则不再显示
if(input.equals("π")){
showAnswer.setText("");
input=Double.toString(Math.PI);
}//输出π
if(input.equals("e")){
showAnswer.setText("");
input=Double.toString(Math.E);
}//输出e
showAnswer.setText(showAnswer.getText()+input);
}
}
3.2.2加减乘除等计算事件
首先判断是减号还是负号问题,若start为true,又前面刚输入一个不是等号的运算符,说明这里应该是负号。
if(start){
if(input.equals("-")&&command!
="="){
showAnswer.setText("-");
start=false;
}//判断是减号,还是负号,若start为true,又前面刚输入一个不是等号的运算符,说明这里应该是负号
else
command=input;
}
若是’n!
’,则计算其阶乘,并做到错误提示
elseif(input.equals("n!
")){
result=Double.parseDouble(showAnswer.getText());
if(result-(int)result==0&&result>=0){
intj=1;
for(inti=(int)result;i>0;i--)
j=j*i;
result=j;
showAnswer.setText(transform(result));
}
else
showAnswer.setText("不能求阶乘");
start=true;
}//计算阶乘值,小数或负数,会有出错提示
若是加减乘除或pow,则做相应计算,输出结果。
else{
caculate(Double.parseDouble(showAnswer.getText()));
command=input;
start=true;
}
//计算方法
publicvoidcaculate(doublex){
if(command.equals("+"))
result+=x;
elseif(command.equals("-"))
result-=x;
elseif(command.equals("*"))
result*=x;
elseif(command.equals("/"))
result/=x;
elseif(command.equals("pow"))
result=Math.pow(result,x);
elseif(command.equals("="))
result=x;
showAnswer.setText(transform(result));
}
}
3.2.3复位、回退、时间显示事件
//监听事件3,清0,删除,显示时间
classCaculatorAction3implementsActionListener{
publicvoidactionPerformed(ActionEvente){
Stringinput=e.getActionCommand();
if(input.equals("time")){
DateFormatdf1=newSimpleDateFormat("yyyy-MM-ddHH:
mm");//时间显示格式为‘年-月-日时-分’
Datedate=newDate();
showAnswer.setText(df1.format(date));
init();//显示完后,复位
}
elseif(input.equals("C")){
showAnswer.setText("0.");
init();//清0复位
}
elseif(input.equals("D")){
intlen=showAnswer.getText().length()-1;
if(len>=0)
showAnswer.setText(showAnswer.getText().substring(0,len));
}//回退操作,若当前没有数据,则不能回退
}
}
3.2.4集合及其计算操作事件
//监听事件4:
求和,平均数,方差事件
classCaculatorAction4implementsActionListener{
publicvoidactionPerformed(ActionEvente){
Stringinput=e.getActionCommand();
if(input.equals("m")){
list.add(showAnswer.getText());
showAnswer.setText(list.toString());
start=true;
}//将输入数据存入集合
if(input.equals("sum")){
showAnswer.setText(transform(sum(list)));
}//求和
if(input.equals("ave")){
showAnswer.setText(transform(sum(list)/list.size()));
}//求平均
if(input.equals("var")){
showAnswer.setText(transform(var(list)));
}//求方差
if(input.equals("del")){
if(list.size()>=1)
list.remove(l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java实现简易计算器 有报告和源码 java 实现 简易 计算器 报告 源码