给那位要做计算器的兄弟
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>New Page 1</title>
</head>
<body>
<form name=frm onsubmit="return jisuan()">
算式:<input name="suanshi" size=80 >
<input type=submit value="开始计算" ><br>
结果:<input name="jieguo" size=80>
</form>
<script language=javascript>
function jisuan()
{
try {
eval("frm.jieguo.value="+frm.suanshi.value);
frm.suanshi.value="("+frm.suanshi.value+")";
frm.suanshi.focus();
}
catch(exception){alert("算式有误");}
return false;
}
</script>
</body>
</html>
问题点数:20、回复次数:22Top
1 楼weidegong(weidegong)回复于 2002-04-14 21:23:12 得分 10
还是参考一下这个吧:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>JAVA计算器</title>
<style type="text/css">
<!--
td { font: 9pt "宋体"; color: #FFFFFF}
.Button { font: 9pt "宋体"; color: #FFFFFF; background: #brown; margin: 4px 4px; width: 40px; height: 20px; border-color: #CCCCCC #333333 #333333 #CCCCCC; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px}
.text_input { font: 9pt "Verdana", "Arial", "Helvetica", "sans-serif"; color: #000000; background: #CCCCCC; text-align: right}
a { font: 9pt "宋体"; color: #FFFFFF}
-->
</style>
</head>
<body bgcolor="#CCCC99" topmargin="0" leftmargin="1"
marginwidth="1" marginheight="1">
<form name="Keypad">
<div align="center">
<center>
<br>
<table border="1" cellpadding="0"
cellspacing="1" width="249" bgcolor="#B5B56A"
bordercolor="#D0CC98" height="60">
<tr>
<td align="middle" colspan="4"><input type="text"
size="25" name="ReadOut" value="0" width="100%"
class="text_input"></td>
<td width="0"><input type="button" name="btnClear"
value=" C " onclick="Clear()" class="Button"></td>
<td width="50"><input type="button"
name="btnClearEntry2" value=" CE "
onclick="ClearEntry()" class="Button"></td>
</tr>
<tr>
<td align="center" width="50"><input type="button"
name="btnSeven" value=" 7 " onclick="NumPressed(7)"
class="Button"></td>
<td align="center" width="50"><input type="button"
name="btnEight" value=" 8 " onclick="NumPressed(8)"
class="Button"></td>
<td align="center" width="50"><input type="button"
name="btnNine" value=" 9 " onclick="NumPressed(9)"
class="Button"></td>
<th width="50"><p align="left"><input type="button"
name="btnHex" value="HEX" onclick="hexchange()"
class="Button"></p>
</th>
<td align="center" width="0"><input type="button"
name="btnClearEntry222" value="OCT"
onclick="octchange()" class="Button"></td>
<td align="center" width="50"><input type="button"
name="btnClearEntry223" value="BIN"
onclick="binchange()" class="Button"></td>
</tr>
<tr>
<td width="50"><input type="button" name="btnFour"
value=" 4 " onclick="NumPressed(4)" class="Button"></td>
<td width="50"><input type="button" name="btnFive"
value=" 5 " onclick="NumPressed(5)" class="Button"></td>
<td width="50"><input type="button" name="btnSix"
value=" 6 " onclick="NumPressed(6)" class="Button"></td>
<td width="50"><input type="button" name="btnPlus"
value=" + " onclick="Operation('+')" class="Button"></td>
<td width="0"><input type="button" name="btnNeg"
value=" +/- " onclick="Neg()" class="Button"></td>
<td width="50"><input type="button" name="btnPercent"
value=" % " onclick="Percent()" class="Button"></td>
</tr>
<tr>
<td width="50"><input type="button" name="btnOne"
value=" 1 " onclick="NumPressed(1)" class="Button"></td>
<td width="50"><input type="button" name="btnTwo"
value=" 2 " onclick="NumPressed(2)" class="Button"></td>
<td width="50"><input type="button" name="btnThree"
value=" 3 " onclick="NumPressed(3)" class="Button"></td>
<td width="50"><input type="button" name="btnMinus"
value=" - " onclick="Operation('-')"
class="Button"></td>
<td width="0"><input type="button" name="btnMultiply"
value=" * " onclick="Operation('*')" class="Button"></td>
<td width="50"><input type="button" name="btnDivide"
value=" / " onclick="Operation('/')"
class="Button"></td>
</tr>
<tr>
<td width="50"><input type="button" name="btnZero"
value=" 0 " onclick="NumPressed(0)" class="Button"></td>
<td width="50"><input type="button" name="btnDecimal"
value=" . " onclick="Decimal()" class="Button"></td>
<td width="50"><input type="button" name="btnEquals"
value=" = " onclick="Operation('=')" class="Button"></td>
<td width="50"> </td>
<td width="0"> </td>
<td width="50"> </td>
</tr>
</table>
</center></div>
</form>
<script language="JavaScript">
var FKeyPad = document.Keypad;
var Accum = 0;
var FlagNewNum = false;
var PendingOp = "";
function NumPressed (Num) {
if (FlagNewNum) {
FKeyPad.ReadOut.value = Num;
FlagNewNum = false;
}
else {
if (FKeyPad.ReadOut.value == "0")
FKeyPad.ReadOut.value = Num;
else
FKeyPad.ReadOut.value += Num;
}
}
function Operation (Op) {
var Readout = FKeyPad.ReadOut.value;
if (FlagNewNum && PendingOp != "=");
else
{
FlagNewNum = true;
if ( '+' == PendingOp )
Accum += parseFloat(Readout);
else if ( '-' == PendingOp )
Accum -= parseFloat(Readout);
else if ( '/' == PendingOp )
Accum /= parseFloat(Readout);
else if ( '*' == PendingOp )
Accum *= parseFloat(Readout);
else
Accum = parseFloat(Readout);
FKeyPad.ReadOut.value = Accum;
PendingOp = Op;
}
}
function Decimal () {
var curReadOut = FKeyPad.ReadOut.value;
if (FlagNewNum) {
curReadOut = "0.";
FlagNewNum = false;
}
else
{
if (curReadOut.indexOf(".") == -1)
curReadOut += ".";
}
FKeyPad.ReadOut.value = curReadOut;
}
function ClearEntry () {
FKeyPad.ReadOut.value = "0";
FlagNewNum = true;
}
function Clear () {
Accum = 0;
PendingOp = "";
ClearEntry();
}
function Neg () {
FKeyPad.ReadOut.value = parseFloat(FKeyPad.ReadOut.value) * -1;
}
function Percent () {
FKeyPad.ReadOut.value = (parseFloat(FKeyPad.ReadOut.value) / 100) * parseFloat(Accum);
}
function hexchange()
{
var hex,dec;
dec = parseFloat(FKeyPad.ReadOut.value);
hex = dec.toString(16);
window.alert("该十进制数转成十六进制数为:"+ hex);
}
function octchange()
{
var oct,dec;
dec = parseFloat(FKeyPad.ReadOut.value);
oct = dec.toString(8);
window.alert("该十进制数转成八进制数为:"+ oct);
}
function binchange()
{
var bin,dec;
dec = parseFloat(FKeyPad.ReadOut.value);
bin = dec.toString(2);
window.alert("该十进制数转成二进制数为:"+ bin);
}
</script>
</body>
</html>Top
2 楼JK_10000(JK)回复于 2002-04-14 21:41:22 得分 0
weidegong(weidegong) :
你的程式结果界面十分美观,尽管不能做连续运算,但是也算是能完成一般人的要求,并且操作可以只按鼠标。
不过我想,他最大的长处是程式长,如果卖的话,可以卖个好价钱
我的程式注重实用,只适合有一点数学基础的人,可以做连续运算,可以做大数运算
当然,我的程式的最大缺点就是太短,如果卖给别人的话,别人肯定是不会要的
呵呵
呜呼
Top
3 楼weidegong(weidegong)回复于 2002-04-14 21:55:07 得分 0
JK_10000(JK1) :
1.界面不够友好。
2.功能也非常有限,出了加减乘除,还支持什么操作?
3.如果学过编译原理,试着把包含sin/cos/乘方/开方等表达式进行解析,那会是个卖点。就现在使用一个eval,摆明了欺负外行人吗Top
4 楼JK_10000(JK)回复于 2002-04-14 22:03:34 得分 0
只要稍稍改一下,就可以:
支持变量运算:
支持数学里如三角函数等的运算
支持……………
的确
它的核心就是一个eval
所以我说我的程式的致命弱点就是短
怎么解释
别人也会说:就现在使用一个eval,摆明了欺负外行人吗!!!
Top
5 楼weidegong(weidegong)回复于 2002-04-14 22:13:45 得分 0
呵呵,你这个算作简单的对javascript的二次开发。卖出去的话,也相当于你提供了一点对于Javascipt的技术支持,如此而已
只要。。。。,支持。。。
你做做试试?且让用户易于使用
Top
6 楼JK_10000(JK)回复于 2002-04-14 23:03:02 得分 0
weidegong(weidegong) :以下程式支持变最计算:
如果再稍稍修改一下,可以让它支持数学里的其它如三角、指数等的运算
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>算式</title>
</head>
<body>
<form name=frm onsubmit="return jisuan()">
变量: <input name="bianliang" size=40 >输入变量请在不同的变最之间用<font color=red>,</font>隔开,如<font color=red>a=1,b=2</font><br>
算式:<input name="suanshi" size=40 ><input type=submit value="开始计算" ><br>
结果:<input name="jieguo" size=40><br>
</form>
<script language=javascript>
function jisuan()
{
try {
eval("var "+frm.bianliang.value+";");
eval("frm.jieguo.value="+frm.suanshi.value);
frm.suanshi.value="("+frm.suanshi.value+")";
frm.suanshi.focus();
}
catch(exception){alert("算式有误");}
return false;
}
</script>
</body>
</html>Top
7 楼JK_10000(JK)回复于 2002-04-14 23:10:00 得分 0
以上程式里eval里的"var "应该为"var JKhaveatest=1,"Top
8 楼weidegong(weidegong)回复于 2002-04-14 23:28:25 得分 0
以上程式里eval里的"var "应该为"var JKhaveatest=1,"
不若如此:
if(frm.bianliang.value.length>0) eval("var "+frm.bianliang.value+";");
Top
9 楼JK_10000(JK)回复于 2002-04-15 08:16:05 得分 0
支持你的修改Top
10 楼weidegong(weidegong)回复于 2002-04-15 19:01:04 得分 0
还应该去掉frm.bianliang.value前后的空格,更好一点Top
11 楼JK_10000(JK)回复于 2002-04-15 19:19:13 得分 0
加一句:frm.bianliang.value=frm.bianliang.value.replace(/\W/g,"");Top
12 楼JK_10000(JK)回复于 2002-04-15 19:31:58 得分 0
以上一句应为:
frm.bianliang.value=frm.bianliang.value.replace(/[\W,]/g,"");
Top
13 楼JK_10000(JK)回复于 2002-04-15 19:35:12 得分 0
还是错了,我得再去查一查怎么表示除a-zA-Z0-9._,=之外的任意字符怎么表示Top
14 楼weidegong(weidegong)回复于 2002-04-15 20:57:42 得分 0
这样东西就多了Top
15 楼JK_10000(JK)回复于 2002-04-15 22:32:42 得分 0
不多,用正则表达式,一句话而已.Top
16 楼JK_10000(JK)回复于 2002-04-15 22:35:30 得分 0
如果要加上三角、指数等数学运算数
用正则表达式也不会多出五行
Top
17 楼weidegong(weidegong)回复于 2002-04-16 00:15:59 得分 0
有机会的时候把它做出来,现在已经感觉有些雏形了。
用计算器最大的不好就是优先级的问题。
我看有些计算器上提供了()的功能,考虑实现这个功能
这样用户录入的时候,我们只要记录整个表达式,就可以算出值。
提供函数支持,用户可以保存一个函数,下次输入变量的值直接给出结果Top
18 楼JK_10000(JK)回复于 2002-04-16 08:26:51 得分 0
我所看到的别人做的计算器几乎都是单输入(输出框)的
就是与我们的实际计算器相仿
所以功能十分有限
利用多输入输出框,本计算器已经有了:
1.()的功能
-----算式输完后敲一下回车就可以看到
2. 记录表达式的功能
------记录了表达式,就可以进行回退操作
-----一长串的算式输入完后发现某一个数输入错误,可以进行改正,然后重算
3. 变量操作
4. 函数支持
5. 扩展性好
另外:
1. 结果的输入框应为readonly
2. 在结果的后面应该加一个按钮,点击后将结果代替算式
Top
19 楼weidegong(weidegong)回复于 2002-04-16 09:13:26 得分 0
1.单输入只是为了让人使用起来更加简单。
2.输入和输出窗口分离Top
20 楼koolfoo()回复于 2002-04-16 09:38:12 得分 10
去campo.3322.net看一下啊,那里有一个科学计算器,很棒的。
Top
21 楼JK_10000(JK)回复于 2002-04-16 10:04:34 得分 0
最开始
单输入只是为了节约显示屏。
但是,
现在却没有这个必要了
除非是为了附合人们的老习惯Top
22 楼JK_10000(JK)回复于 2002-04-16 13:49:05 得分 0
koolfoo():去看过,老套Top




