手机版

Java程序设计带有函数功能的计算器

发布时间:2024-11-06   来源:未知    
字号:

Java程序设计带有函数功能的计算器

《Java程序设计》课程设计报告

课题名称:带有函数功能的计算器设计

系别:

班级:

姓名:

学号:

Java程序设计带有函数功能的计算器

1. 课程设计题目

基于带有函数功能的计算器设计

2. 课程设计目的

1. 巩固和加深课堂所学知识;

2. 将课本上的理论知识和实际应用有机的结合起来,培养分析和解决实际问题的能力;

3. 通过对java语言程序代码的阅读、修改、设计,理解和掌握复杂的java语言应用程序的编程,提高实践编程能力。

3. 程序运行环境

本程序在windows visit的pc机上利用jdk-6u7-windows-i586-p软件运行通过。

4. 程序功能使用说明

运行该程序后,参与运算的操作数可有鼠标点击相应按钮输入,但操作符应有鼠标点击相应的按钮,当:

1. 在简易计算中可以按照常规输入计算,基本无bug,“%”未设置其用途;

2. 简易计算中,可以进行+、-、*、/、乘方(√)及阶乘(!)运算;

3. 科学计算中有许多功能为实现,主要能进行加、减、乘、除、乘方、开方、幂、开n次方、倒数、阶乘、ln、e的x次幂、三角函数等高级运算;

4. 例如:

Java程序设计带有函数功能的计算器

(1).1+8=9

(2).20+-5=15

(3).36-6=30

(4).2*8=16

(5).36/6=6

(6)4^2=16

(7).100√=10

(8).-9√=不能执行此操作!

(9).3!=6

(10).-20!=不能执行此操作!

(11).0!=1

(12).6In=1.791759469

(13).2Exp=7.38905609893065

(14).8x^y3=512

(15).20x^2=400

(16).6n!=872

(17)30sin=0.5 其它(cost,tan)依次类推;

(18).1/x计算有bug;

(19).3 x√8=2(求8开3次方);

(20).85mod10=5(85对10求余)

5. 关键算法与技术:

1. 大数阶乘;

Java程序设计带有函数功能的计算器

2. 界面切换;

3. GirdLayout布局管理器的使用;

4. 事件响应;

5. 匿名内部类的使用;

6. 设计思路:

本程序采用模块化设计,调试方便,程序的可读性好。在老师的指导下,由主程序启动简易计算器,根据使用者的需要可以在简易计算器中进行运算操作,若不能满足用户功能,可以选择使用科学计算器,具体操作与目前市面上的计算器差不多,用户还可以选择使用说明进行查看具体操作。由于时间及个人水平的问题,科学计算中还有很多功能未实现。

具体思路:用户输入(点击)某一数字或操作符,程序将自行判断是操作数还是操作符,

1. 若为一操作数的首次输入,则将显示区的“0”替换,若该操作数不为首次输入则将显示区的数字串接上此次输入的数字;

2. 若为操作符,将判断是否为带符号操作数,若是则保存符号,反之为纯操作符:若为二元操作符就将显示区的字符串转化为双精度数;若为等号就进行计算结果并显示结果;若为一目操作符就进行相应的一目运算并显示结果;

3. 进行相应的初始化操作,为下一次输入做准备;

Java程序设计带有函数功能的计算器

4. 根据自己的理解画了下面的简单的流程图。略

7. 编码实现:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

import java.math.*;

import java.util.*;

/**

* <p>Title: 用户应用界面计算器</p>

* <p>Description: 包含简易计算与功能更加强大的科学计算</p>

* <p>Copyright: Copyright (c) 2009</p>

* <p>Company: 华中科技大学武昌分校</p>

* @author 涂小青

* @version 1.0

*/

public class Calculat {

static JTextField show;//设置输入区,显示区

static double opNum = 0;//存放操作数

static String opChar = "=";//存放操作符

static boolean flag = true;//设置标志

public static void main(String[] args) {

new EasyFrame();//产生首界面——简易计算器

}

}

class EasyFrame//构建简易计算器框架界面

{

static JFrame frame;

public EasyFrame()

{

frame = new JFrame("简易计算器");

Toolkit kit = Toolkit.getDefaultToolkit();//设置图标

//下面这条语句不好,不具有可移植性

Image image = kit.getImage("D:\\jbproject\\netTest\\src\\nettest\\1471.jpg"); frame.setIconImage(image);

frame.addWindowListener(new WindowAdapter() {//响应关闭事件

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

JMenuBar mb = new JMenuBar();//创建菜单栏

JMenu m1 = new JMenu("编辑");//创建菜单

Java程序设计带有函数功能的计算器

JMenu m2 = new JMenu("操作");

JMenu m3 = new JMenu("帮助");

JMenuItem mi1c = new JMenuItem("复制", KeyEvent.VK_C);//创建菜单项 JMenuItem mi1v = new JMenuItem("粘贴", KeyEvent.VK_V);

JMenuItem mi21 = new JMenuItem("基本计算");

JMenuItem mi22 = new JMenuItem("科学计算");

JMenuItem mi31 = new JMenuItem("使用说明");

JMenuItem mi32 = new JMenuItem("About...");

frame.setJMenuBar(mb);//添加菜单到窗口

mb.add(m1); mb.add(m2); mb.add(m3);

m1.add(mi1c); m1.add(mi1v);

m2.add(mi21); m2.add(mi22);

m3.add(mi31); m3.add(mi32);

/*菜单项监听事件*/

mi1c.addActionListener(new MenuItemListener());

mi1v.addActionListener(new MenuItemListener());

mi22.addActionListener(new MenuItemListener());

mi31.addActionListener(new MenuItemListener());

mi32.addActionListener(new MenuItemListener());

Container cp = frame.getContentPane();//获取内容窗格

cp.add(new easyCalPanel());//将简易计算器面板加入到框架中

frame.setSize(280,250);

//frame.pack();//将框架设置合适的大小

frame.setVisible(true);//设置框架可见

}

}

class AdvanceFrame //构建高级计算器框架界面

{

static JFrame frame;

public AdvanceFrame()

{

frame = new JFrame("科学计算器");

Toolkit kit = Toolkit.getDefaultToolkit();//设置图标

Image image = kit.getImage("D:\\jbproject\\netTest\\src\\nettest\\1471.jpg");

frame.setIconImage(image);

JMenuBar mb = new JMenuBar();//创建菜单栏

JMenu m1 = new JMenu("编辑");

JMenu m2 = new JMenu("操作");

JMenu m3 = new JMenu("帮助");

JMenuItem mi1c = new JMenuItem("复制", KeyEvent.VK_C);

JMenuItem mi1v = new JMenuItem("粘贴", KeyEvent.VK_V);

JMenuItem mi21 = new JMenuItem("基本计算");

JMenuItem mi22 = new JMenuItem("科学计算");

JMenuItem mi31 = new JMenuItem("使用说明");

Java程序设计带有函数功能的计算器

JMenuItem mi32 = new JMenuItem("About...");

frame.setJMenuBar(mb);//添加菜单栏

mb.add(m1); mb.add(m2); mb.add(m3);//添加菜单

m1.add(mi1c); m1.add(mi1v);

m2.add(mi21); m2.add(mi22);

m3.add(mi31); m3.add(mi32);

mi1c.addActionListener(new MenuItemListener());//监听复制

mi1v.addActionListener(new MenuItemListener());//监听粘贴

mi21.addActionListener(new MenuItemListener());//监听简易计算

mi31.addActionListener(new MenuItemListener());//监听使用说明

mi32.addActionListener(new MenuItemListener());//监听关于

Container cp = frame.getContentPane();//获取框架的内容窗格

cp.add(new AdvanceCalPanel());//添加高级计算面板

frame.pack();//设置适当的大小

frame.setVisible(true);//可见

frame.addWindowListener(new WindowAdapter() {//响应关闭按钮

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

}

class MenuItemListener implements ActionListener//响应菜单事件

{

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("基本计算")) {

new EasyFrame();//切换到简易计算器窗口

AdvanceFrame.frame.setVisible(false);

}

else if (e.getActionCommand().equals("科学计算")) {

new AdvanceFrame();//切换到高级计算界面

EasyFrame.frame.setVisible(false);

}

else if (e.getActionCommand().equals("复制")) {

//

}

else if (e.getActionCommand().equals("粘贴")) {

//

}

else if (e.getActionCommand().equals("使用说明")) {

try{

FileInputStream fis=new FileInputStream("使用说明.txt");

InputStreamReader isr=new InputStreamReader(fis);

BufferedReader br=new BufferedReader(isr);

Java程序设计带有函数功能的计算器

JTextArea helpArea=new JTextArea(15,48);

//helpArea.enable(false);

helpArea.setEditable(false);

helpArea.setDisabledTextColor(Color.black);

JScrollPane scroll=new JScrollPane(helpArea);

String s;

while((s=br.readLine())!=null)

{

helpArea.append(s);

helpArea.append("\n");

}

JOptionPane.showMessageDialog(null,scroll,"帮助主题",JOptionPane.PLAIN_MESSAGE);

br.close();

}

catch(IOException ex)

{

ex.printStackTrace();

}

//System.exit(0); //如果加上此句,当关掉JOptionPane时就会关掉JFrame; }

else if (e.getActionCommand().equals("About...")) {

JTextArea aboutArea=new JTextArea();

aboutArea.setText("版权拥有者:涂小青\n开发时间:2009-05-16\n个人空间:http:///731001587/infocenter?ptlang=2052\n");

JOptionPane.showMessageDialog(null,aboutArea,"关于 计算器",JOptionPane.PLAIN_MESSAGE);

}

}

}

class AdvanceCalPanel extends JPanel//创建高级计算面板

{

public AdvanceCalPanel()

{

setLayout(new BorderLayout());//设置布局方式

Calculat.show = new JTextField("0",27);//显示文本区

Calculat.show.setFont(new Font("Dialog",Font.PLAIN,16));//设置字体

Calculat.show.setHorizontalAlignment(JTextField.RIGHT);//设置光标位置 JPanel ps = new JPanel();//创建面板加载显示区文本框

ps.add(Calculat.show);

JPanel pbl = new JPanel();//创建面板加载按钮

pbl.setLayout(new GridLayout(10,5,1,1));//设置按钮面板的布局

pbl.setBorder(BorderFactory.createEtchedBorder());//设置边框

//pbr.setLayout(new GridLayout(5,6,1,2));

Java程序设计带有函数功能的计算器

//pbr.setBorder(BorderFactory.createEtchedBorder());

String[] larr ={//按钮

"Sta","F-E","(",")","MC","clr",

"Avg","dms","Exp","ln","MR","Dec",

"Sum","sin","x^y","log","MS","Bin",

"E(x)","cos","x^2","n!","M+","Oct",

"D(x)","tan","x√","1/x","PI","Hex",

"D","E","F","/","Mod","And",

"A","B","C","*","Or","Xor",

"7","8","9","-","Lsh","Not",

"4","5","6","+","Int","shift",

"1","2","3",".","0","="};

for(int i=0;i<larr.length;i++)

{

addButton(pbl,larr[i]);//创建按钮

}

setBorder(BorderFactory.createEtchedBorder());//设置边框

add(pbl,BorderLayout.CENTER);//分别添加两面板到框架中

add(ps,BorderLayout.NORTH);

}

private void addButton(Container c,String s)//创建按钮,加入到面板并监听按钮事件 {

JButton bt = new JButton(s);

c.add(bt);

bt.addActionListener(new buttonListener());

}

}

class easyCalPanel extends JPanel //操作基本等同于创建高级计算面板

{

public easyCalPanel()

{

setLayout(new BorderLayout());

Calculat.show = new JTextField("0",17);

Calculat.show.setFont(new Font("Dialog",Font.PLAIN,18));

Calculat.show.setHorizontalAlignment(JTextField.RIGHT);

JPanel ps = new JPanel();

ps.add(Calculat.show);

JPanel pb = new JPanel();

pb.setLayout(new GridLayout(5,4,1,1));

pb.setBorder(BorderFactory.createEtchedBorder());

String bts = "%^√!789/456*123-0.=+";

for(int i=0;i<bts.length();i++)

{

addButton(pb,bts.substring(i,i+1));

Java程序设计带有函数功能的计算器

}

add(pb,BorderLayout.CENTER);

add(ps,BorderLayout.NORTH);

}

private void addButton(Container c,String s)

{

JButton bt = new JButton(s);

bt.setFont(new Font("Dialog",Font.PLAIN,18));//设置字体

c.add(bt);

bt.addActionListener(new buttonListener());

}

}

class buttonListener implements ActionListener//响应按钮事件

{

public void actionPerformed(ActionEvent e)

{

String s = e.getActionCommand();//获取命令

if('0'<=s.charAt(0) && s.charAt(0)<='9' || s.equals("."))//该命令为正操作数 {

if(Calculat.flag)//若初次输入该操作数(如:输入“123”中的“1”) Calculat.show.setText(s);

else//(如:输入“123”中的"2"或"3")

Calculat.show.setText(Calculat.show.getText()+s);

Calculat.flag = false;//修改标志

}

else//命令为操作数为负数或操作符

{

if(Calculat.flag)//初次输入

{

if (s.equals("-")) {//为负数

Calculat.show.setText(s);

Calculat.flag = false;

}

else{//连续输入几个操作符

Calculat.opChar = s; ///

}

}

else//为操作符

{

calculate cal = new calculate();//创建计算类实例

double x = Double.parseDouble(Calculat.show.getText());//将输入的操作数转换为double型

cal.calopr1(x);//双目运算及处理单目运算的操作数

Calculat.opChar = s;//保存运算符

Java程序设计带有函数功能的计算器

if (Calculat.opChar.equals("!")||Calculat.opChar.equals("√")//操作数必须为正的单目运算

||Calculat.opChar.equals("n!"))

{

if(Calculat.opNum < 0)

Calculat.show.setText("不能执行此操作!!");

else

cal.calopr2((int)Calculat.opNum,Calculat.opChar);//单目运算

Calculat.opChar = "=";//保存符号为下一次运算做准备

}

else if (Calculat.opChar.equals("1/x")||Calculat.opChar.equals("x^2") ||Calculat.opChar.equals("ln")||Calculat.opChar.equals("log")

||Calculat.opChar.equals("sin")||Calculat.opChar.equals("cos")

||Calculat.opChar.equals("tan")||Calculat.opChar.equals("Exp"))//普通单目运算

{

cal.calopr2((int)Calculat.opNum,Calculat.opChar);//单目运算

Calculat.opChar = "=";//保存符号为下一次运算做准备

}

Calculat.flag = true;//设置标志为下一次运算做准备

}

}

}

}

class calculate//计算处理

{

public void calopr1(double n)//处理双目运算及单目运算的操作数

{

String str = "";

if (Calculat.opChar.equals("+")) {

Calculat.opNum += n;

}

else if (Calculat.opChar.equals("-")) {

Calculat.opNum -= n;

}

else if (Calculat.opChar.equals("*")) {

Calculat.opNum *= n;

}

else if (Calculat.opChar.equals("/")) {

if(n == 0)

str = "除数为0!!!";

else

Calculat.opNum /= n;

}

Java程序设计带有函数功能的计算器

else if (Calculat.opChar.equals("^")||Calculat.opChar.equals("x^y")) { Calculat.opNum = Math.pow(Calculat.opNum,n);

}

else if (Calculat.opChar.equals("x√")) {

Calculat.opNum = Math.pow(n,1/Calculat.opNum);

}

else if (Calculat.opChar.equals("=")) {

Calculat.opNum = n;

}

else if (Calculat.opChar.equals("Mod")) {

Calculat.opNum = Math.abs(Math.IEEEremainder(Calculat.opNum,n)); }

Calculat.show.setText(str+Calculat.opNum);

}

public void calopr2(int n,String opChar)//处理单目运算

{

if (opChar.equals("!")||opChar.equals("n!")) {

Calculat.show.setText(

new Factorial().factorial((int)Calculat.opNum).toString());

}

else if (opChar.equals("√")) {

Calculat.show.setText(""+Math.sqrt(n));

}

else if (opChar.equals("1/x")) {

Calculat.show.setText(""+(1.0/n));

}

else if (opChar.equals("x^2")) {

Calculat.show.setText(""+Math.pow(n, 2));

}

else if (opChar.equals("ln")) {

Calculat.show.setText(""+Math.log(n));

}

else if (opChar.equals("log")) {

//Calculat.show.setText("" + Math.log10(n));

}

else if (opChar.equals("sin")) {

Calculat.show.setText(""+Math.sin(Math.toRadians(n)));

}

else if (opChar.equals("cos")) {

Calculat.show.setText(""+Math.cos(Math.toRadians(n)));

}

else if (opChar.equals("tan")) {

Calculat.show.setText(""+Math.tan(Math.toRadians(n)));

}

Java程序设计带有函数功能的计算器

else if (opChar.equals("Exp")) {

Calculat.show.setText(""+Math.exp(n));

}

}

}

class Factorial//计算大数阶乘

{

protected static ArrayList table=new ArrayList();

static

{

table.add(BigInteger.valueOf(1));

}

/** Creates a new instance of factorial */

public static synchronized BigInteger factorial(int x)

{

if(x<0) throw new IllegalArgumentException("x must be non-negative."); for(int size=table.size();size<=x;size++)

{

BigInteger lastfact=(BigInteger)table.get(size-1);

BigInteger nextfact=lastfact.multiply(BigInteger.valueOf(size)); table.add(nextfact);

}

return (BigInteger) table.get(x);

}

}

Java程序设计带有函数功能的计算器.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)