java计算器的设计实现分析课程设计报告论文.docx
《java计算器的设计实现分析课程设计报告论文.docx》由会员分享,可在线阅读,更多相关《java计算器的设计实现分析课程设计报告论文.docx(23页珍藏版)》请在冰豆网上搜索。
java计算器的设计实现分析课程设计报告论文
华北科技学院
课程设计说明书
班级:
基础部计算B091班
学号:
1:
成林
设计题目:
计算器的设计与实现
设计时间:
2011.12.26至2011.12.30
指导教师:
改平
评语:
_________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
____评阅教师:
_____
目 录
1引言
1.1课程设计选题
计算器的设计与实现
1.2课程设计的目的
使学生巩固和加深以Java语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。
1.3本选题的设计背景
在日常生活中经常需要用到计算器,比如科学计算、数字计算、会计业务甚至是日常生活中的一些运算,当运算比较复杂时没有计算器就会显得很麻烦。
为了解决日常生活中的困难,特意设计了这个计算器系统。
需求分析
2.1功能需求
在日常生活中人们总是难以避免的要进行一些运算,当运算比较复杂时没有计算器就会显得很麻烦。
为了解决日常生活中的困难,特意设计了这个计算器系统。
在该系统中不仅可以进行整数的加、减、乘、除等简单运算,也可以进行浮点数的加、减、乘、除等运算。
除此之外还可以进行三角函数、指数、对数、平方等运算。
人们应用它可以解决日常生活中的一些运算问题,比如做买卖时进行交易的过程中就可以利用该计算器进行数量、价格以及金额的统计计算。
学生也可以利用该计算器进行数学运算,解决简单的三角函数运算。
2.2系统的开发运行环境
本系统开发平台:
Java
本系统集成开发环境:
MyEclipse和UltraEdit
本系统运行环境:
windowsxp
总体设计
1.1系统体系结构设计
3.1.1设计思路
本应用程序继承自框架类(Frame),此程序使用Frame布局管理器GridLayout,在Container容器中将单行文本框放在窗体上方区域,将选项、进制转换、帮助等按钮添加到菜单条。
包含各种按钮的面板Jpanel采用n行m列的网格布局,然后将数字按钮和运算按钮以及控制按钮添加到面板中。
同时注册事件监听器
计算器总体结构如图1所示:
在其上添加
图1总体结构图
3.2系统功能模块及主要类设计
3.2.1系统功能描述
(1)基本运算,包括对整数和浮点数进行加、减、乘、除以及乘方、三角函数、指数等运算;
(2)进制运算,包括十进制和二进制数、十进制和八进制之间的转换;
(3)其他功能,包括对输入、输出结果的复制、粘贴、剪切和退格、清零等。
3.2.2系统流程图:
根据系统要求和和系统功能的划分可以得到如图2所示的流程图:
Yes
Yes
NO
Yes
NO
加减乘sin
NO
yes
图2程序流程图
3.2.3主要类设计
publicclassCalculatorextendsFrameimplementsActionListener,WindowListener{}//Calculator是初始化界面,整体布局及响应用户的各种按钮操作。
classWinCloseimplementsWindowListener
{
publicvoidwindowClosing(WindowEvente)
}//WinClose是设置计算器整个窗体的显示、退出、隐藏的操作。
详细设计与实现
4.1功能模块的划分
界面模块:
实现计算器的运算界面,该界面表示数据的按钮、表示浮点型的按钮运算符按钮和实现显示运算结果界面以及菜单选项界面。
监听器模块:
该模块为每一个按钮设置监听器,当鼠标点击按钮时通过监听器来判断该按钮代表的什么数据、实现什么运算功能、执行什么功能等。
动作响应模块:
该模块通过按钮事件,进行对应的处理功能.其主要是将运算数据以浮点型类型保存在存中,然后通过判断运算符类型对数据进行相应的运算,并将运算结果以String类型在结果文本区域中显示,其中包括菜单条里的进制转换和各选项菜单的动作响应。
主函数模块:
调用已经设计好的函数,来实现计算器的全部功能。
4.2功能模块的实现
4.1.1计算器界面模块
在界面设计中,应用Frame框架,Frame是独立于浏览器的可运行的窗口,所以应用Frame框架来设计计算器界面是比较合适的。
在Frame框架的容器分别设置菜单条JmenuBar、文本区JTextField、然后在其中设置了五个面板分别都采用GirdLayout布局完成数字键盘和运算符的设置。
其中菜单条中分别还有复制、粘贴、剪切退出,进制转换以及用法、关于的选项菜单,具体界面效果如图3所示:
图3计算器的界面效果
实现该界面的部分代码如下:
publicclassCalculatorextendsFrameimplementsActionListener,WindowListener
{privateContainercontainer;
privateGridBagLayoutlayout;
privateGridBagLayoutlayout;
privateGridBagConstraintsconstraints;
privateJTextFielddisplayField;//保存+,-,*,/,=命令0
………………………………//定义各种组件
JPanelpanel1=newJPanel();
panel1.setLayout(newGridLayout(1,5,4,4));//定义为GridLayout布局
this.add(panel1);
button_sqrt=newutton("sqrt");
button_plusminus=newutton("+/-");
panel1.add(button_sqrt);
………………………………//面板的定义和按钮添加
4.1.2监听器模块
通过继承ActionListener和WindonListener接口来实现事件监听。
当Buttoin或Item对象上用鼠标进行点击时,将发送一个ActionEvent事件。
这个事件ActionEvent事件会被使用addAtionListener()方法注册的所有ActionListener的actionPerformed()方法接收,首先为所有具有时间动作的组件用addAtionListener(this)进行监听,当被监听的组件发生事件时就进行反馈,同时进行动作事件处理。
该模块的部分代码如下:
button_plusminus.addActionListener(this);
button_exp.addActionListener(this);
button_CE.addActionListener(this);
………………………..//各按钮的监听器设置。
this.addWindowListener(newWinClose());//注册窗口监听器
this.setVisible(true);
dialog.add(label_dialog);
dialog.addWindowListener(this);//为对话框注册窗口事件监听器
JMenuItemm1_exit=newJMenuItem("复制");
m1_exit.addActionListener(this);//设置菜单按钮的监听器
4.1.3动作响应模块
该模块通过publicvoidactionPerformed(ActionEvente)函数来实现动作响应事件。
首先通过e.getSource()来获得当前发生动作,然后根据不同的按钮产生不同动作响应,在实现动作响应之前定义了lastmand、resul、start变量界面效果图如图4所示:
图4动作响应效果图
其中若鼠标点击的是数字按钮则e.getSource()获取数字在lastmand中存储if(e.getSource().equals(button_1)||e.getSource().equals(button_2)||…..
if(start)
displayField.setText("");//设置计算器初始为空
if(input.equals("+/-"))displayField.setText(displayField.getText()+"-")
if(!
input.equals("+/-"))当首先输入的符号是+/-时初始
if(input.equals("退格"))//退格键的实现方
if(str.length()>0)displayField.setText(str.substring(0,str.length()-1));
lseif(input.equals("C"))//清零键的实现方
displayField.setText("0");
elseif(e.getActionmand()=="复制")//各按钮的动作响应方式代码
displayField.copy();
……………………………
elseif(e.getActionmand()=="剪切")
elseif(e.getActionmand()=="二进制")//二进制的转换
if(displayField.getText()==null)若为空则弹出对话框
JOptionPane.showMessageDialog(this,"不能为空!
请输入要进行转换的字符","消息对话框",JOptionPane.WARNING_MESSAGE);
elseif(e.getActionmand()=="用法")//按下'帮助'菜单栏中用法的处理方法
label_dialog.setText("sqrt,exp,log等键是先输运算符再输数字,其他运算是先输入数字再输入运算符\n");
elseif(e.getActionmand()=="关于")//按下'关于'菜单栏中用法的处理方法
JOptionPane.showMessageDialog(label_dialog,"成林的计算器\n"+"JAVA课程设计"+"详情咨询mail:
498641348qq.\n","关于计算器",JOptionPane.INFORMATION_MESSAGE)
if(lastmand.equals("+"))//各运算符的具体运算方法
result+=x;
………………………………
publicvoidwindowClosing(WindowEvente)
if(e.getSource()==dialog)dialog.setVisible(false);//隐藏对话框
elseSystem.exit(0);
……………………………………
4.1.4动作响应模块
基于前面三块模板的功能,定义一个主函数来实现计算器的所有功能,同时定义一个windowClosing控制窗口关闭事件,其具体代码如下:
publicstaticvoidmain(Stringargs[])
Calculatorcalculator=newCalculator()
classWinCloseimplementsWindowListener
publicvoidwindowClosing(WindowEvente)
……………………………
4.3功能模块的测试
4.31整数、浮点数运算功能测试
分别在计算器中点击如下算式123+789;7.5+2.6运算结果如下:
图5整数运算
4.32指数、三角函数运算功能测试
分别在计算器中点击如下算式exp9;sin3.14运算结果如下:
图6指数、三角函数运算
4.33二进制、八进制转换运算功能测试
在计算器中键入数字8分别进行二进制和八进制的转换运算结果如下:
图7二进制、八进制转换运算
小结和展望
设计,给人以创作的冲动,但也要为这次冲动承担一定的痛苦,但事后发现,这一切都是值得的,本次的JAVA课程设计让我对JAVA的理论知识又有了更深一步的了解,温故而知新,开始设计之时完全没头绪,对与理论学习不够扎实的我深感“书到用时方恨少”只好再把书上介绍的相关知识重新阅读一遍,对知识进行了全面而系统的梳理,遇到难处首先是苦思冥想寻求方法,再向同学请教,终于熟练掌握了基本理论知识,而且领悟了诸多平时学习难以理解掌握的的较难的知识,学会了如何思考的方式,找到了设计的灵感。
这次课程设计使我感到收获不小,使我对JAVA的设计过程有了更深的了解,促进了对理论知识的消化与吸收,也巩固和完善了本门课程的知识体系结构。
设计过程中遇到了不少的麻烦,在调试过程中也出现一些平时学习过程中没有遇到过的错误,通过在课程设计中老师耐心指导以及查阅相关资料,努力思考,一一解决了遇到的问题,通过这些问题,我对课本知识的理解也加深了。
终上所述,课程设计诚然是一门专业课,给我们很多专业知识以及很多专也技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道理、给了我很多思想、给了我莫大的空间,大学教育当如此!
参考文献
[1]耿祥义,跃平.Java大学实用教程.:
电子工业,2008.
[2]国宁.Java程序设计实例教程.:
中国水利.2007
[3]王立丰.J2EE课程设计指导.:
大学.2008.
附录
源程序清单
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassCalculatorextendsFrameimplementsActionListener,WindowListener
{
privateContainercontainer;
privateGridBagLayoutlayout;
privateGridBagConstraintsconstraints;
privateJTextFielddisplayField;//计算结果显示区
privateStringlastmand;//保存+,-,*,/,=命令0
privatedoubleresult;//保存计算结果
privatebooleanstart;//判断是否为数字的开始
privateJMenuBarmenubar;
privateJMenuItemm_exit,m2_ejz,m2_bjz;
privateDialogdialog;
privateLabellabel_dialog;
privateuttonbutton_sqrt,button_plusminus,button_CE,button_cancel,button_1,button_2,
button_3,button_4,button_5,button_6,button_7,button_8,button_9,button_0,
button_plus,button_minus,button_multiply,button_divide,button_point,
button_equal,button_log,button_tan,button_cos,button_sin,button_exp;
publicCalculator()//构造方法设置布局、为按钮注册事件监听器
{
super("成林的计算器");
this.setLocation(240,200);
this.setSize(350,300);
this.setResizable(true);
this.setLayout(newGridLayout(7,1));
this.addmyMenu();//调用成员方法添加菜单
displayField=newJTextField(30);
this.add(displayField);
displayField.setEditable(true);
start=true;
result=0;
lastmand="=";
JPanelpanel0=newJPanel();
panel0.setLayout(newGridLayout(1,4,4,4));
JPanelpanel1=newJPanel();
panel1.setLayout(newGridLayout(1,5,4,4));
this.add(panel1);
button_sqrt=newutton("sqrt");
button_plusminus=newutton("+/-");
button_exp=newutton("exp");
button_CE=newutton("退格");
button_cancel=newutton("C");
JPanelpanel2=newJPanel();
panel2.setLayout(newGridLayout(1,5,4,4));
this.add(panel2);
button_7=newutton("7");
button_8=newutton("8");
button_9=newutton("9");
button_log=newutton("log");
button_divide=newutton("/");
JPanelpanel3=newJPanel();
panel3.setLayout(newGridLayout(1,5,4,4));
this.add(panel3);
button_4=newutton("4");
button_5=newutton("5");
button_6=newutton("6");
button_tan=newutton("tan");
button_multiply=newutton("*");
JPanelpanel4=newJPanel();
panel4.setLayout(newGridLayout(1,5,4,4));
this.add(panel4);
button_1=newutton("1");
button_2=newutton("2");
button_3=newutton("3");
button_cos=newutton("cos");
button_minus=newutton("-");
JPanelpanel5=newJPanel();
panel5.setLayout(newGridLayout(1,5,4,4));
this.add(panel5);
button_0=newutton("0");
button_point=newutton(".");
button_equal=newutton("=");
button_sin=newutton("sin");
button_plus=newutton("+");
panel1.add(button_sqrt);
panel1.add(button_plusminus);
panel1.add(button_exp);
panel1.add(button_CE);
panel1.add(button_cancel);
panel2.add(button_7);
panel2.add(button_8);
panel2.add(button_9);
panel2.add(button_log);
panel2.add(button_divide);
panel3.add(button_4);
panel3.add(button_5);
panel3.add(button_6);
panel3.add(button_tan);
panel3.add(button_multiply);
panel4.add(button_1);
panel4.add(button_2);
panel4.add(button_3);
panel4.add(button_cos);
panel4.add(button_minus);
panel5.add(button_0);
panel5.add(button_point);
panel5.add(button_equal);
panel5.add(button_sin);
panel5.add(button_plus);
button_sqrt.addActionListener(this);
button_plusminus.addActionListener(this);
button_exp.addActionListener(this);
button_CE.addActionListener(this);
button_cancel.addActionListener(this);
button_7.addActionListener(this);
button_8.addActionListener(this);
button_9.addActionListener(this);
button_log.addActionListener(this);
button_divide.addActionListener(this);
button_4.addActionListener(this);
button_5.addActionListener(this);
button_6.addActionListener(this);
button_tan.addActionListener(this);
button_multiply.addActionListener(this);
button_1.addActionListener(this);
button_2.addActionListener(this);