计算器课程设计

时间:2024.5.20

枣 庄 学 院

信息科学与工程学院

课程设计任务书

题目:计算器的设计与实现

学 号:201012220241

姓 名:

专 业:计算机应用技术

课 程:java程序设计

指导教师:刘梦琳职称:讲师

完成时间: 20##年 月----2011 年 月

枣庄学院信息科学与工程学院制

课程设计任务书及成绩评定


目录

一.课程设计研究背景及意义.4

二.课程设计题目描述和要求.4

三.设计思路.5

四.课程设计报告内容.5

1、 题目求解的理论依据及算法.5

2、 数据结构:.6

3、 主要事件处理:.6

4、 简要的设计流程:.7

5、代码.8

五、运行结果.25

六、总结:.25

一.课程设计研究背景及意义

这次课程设计是通过JAVA编程来实现计算器的功能。以前,人们用来计算的工具不管从方便的角度还是速度的角度来看都不及现代计算器,计算器的发明是人类进步的有力证明。电子技术的不断发展使得计算器的功能不断的完善。人们通过使用计算器来提高自己的工作效率,计算器是高科技的产物,是以往任何时代都无法比拟的。在二十一世纪的今天,计算器依然是人们重要的计算工具,所以,对计算器的研究的课程设计具有重大意义。

本次课程设计题目主要应用到JAVA面向对象程序设计语言中Swing组件和GUI(图形用户界面)当中的一些知识,当然也用到JAVA中大部分基础知识,如JAVA的基本控制结构、数组、输入与输出等等 。

二.课程设计题目描述和要求

通过JAVA中的Swing组件来制作一个计算器的界面包括0—9的十个数字按键,小数点键,+-*/开方百分比,倒数运算符键,=运行符键以及M组合键等。以及实现计算器的一些基本的计算功能。这个模拟计算器能进行连加,连减,连乘,连除,求二次平方根,求百分比,求倒数以及负数运算等操作。

要求界面逼真,按键布局美观,要求实现加、减、乘、除等基本计算功能

三.设计思路

本应用程序继承自框架(frame),此程序使用frame布局管理器bordelayout,将单行文本加入相应区域,包含各种按纽的面板buttonpanel加入相应区域

还可以将进制转换的面板与单行文本框放一块

包含各种按纽的面板buttonpanel采用N行N列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中,同时注册按钮事件监听器

日常生活中经常需要用到计算器,比如科学计算,数值计算,会计业务等等,在Applet中实现一个精巧的计算器,可以让用户的操作也更方便和快捷。本项目需要实现一个具有四则运算的计算器,能够实现基本的加、减、乘、除运算,以及其它的辅助功能;界面简洁适用;要提供主要的设计思路、类的设计,本次设计添加转进制等功能

四.课程设计报告内容

1、 题目求解的理论依据及算法

解题原理:

(1)界面布局。创建一个面板,先将所有按钮:所有数字键和运算符键等放在面板上,采用网格布局,具体设计为4行,5列的网格,二十个格子;接着添加一个1行3列的网格布局来放置三个功能键:清零,检测,退格键;然后,再添加一个5行一列的网格布局来放置四个M组合功能键和一个空键,其目的在于美化界面,使其与现实中的计算器更接近,同时也是为了满足这次课程设计的要求。最后,对以上三个面板,采用BorderLayout布局,将按键面板放在计算器的中部,功能键面板放北部,作为一个新的面板。最后,将文本框放在界面的北部,新面板放在界面的中央,MKpanel放在界面的西部,采用边界布局管理器,做为界面的整体布局,这样界面布局就搞定了。

(2)输入数字、小数点、符号时按输入的顺序显示在单行文本框中,并按右对齐方式显示,且不允许修改文本行中的内容。

(3)输入运算符时,说明前一个数已经输入完毕,保存第一个数firstDigit,同时保存运算符,显示firstDigit。

(4)输入第二个数,按等号,保存第二数,根据输入的运算符进行相应的运算,文本行中显示运算结果resultNum。

(5)按退格键Backspace,将返回到前一次输入状态。

(6)按Check键,输入的数字第一个数字为零。

(7)按复位键键Again,归零。

(8)由于M组合键没有实现其功能,所以暂不能用,待更进一步研究。

(8)第三、四步可以重复操作。

2、 数据结构:

面板:数字等按键面板calckeysPanel,功能键面板calmsPanel,M组合键面板MKpanel,组合面板panel1,整体布局:top

第一个数firstDigit,运算结果resultNum,运算符operator,文本行组件result

3、 主要事件处理:

1、数字输入及小数点事件,输入后直接显示在文本行。

2、双目运算符输入事件:输入后,保存第一个数,同时保存运算符。

3、单目运算符和等于符=输入事件:保存第二个数,取出原有数据和运算符算出结果,并显示在文本行组件。

4、处理Backspace键被按下事件。

5、以上几类事件都归为行为类对象ActionListener.

负责部分的主要事件处理:

1、“+”,“-”,“*”,“/”四个双目运算符被按下,当前面没有输入第一个数时,或当按下双目运算符后没输入第二个数就按下“=”符,计算器不做任何反应。只有等按规则输入数字时才按正确运算输出结果。

2、“sqrt”,“%”,“1/x”,“+/-”四个单目运算符被按下,只有当前面输入一个数后按下单目运算符键再按“=”,才输出正确结果。而“+/-”第一次按下时执行,第二次按下时取消。

4、 简要的设计流程:

5、代码

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Calculator extends Frame implements ActionListener, WindowListener

{

private Container container;

private GridBagLayout layout;

private GridBagConstraints constraints;

private JTextField displayField; //计算结果显示区

private String lastCommand; //保存+,-,*,/,=命令0

private 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_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("Calculator");

this.setLocation(240,200);

this.setSize(350,300);

this.setResizable(true);

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(new 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");

button_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_multiply=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));

this.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);

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);

button_3.addActionListener(this);

button_cos.addActionListener(this);

button_minus.addActionListener(this);

button_0.addActionListener(this);

button_point.addActionListener(this);

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("进制转换");

JMenuItem m1_exit=new JMenuItem("退出");

m1_exit.addActionListener(this);

JMenuItem m2_ejz=new JMenuItem("二进制");

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);

dialog = new Dialog(this,"提示",true); //模式窗口

dialog.setSize(240,80);

label_dialog = new Label("",Label.CENTER); //标签的字符串为空,居中对齐

dialog.add(label_dialog);

dialog.addWindowListener(this); //为对话框注册窗口事件监听器

m1.add(m1_exit);

menubar.add(m1);

m2.add(m2_ejz);

m2.add(m2_bjz);

menubar.add(m2);

m3.add(m3_Help);

menubar.add(m3); }

public void actionPerformed(ActionEvent e) //按钮的单击事件处理方法

{

if(e.getSource().equals(button_1)||e.getSource().equals(button_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.getSource().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.getText();

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;

}

else

displayField.setText(displayField.getText()+input);

}

}

else if (e.getActionCommand()=="二进制") //二进制的转换

{

int n=Integer.parseInt(displayField.getText());

displayField.setText(Integer.toBinaryString(n));

}

else if (e.getActionCommand()=="八进制") //八进制的转换

{

int n=Integer.parseInt(displayField.getText());

displayField.setText(Integer.toOctalString(n));

}

else if (e.getActionCommand()=="退出") //选项中退出的处理方法

{

System.exit(0);

}

else if (e.getActionCommand()=="用法") //按下'帮助'菜单栏中用法的处理方法

{

label_dialog.setText("sqrt,exp等键是先输运算符再输数字\n");

dialog.setLocation(400,250);

dialog.setVisible(true);

}

else //各运算符的识别

{

String command=e.getActionCommand();

if(start)

{

lastCommand=command;

}

else

{

calculate(Double.parseDouble(displayField.getText()));

lastCommand=command;

start=true;

}

}

}

public void calculate(double x) //各运算符的具体运算方法

{

double d=0;

if (lastCommand.equals("+"))

result+= x;

else if (lastCommand.equals("-"))

result-=x;

else if (lastCommand.equals("*"))

result*=x;

else if (lastCommand.equals("/"))

result/=x;

else if (lastCommand.equals("="))

result=x;

else if (lastCommand.equals("sqrt"))

{

d=Math.sqrt(x);

result=d;

}

else if (lastCommand.equals("exp"))

{

d=Math.exp(x);

result=d;

}

else if (lastCommand.equals("log"))

{

d=Math.log(x);

result=d;

}

else if (lastCommand.equals("tan"))

{

d=Math.tan(x);

result=d;

}

else if (lastCommand.equals("cos"))

{

d=Math.cos(x);

result=d;

}

else if (lastCommand.equals("sin"))

{

d=Math.sin(x);

result=d;

}

displayField.setText(""+ result);

}

public void windowClosing(WindowEvent e)

{

if(e.getSource()==dialog)

dialog.setVisible(false); //隐藏对话框

else

System.exit(0);

}

public void windowOpened(WindowEvent e) { }

public void windowActivated(WindowEvent e) { }

public void windowDeactivated(WindowEvent e) { }

public void windowClosed(WindowEvent e) { }

public void windowIconified(WindowEvent e) { }

public void windowDeiconified(WindowEvent e) { }

public static void main(String args[])

{

Calculator calculator=new Calculator();

}

}

class WinClose implements WindowListener

{

public void windowClosing(WindowEvent e)

{

System.exit(0); //结束程序运行

}

public void windowOpened(WindowEvent e){}

public void windowActivated(WindowEvent e){}

public void windowDeactivated(WindowEvent e){}

public void windowClosed(WindowEvent e){}

public void windowIconified(WindowEvent e){}

public void windowDeiconified(WindowEvent e){}

}

五、运行结果

六、总结

这次课程设计是设计一个模拟计算器,并实现一些基本的计算功能。记得开始的时候在没有列出算法就草草动手,结果发现写的程序代码没有一点章法,后来通过参看教程《Java语言程序设计》中的一些典型例题,然后慢慢修改,才使得程序勉强符合要求。从这次课程设计中我发现了许多问题,也是我获得不少宝贵的经验。下面就对这些经验总结一下:

首先,Java编程得有一个清晰的算法,没有算法编程就像无方向的运动,虽然目的可能达到了,但是其间走了很多弯路。

其次,编程的规范也很重要,写程序要养成良好的习惯,要注意缩进,层次分明。

再者想说说从这次课程设计中学到的自认为最重要的东西,那就是要学会表达,很多东西学会了,但是从自己嘴里或手里出来就不是那么回事了。所以,以后在这方面要多下点功夫。

最后,衷心的感谢李又良老师的辛勤指导。

更多相关推荐:
计算器设计的java课程设计报告

华东交通大学课程设计华东交通大学课程设计课程设计题目计算器设计课程题目年级专业学号姓名组员指导教师Java程序设计信息一班1华东交通大学课程设计课程设计论文任务书基础学院信息与计算科学专业20xx1班一课程设计...

计算机综合课程设计报告

计算机综合课程设计报告小组编号06课题名称趣味贪吃蛇小组成员20xx年10月计算机综合课程设计报告目录目录11项目背景112系统目标121系统功能分析2211功能12212功能2222系统性能指标223系统平台...

MFC计算器课程设计报告

MFC计算器课程设计报告计算机应用3班黄锦湫罗洁饶益指导老师蒋鹏20xx315一题目利用MFC框架编写简易计算器要求使用MFC框架在VisualStudio60环境下编写一个简易的计算器支持任意位数的加减乘数正...

计算机网络课程设计报告

计算机网络课程设计报告一.课程设计的题目、目的及要求.........................................................2二.课程设计的内容(分析和设计).....…

C++简单计算器课程设计报告

武汉理工大学专业课程设计2课程设计说明书目录1基本功能描述12设计思路13软件设计431设计步骤44结论与心得体会127附设计中的关键源代码1472测试结果15简单计算器1基本功能描述简单计算器包括双目运算和单...

Java课程设计报告-计算器

Java课程设计报告计算器第一部分设计的内容要求11Windows自带计算器版面设计12计算器计算功能算法实现第二部分设计思想21根据图形用户界面设计方法设计计算器版面容器类窗口Window类面板Panel类框...

课程设计报告——计算器

北京化工大学20xx20xx课程设计报告计算机科学与技术计算器程序的设计与实现数据结构课程设计班级计科1001北京化工大学信息科学与技术学院计算机科学与技术专业北京化工大学20xx20xx课程设计报告计算机科学...

C++简单计算器课程设计报告

河南机电高等专科学校学生课程设计报告实验课程名称C语言程序设计教程与实验实验项目名称系部计科系年级20xx级专业班级软件132对口学生姓名贾永翔学号1310124实验时间20xx年6月16日6月19日11课程设...

科学计算器课程设计报告

计算机科学与技术学部C课程设计题目科学计算器学部计算机科学与技术班级计科1103指导教师李军姓名刘明学号20xx年6月27日科学计算器摘要摘要计算器的产生和发展是建立在电子计算机基础之上的硬件方面自19xx年第...

C++课程设计(计算器)报告

课程设计报告VisualC课程设计题目计算器题目计算器1程序功能简介实现计算器功能用户根据程序提示输入数字选择要进行的运算可以进行加减乘除开方温度单位的换算2课程设计要求1完善计算器程序改写成可对实数操作2完善...

Java计算器课程设计报告

石家庄职业技术学院课程设计报告计算器应用程序学生姓名指导教师系别专业年级论文提交时间年月日目录一概述3二总体方案设计4三详细设计5四程序的调试与运行结果说明7五课程设计总结9六附录102一概述1程序具备的功能1...

C++课程设计报告--小型特殊计算器5

课程设计报告课程面向对象程序设计学号姓名班级教师塔里木大学计算机科学与技术学院课程设计名称小型特殊计算器1设计内容实现一个特殊的计算器可以实现复数有理数矩阵和集合的特殊计算程序可以实现复数有理数的加减乘除可以实...

计算器课程设计报告(34篇)