收藏 分享(赏)

java.计算器的设计与实现课程设计论文.doc

上传人:HR专家 文档编号:11567215 上传时间:2020-06-28 格式:DOC 页数:24 大小:263.50KB
下载 相关 举报
java.计算器的设计与实现课程设计论文.doc_第1页
第1页 / 共24页
java.计算器的设计与实现课程设计论文.doc_第2页
第2页 / 共24页
java.计算器的设计与实现课程设计论文.doc_第3页
第3页 / 共24页
java.计算器的设计与实现课程设计论文.doc_第4页
第4页 / 共24页
java.计算器的设计与实现课程设计论文.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、华 北 科 技 学 院课程设计说明书班级: 基础部计算B091班 学号:200909014101 姓名: 张成林 设计题目: 计算器的设计与实现 设计时间: 2011.12.26 至 2011.12.30 指导教师: 孙改平 评 语:_评阅成绩: 评阅教师: 目录1 引 言11.1课程设计选题11.2课程设计的目的11.3本选题的设计背景12 需求分析12.1 功能需求12.2 系统的开发运行环境23 总体设计23.1 系统体系结构设计23.2系统功能模块及主要类设计34 详细设计与实现54.1功能模块的划分54.2功能模块的实现54.3功能模块的测试105 小结和展望12参 考 文 献12附

2、 录13源程序清单131 引 言1.1课程设计选题计算器的设计与实现1.2课程设计的目的使学生巩固和加深以Java 语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。1.3本选题的设计背景在日常生活中经常需要用到计算器,比如科学计算、数字计算、会计业务甚至是日常生活中的一些运算,当运算比较复杂时没有计算器就会显得很麻烦。为了解决日常生活中的困难,特意设计了这个计算器系统。2 需求分析2.1 功能需求在日常生活中人们总是难以避免的要进行一些运算,当运算比较复杂时没有计算器就会显得

3、很麻烦。为了解决日常生活中的困难,特意设计了这个计算器系统。在该系统中不仅可以进行整数的加、减、乘、除等简单运算,也可以进行浮点数的加、减、乘、除等运算。除此之外还可以进行三角函数、指数、对数、平方等运算。人们应用它可以解决日常生活中的一些运算问题,比如做买卖时进行交易的过程中就可以利用该计算器进行数量、价格以及金额的统计计算。学生也可以利用该计算器进行数学运算,解决简单的三角函数运算。2.2 系统的开发运行环境本系统开发平台: Java 本系统集成开发环境:MyEclipse和UltraEdit本系统运行环境: windows xp 3 总体设计3.1 系统体系结构设计3.1.1设计思路本应

4、用程序继承自框架类(Frame),此程序使用Frame布局管理器GridLayout,在Container容器中将单行文本框放在窗体上方区域,将选项、进制转换、帮助等按钮添加到菜单条。包含各种按钮的面板Jpanel采用n行m列的网格布局,然后将数字按钮和运算按钮以及控制按钮添加到面板中。同时注册事件监听器计算器总体结构如图1所示:Container在其上添加 Jbutton设置帮助按钮提示设置选项、进制转换计算输入和结果的显示设置计算器各操作按钮JtextFieldx通过面板设置计算器数字键盘布局JMenuBarJPanel图1 总体结构图3.2系统功能模块及主要类设计3.2.1系统功能描述(

5、1)基本运算,包括对整数和浮点数进行加、减、乘、除以及乘方、三角函数、指数等运算;(2)进制运算,包括十进制和二进制数、十进制和八进制之间的转换;(3)其他功能,包括对输入、输出结果的复制、粘贴、剪切和退格、清零等。3.2.2系统流程图:根据系统要求和和系统功能的划分可以得到如图2所示的流程图: 开始存储数据数字按钮?钮? Yes Yes NO读取文本域数据并存储键盘输入按?钮? Yes NO哪种运算? 加 减 乘 sind=a+bd=a*bd=a-bd=sin(a)结束?输出结果 NO结束 yes图2 程序流程图3.2.3主要类设计public class Calculator extend

6、s Frame implements ActionListener, WindowListener/ Calculator是初始化界面,整体布局及响应用户的各种按钮操作。 class WinClose implements WindowListener public void windowClosing(WindowEvent e)/ WinClose是设置计算器整个窗体的显示、退出、隐藏的操作。4 详细设计与实现4.1功能模块的划分界面模块:实现计算器的运算界面,该界面表示数据的按钮、表示浮点型的按钮运算符按钮和实现显示运算结果界面以及菜单选项界面。监听器模块:该模块为每一个按钮设置监听器,

7、当鼠标点击按钮时通过监听器来判断该按钮代表的什么数据、实现什么运算功能、执行什么功能等。动作响应模块:该模块通过按钮事件,进行对应的处理功能.其主要是将运算数据以浮点型类型保存在内存中,然后通过判断运算符类型对数据进行相应的运算,并将运算结果以String类型在结果文本区域中显示,其中包括菜单条里的进制转换和各选项菜单的动作响应。主函数模块:调用已经设计好的函数,来实现计算器的全部功能。4.2功能模块的实现4.1.1计算器界面模块在界面设计中,应用Frame框架,Frame是独立于浏览器的可运行的窗口,所以应用Frame框架来设计计算器界面是比较合适的。在Frame框架的容器分别设置菜单条Jm

8、enuBar、文本区JTextField、然后在其中设置了五个面板分别都采用GirdLayout 布局完成数字键盘和运算符的设置。其中菜单条中分别还有复制、粘贴、剪切退出,进制转换以及用法、关于的选项菜单,具体界面效果如图3所示: 图3 计算器的界面效果实现该界面的部分代码如下:public class Calculator extends Frame implements ActionListener, WindowListener private Container container; private GridBagLayout layout; private GridBagLayout

9、 layout; private GridBagConstraints constraints; private JTextField displayField; /保存+,-,*,/,=命令0 /定义各种组件JPanel panel1=new JPanel();panel1.setLayout(new GridLayout(1,5,4,4);/定义为GridLayout布局this.add(panel1);button_sqrt=new JButton(sqrt);button_plusminus=new JButton(+/-);panel1.add(button_sqrt); /面板的定

10、义和按钮添加4.1.2监听器模块通过继承ActionListener和WindonListener接口来实现事件监听。当Buttoin或Item对象上用鼠标进行点击时,将发送一个ActionEvent事件。这个事件ActionEvent事件会被使用addAtionListener()方法注册的所有ActionListener的actionPerformed()方法接收,首先为所有具有时间动作的组件用addAtionListener(this)进行监听,当被监听的组件发生事件时就进行反馈,同时进行动作事件处理。该模块的部分代码如下: button_plusminus.addActionListe

11、ner(this);button_exp.addActionListener(this);button_CE.addActionListener(this); ./各按钮的监听器设置。 this.addWindowListener(new WinClose(); /注册窗口监听器 this.setVisible(true); dialog.add(label_dialog); dialog.addWindowListener(this); /为对话框注册窗口事件监听器 JMenuItem m1_exit=new JMenuItem(复制); m1_exit.addActionListener(

12、this);/设置菜单按钮的监听器4.1.3动作响应模块 该模块通过public void actionPerformed(ActionEvent e)函数来实现动作响应事件。首先通过e.getSource()来获得当前发生动作,然后根据不同的按钮产生不同动作响应,在实现动作响应之前定义了lastCommand、resul 、start变量界面效果图如图4所示:图4 动作响应效果图其中若鼠标点击的是数字按钮则e.getSource()获取数字 在lastCommand中存储 if(e.getSource().equals(button_1)|e.getSource().equals(butto

13、n_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);lse if(input.equals(C) /清零键的实现方displayField.setTex

14、t(0);else if (e.getActionCommand()=复制) /各按钮的动作响应方式代码displayField.copy(); else if (e.getActionCommand()=剪切) else if (e.getActionCommand()=二进制) /二进制的转换if(displayField.getText()=null)若为空则弹出对话框JOptionPane.showMessageDialog(this,不能为空!请输入要进行转换的字符,消息对话框,JOptionPane.WARNING_MESSAGE);else if (e.getActionComm

15、and()=用法) /按下帮助菜单栏中用法的处理方法label_dialog.setText(sqrt,exp,log等键是先输运算符再输数字,其他运算是先输入数字再输入运算符n);else if (e.getActionCommand()=关于)/按下关于菜单栏中用法的处理方法JOptionPane.showMessageDialog(label_dialog,张成林的计算器n + JAVA课程设计 + 详情咨询 mail:n, 关于计算器, JOptionPane.INFORMATION_MESSAGE)if (lastCommand.equals(+)/各运算符的具体运算方法result

16、+= x;public void windowClosing(WindowEvent e)if(e.getSource()=dialog)dialog.setVisible(false); /隐藏对话框elseSystem.exit(0);4.1.4动作响应模块基于前面三块模板的功能,定义一个主函数来实现计算器的所有功能,同时定义一个windowClosing 控制窗口关闭事件,其具体代码如下:public static void main(String args)Calculator calculator=new Calculator()class WinClose implements W

17、indowListenerpublic void windowClosing(WindowEvent e)4.3功能模块的测试4.31整数、浮点数运算功能测试 分别在计算器中点击如下算式123+789;7.5+2.6运算结果如下:图5 整数运算4.32指数、三角函数运算功能测试 分别在计算器中点击如下算式exp9;sin3.14运算结果如下:图6 指数、三角函数运算4.33二进制、八进制转换运算功能测试 在计算器中键入数字8分别进行二进制和八进制的转换运算结果如下:图7 二进制、八进制转换运算5 小结和展望设计,给人以创作的冲动,但也要为这次冲动承担一定的痛苦,但事后发现,这一切都是值得的,本

18、次的JAVA课程设计让我对JAVA的理论知识又有了更深一步的了解,温故而知新,开始设计之时完全没头绪,对与理论学习不够扎实的我深感“书到用时方恨少”只好再把书上介绍的相关知识重新阅读一遍,对知识进行了全面而系统的梳理,遇到难处首先是苦思冥想寻求方法,再向同学请教,终于熟练掌握了基本理论知识,而且领悟了诸多平时学习难以理解掌握的的较难的知识,学会了如何思考的方式,找到了设计的灵感。这次课程设计使我感到收获不小,使我对JAVA的设计过程有了更深的了解,促进了对理论知识的消化与吸收,也巩固和完善了本门课程的知识体系结构。设计过程中遇到了不少的麻烦,在调试过程中也出现一些平时学习过程中没有遇到过的错误

19、,通过在课程设计中老师耐心指导以及查阅相关资料,努力思考,一一解决了遇到的问题,通过这些问题,我对课本知识的理解也加深了。终上所述,课程设计诚然是一门专业课,给我们很多专业知识以及很多专也技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道理、给了我很多思想、给了我莫大的空间,大学教育当如此!参 考 文 献1 耿祥义 ,张跃平. Java大学实用教程 . 北京:电子工业出版社, 2008.2 张国宁 . Java程序设计实例教程. 北京:中国水利出版社.20073 王立丰 . J2EE课程设计指导 .北京:北京大学出版社.2008.附 录源程序清单import java.awt.*;im

20、port java.awt.event.*;import javax.swing.*;public class Calculator extends Frame implements ActionListener, WindowListenerprivate Container container;private GridBagLayout layout;private GridBagConstraints constraints;private JTextField displayField; /计算结果显示区private String lastCommand; /保存+,-,*,/,=命

21、令0private double result; /保存计算结果private boolean start; /判断是否为数字的开始private JMenuBar menubar;private JMenuItem m_exit,m2_ejz,m2_bjz;private Dialog dialog;private Label label_dialog;private JButton button_sqrt,button_plusminus,button_CE,button_cancel,button_1,button_2,button_3,button_4,button_5,button_

22、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;public Calculator() /构造方法设置布局、为按钮注册事件监听器super(张成林的计算器);this.setLocation(240,200);this.setSize(350,300);this.setResizable(true)

23、;this.setLayout(new GridLayout(7,1);this.addmyMenu(); /调用成员方法添加菜单displayField=new JTextField(30);this.add(displayField);displayField.setEditable(true);start=true;result=0;lastCommand = =;JPanel panel0=new JPanel();panel0.setLayout(new GridLayout(1,4,4,4);JPanel panel1=new JPanel();panel1.setLayout(n

24、ew GridLayout(1,5,4,4);this.add(panel1);button_sqrt=new JButton(sqrt);button_plusminus=new JButton(+/-);button_exp=new JButton(exp);button_CE=new JButton(退格);button_cancel=new JButton(C);JPanel panel2=new JPanel();panel2.setLayout(new GridLayout(1,5,4,4);this.add(panel2);button_7=new JButton(7);butt

25、on_8=new JButton(8);button_9=new JButton(9);button_log=new JButton(log);button_divide=new JButton(/);JPanel panel3=new JPanel();panel3.setLayout(new GridLayout(1,5,4,4);this.add(panel3);button_4=new JButton(4);button_5=new JButton(5);button_6=new JButton(6);button_tan=new JButton(tan);button_multipl

26、y=new JButton(*);JPanel panel4=new JPanel();panel4.setLayout(new GridLayout(1,5,4,4);this.add(panel4);button_1=new JButton(1);button_2=new JButton(2);button_3=new JButton(3);button_cos=new JButton(cos);button_minus=new JButton(-);JPanel panel5=new JPanel();panel5.setLayout(new GridLayout(1,5,4,4);th

27、is.add(panel5);button_0=new JButton(0);button_point=new JButton(.);button_equal=new JButton(=);button_sin=new JButton(sin);button_plus=new JButton(+);panel1.add(button_sqrt);panel1.add(button_plusminus);panel1.add(button_exp);panel1.add(button_CE);panel1.add(button_cancel);panel2.add(button_7);panel

28、2.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(but

29、ton_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.addActionLi

30、stener(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.addAc

31、tionListener(this);button_multiply.addActionListener(this);button_1.addActionListener(this);button_2.addActionListener(this);button_3.addActionListener(this);button_cos.addActionListener(this);button_minus.addActionListener(this);button_0.addActionListener(this);button_point.addActionListener(this);

32、button_equal.addActionListener(this);button_sin.addActionListener(this);button_plus.addActionListener(this);this.addWindowListener(new WinClose(); /注册窗口监听器this.setVisible(true);private void addmyMenu()/菜单的添加JMenuBar menubar=new JMenuBar();this.add(menubar);JMenu m1=new JMenu(选项);JMenu m2=new JMenu(进

33、制转换);JMenuItem m1_exit=new JMenuItem(复制);m1_exit.addActionListener(this);JMenuItem m2_exit=new JMenuItem(剪切);m2_exit.addActionListener(this);JMenuItem m3_exit=new JMenuItem(粘贴);m3_exit.addActionListener(this);JMenuItem m4_exit=new JMenuItem(退出);m4_exit.addActionListener(this);JMenuItem m2_ejz=new JM

34、enuItem(二进制);m2_ejz.addActionListener(this);JMenuItem m2_bjz=new JMenuItem(八进制);m2_bjz.addActionListener(this);JMenu m3 = new JMenu( 帮助);JMenuItem m3_Help = new JMenuItem(用法);m3_Help.addActionListener(this);JMenuItem m4_Help = new JMenuItem(关于);m4_Help.addActionListener(this);dialog = new Dialog(thi

35、s,提示,true); /模式窗口dialog.setSize(450,100);label_dialog = new Label(,Label.CENTER); /标签的字符串为空,居中对齐dialog.add(label_dialog);dialog.addWindowListener(this); /为对话框注册窗口事件监听器m1.add(m1_exit);m1.add(m2_exit);m1.add(m3_exit);m1.addSeparator();m1.add(m4_exit);menubar.add(m1);m2.add(m2_ejz); m2.addSeparator();m

36、2.add(m2_bjz);menubar.add(m2);m3.add(m3_Help); m3.addSeparator();m3.add(m4_Help);menubar.add(m3);public void actionPerformed(ActionEvent e) /按钮的单击事件处理方法/JOptionPane.showMessageDialog(this,不能为空!请输入要进行转换的字符,消息对话框,JOptionPane.WARNING_MESSAGE);if(e.getSource().equals(button_1)|e.getSource().equals(butto

37、n_2)|e.getSource().equals(button_3)|e.getSource().equals(button_4)|e.getSource().equals(button_5)| e.getSource().equals(button_6)|e.getSource().equals(button_7)| e.getSource().equals(button_8)|e.getSource().equals(button_9) |e.getSource().equals(button_0)|e.getSource().equals(button_point)|e.getSour

38、ce().equals(button_plusminus)|e.getSource().equals(button_cancel)|e.getSource().equals(button_CE) /非运算符的处理方法String input=e.getActionCommand();if (start)displayField.setText();start=false;if(input.equals(+/-)displayField.setText(displayField.getText()+-);if(!input.equals(+/-)String str=displayField.g

39、etText();if(input.equals(退格) /退格键的实现方法if(str.length()0)displayField.setText(str.substring(0,str.length()-1);else if(input.equals(C) /清零键的实现方法displayField.setText(0);start=true;elsedisplayField.setText(displayField.getText()+input);else if (e.getActionCommand()=复制) displayField.copy();else if (e.getActionCommand()=剪切) displayField.cut();else if (e.getActionCommand()=粘贴) displayField.paste();else if (e.getActionCommand()=退出) /选项中退出的处理方法System.exit(0);else if (e.getActionCommand()=二进制) /二进制的转换

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报