欢迎光临
我们一直在努力

Java编写的计算器程序及源代码-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

//frame版程序源代码如下,疏漏之处,望批评指正。

//数字分组没有编写,科学型计算器没有编写,其他已经完善。

import java.awt.*;

import java.lang.*;

import javax.swing.*;

import javax.swing.event.*;

import java.awt.event.*;

import java.text.decimalformat;

public class calculator

implements actionlistener { //导入动作监听接口

//设计面板中的单位

jframe frame;

jtextfield textanswer;

jpanel panel, panel1, panel2, panel3;

jmenubar mainmenu;

jtextfield textmemory;

jlabel labelmemspace; //labelmemspace单纯做摆设,控制面板的形状

jbutton buttonbk, buttonce, buttonc;

jbutton button[];

jbutton buttonmc, buttonmr, buttonms, buttonmadd;

jbutton buttondot, buttonaddandsub, buttonadd, buttonsub, buttonmul,

buttondiv, buttonmod;

jbutton buttonsqrt, buttondao, buttonequal;

jmenu editmenu, viewmenu, helpmenu;

jmenuitem copyitem, pasteitem, titem, sitem, numbergroup, tophelp, aboutcal;

decimalformat df; //设置数据输出精度

boolean clickable; //控制当前能否按键

double memoryd; //使用内存中存储的数字

int memoryi;

double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd)

short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算

string copy; //做复制用

jtextarea help; //帮助

jscrollpane scrollhelp;

//构造函数

public calculator() {

clickable = true;

answerd = 0;

frame = new jframe("计算器");

df = new decimalformat("0.##############"); //设置数据输出精度(对于double型值)

textanswer = new jtextfield(15);

textanswer.settext("");

textanswer.seteditable(false);

textanswer.setbackground(new color(255, 255, 255));

panel = new jpanel();

frame.getcontentpane().add(panel);

panel1 = new jpanel();

panel2 = new jpanel();

panel.setlayout(new borderlayout());

//设计整个面板

mainmenu = new jmenubar();

editmenu = new jmenu("编辑(e)");

viewmenu = new jmenu("查看(v)");

helpmenu = new jmenu("帮助(h)");

copyitem = new jmenuitem(" 复制(c) ctrl+c");

copyitem.addactionlistener(this);

pasteitem = new jmenuitem(" 粘贴(v) ctrl+v");

pasteitem.addactionlistener(this);

editmenu.add(copyitem);

editmenu.add(pasteitem);

titem = new jmenuitem("●标准型(t)");

titem.addactionlistener(this);

sitem = new jmenuitem(" 科学型(s)");

sitem.addactionlistener(this);

numbergroup = new jmenuitem(" 数字分组(i)");

numbergroup.addactionlistener(this);

viewmenu.add(titem);

viewmenu.add(sitem);

viewmenu.add(numbergroup);

tophelp = new jmenuitem(" 帮助主题(h)");

tophelp.addactionlistener(this);

help = new jtextarea(5, 20);

scrollhelp = new jscrollpane(help);

help.seteditable(false);

help.append("执行简单计算\n");

help.append("1. 键入计算的第一个数字。\n");

help.append("2. 单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。\n");

help.append("3. 键入计算的下一个数字。\n");

help.append("4. 输入所有剩余的运算符和数字。\n");

help.append("5. 单击“=”。\n");

aboutcal = new jmenuitem(" 关于计算器(a)");

aboutcal.addactionlistener(this);

helpmenu.add(tophelp);

helpmenu.add(aboutcal);

mainmenu.add(editmenu);

mainmenu.add(viewmenu);

mainmenu.add(helpmenu);

panel.add(mainmenu, borderlayout.north);

panel.add(textanswer, borderlayout.center);

panel.add(panel1, borderlayout.south);

panel1.setlayout(new borderlayout());

textmemory = new jtextfield(3);

textmemory.seteditable(false);

textmemory.setbackground(new color(217, 217, 217));

labelmemspace = new jlabel(" ");

buttonbk = new jbutton("backspace");

buttonbk.setforeground(new color(255, 0, 0));

buttonce = new jbutton("ce");

buttonce.setforeground(new color(255, 0, 0));

buttonc = new jbutton("c");

buttonc.setforeground(new color(255, 0, 0));

buttonbk.addactionlistener(this);

buttonce.addactionlistener(this);

buttonc.addactionlistener(this);

panel1.add(panel2, borderlayout.north);

panel2.setlayout(new flowlayout(flowlayout.right));

panel2.add(textmemory);

panel2.add(labelmemspace);

panel2.add(buttonbk);

panel2.add(buttonce);

panel2.add(buttonc);

panel3 = new jpanel();

panel1.add(panel3, borderlayout.center);

button = new jbutton[10];

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

button[i] = new jbutton(integer.tostring(i));

button[i].setforeground(new color(0, 0, 255));

}

buttonmc = new jbutton("mc");

buttonmc.setforeground(new color(255, 0, 0));

buttonmr = new jbutton("mr");

buttonmr.setforeground(new color(255, 0, 0));

buttonms = new jbutton("ms");

buttonms.setforeground(new color(255, 0, 0));

buttonmadd = new jbutton("m+");

buttonmadd.setforeground(new color(255, 0, 0));

buttondot = new jbutton(".");

buttondot.setforeground(new color(0, 0, 255));

buttonaddandsub = new jbutton("+/-");

buttonaddandsub.setforeground(new color(0, 0, 255));

buttonadd = new jbutton("+");

buttonadd.setforeground(new color(255, 0, 0));

buttonsub = new jbutton("-");

buttonsub.setforeground(new color(255, 0, 0));

buttonmul = new jbutton("*");

buttonmul.setforeground(new color(255, 0, 0));

buttondiv = new jbutton("/");

buttondiv.setforeground(new color(255, 0, 0));

buttonmod = new jbutton("%");

buttonmod.setforeground(new color(0, 0, 255));

buttonsqrt = new jbutton("sqrt");

buttonsqrt.setforeground(new color(0, 0, 255));

buttondao = new jbutton("1/x");

buttondao.setforeground(new color(0, 0, 255));

buttonequal = new jbutton("=");

buttonequal.setforeground(new color(255, 0, 0));

//将所有行为与监听绑定

panel3.setlayout(new gridlayout(4, 6));

panel3.add(buttonmc);

buttonmc.addactionlistener(this);

panel3.add(button[7]);

button[7].addactionlistener(this);

panel3.add(button[8]);

button[8].addactionlistener(this);

panel3.add(button[9]);

button[9].addactionlistener(this);

panel3.add(buttondiv);

buttondiv.addactionlistener(this);

panel3.add(buttonsqrt);

buttonsqrt.addactionlistener(this);

panel3.add(buttonmr);

buttonmr.addactionlistener(this);

panel3.add(button[4]);

button[4].addactionlistener(this);

panel3.add(button[5]);

button[5].addactionlistener(this);

panel3.add(button[6]);

button[6].addactionlistener(this);

panel3.add(buttonmul);

buttonmul.addactionlistener(this);

panel3.add(buttonmod);

buttonmod.addactionlistener(this);

panel3.add(buttonms);

buttonms.addactionlistener(this);

panel3.add(button[1]);

button[1].addactionlistener(this);

panel3.add(button[2]);

button[2].addactionlistener(this);

panel3.add(button[3]);

button[3].addactionlistener(this);

panel3.add(buttonsub);

buttonsub.addactionlistener(this);

panel3.add(buttondao);

buttondao.addactionlistener(this);

panel3.add(buttonmadd);

buttonmadd.addactionlistener(this);

panel3.add(button[0]);

button[0].addactionlistener(this);

panel3.add(buttonaddandsub);

buttonaddandsub.addactionlistener(this);

panel3.add(buttondot);

buttondot.addactionlistener(this);

panel3.add(buttonadd);

buttonadd.addactionlistener(this);

panel3.add(buttonequal);

buttonequal.addactionlistener(this);

frame.setdefaultcloseoperation(frame.exit_on_close);

frame.pack();

frame.show();

}

//设置各个按钮行为

public void actionperformed(actionevent event) {

boolean sign = false; //判断是否是double型数参与运算,是为true,不是为false

object temp = event.getsource();

try {

//如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后

for (int i = 0; i <= 9; i++)

if (temp == button[i] && clickable == true)

textanswer.settext(textanswer.gettext() + integer.tostring(i));

//按下.按钮时,判断当前文本框内字符串中含不含.,如果已含,则不允许再插入.

if (temp == buttondot && clickable == true) {

boolean isdot = false;

if (textanswer.gettext().length() == 0)

isdot = true;

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

if (. == textanswer.gettext().charat(i)) {

isdot = true;

break;

}

if (isdot == false)

textanswer.settext(textanswer.gettext() + ".");

}

if ( (temp == buttonadd || temp == buttonsub || temp == buttonmul ||

temp == buttondiv) && clickable == true) {

//+操作

if (temp == buttonadd) {

switch (prekey) {

case 0:

answerd += double.parsedouble(textanswer.gettext());

break;

case 1:

answerd -= double.parsedouble(textanswer.gettext());

break;

case 2:

answerd *= double.parsedouble(textanswer.gettext());

break;

case 3:

if (double.parsedouble(textanswer.gettext()) == 0) {

textanswer.settext("除数不能为零");

clickable = false;

}

else

answerd /= double.parsedouble(textanswer.gettext());

break;

default:

answerd = double.parsedouble(textanswer.gettext());

}

textanswer.settext("");

prekey = key = 0;

}

//-操作

if (temp == buttonsub) {

switch (prekey) {

case 0:

answerd += double.parsedouble(textanswer.gettext());

break;

case 1:

answerd -= double.parsedouble(textanswer.gettext());

break;

case 2:

answerd *= double.parsedouble(textanswer.gettext());

break;

case 3:

if (double.parsedouble(textanswer.gettext()) == 0) {

textanswer.settext("除数不能为零");

clickable = false;

}

else

answerd /= double.parsedouble(textanswer.gettext());

break;

default:

answerd = double.parsedouble(textanswer.gettext());

}

textanswer.settext("");

prekey = key = 1;

}

//*操作

if (temp == buttonmul) {

switch (prekey) {

case 0:

answerd += double.parsedouble(textanswer.gettext());

break;

case 1:

answerd -= double.parsedouble(textanswer.gettext());

break;

case 2:

answerd *= double.parsedouble(textanswer.gettext());

break;

case 3:

if (double.parsedouble(textanswer.gettext()) == 0) {

textanswer.settext("除数不能为零");

clickable = false;

}

else

answerd /= double.parsedouble(textanswer.gettext());

break;

default:

answerd = double.parsedouble(textanswer.gettext());

}

textanswer.settext("");

prekey = key = 2;

}

///操作

if (temp == buttondiv) {

switch (prekey) {

case 0:

answerd += double.parsedouble(textanswer.gettext());

break;

case 1:

answerd -= double.parsedouble(textanswer.gettext());

break;

case 2:

answerd *= double.parsedouble(textanswer.gettext());

break;

case 3:

if (double.parsedouble(textanswer.gettext()) == 0) {

textanswer.settext("除数不能为零");

clickable = false;

}

else

answerd /= double.parsedouble(textanswer.gettext());

break;

default:

answerd = double.parsedouble(textanswer.gettext());

}

textanswer.settext("");

prekey = key = 3;

}

}

//=操作

if (temp == buttonequal && clickable == true) {

//如果连续按=,则进行连续运算

if (prekey == 5) {

if (key == 0) {

answerd += vard;

textanswer.settext(df.format(answerd));

}

if (key == 1) {

answerd -= vard;

textanswer.settext(df.format(answerd));

}

if (key == 2) {

answerd *= vard;

textanswer.settext(df.format(answerd));

}

if (key == 3) {

if (double.parsedouble(textanswer.gettext()) == 0) {

textanswer.settext("除数不能为零");

clickable = false;

}

else {

answerd /= vard;

textanswer.settext(df.format(answerd));

}

}

}

else {

vard = double.parsedouble(textanswer.gettext());

if (key == 0) {

prekey = -1;

answerd += double.parsedouble(textanswer.gettext());

textanswer.settext(df.format(answerd));

}

if (key == 1) {

prekey = -1;

answerd -= double.parsedouble(textanswer.gettext());

textanswer.settext(df.format(answerd));

}

if (key == 2) {

prekey = -1;

answerd *= double.parsedouble(textanswer.gettext());

textanswer.settext(df.format(answerd));

}

if (key == 3) {

prekey = -1;

if (double.parsedouble(textanswer.gettext()) == 0) {

textanswer.settext("除数不能为零");

clickable = false;

}

else {

answerd /= double.parsedouble(textanswer.gettext());

textanswer.settext(df.format(answerd));

}

}

}

prekey = 5;

}

//%操作,对第二个操作数除以100

if (temp == buttonmod && clickable == true) {

if (answerd == 0) {

string s = textanswer.gettext();

textanswer.settext(s);

}

else {

boolean isdot = false;

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

if (. == textanswer.gettext().charat(i)) {

isdot = true;

break;

}

//如果是double数,除100

if (isdot == true) {

double dtemp = double.parsedouble(textanswer.gettext());

dtemp = dtemp / 100.0;

textanswer.settext(double.tostring(dtemp));

}

else {

//如果是int数但能被100整除,则去掉末尾两个零

if (integer.parseint(textanswer.gettext()) % 100 == 0) {

int itemp = integer.parseint(textanswer.gettext());

itemp /= 100;

textanswer.settext(integer.tostring(itemp));

}

//如果是int数,但不能被100整除,则按double数处理

else {

double dtemp = double.parsedouble(textanswer.gettext());

dtemp = dtemp / 100.0;

textanswer.settext(double.tostring(dtemp));

}

}

}

}

//开根号运算

if (temp == buttonsqrt && clickable == true) {

string s = textanswer.gettext();

if (s.charat(0) == -) {

textanswer.settext("负数不能开根号");

clickable = false;

}

else

textanswer.settext(double.tostring(java.lang.math.sqrt(double.

parsedouble(textanswer.gettext()))));

}

//倒数运算

if (temp == buttondao && clickable == true) {

if (textanswer.gettext().charat(0) == 0 &&

textanswer.gettext().length() == 1) {

textanswer.settext("零不能求倒数");

clickable = false;

}

else {

boolean isdec = true;

int i, j, k;

string s = double.tostring(1 / double.parsedouble(textanswer.gettext()));

for (i = 0; i < s.length(); i++)

if (s.charat(i) == .)

break;

for (j = i + 1; j < s.length(); j++)

if (s.charat(j) != 0) {

isdec = false;

break;

}

if (isdec == true) {

string stemp = "";

for (k = 0; k < i; k++)

stemp += s.charat(k);

textanswer.settext(stemp);

}

else

textanswer.settext(s);

}

}

//按下+/-按钮时处理

if (temp == buttonaddandsub && clickable == true) {

boolean isnumber = true;

string s = textanswer.gettext();

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

if (! (s.charat(i) >= 0 && s.charat(i) <= 9 || s.charat(i) == . ||

s.charat(i) == -)) {

isnumber = false;

break;

}

if (isnumber == true) {

//如果当前字符串首字母有-号,代表现在是个负数,再按下时,则将首符号去掉

if (s.charat(0) == -) {

textanswer.settext("");

for (int i = 1; i < s.length(); i++) {

char a = s.charat(i);

textanswer.settext(textanswer.gettext() + a);

}

}

//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处

else

textanswer.settext(- + s);

}

}

//计算器有关内存操作

//mc的操作,将内存清0

if (temp == buttonmc && clickable == true) {

memoryd = memoryi = 0;

textmemory.settext("");

}

//ms的操作,将当前文本框内容保存入内存,显示m

if (temp == buttonms && clickable == true) {

boolean isdot = false;

textmemory.settext(" m");

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

if (. == textanswer.gettext().charat(i)) {

isdot = true;

break;

}

//如果是double,则存入memoryd(double存储器)

if (isdot == true) {

memoryd = double.parsedouble(textanswer.gettext());

memoryi = 0; //保证存储器中存放最新的值

}

//如果是int,则存入memoryi(int存储器)

else {

memoryi = integer.parseint(textanswer.gettext());

memoryd = 0; //保证存储器中存放最新的值

}

}

//mr的操作,将存储器中的信息输出

if (temp == buttonmr && clickable == true) {

if (memoryd != 0)

textanswer.settext(double.tostring(memoryd));

if (memoryi != 0)

textanswer.settext(integer.tostring(memoryi));

}

//m+的功能,将当前文本框里的数据和存储器中数据相加后,再存入存储器

if (temp == buttonmadd && clickable == true) {

boolean isdot = false;

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

if (. == textanswer.gettext().charat(i)) {

isdot = true;

break;

}

if (memoryi != 0) { //存储中是一个int型数

if (isdot == false) //被加数是一个int型数

memoryi += integer.parseint(textanswer.gettext());

else { //被加数是一个double型数,则将int存储器中数传入double存储器与当前数相加,int存储器清零

memoryd = memoryi + double.parsedouble(textanswer.gettext());

memoryi = 0;

}

}

else

memoryd += double.parsedouble(textanswer.gettext());

}

//按下backspace键,利用循环将当前字符串中的最后一个字母删除

if (temp == buttonbk && clickable == true) {

string s = textanswer.gettext();

textanswer.settext("");

for (int i = 0; i < s.length() – 1; i++) {

char a = s.charat(i);

textanswer.settext(textanswer.gettext() + a);

}

}

//按下ce按钮,将当前文本框内数据清除

if (temp == buttonce) {

textanswer.settext("");

clickable = true;

}

//按下c按钮,文本框内数据清除,同时var,answer清0

if (temp == buttonc) {

vard = answerd = 0;

textanswer.settext("");

clickable = true;

}

//按下复制菜单栏

if (temp == copyitem) {

copy = textanswer.gettext();

}

//按下粘贴菜单栏

if (temp == pasteitem) {

textanswer.settext(copy);

}

if (temp == sitem) {

joptionpane.showmessagedialog(panel, "当前是标准型计算器,\n科学型计算器有待更新。");

}

//按下帮助主题菜单栏

if (temp == tophelp) {

joptionpane.showmessagedialog(panel, scrollhelp);

}

//按下数字分组菜单栏

if (temp == numbergroup) {

if (numbergroup.gettext().compareto(" 数字分组(i)") == 0)

numbergroup.settext("√数字分组(i)");

else

numbergroup.settext(" 数字分组(i)");

}

//按下关于菜单栏

if (temp == aboutcal) {

joptionpane.showmessagedialog(panel, "计算器1.00版\n开发者:楼竞");

}

}

//输入中如果有操作非法,比如按下两次+,捕获异常

catch (exception e) {

textanswer.settext("操作非法");

clickable = false;

}

}

//主函数

public static void main(string args[]) {

new calculator();

}

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Java编写的计算器程序及源代码-JSP教程,Java技巧及代码
分享到: 更多 (0)