divide(secondResult, 100)));
else if(this.lastOp.equals(\
firstNum=String.valueOf(MyMath.add(Double.valueOf(firstNum), secondResult));
else if(this.lastOp.equals(\
firstNum=String.valueOf(MyMath.subtract(Double.valueOf(firstNum), secondResult));
else if(this.lastOp.equals(\
firstNum=String.valueOf(MyMath.multiply(Double.valueOf(firstNum), secondResult));
else if(this.lastOp.equals(\
firstNum=String.valueOf(MyMath.divide(Double.valueOf(firstNum), secondResult));
secondNum = null; this.isSecondNum = true; return firstNum; }
public String setReciprocal(String text)//计算倒数 {
if(text.equals(\ return text; else {
this.isSecondNum = true;
return String.valueOf(MyMath.divide(1, Double.valueOf(text))); } }
public String sqrt(String text)//开方运算 {
this.isSecondNum = true;
return String.valueOf(Math.sqrt(Double.valueOf(text))); }
public String setOp(String cmd,String text)//设置操作符
{
if(!firstNum.equals(\ firstNum = cal(text,false); else {
this.firstNum = text; this.secondNum = null; this.isSecondNum = true; flag = true; }
this.lastOp = cmd;
return firstNum; }
public String setNegative(String text)//设置正负数,text是正数是返回负数数字字符串,反之,返回正数数字字符串
{
return String.valueOf(0-Double.valueOf(text)); }
public String catNum(String cmd,String text)//连接输入的数字,每次单击数字,都把新加数字追加到后面,并封装成字符串返回
{
String result = cmd; if(!text.equals(\ {
if(isSecondNum) {
isSecondNum = false; } else {
result = text + cmd; }
}
if(result.indexOf(\ result = \ return result; }
public String backSpace(String text)//退后一个字符,并返回结果 {
return (text.equals(\? \: text.substring(0, text.length()-1);
}
public String mCmd(String cmd,String text)//用来实现“M+”“MC”“MR”“MS”等与存储有关的功能
{
if(cmd.equals(\累加结果
store = MyMath.add(store, Double.valueOf(text)); else
if(cmd.equals(\清除结果 store = 0; else
if(cmd.equals(\读取结果 {
isSecondNum = true; return String.valueOf(store); } else
if(cmd.equals(\保存结果
store = Double.valueOf(text).doubleValue(); return null; }
public String clearAll()//清空所有计算结果 {
this.secondNum = null;
}
this.firstNum = \
return this.firstNum;
public String clear(String text)//清除上次计算结果 {
return \ } }
class MyMath {
private static BigDecimal getBigDecimal(double number) {
return new BigDecimal(number); }
public static double add(double num1,double num2) {
BigDecimal first = getBigDecimal(num1); BigDecimal second = getBigDecimal(num2); return first.add(second).doubleValue(); }
public static double subtract(double num1,double num2) {
BigDecimal first = getBigDecimal(num1); BigDecimal second = getBigDecimal(num2); return first.subtract(second).doubleValue(); }
public static double multiply(double num1,double num2) {
BigDecimal first = getBigDecimal(num1); BigDecimal second = getBigDecimal(num2); return first.multiply(second).doubleValue(); }
public static double divide(double num1,double num2)
{
BigDecimal first = getBigDecimal(num1); BigDecimal second = getBigDecimal(num2); return
first.divide(second,20,BigDecimal.ROUND_HALF_UP).doubleValue();
} } //主函数 public class Cal {
public static void main(String[] args) {
CalFrame cal = new CalFrame(); cal.setSize(400,280); cal.setVisible(true);
cal.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
3、运行结果截图
4.2 编写源程序界面
五、设计心得与体会
通过本次的课程设计,我对GUI编程和Component的事件响应有了更深层次的理解,之前不懂的代码现在已有了总体的认识。然而,虽然本“简单计算器”看上去已经实现了所有按键的功能,但是因为一些细节问题她还不是那么完美。例如:1、缺少菜单栏(帮助、编辑等);2、在输入两行数据的情况下,按“C”键清除所有数据时,上边的一行数据不能清除;3、按下“%”求百分比时,并不能像windows标准计算器一样执行混合百分比计算。可喜的是以上情况不影响基本的简单运算。尽管我做了很大努力,可暂时也未能解决那些问题,感谢它同时也暴漏了我的知识体系还不够牢固的个人技能问题。所以,在以后学习研究中我会更加努力,争取把每一个项目设计都达到完美地步。